1project( 2 'phosphor-objmgr', 3 'c', 'cpp', 4 default_options: [ 5 'buildtype=debugoptimized', 6 'cpp_std=c++20', 7 'warning_level=3', 8 'werror=true', 9 ], 10 license: 'Apache-2.0', 11 meson_version: '>=0.57.0', 12 version: '1.0', 13) 14 15cxx = meson.get_compiler('cpp') 16 17if cxx.has_header('CLI/CLI.hpp') 18 cli11_dep = declare_dependency() 19else 20 cli11_dep = dependency('cli11') 21endif 22phosphor_logging = dependency('phosphor-logging') 23phosphor_dbus_interfaces = dependency('phosphor-dbus-interfaces') 24sdbusplus = dependency('sdbusplus') 25boost = dependency('boost', version : '>=1.79.0', required: false, include_type: 'system') 26if not boost.found() 27 subproject('boost', required: false) 28 boost_inc = include_directories('subprojects/boost_1_79_0/', is_system:true) 29 boost = declare_dependency(include_directories : boost_inc) 30 boost = boost.as_system('system') 31endif 32 33if get_option('buildtype').startswith('debug') 34 add_project_arguments('-DMAPPER_ENABLE_DEBUG', language : 'cpp') 35endif 36 37if get_option('tests').enabled() 38 gtest = dependency('gtest', main: true, disabler: true, required: false) 39 gmock = dependency('gmock', disabler: true, required: false) 40 if not gtest.found() or not gmock.found() 41 gtest_proj = import('cmake').subproject('googletest', required: false) 42 if gtest_proj.found() 43 gtest = declare_dependency( 44 dependencies: [ 45 dependency('threads'), 46 gtest_proj.dependency('gtest'), 47 gtest_proj.dependency('gtest_main'), 48 ] 49 ) 50 gmock = gtest_proj.dependency('gmock') 51 else 52 assert( 53 not get_option('tests').enabled(), 54 'Googletest is required if tests are enabled' 55 ) 56 endif 57 endif 58 subdir('src/test') 59 subdir('libmapper/test') 60endif 61 62install_headers('libmapper/mapper.h') 63 64libmapper = library( 65 'mapper', 66 'libmapper/mapper.c', 67 dependencies: [ dependency('libsystemd') ], 68 gnu_symbol_visibility: 'hidden', 69 version: meson.project_version(), 70 install: true) 71 72mapper_dep = declare_dependency( 73 link_with: libmapper, 74 include_directories: include_directories('libmapper'), 75 dependencies: [ dependency('libsystemd') ], 76) 77 78import('pkgconfig').generate( 79 name: 'libmapper', 80 description: 'OpenBMC service discovery utility library', 81 version: meson.project_version(), 82 libraries: libmapper) 83 84executable( 85 'mapper', 86 'libmapper/app.c', 87 link_with: libmapper, 88 dependencies: [ dependency('libsystemd') ], 89 install: true) 90 91executable( 92 'mapperx', 93 [ 94 'src/main.cpp', 95 'src/processing.cpp', 96 'src/associations.cpp', 97 'src/handler.cpp', 98 ], 99 dependencies: [ 100 boost, 101 dependency('libsystemd'), 102 phosphor_dbus_interfaces, 103 phosphor_logging, 104 sdbusplus, 105 dependency('systemd'), 106 dependency('threads'), 107 dependency('tinyxml2'), 108 ], 109 install: true, 110 install_dir: join_paths( 111 get_option('prefix'), get_option('libexecdir'), meson.project_name()) 112) 113 114systemd_system_unit_dir = dependency('systemd').get_variable( 115 pkgconfig : 'systemdsystemunitdir' 116) 117 118conf = configuration_data() 119conf.set('BINDIR', join_paths(get_option('prefix'), get_option('bindir'))) 120conf.set('LIBEXECDIR', join_paths( 121 get_option('prefix'), get_option('libexecdir'))) 122 123unit_files = [ 124 'xyz.openbmc_project.ObjectMapper.service', 125 'mapper-subtree-remove@.service', 126 'mapper-wait@.service' 127] 128 129foreach u : unit_files 130 configure_file( 131 configuration: conf, 132 input : join_paths('src/systemd', u) + '.in', 133 install : true, 134 install_dir: systemd_system_unit_dir, 135 output : u 136 ) 137endforeach 138 139dbus_system_bus_services_dir = dependency('dbus-1').get_variable( 140 pkgconfig: 'system_bus_services_dir', 141 pkgconfig_define: ['prefix', get_option('prefix')] 142) 143 144install_data( 145 'src/dbus/xyz.openbmc_project.ObjectMapper.service', 146 install_dir: dbus_system_bus_services_dir) 147 148install_data( 149 'src/dbus/xyz.openbmc_project.ObjectMapper.conf', 150 install_dir: get_option('datadir') / 'dbus-1' / 'system.d') 151 152if not get_option('unit-failure-monitor').disabled() 153 executable( 154 'phosphor-unit-failure-monitor', 155 [ 156 'fail-monitor/main.cpp', 157 'fail-monitor/monitor.cpp', 158 ], 159 dependencies: [ 160 cli11_dep, 161 phosphor_logging, 162 ], 163 install: true 164 ) 165endif 166