1project( 2 'entity-manager', 3 'cpp', 4 default_options: [ 5 'warning_level=3', 6 'werror=true', 7 'cpp_std=c++20' 8 ], 9 license: 'Apache-2.0', 10 version: '0.1', 11 meson_version: '>=0.57.0', 12) 13add_project_arguments('-Wno-psabi', language: 'cpp') 14 15boost_args = [ 16 '-DBOOST_SYSTEM_NO_DEPRECATED', 17 '-DBOOST_ERROR_CODE_HEADER_ONLY', 18 '-DBOOST_NO_RTTI', 19 '-DBOOST_NO_TYPEID', 20 '-DBOOST_ALL_NO_LIB', 21 '-DBOOST_ALLOW_DEPRECATED_HEADERS' 22] 23build_tests = get_option('tests') 24cpp = meson.get_compiler('cpp') 25boost = dependency('boost', required: false) 26if not boost.found() 27 subproject('boost', required: false) 28 boost = declare_dependency( 29 include_directories: 'subprojects/boost_1_71_0', 30 ) 31 boost = boost.as_system('system') 32endif 33if get_option('fru-device') 34 i2c = cpp.find_library('i2c') 35endif 36 37nlohmann_json_dep = dependency('nlohmann_json', 38 fallback: [ 'nlohmann_json', 'nlohmann_json_dep']) 39 40sdbusplus = dependency('sdbusplus', required: false) 41if not sdbusplus.found() 42 sdbusplus_proj = subproject('sdbusplus', required: true) 43 sdbusplus = sdbusplus_proj.get_variable('sdbusplus_dep') 44 sdbusplus = sdbusplus.as_system('system') 45endif 46systemd = dependency('systemd') 47systemd_system_unit_dir = systemd.get_pkgconfig_variable( 48 'systemdsystemunitdir', 49 define_variable: ['prefix', get_option('prefix')]) 50packagedir = join_paths( 51 get_option('prefix'), 52 get_option('datadir'), 53 meson.project_name(), 54) 55sysconfdir = join_paths( 56 get_option('prefix'), 57 get_option('sysconfdir'), 58 meson.project_name(), 59) 60threads = dependency('threads') 61if cpp.has_header('valijson/validator.hpp') 62 valijson = declare_dependency() 63else 64 subproject('valijson', required: false) 65 valijson = declare_dependency( 66 include_directories: 'subprojects/valijson/include' 67 ) 68 valijson = valijson.as_system('system') 69endif 70 71install_data('blacklist.json') 72 73configs = [ 74 '1ux16_riser.json', 75 '2ux8_riser.json', 76 '8x25_hsbp.json', 77 'a2ul16riser.json', 78 'a2ux8x4riser.json', 79 'acbell_rica_psu.json', 80 'asrock_e3c246d4i.json', 81 'asrock_romed8hm3.json', 82 'bletchley_baseboard.json', 83 'bletchley_chassis.json', 84 'bletchley_frontpanel.json', 85 'blyth.json', 86 'ahw1um2riser.json', 87 'aspower_u1a-d10550_psu.json', 88 'aspower_u1a-d10800_psu.json', 89 'aspower_u1a-d11200_psu.json', 90 'aspower_u1a-d11600_psu.json', 91 'aspower_u1d-d10800_psu.json', 92 'axx1p100hssi_aic.json', 93 'axx2prthdhd.json', 94 'bnp_baseboard.json', 95 'bellavista.json', 96 'bonnell.json', 97 'delta_awf2dc3200w_psu.json', 98 'delta_dps-750xb_psu.json', 99 'delta_dps-1600ab_psu.json', 100 'delta_dps-2000ab_psu.json', 101 'everest.json', 102 'f1u12x25_hsbp.json', 103 'f1u4x25_hsbp.json', 104 'f2u12x35_hsbp.json', 105 'f2u8x25_hsbp.json', 106 'fbtp.json', 107 'fbyv2.json', 108 'fbyv35.json', 109 'fbyv35_nic_mellanox.json', 110 'flextronics_s-1100adu00-201_psu.json', 111 'greatlakes.json', 112 'greatlakes_nic_mellanox.json', 113 'ibm_1000w_cffps.json', 114 'ibm_1400w_cffps.json', 115 'ibm_1600w_cffps.json', 116 'ibm_2000w_cffps.json', 117 'ibm_2300w_cffps.json', 118 'intel_front_panel.json', 119 'kudo_bmc.json', 120 'kudo_motherboard.json', 121 'mt_jade.json', 122 'nisqually.json', 123 'nvme_p4000.json', 124 'pcie_ssd_retimer.json', 125 'pennybacker.json', 126 'pssf132202a.json', 127 'pssf162205a.json', 128 'pssf212201a.json', 129 'pssf222201a.json', 130 'rainier_2u_chassis.json', 131 'rainier_4u_chassis.json', 132 'rainier_1s4u_chassis.json', 133 'r1000_chassis.json', 134 'r2000_chassis.json', 135 'sas_module.json', 136 'solum_pssf162202_psu.json', 137 'storm_king.json', 138 'stp_baseboard.json', 139 'stp_p4000_chassis.json', 140 'twinlake.json', 141 'tyan_s7106_baseboard.json', 142 'tyan_s8036_baseboard.json', 143 'vegman_n110_baseboard.json', 144 'vegman_rx20_baseboard.json', 145 'vegman_sx20_baseboard.json', 146 'wft_baseboard.json', 147] 148filepaths = [] 149foreach c : configs 150 file = join_paths('configurations', c) 151 install_data( 152 file, 153 install_dir: join_paths( 154 packagedir, 155 'configurations', 156 ) 157 ) 158 filepaths += [file] 159endforeach 160 161validate_script = files('scripts/validate_configs.py') 162autojson = custom_target( 163 'check_syntax', 164 command: [ 165 validate_script, 166 '-v', 167 '-k', 168 ], 169 depend_files: files(filepaths), 170 build_by_default: true, 171 capture: true, 172 output: 'validate_configs.log', 173) 174 175schemas = [ 176 'global.json', 177 'legacy.json', 178 'openbmc-dbus.json', 179 'ibm.json', 180 'intel.json', 181 'pid.json', 182 'pid_zone.json', 183 'stepwise.json', 184 'virtual_sensor.json', 185] 186 187foreach s : schemas 188 install_data( 189 join_paths('schemas', s), 190 install_dir: join_paths( 191 packagedir, 192 'configurations', 193 'schemas', 194 ) 195 ) 196endforeach 197 198subdir('service_files') 199subdir('src') 200 201if not build_tests.disabled() 202 test_boost_args = boost_args + ['-DBOOST_ASIO_DISABLE_THREADS'] 203 gtest = dependency('gtest', main: true, disabler: true, required: false) 204 gmock = dependency('gmock', disabler: true, required: false) 205 if not (gtest.found() and gmock.found()) and build_tests.enabled() 206 cmake = import('cmake') 207 gtest_subproject = cmake.subproject('gtest') 208 cm_gtest = gtest_subproject.dependency('gtest') 209 cm_gtest_main = gtest_subproject.dependency('gtest_main') 210 gtest = declare_dependency(dependencies: [cm_gtest, cm_gtest_main, threads]) 211 gmock = gtest_subproject.dependency('gmock') 212 213 endif 214 215 test( 216 'test_entity_manager', 217 executable( 218 'test_entity_manager', 219 'test/test_entity-manager.cpp', 220 'src/expression.cpp', 221 'src/utils.cpp', 222 cpp_args: test_boost_args, 223 dependencies: [ 224 boost, 225 gtest, 226 nlohmann_json_dep, 227 sdbusplus, 228 valijson, 229 ], 230 include_directories: 'src', 231 ) 232 ) 233 234 test( 235 'test_fru_utils', 236 executable( 237 'test_fru_utils', 238 'test/test_fru-utils.cpp', 239 'src/fru_utils.cpp', 240 'src/fru_reader.cpp', 241 cpp_args: test_boost_args, 242 dependencies: [ 243 boost, 244 gtest, 245 sdbusplus, 246 ], 247 include_directories: 'src', 248 ) 249 ) 250 251 test( 252 'test_topology', 253 executable( 254 'test_topology', 255 'test/test_topology.cpp', 256 'src/topology.cpp', 257 cpp_args: test_boost_args, 258 dependencies: [ 259 gtest, 260 gmock, 261 ], 262 include_directories: 'src', 263 ) 264 ) 265endif 266