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