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 'Blyth.json', 85 'AHW1UM2RISER.json', 86 'ASPOWER_U1A-D10550_PSU.json', 87 'ASPOWER_U1A-D10800_PSU.json', 88 'ASPOWER_U1A-D11200_PSU.json', 89 'ASPOWER_U1A-D11600_PSU.json', 90 'ASPOWER_U1D-D10800_PSU.json', 91 'AXX1P100HSSI_AIC.json', 92 'AXX2PRTHDHD.json', 93 'BNP Baseboard.json', 94 'Bellavista.json', 95 'Delta_AWF2DC3200W_PSU.json', 96 'Delta DPS-750XB PSU.json', 97 'Delta_DPS-1600AB_PSU.json', 98 'Delta_DPS-2000AB_PSU.json', 99 'Everest.json', 100 'F1U12X25 HSBP.json', 101 'F1U4X25 HSBP.json', 102 'F2U12X35 HSBP.json', 103 'F2U8X25 HSBP.json', 104 'FBTP.json', 105 'FBYV2.json', 106 'Flextronics S-1100ADU00-201 PSU.json', 107 'IBM 1000W CFFPS.json', 108 'IBM 1400W CFFPS.json', 109 'IBM 1600W CFFPS.json', 110 'IBM 2000W CFFPS.json', 111 'IBM 2300W CFFPS.json', 112 'Intel Front Panel.json', 113 'Kudo_BMC.json', 114 'Kudo_Motherboard.json', 115 'Mt_Jade.json', 116 'Nisqually.json', 117 'NVME P4000.json', 118 'PCIE SSD Retimer.json', 119 'PSSF132202A.json', 120 'PSSF162205A.json', 121 'PSSF212201A.json', 122 'PSSF222201A.json', 123 'Rainier 2U Chassis.json', 124 'Rainier 4U Chassis.json', 125 'Rainier 1S4U Chassis.json', 126 'R1000 Chassis.json', 127 'R2000 Chassis.json', 128 'SAS Module.json', 129 'SOLUM_PSSF162202_PSU.json', 130 'Storm King.json', 131 'STP Baseboard.json', 132 'STP P4000 Chassis.json', 133 'Tyan_S7106_Baseboard.json', 134 'Tyan_S8036_Baseboard.json', 135 'WFT Baseboard.json', 136] 137filepaths = [] 138foreach c : configs 139 file = join_paths('configurations', c) 140 install_data( 141 file, 142 install_dir: join_paths( 143 packagedir, 144 'configurations', 145 ) 146 ) 147 filepaths += [file] 148endforeach 149 150validate_script = files('scripts/validate-configs.py') 151autojson = custom_target( 152 'check_syntax', 153 command: [ 154 validate_script, 155 '-v', 156 '-k', 157 ], 158 depend_files: files(filepaths), 159 build_by_default: true, 160 capture: true, 161 output: 'validate_configs.log', 162) 163 164schemas = [ 165 'global.json', 166 'legacy.json', 167 'openbmc-dbus.json', 168 'IBM.json', 169 'Intel.json', 170 'Pid.json', 171 'Pid.Zone.json', 172 'Stepwise.json', 173 'VirtualSensor.json', 174] 175 176foreach s : schemas 177 install_data( 178 join_paths('schemas', s), 179 install_dir: join_paths( 180 packagedir, 181 'configurations', 182 'schemas', 183 ) 184 ) 185endforeach 186 187subdir('service_files') 188subdir('src') 189 190if not build_tests.disabled() 191 test_boost_args = boost_args + ['-DBOOST_ASIO_DISABLE_THREADS'] 192 gtest = dependency('gtest', main: true, disabler: true, required: false) 193 if not gtest.found() and build_tests.enabled() 194 cmake = import('cmake') 195 gtest_subproject = cmake.subproject('gtest') 196 cm_gtest = gtest_subproject.dependency('gtest') 197 cm_gtest_main = gtest_subproject.dependency('gtest_main') 198 gtest = declare_dependency(dependencies: [cm_gtest, cm_gtest_main, threads]) 199 endif 200 201 test( 202 'test_entity_manager', 203 executable( 204 'test_entity_manager', 205 'test/test_entity-manager.cpp', 206 'src/expression.cpp', 207 'src/utils.cpp', 208 cpp_args: test_boost_args, 209 dependencies: [ 210 boost, 211 gtest, 212 nlohmann_json_dep, 213 sdbusplus, 214 valijson, 215 ], 216 implicit_include_directories: false, 217 include_directories: 'include', 218 ) 219 ) 220 221 test( 222 'test_fru_utils', 223 executable( 224 'test_fru_utils', 225 'test/test_fru-utils.cpp', 226 'src/fru_utils.cpp', 227 cpp_args: test_boost_args, 228 dependencies: [ 229 boost, 230 gtest, 231 ], 232 implicit_include_directories: false, 233 include_directories: 'include', 234 ) 235 ) 236endif 237