Skip to content

Commit

Permalink
Merge 67a04f2 into 57f79ce
Browse files Browse the repository at this point in the history
  • Loading branch information
minijackson authored Apr 30, 2024
2 parents 57f79ce + 67a04f2 commit 4cbc095
Show file tree
Hide file tree
Showing 9 changed files with 423 additions and 1 deletion.
2 changes: 1 addition & 1 deletion .ci
52 changes: 52 additions & 0 deletions .github/workflows/ci-scripts-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -289,3 +289,55 @@ jobs:
with:
name: tapfiles ${{ matrix.name }}
path: '**/O.*/*.tap'

meson:
name: ${{ matrix.name }} Meson
runs-on: ${{ matrix.os }}
# Set environment variables from matrix parameters
env:
CMP: ${{ matrix.cmp }}
BCFG: ${{ matrix.configuration }}
BASE: add-toEpicsArch
BASE_REPOOWNER: minijackson
LIBEVENT_TAG: ${{ matrix.libevent }}
VV: "1"
strategy:
fail-fast: false
matrix:
include:
- name: Native Linux
os: ubuntu-22.04
cmp: gcc
configuration: default

steps:
- uses: actions/checkout@v3
with:
submodules: true
- name: "apt-get install"
run: |
sudo apt-get update
sudo apt-get -y install meson cmake
if: runner.os == 'Linux'
- name: Automatic core dumper analysis
uses: mdavidsaver/ci-core-dumper@master
- name: Prepare and compile dependencies
run: python .ci/cue.py prepare
- name: Build libevent
run: python .ci/cue.py exec python .ci-local/libevent.py
- name: Build Main module
run: |
python .ci/cue.py \
--add-path '{EPICS_BASE}/bin/{EPICS_HOST_ARCH}' \
--add-env 'PKG_CONFIG_PATH={EPICS_BASE}/lib/pkgconfig' \
--add-env 'PKG_CONFIG_PATH={PWD}/bundle/usr/{EPICS_HOST_ARCH}/lib/pkgconfig' \
exec meson setup build --buildtype=release --prefix="${PWD}/output" --libdir lib
ninja -C build -vv install
- name: Host info
run: |
python .ci/cue.py \
--add-env 'LD_LIBRARY_PATH={PWD}/output/lib/{EPICS_HOST_ARCH}' \
--add-env 'LD_LIBRARY_PATH={PWD}/bundle/usr/{EPICS_HOST_ARCH}/lib' \
exec ./output/bin/*/pvxinfo -D
- name: Run main module tests
run: cd build && meson test
15 changes: 15 additions & 0 deletions example/meson.build
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
foreach e : [
['simplesrv', ['./simplesrv.cpp']],
['mailbox', ['./mailbox.cpp']],
['ticker', ['./ticker.cpp']],
['simpleget', ['./simpleget.cpp']],
['client', ['./client.cpp']],
['rpc_server', ['./rpc_server.cpp']],
['rpc_client', ['./rpc_client.cpp']],
]
executable(
e[0],
e[1],
dependencies: [epics_base, libCom, pvxs_dep],
)
endforeach
71 changes: 71 additions & 0 deletions ioc/meson.build
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
epics_version = epics_base.version()

dbd_file = './pvxs@[email protected]'.format(epics_version.split('.')[0])

install_data([dbd_file], rename: ['pvxsIoc.dbd'], install_dir: dbd_install_dir)

srcs = ['./iochooks.cpp']

if epics_version.version_compare('>=3.15.0.0')
srcs += [
'credentials.cpp',
'channel.cpp',
'demo.cpp',
'dberrormessage.cpp',
'imagedemo.c',
'iocsource.cpp',
'localfieldlog.cpp',
'securityclient.cpp',
'singlesource.cpp',
'singlesourcehooks.cpp',
'singlesrcsubscriptionctx.cpp',
'typeutils.cpp',
]
else
srcs += [
'dummysingle.cpp'
]
endif

if epics_version.version_compare('>=7.0.0.0')
srcs += [
'field.cpp',
'fielddefinition.cpp',
'fieldname.cpp',
'fieldsubscriptionctx.cpp',
'group.cpp',
'groupconfigprocessor.cpp',
'groupprocessorcontext.cpp',
'groupsource.cpp',
'groupsourcehooks.cpp',
'pvalink.cpp',
'pvalink_channel.cpp',
'pvalink_jlif.cpp',
'pvalink_link.cpp',
'pvalink_lset.cpp',
]
else
srcs += [
'dummygroup.cpp'
]
endif

libpvxsIoc = library(
'pvxsIoc',
srcs,
cpp_args: ['-DPVXS_IOC_API_BUILDING'],
dependencies: [epics_base, libCom, libdbCore, pvxs_dep],
version: meson.project_version(),
install: true,
install_dir: lib_install_dir,
# HACK: Workaround https://github.com/mesonbuild/meson/issues/6541
install_rpath: epics_base_libdir,
)

install_headers(
['./pvxs/iochooks.h'],
subdir: 'pvxs',
)

pkgconfig = import('pkgconfig')
pkgconfig.generate(libpvxsIoc)
60 changes: 60 additions & 0 deletions meson.build
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
project(
'pvxs',
['cpp', 'c'],
version: '1.3.1',
license: 'EPICS',
# license_files: './LICENSE',
default_options: [
'default_library=both',
],
)

# Build Machine as in Autotools terminology: the machine that will build
# the final code, which in EPICS terminology is the Host Machine.
gnu_host_arch = build_machine.cpu() + '-' + build_machine.system()
epics_host_arch = run_command(
'EpicsHostArch.pl',
'-g',
gnu_host_arch,
capture: true,
check: true
).stdout().strip()

# Host Machine as in Autotools terminology: the machine that will host and run
# the final code, which in EPICS terminology is the Target Machine.
gnu_target_arch = host_machine.cpu() + '-' + host_machine.system()
epics_target_arch = run_command(
'EpicsHostArch.pl',
'-g',
gnu_target_arch,
capture: true,
check: true
).stdout().strip()

if get_option('epics_install_hierarchy')
bin_install_dir = get_option('bindir') / epics_target_arch
lib_install_dir = get_option('libdir') / epics_target_arch
else
bin_install_dir = get_option('bindir')
lib_install_dir = get_option('libdir')
endif

dbd_install_dir = get_option('prefix') / 'dbd'
db_install_dir = get_option('prefix') / 'db'

epics_base = dependency('epics-base-' + epics_target_arch)
epics_base_libdir = epics_base.get_pkgconfig_variable('libdir')
epics_os_class = epics_base.get_pkgconfig_variable('OS_CLASS')
epics_cmplr_class = epics_base.get_pkgconfig_variable('CMPLR_CLASS')

compiler = meson.get_compiler('cpp')

libca = compiler.find_library('ca', dirs: [epics_base_libdir])
libCom = compiler.find_library('Com', dirs: [epics_base_libdir])
libdbCore = compiler.find_library('dbCore', dirs: [epics_base_libdir])

subdir('src')
subdir('tools')
subdir('ioc')
subdir('test')
subdir('example')
1 change: 1 addition & 0 deletions meson_options.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
option('epics_install_hierarchy', type : 'boolean', value : true)
140 changes: 140 additions & 0 deletions src/meson.build
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
describe_h = configure_file(
output: 'describe.h',
configuration: configuration_data({
'EPICS_HOST_ARCH': f'"@epics_host_arch@"',
'T_A': f'"@epics_target_arch@"',
'OS_CLASS': f'"@epics_os_class@"',
'CMPLR_CLASS': f'"@epics_cmplr_class@"',
}),
)

vcs_h = configure_file(
output: 'pvxsVCS.h',
configuration: configuration_data({
}),
)

version = meson.project_version().split('.')
version_num_h = configure_file(
output: 'versionNum.h',
configuration: configuration_data({
'PVXS_MAJOR_VERSION': version[0],
'PVXS_MINOR_VERSION': version[1],
'PVXS_MAINTENANCE_VERSION': version[2],
}),
)

# HACK: this installs generated headers in a 'pvxs' subdir
# See: https://github.com/mesonbuild/meson/issues/2320
fs = import('fs')
run_command(
[
'sh',
'-c',
'mkdir @0@/pvxs; cp @1@/@2@ @0@/pvxs/'.format(
meson.current_build_dir(),
fs.parent(meson.current_build_dir()),
version_num_h,
),
],
check: true,
)

libevent = dependency('libevent_pthreads')

cpp = meson.get_compiler('cpp')

extra_cpp_args = []

if cpp.has_argument('-fvisibility=hidden')
extra_cpp_args += ['-fvisibility=hidden']
endif

if cpp.has_argument('-fvisibility-inlines-hidden')
extra_cpp_args += ['-fvisibility-inlines-hidden']
endif

if host_machine.system() == 'windows'
ost_sock_ext = 'os/WIN32/osdSockExt.cpp'
else
ost_sock_ext = 'os/default/osdSockExt.cpp'
endif

libpvxs = library(
'pvxs',
[
'describe.cpp',
'log.cpp',
'unittest.cpp',
'util.cpp',
'osgroups.cpp',
'sharedarray.cpp',
'bitmask.cpp',
'type.cpp',
'data.cpp',
'datafmt.cpp',
'pvrequest.cpp',
'dataencode.cpp',
'nt.cpp',
'evhelper.cpp',
'udp_collector.cpp',

ost_sock_ext,

'config.cpp',
'conn.cpp',

'server.cpp',
'serverconn.cpp',
'serverchan.cpp',
'serverintrospect.cpp',
'serverget.cpp',
'servermon.cpp',
'serversource.cpp',
'sharedpv.cpp',

'client.cpp',
'clientreq.cpp',
'clientconn.cpp',
'clientintrospect.cpp',
'clientget.cpp',
'clientmon.cpp',
'clientdiscover.cpp',
],
cpp_args: ['-DPVXS_API_BUILDING', '-DPVXS_ENABLE_EXPERT_API'] + extra_cpp_args,
dependencies: [epics_base, libCom, libevent],
version: meson.project_version(),
install: true,
install_dir: lib_install_dir,
# HACK: Workaround https://github.com/mesonbuild/meson/issues/6541
install_rpath: epics_base_libdir,
)

install_headers(
[
version_num_h,
'pvxs/version.h',
'pvxs/log.h',
'pvxs/unittest.h',
'pvxs/util.h',
'pvxs/sharedArray.h',
'pvxs/data.h',
'pvxs/nt.h',
'pvxs/netcommon.h',
'pvxs/server.h',
'pvxs/srvcommon.h',
'pvxs/sharedpv.h',
'pvxs/source.h',
'pvxs/client.h',
],
subdir: 'pvxs',
)

pvxs_dep = declare_dependency(
include_directories: '.',
dependencies: [libevent],
link_with: [libpvxs],
)

pkgconfig = import('pkgconfig')
pkgconfig.generate(libpvxs)
Loading

0 comments on commit 4cbc095

Please sign in to comment.