xref: /openbmc/phosphor-logging/meson.build (revision eaa501f3fd9e667ce6e20e9ea326e3e50a59b7fa)
1project(
2    'phosphor-logging',
3    'cpp',
4    meson_version: '>=1.1.1',
5    default_options: [
6        'buildtype=debugoptimized',
7        'cpp_std=c++23',
8        'warning_level=3',
9        'werror=true',
10        'libonly=' + (meson.is_subproject() ? 'true' : 'false'),
11        'tests=' + (meson.is_subproject() ? 'disabled' : 'auto'),
12    ],
13    version: '1.0.0',
14)
15cpp = meson.get_compiler('cpp')
16
17python_prog = find_program('python3', native: true)
18libsystemd_dep = dependency('libsystemd')
19
20sdbusplus_dep = dependency('sdbusplus')
21sdbusplusplus_prog = find_program('sdbus++', native: true)
22sdbuspp_gen_meson_prog = find_program('sdbus++-gen-meson', native: true)
23sdbusplusplus_depfiles = files()
24if sdbusplus_dep.type_name() == 'internal'
25    sdbusplusplus_depfiles = subproject('sdbusplus').get_variable(
26        'sdbusplusplus_depfiles',
27    )
28endif
29
30pdi_dep = dependency('phosphor-dbus-interfaces')
31
32# Find the installed YAML directory, either from a configure option or
33# by pulling it from the PDI dependency.
34yamldir = get_option('yamldir')
35if yamldir == ''
36    yamldir = pdi_dep.get_variable('yamldir')
37endif
38
39subdir('config')
40subdir('tools')
41subdir('lib')
42
43if get_option('libonly')
44    subdir_done()
45endif
46
47sdeventplus_dep = dependency('sdeventplus')
48
49# Get Cereal dependency.
50cereal_dep = dependency('cereal', required: false)
51has_cereal = cpp.has_header_symbol(
52    'cereal/cereal.hpp',
53    'cereal::specialize',
54    dependencies: cereal_dep,
55    required: false,
56)
57if not has_cereal
58    cereal_opts = import('cmake').subproject_options()
59    cereal_opts.add_cmake_defines(
60        {'BUILD_TESTS': 'OFF', 'SKIP_PERFORMANCE_COMPARISON': 'ON'},
61    )
62    cereal_proj = import('cmake').subproject(
63        'cereal',
64        options: cereal_opts,
65        required: false,
66    )
67    assert(cereal_proj.found(), 'cereal is required')
68    cereal_dep = cereal_proj.dependency('cereal')
69endif
70
71# Get CLI11 dependency
72if cpp.has_header('CLI/CLI.hpp')
73    CLI11_dep = declare_dependency()
74else
75    CLI11_dep = dependency('CLI11')
76endif
77
78nlohmann_json_dep = dependency('nlohmann_json', include_type: 'system')
79
80# Generate sdbus++ files.
81should_generate_cpp = true
82should_generate_markdown = false
83should_generate_registry = false
84yaml_selected_subdirs = ['xyz']
85subdir('gen')
86
87# Generate callouts-gen.hpp.
88callouts_gen = custom_target(
89    'callouts-gen.hpp'.underscorify(),
90    input: [
91        'callouts/callouts.py',
92        'callouts/callouts-gen.mako.hpp',
93        get_option('callout_yaml'),
94    ],
95    output: 'callouts-gen.hpp',
96    command: [python_prog, '@INPUT0@', '-i', '@INPUT2@', '-o', '@OUTPUT0@'],
97)
98# Generate elog-lookup.cpp
99elog_lookup_gen = custom_target(
100    'elog-lookup.cpp'.underscorify(),
101    input: files(
102        'tools/elog-gen.py',
103        'tools/phosphor-logging/templates/elog-lookup-template.mako.cpp',
104    ),
105    output: 'elog-lookup.cpp',
106    command: [
107        python_prog,
108        '@INPUT0@',
109        '-t',
110        '',
111        '-m',
112        '@INPUT1@',
113        '-y',
114        yamldir,
115        '-u',
116        meson.current_source_dir() / 'tools/',
117        '-o',
118        '@OUTPUT0@',
119    ],
120)
121# Generate elog-process-metadata.cpp
122elog_process_gen = custom_target(
123    'elog-process-metadata.cpp'.underscorify(),
124    input: files(
125        'tools/elog-gen.py',
126        'tools/phosphor-logging/templates/elog-process-metadata.mako.cpp',
127    ),
128    output: 'elog-process-metadata.cpp',
129    command: [
130        python_prog,
131        '@INPUT0@',
132        '-t',
133        '',
134        '-m',
135        '@INPUT1@',
136        '-y',
137        yamldir,
138        '-u',
139        meson.current_source_dir() / 'tools/',
140        '-o',
141        '@OUTPUT0@',
142    ],
143)
144
145log_manager_ext_sources = []
146log_manager_ext_deps = []
147log_manager_ext_args = []
148
149subdir('extensions')
150subdir('phosphor-rsyslog-config')
151
152# Generate daemon.
153log_manager_sources = [
154    generated_sources,
155    callouts_gen,
156    elog_lookup_gen,
157    elog_process_gen,
158    files(
159        'elog_entry.cpp',
160        'elog_meta.cpp',
161        'elog_serialize.cpp',
162        'extensions.cpp',
163        'log_manager.cpp',
164        'paths.cpp',
165        'util.cpp',
166    ),
167]
168log_manager_deps = [
169    cereal_dep,
170    conf_h_dep,
171    pdi_dep,
172    phosphor_logging_dep,
173    sdbusplus_dep,
174    sdeventplus_dep,
175]
176executable(
177    'phosphor-log-manager',
178    log_manager_sources,
179    log_manager_ext_sources,
180    'log_manager_main.cpp',
181    include_directories: include_directories('gen'),
182    cpp_args: log_manager_ext_args,
183    dependencies: [log_manager_deps, log_manager_ext_deps],
184    install: true,
185)
186
187executable(
188    'log-create',
189    'log_create_main.cpp',
190    dependencies: [
191        CLI11_dep,
192        nlohmann_json_dep,
193        pdi_dep,
194        phosphor_logging_dep,
195        sdbusplus_dep,
196    ],
197    install: true,
198)
199
200executable(
201    'log-resolve',
202    'log_resolve_main.cpp',
203    dependencies: [
204        CLI11_dep,
205        nlohmann_json_dep,
206        pdi_dep,
207        phosphor_logging_dep,
208        sdbusplus_dep,
209    ],
210    install: true,
211)
212
213# Generate test executables which run in obmc env (qemu, real hardware).
214executable(
215    'logging-test',
216    'logging_test.cpp',
217    dependencies: [pdi_dep, phosphor_logging_dep, sdbusplus_dep],
218    install: true,
219)
220executable(
221    'callout-test',
222    'callouts/callout_test.cpp',
223    dependencies: [
224        conf_h_dep,
225        pdi_dep,
226        phosphor_logging_dep,
227        sdbusplus_dep,
228        sdeventplus_dep,
229    ],
230    install: true,
231)
232
233subdir('dist')
234
235if get_option('tests').allowed()
236    subdir('test')
237endif
238