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.58.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', include_type: 'system') 38 39sdbusplus = dependency('sdbusplus', required: false) 40if not sdbusplus.found() 41 sdbusplus_proj = subproject('sdbusplus', required: true) 42 sdbusplus = sdbusplus_proj.get_variable('sdbusplus_dep') 43 sdbusplus = sdbusplus.as_system('system') 44endif 45systemd = dependency('systemd') 46systemd_system_unit_dir = systemd.get_variable( 47 'systemdsystemunitdir', 48 pkgconfig_define: ['prefix', get_option('prefix')]) 49packagedir = join_paths( 50 get_option('prefix'), 51 get_option('datadir'), 52 meson.project_name(), 53) 54sysconfdir = join_paths( 55 get_option('prefix'), 56 get_option('sysconfdir'), 57 meson.project_name(), 58) 59threads = dependency('threads') 60if cpp.has_header('valijson/validator.hpp') 61 valijson = declare_dependency() 62else 63 subproject('valijson', required: false) 64 valijson = declare_dependency( 65 include_directories: 'subprojects/valijson/include' 66 ) 67 valijson = valijson.as_system('system') 68endif 69 70install_data('blacklist.json') 71 72configs = [ 73 '1ux16_riser.json', 74 '2ux8_riser.json', 75 '3ypower_vast2112_psu.json', 76 '8x25_hsbp.json', 77 'a2ul16riser.json', 78 'a2ux8x4riser.json', 79 'acbell_rica_psu.json', 80 'acbel_r1ca2122a_psu.json', 81 'asrock_e3c246d4i.json', 82 'asrock_e3c256d4i.json', 83 'asrock_m3_small_x86.json', 84 'asrock_n3_xlarge_x86.json', 85 'asrock_romed8hm3.json', 86 'asrock_spc621d8hm3.json', 87 'bletchley_baseboard.json', 88 'bletchley_chassis.json', 89 'bletchley_frontpanel.json', 90 'blyth.json', 91 'ahw1um2riser.json', 92 'aspower_u1a-d10550_psu.json', 93 'aspower_u1a-d10800_psu.json', 94 'aspower_u1a-d11200_psu.json', 95 'aspower_u1a-d11600_psu.json', 96 'aspower_u1d-d10800_psu.json', 97 'axx1p100hssi_aic.json', 98 'axx2prthdhd.json', 99 'bnp_baseboard.json', 100 'bellavista.json', 101 'bonnell.json', 102 'delta_awf2dc3200w_psu.json', 103 'delta_dps-750xb_psu.json', 104 'delta_dps-1600ab_psu.json', 105 'delta_dps-2000ab_psu.json', 106 'supermicro-pws-920p-sq_psu.json', 107 'everest.json', 108 'f1u12x25_hsbp.json', 109 'f1u4x25_hsbp.json', 110 'f2u12x35_hsbp.json', 111 'f2u8x25_hsbp.json', 112 'fbtp.json', 113 'fbyv2.json', 114 'fbyv35.json', 115 'fbyv35_nic_mellanox.json', 116 'flextronics_s-1100adu00-201_psu.json', 117 'genesis3_psu.json', 118 'genesis3_baseboard.json', 119 'genesis3_chassis.json', 120 'gospower_g1136-1300wna_psu.json', 121 'greatlakes.json', 122 'greatlakes_nic_mellanox.json', 123 'ibm_tacoma_rack_controller.json', 124 'intel_front_panel.json', 125 'kudo_bmc.json', 126 'kudo_motherboard.json', 127 'micron_7450.json', 128 'minerva_cmm.json', 129 'minerva_scm.json', 130 'mori_bmc.json', 131 'mori_motherboard.json', 132 'mtjade.json', 133 'mtmitchell_bmc.json', 134 'mtmitchell_mb.json', 135 'mudflap.json', 136 'nisqually.json', 137 'nvme_p4000.json', 138 'pcie_ssd_retimer.json', 139 'pennybacker.json', 140 'pssf132202a.json', 141 'pssf162205a.json', 142 'pssf212201a.json', 143 'pssf222201a.json', 144 'rainier_2u_chassis.json', 145 'rainier_4u_chassis.json', 146 'rainier_1s4u_chassis.json', 147 'r1000_chassis.json', 148 'r2000_chassis.json', 149 'sas_module.json', 150 'sbp1_baseboard.json', 151 'sbp1_chassis.json', 152 'sbp1_nvme.json', 153 'sbp1_psu.json', 154 'sbp1_rssd.json', 155 'system1_baseboard.json', 156 'system1_chassis.json', 157 'solum_pssf162202_psu.json', 158 'storm_king.json', 159 'stp_baseboard.json', 160 'stp_p4000_chassis.json', 161 'twinlake.json', 162 'tyan_s7106_baseboard.json', 163 'tyan_s8036_baseboard.json', 164 'vegman_n110_baseboard.json', 165 'vegman_rx20_baseboard.json', 166 'vegman_sx20_baseboard.json', 167 'wft_baseboard.json', 168 'yosemite4_fanboard.json', 169 'yosemite4_sentineldome.json', 170 'yosemite4_floatingfalls.json', 171 'yosemite4_wailuafalls.json', 172 'yosemite4.json', 173 'yosemite4_medusaboard.json', 174 'yosemite4_spiderboard.json', 175] 176filepaths = [] 177foreach c : configs 178 file = join_paths('configurations', c) 179 install_data( 180 file, 181 install_dir: join_paths( 182 packagedir, 183 'configurations', 184 ) 185 ) 186 filepaths += [file] 187endforeach 188 189validate_script = files('scripts/validate_configs.py') 190autojson = custom_target( 191 'check_syntax', 192 command: [ 193 validate_script, 194 '-v', 195 '-k', 196 ], 197 depend_files: files(filepaths), 198 build_by_default: true, 199 capture: true, 200 output: 'validate_configs.log', 201) 202 203schemas = [ 204 'global.json', 205 'legacy.json', 206 'openbmc-dbus.json', 207 'ibm.json', 208 'intel.json', 209 'pid.json', 210 'pid_zone.json', 211 'stepwise.json', 212 'virtual_sensor.json', 213 'satellite_controller.json', 214] 215 216foreach s : schemas 217 install_data( 218 join_paths('schemas', s), 219 install_dir: join_paths( 220 packagedir, 221 'configurations', 222 'schemas', 223 ) 224 ) 225endforeach 226 227subdir('service_files') 228subdir('src') 229 230if not build_tests.disabled() 231 test_boost_args = boost_args + ['-DBOOST_ASIO_DISABLE_THREADS'] 232 gtest = dependency('gtest', main: true, disabler: true, required: false) 233 gmock = dependency('gmock', disabler: true, required: false) 234 if not (gtest.found() and gmock.found()) and build_tests.enabled() 235 cmake = import('cmake') 236 gtest_subproject = cmake.subproject('gtest') 237 cm_gtest = gtest_subproject.dependency('gtest') 238 cm_gtest_main = gtest_subproject.dependency('gtest_main') 239 gtest = declare_dependency(dependencies: [cm_gtest, cm_gtest_main, threads]) 240 gmock = gtest_subproject.dependency('gmock') 241 242 endif 243 244 test( 245 'test_entity_manager', 246 executable( 247 'test_entity_manager', 248 'test/test_entity-manager.cpp', 249 'src/expression.cpp', 250 'src/utils.cpp', 251 cpp_args: test_boost_args, 252 dependencies: [ 253 boost, 254 gtest, 255 nlohmann_json_dep, 256 sdbusplus, 257 valijson, 258 ], 259 include_directories: 'src', 260 ) 261 ) 262 263 test( 264 'test_fru_utils', 265 executable( 266 'test_fru_utils', 267 'test/test_fru-utils.cpp', 268 'src/fru_utils.cpp', 269 'src/fru_reader.cpp', 270 cpp_args: test_boost_args, 271 dependencies: [ 272 boost, 273 gtest, 274 sdbusplus, 275 ], 276 include_directories: 'src', 277 ) 278 ) 279 280 test( 281 'test_topology', 282 executable( 283 'test_topology', 284 'test/test_topology.cpp', 285 'src/topology.cpp', 286 cpp_args: test_boost_args, 287 dependencies: [ 288 gtest, 289 gmock, 290 nlohmann_json_dep, 291 ], 292 include_directories: 'src', 293 ) 294 ) 295endif 296