blob: 7071a518ab7e3325dc85b6a5c934d761bfd4c379 [file] [log] [blame]
Ramesh Iyyarbb410df2020-08-03 03:13:04 -05001# SPDX-License-Identifier: Apache-2.0
2
Patrick Williams57de2512025-02-01 08:37:12 -05003project(
4 'phosphor-debug-collector',
5 'cpp',
6 meson_version: '>=1.1.1',
7 default_options: [
8 'cpp_std=c++23',
9 'warning_level=3',
10 'werror=true',
11 'buildtype=debugoptimized',
12 ],
13 version: '1.0',
14 license: 'Apache-2.0',
15)
Ramesh Iyyarbb410df2020-08-03 03:13:04 -050016
Patrick Williamsabbe1592021-10-01 16:04:19 -050017cpp = meson.get_compiler('cpp')
18
Dhruvaraj Subhashchandran9f557362021-05-12 06:28:20 -050019# list of unit files, the path as input and service name
20# as output
21# eg: unit_file += {'input:'<path>, 'output':<service name>}
22unit_files = []
23
Ramesh Iyyarbb410df2020-08-03 03:13:04 -050024# Checking dependency external library
25
Patrick Williams57de2512025-02-01 08:37:12 -050026libsystemd = dependency('libsystemd', version: '>=221')
George Liu73e0bab2021-06-29 15:57:43 +080027
Patrick Williams02634e52022-03-21 11:16:11 -050028sdbusplus_dep = dependency('sdbusplus')
29sdbusplusplus_prog = find_program('sdbus++')
30sdbuspp_gen_meson_prog = find_program('sdbus++-gen-meson')
Marri Devender Rao3ed02c32022-06-28 23:12:14 -050031sdeventplus_dep = dependency('sdeventplus')
Patrick Williams02634e52022-03-21 11:16:11 -050032
33phosphor_dbus_interfaces_dep = dependency('phosphor-dbus-interfaces')
34phosphor_logging_dep = dependency('phosphor-logging')
Ramesh Iyyarbb410df2020-08-03 03:13:04 -050035
Dhruvaraj Subhashchandran50646c22024-06-19 22:51:50 -050036# nlohmann-json dependency
37nlohmann_json_dep = dependency('nlohmann_json', include_type: 'system')
38
Patrick Williamsabbe1592021-10-01 16:04:19 -050039# Get Cereal dependency.
40cereal_dep = dependency('cereal', required: false)
41has_cereal = cpp.has_header_symbol(
42 'cereal/cereal.hpp',
43 'cereal::specialize',
44 dependencies: cereal_dep,
Patrick Williams57de2512025-02-01 08:37:12 -050045 required: false,
46)
Patrick Williamsabbe1592021-10-01 16:04:19 -050047if not has_cereal
48 cereal_opts = import('cmake').subproject_options()
Patrick Williams57de2512025-02-01 08:37:12 -050049 cereal_opts.add_cmake_defines(
50 {'BUILD_TESTS': 'OFF', 'SKIP_PERFORMANCE_COMPARISON': 'ON'},
51 )
Patrick Williamsabbe1592021-10-01 16:04:19 -050052 cereal_proj = import('cmake').subproject(
53 'cereal',
54 options: cereal_opts,
Patrick Williams57de2512025-02-01 08:37:12 -050055 required: false,
56 )
Patrick Williamsabbe1592021-10-01 16:04:19 -050057 assert(cereal_proj.found(), 'cereal is required')
58 cereal_dep = cereal_proj.dependency('cereal')
59endif
60
PriyangaRamasamy01c66462021-02-23 05:46:25 -060061# Disable FORTIFY_SOURCE when compiling with no optimization
Patrick Williams57de2512025-02-01 08:37:12 -050062if (get_option('optimization') == '0')
63 add_project_arguments('-U_FORTIFY_SOURCE', language: ['cpp', 'c'])
64 message('Disabling FORTIFY_SOURCE as optimization is set to 0')
PriyangaRamasamy01c66462021-02-23 05:46:25 -060065endif
66
Ramesh Iyyarbb410df2020-08-03 03:13:04 -050067# Configuration header file(config.h) generation
68
69conf_data = configuration_data()
70
Patrick Williams57de2512025-02-01 08:37:12 -050071conf_data.set_quoted(
72 'DUMP_BUSNAME',
73 get_option('DUMP_BUSNAME'),
74 description: 'The Dbus busname to own',
75)
76conf_data.set_quoted(
77 'DUMP_OBJPATH',
78 get_option('DUMP_OBJPATH'),
79 description: 'The Dump manager Dbus root',
80)
81conf_data.set_quoted(
82 'BMC_DUMP_OBJPATH',
83 get_option('BMC_DUMP_OBJPATH'),
84 description: 'The BMC Dump manager Dbus path',
85)
86conf_data.set_quoted(
87 'CORE_FILE_DIR',
88 get_option('CORE_FILE_DIR'),
89 description: 'Directory where core dumps are placed',
90)
91conf_data.set_quoted(
92 'BMC_DUMP_OBJ_ENTRY',
93 get_option('BMC_DUMP_OBJ_ENTRY'),
94 description: 'The BMC dump entry DBus object path',
95)
96conf_data.set_quoted(
97 'BMC_DUMP_PATH',
98 get_option('BMC_DUMP_PATH'),
99 description: 'Directory where bmc dumps are placed',
100)
101conf_data.set_quoted(
102 'SYSTEMD_PSTORE_PATH',
103 get_option('SYSTEMD_PSTORE_PATH'),
104 description: 'Path to the systemd pstore directory',
105)
106conf_data.set(
107 'BMC_DUMP_MAX_SIZE',
108 get_option('BMC_DUMP_MAX_SIZE'),
109 description: 'Maximum size of one bmc dump in kilo bytes',
110)
111conf_data.set(
112 'BMC_DUMP_MIN_SPACE_REQD',
113 get_option('BMC_DUMP_MIN_SPACE_REQD'),
114 description: 'Minimum space required for one bmc dump in kilo bytes',
115)
116conf_data.set(
117 'BMC_DUMP_TOTAL_SIZE',
118 get_option('BMC_DUMP_TOTAL_SIZE'),
119 description: 'Total size of the dump in kilo bytes',
120)
121conf_data.set_quoted(
122 'OBJ_LOGGING',
123 '/xyz/openbmc_project/logging',
124 description: 'The log manager DBus object path',
125)
126conf_data.set_quoted(
127 'ELOG_ID_PERSIST_PATH',
128 get_option('ELOG_ID_PERSIST_PATH'),
129 description: 'Path of file for storing elog id\'s, which have associated dumps',
130)
131conf_data.set(
132 'CLASS_VERSION',
133 get_option('CLASS_VERSION'),
134 description: 'Class version to register with Cereal',
135)
136conf_data.set(
137 'ERROR_MAP_YAML',
138 get_option('ERROR_MAP_YAML'),
139 description: 'YAML filepath containing error object paths',
140)
141conf_data.set(
142 'JFFS_CORE_FILE_WORKAROUND',
143 get_option('jffs-workaround').allowed(),
144 description: 'Turn on jffs workaround for core file',
145)
146conf_data.set_quoted(
147 'FAULTLOG_DUMP_OBJ_ENTRY',
148 get_option('FAULTLOG_DUMP_OBJ_ENTRY'),
149 description: 'The Fault Log dump entry DBus object path',
150)
151conf_data.set_quoted(
152 'FAULTLOG_DUMP_OBJPATH',
153 get_option('FAULTLOG_DUMP_OBJPATH'),
154 description: 'The Fault Log Dump manager Dbus path',
155)
156conf_data.set_quoted(
157 'FAULTLOG_DUMP_PATH',
158 get_option('FAULTLOG_DUMP_PATH'),
159 description: 'Directory where fault logs are placed',
160)
161conf_data.set(
162 'BMC_DUMP_ROTATE_CONFIG',
163 get_option('dump_rotate_config').allowed(),
164 description: 'Turn on rotate config for bmc dump',
165)
Ramesh Iyyarbb410df2020-08-03 03:13:04 -0500166
Patrick Williams2c634482025-02-06 13:13:51 -0500167conf_data.set_quoted(
168 'SYSTEM_DUMP_OBJPATH',
169 get_option('SYSTEM_DUMP_OBJPATH'),
170 description: 'The system dump manager D-Bus path',
171)
172conf_data.set_quoted(
173 'SYSTEM_DUMP_OBJ_ENTRY',
174 get_option('SYSTEM_DUMP_OBJ_ENTRY'),
175 description: 'The system dump entry D-Bus object path',
176)
177
178conf_data.set_quoted(
179 'RESOURCE_DUMP_OBJPATH',
180 get_option('RESOURCE_DUMP_OBJPATH'),
181 description: 'The resource dump manager D-Bus path',
182)
183conf_data.set_quoted(
184 'RESOURCE_DUMP_OBJ_ENTRY',
185 get_option('RESOURCE_DUMP_OBJ_ENTRY'),
186 description: 'The resource dump entry D-Bus object path',
187)
188
Lakshmi Yadlapati03414ff2024-07-07 14:37:12 -0500189if cpp.has_header('poll.h')
Patrick Williams57de2512025-02-01 08:37:12 -0500190 add_project_arguments('-DPLDM_HAS_POLL=1', language: 'cpp')
Lakshmi Yadlapati03414ff2024-07-07 14:37:12 -0500191endif
192
Patrick Williams57de2512025-02-01 08:37:12 -0500193configure_file(configuration: conf_data, output: 'config.h')
Ramesh Iyyarbb410df2020-08-03 03:13:04 -0500194
Dhruvaraj Subhashchandranc1f5ed62023-07-09 04:31:28 -0500195dump_types_yaml_files = []
196
197# Dump types YAML file
Patrick Williams57de2512025-02-01 08:37:12 -0500198dump_types_yaml_files += {
199 'input': 'example_dump_types.yaml',
200 'output': 'dump_types.yaml',
201}
Dhruvaraj Subhashchandranc1f5ed62023-07-09 04:31:28 -0500202
203# Copy and combine YAML files
204concatenate_command = 'cat '
205combined_yaml_file = 'combined_dump_types.yaml'
206
207foreach yaml_file : dump_types_yaml_files
Patrick Williams57de2512025-02-01 08:37:12 -0500208 configure_file(
209 input: yaml_file.get('input'),
210 output: yaml_file.get('output'),
211 copy: true,
212 )
213 concatenate_command += meson.project_build_root() + '/' + yaml_file.get(
214 'output',
215 ) + ' '
Dhruvaraj Subhashchandranc1f5ed62023-07-09 04:31:28 -0500216endforeach
217
Konstantin Aladyshevdf01f8a2024-04-02 17:50:49 +0300218concatenate_command += '> ' + meson.project_build_root() + '/' + combined_yaml_file
Dhruvaraj Subhashchandranc1f5ed62023-07-09 04:31:28 -0500219run_command('sh', '-c', concatenate_command)
220
Ramesh Iyyarbb410df2020-08-03 03:13:04 -0500221python = find_program('python3')
Dhruvaraj Subhashchandranc1f5ed62023-07-09 04:31:28 -0500222map_gen_file_loc = meson.project_source_root()
223map_gen_file_loc += '/map_gen.py'
224
225dump_types_hpp = custom_target(
Patrick Williams57de2512025-02-01 08:37:12 -0500226 'dump_types.hpp',
227 command: [
228 python,
229 map_gen_file_loc,
230 '-i',
231 meson.project_build_root() + '/' + combined_yaml_file,
232 '-j',
233 get_option('ERROR_MAP_YAML'),
234 '-t',
235 'dump_types.hpp.mako',
236 '-o',
237 'dump_types.hpp',
238 ],
239 depend_files: [
240 'dump_types.hpp.mako',
241 'map_gen.py',
242 meson.project_build_root() + '/' + combined_yaml_file,
243 get_option('ERROR_MAP_YAML'),
244 ],
245 output: 'dump_types.hpp',
246)
Dhruvaraj Subhashchandranc1f5ed62023-07-09 04:31:28 -0500247
248dump_types_cpp = custom_target(
Patrick Williams57de2512025-02-01 08:37:12 -0500249 'dump_types.cpp',
250 command: [
251 python,
252 map_gen_file_loc,
253 '-i',
254 meson.project_build_root() + '/' + combined_yaml_file,
255 '-j',
256 get_option('ERROR_MAP_YAML'),
257 '-t',
258 'dump_types.cpp.mako',
259 '-o',
260 'dump_types.cpp',
261 ],
262 depend_files: [
263 'dump_types.cpp.mako',
264 'map_gen.py',
265 meson.project_build_root() + '/' + combined_yaml_file,
266 get_option('ERROR_MAP_YAML'),
267 ],
268 output: 'dump_types.cpp',
269)
Ramesh Iyyarbb410df2020-08-03 03:13:04 -0500270
271phosphor_dump_manager_sources = [
Patrick Williams57de2512025-02-01 08:37:12 -0500272 'dump_entry.cpp',
273 'dump_manager.cpp',
274 'dump_manager_bmc.cpp',
275 'dump_manager_main.cpp',
276 'dump_serialize.cpp',
277 'elog_watch.cpp',
278 dump_types_hpp,
279 dump_types_cpp,
280 'watch.cpp',
281 'bmc_dump_entry.cpp',
282 'dump_utils.cpp',
283 'dump_offload.cpp',
284 'dump_manager_faultlog.cpp',
285 'faultlog_dump_entry.cpp',
286]
Ramesh Iyyarbb410df2020-08-03 03:13:04 -0500287
288phosphor_dump_manager_dependency = [
Patrick Williams57de2512025-02-01 08:37:12 -0500289 phosphor_dbus_interfaces_dep,
290 sdbusplus_dep,
291 sdeventplus_dep,
292 phosphor_logging_dep,
293 cereal_dep,
294 nlohmann_json_dep,
295]
Ramesh Iyyarbb410df2020-08-03 03:13:04 -0500296
297phosphor_dump_manager_install = true
298
Ramesh Iyyar3af5c322020-12-04 00:38:42 -0600299phosphor_dump_manager_incdir = []
300
Ramesh Iyyar131994b2020-12-03 08:35:36 -0600301# To get host transport based interface to take respective host
302# dump actions. It will contain required sources and dependency
303# list for phosphor_dump_manager.
304subdir('host-transport-extensions')
Ramesh Iyyarbb410df2020-08-03 03:13:04 -0500305
Dhruvaraj Subhashchandran8b9b4692020-09-24 11:59:42 -0500306#pick any architecture specific dumps
307subdir('dump-extensions')
308
Ramesh Iyyarbb410df2020-08-03 03:13:04 -0500309phosphor_dump_monitor_sources = [
Patrick Williams57de2512025-02-01 08:37:12 -0500310 dump_types_hpp,
311 'core_manager.cpp',
312 'core_manager_main.cpp',
313 'watch.cpp',
314]
Ramesh Iyyarbb410df2020-08-03 03:13:04 -0500315
316phosphor_dump_monitor_dependency = [
Patrick Williams57de2512025-02-01 08:37:12 -0500317 phosphor_dbus_interfaces_dep,
318 phosphor_logging_dep,
319 sdeventplus_dep,
320]
Ramesh Iyyarbb410df2020-08-03 03:13:04 -0500321
322phosphor_dump_monitor_install = true
323
Ramesh Iyyar3af5c322020-12-04 00:38:42 -0600324phosphor_dump_monitor_incdir = []
325
George Liuff92ffe2021-02-09 15:01:53 +0800326phosphor_ramoops_monitor_sources = [
Patrick Williams57de2512025-02-01 08:37:12 -0500327 dump_types_hpp,
328 'ramoops_manager.cpp',
329 'ramoops_manager_main.cpp',
330 'watch.cpp',
331]
George Liuff92ffe2021-02-09 15:01:53 +0800332
333phosphor_ramoops_monitor_dependency = [
Patrick Williams57de2512025-02-01 08:37:12 -0500334 phosphor_dbus_interfaces_dep,
335 phosphor_logging_dep,
336 sdeventplus_dep,
337]
George Liuff92ffe2021-02-09 15:01:53 +0800338
339phosphor_ramoops_monitor_install = true
340
341phosphor_ramoops_monitor_incdir = []
342
Patrick Williams57de2512025-02-01 08:37:12 -0500343executables = [
344 [
345 'phosphor-dump-manager',
346 phosphor_dump_manager_sources,
347 phosphor_dump_manager_dependency,
348 phosphor_dump_manager_install,
349 phosphor_dump_manager_incdir,
350 ],
351 [
352 'phosphor-dump-monitor',
353 phosphor_dump_monitor_sources,
354 phosphor_dump_monitor_dependency,
355 phosphor_dump_monitor_install,
356 phosphor_dump_monitor_incdir,
357 ],
358 [
359 'phosphor-ramoops-monitor',
360 phosphor_ramoops_monitor_sources,
361 phosphor_ramoops_monitor_dependency,
362 phosphor_ramoops_monitor_install,
363 phosphor_ramoops_monitor_incdir,
364 ],
365]
Ramesh Iyyarbb410df2020-08-03 03:13:04 -0500366
367foreach executable : executables
368 binary = executable(
Patrick Williams57de2512025-02-01 08:37:12 -0500369 executable[0],
370 executable[1],
371 dependencies: executable[2],
372 install: executable[3],
373 include_directories: executable[4],
374 )
Ramesh Iyyarbb410df2020-08-03 03:13:04 -0500375endforeach
Chirag Sharma50427252020-08-11 12:11:38 -0500376
Dhruvaraj Subhashchandran9f557362021-05-12 06:28:20 -0500377unit_subs = configuration_data()
378unit_subs.set('bindir', join_paths(get_option('prefix'), get_option('bindir')))
Patrick Williams6c84a8c2023-04-12 08:10:41 -0500379systemd_system_unit_dir = dependency('systemd').get_variable(
Dhruvaraj Subhashchandran9f557362021-05-12 06:28:20 -0500380 'systemdsystemunitdir',
Patrick Williams57de2512025-02-01 08:37:12 -0500381 pkgconfig_define: ['prefix', get_option('prefix')],
382)
Dhruvaraj Subhashchandran9f557362021-05-12 06:28:20 -0500383foreach u : unit_files
384 configure_file(
385 configuration: unit_subs,
386 input: u.get('input'),
387 install: true,
388 install_dir: systemd_system_unit_dir,
Patrick Williams57de2512025-02-01 08:37:12 -0500389 output: u.get('output'),
Dhruvaraj Subhashchandran9f557362021-05-12 06:28:20 -0500390 )
391endforeach
392
Patrick Williams7cd05282023-11-29 06:44:29 -0600393if get_option('tests').allowed()
Patrick Williams57de2512025-02-01 08:37:12 -0500394 subdir('test')
Chirag Sharma50427252020-08-11 12:11:38 -0500395endif