xref: /openbmc/entity-manager/meson.build (revision e45d8c71)
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