1project( 2 'phosphor-state-manager', 3 'cpp', 4 default_options: [ 5 'warning_level=3', 6 'werror=true', 7 'cpp_std=c++23' 8 ], 9 meson_version: '>=1.1.1', 10 license: 'Apache-2.0', 11 version: '0.1', 12) 13cpp = meson.get_compiler('cpp') 14 15build_host_gpios = get_option('host-gpios') 16 17conf = configuration_data() 18conf.set_quoted( 19 'HOST_BUSNAME', get_option('host-busname')) 20conf.set_quoted( 21 'HOST_OBJPATH', get_option('host-objpath')) 22conf.set_quoted( 23 'HOST_SCHED_OBJPATH', get_option('host-sched-objpath')) 24conf.set_quoted( 25 'HYPERVISOR_BUSNAME', get_option('hypervisor-busname')) 26conf.set_quoted( 27 'HYPERVISOR_OBJPATH', get_option('hypervisor-objpath')) 28conf.set_quoted( 29 'CHASSIS_BUSNAME', get_option('chassis-busname')) 30conf.set_quoted( 31 'CHASSIS_OBJPATH', get_option('chassis-objpath')) 32conf.set_quoted( 33 'BMC_BUSNAME', get_option('bmc-busname')) 34conf.set_quoted( 35 'BMC_OBJPATH', get_option('bmc-objpath')) 36conf.set_quoted( 37 'HOST_STATE_PERSIST_PATH', get_option('host-state-persist-path')) 38conf.set_quoted( 39 'POH_COUNTER_PERSIST_PATH', get_option('poh-counter-persist-path')) 40conf.set_quoted( 41 'CHASSIS_STATE_CHANGE_PERSIST_PATH', get_option('chassis-state-change-persist-path')) 42conf.set_quoted( 43 'SCHEDULED_HOST_TRANSITION_PERSIST_PATH', get_option('scheduled-host-transition-persist-path')) 44conf.set_quoted( 45 'SCHEDULED_HOST_TRANSITION_BUSNAME', get_option('scheduled-host-transition-busname')) 46conf.set( 47 'BOOT_COUNT_MAX_ALLOWED', get_option('boot-count-max-allowed')) 48conf.set( 49 'CLASS_VERSION', get_option('class-version')) 50conf.set_quoted( 51 'SYSFS_SECURE_BOOT_PATH', get_option('sysfs-secure-boot-path')) 52conf.set_quoted( 53 'SYSFS_ABR_IMAGE_PATH', get_option('sysfs-abr-image-path')) 54if build_host_gpios.allowed() 55 conf.set_quoted( 56 'HOST_GPIOS_BUSNAME', get_option('host-gpios-busname')) 57 conf.set_quoted( 58 'HOST_GPIOS_OBJPATH', get_option('host-gpios-objpath')) 59endif 60 61conf.set10( 62 'ONLY_RUN_APR_ON_POWER_LOSS', get_option('only-run-apr-on-power-loss')) 63 64conf.set_quoted( 65 'SYSFS_TPM_DEVICE_PATH', get_option('sysfs-tpm-device-path')) 66 67conf.set_quoted( 68 'SYSFS_TPM_MEASUREMENT_PATH', get_option('sysfs-tpm-measurement-path')) 69 70conf.set10( 71 'ONLY_ALLOW_BOOT_WHEN_BMC_READY', get_option('only-allow-boot-when-bmc-ready')) 72 73# globals shared across applications 74conf.set_quoted( 75 'BASE_FILE_DIR', '/run/openbmc/') 76 77conf.set_quoted( 78 'CHASSIS_LOST_POWER_FILE', '/run/openbmc/chassis@%d-lost-power') 79 80conf.set_quoted( 81 'HOST_RUNNING_FILE', '/run/openbmc/host@%d-on') 82 83conf.set_quoted( 84 'CHASSIS_ON_FILE', '/run/openbmc/chassis@%d-on') 85 86configure_file(output: 'config.h', configuration: conf) 87 88if(get_option('warm-reboot').allowed()) 89 add_project_arguments('-DENABLE_WARM_REBOOT',language:'cpp') 90endif 91 92nlohmann_json_dep = dependency('nlohmann_json', include_type: 'system') 93sdbusplus = dependency('sdbusplus') 94sdeventplus = dependency('sdeventplus') 95phosphorlogging = dependency('phosphor-logging') 96phosphordbusinterfaces = dependency('phosphor-dbus-interfaces') 97libgpiod = dependency('libgpiod', version : '>=1.4.1') 98fmt = dependency('fmt') 99 100if cpp.has_header('CLI/CLI.hpp') 101 CLI11 = declare_dependency() 102else 103 CLI11 = dependency('CLI11') 104endif 105 106# Get Cereal dependency. 107cereal = dependency('cereal', required: false) 108has_cereal = cpp.has_header_symbol( 109 'cereal/cereal.hpp', 110 'cereal::specialize', 111 dependencies: cereal, 112 required: false) 113if not has_cereal 114 cereal_opts = import('cmake').subproject_options() 115 cereal_opts.add_cmake_defines({'BUILD_TESTS': 'OFF'}) 116 cereal_proj = import('cmake').subproject( 117 'cereal', 118 options: cereal_opts, 119 required: false) 120 assert(cereal_proj.found(), 'cereal is required') 121 cereal = cereal_proj.dependency('cereal') 122endif 123 124executable('phosphor-host-state-manager', 125 'host_state_manager.cpp', 126 'host_state_manager_main.cpp', 127 'settings.cpp', 128 'host_check.cpp', 129 'utils.cpp', 130 dependencies: [ 131 cereal, 132 fmt, 133 libgpiod, 134 phosphordbusinterfaces, 135 phosphorlogging, 136 sdbusplus, 137 sdeventplus, 138 ], 139 implicit_include_directories: true, 140 install: true 141) 142 143executable('phosphor-hypervisor-state-manager', 144 'hypervisor_state_manager.cpp', 145 'hypervisor_state_manager_main.cpp', 146 'settings.cpp', 147 dependencies: [ 148 phosphordbusinterfaces, 149 phosphorlogging, 150 sdbusplus, 151 sdeventplus, 152 ], 153 implicit_include_directories: true, 154 install: true 155) 156 157executable('phosphor-chassis-state-manager', 158 'chassis_state_manager.cpp', 159 'chassis_state_manager_main.cpp', 160 'utils.cpp', 161 dependencies: [ 162 cereal, 163 fmt, 164 libgpiod, 165 nlohmann_json_dep, 166 phosphordbusinterfaces, 167 phosphorlogging, 168 sdbusplus, 169 sdeventplus, 170 ], 171 implicit_include_directories: true, 172 install: true 173) 174 175executable('phosphor-chassis-check-power-status', 176 'chassis_check_power_status.cpp', 177 'utils.cpp', 178 dependencies: [ 179 fmt, 180 libgpiod, 181 phosphordbusinterfaces, 182 phosphorlogging, 183 sdbusplus, 184 ], 185 implicit_include_directories: true, 186 install: true 187) 188 189executable('phosphor-bmc-state-manager', 190 'bmc_state_manager.cpp', 191 'bmc_state_manager_main.cpp', 192 'utils.cpp', 193 dependencies: [ 194 fmt, 195 libgpiod, 196 phosphordbusinterfaces, 197 phosphorlogging, 198 sdbusplus, 199 sdeventplus, 200 ], 201 implicit_include_directories: true, 202 install: true 203) 204 205executable('phosphor-discover-system-state', 206 'discover_system_state.cpp', 207 'settings.cpp', 208 'utils.cpp', 209 dependencies: [ 210 cereal, 211 fmt, 212 libgpiod, 213 phosphorlogging, 214 sdbusplus, 215 ], 216 implicit_include_directories: true, 217 install: true 218) 219 220executable('phosphor-systemd-target-monitor', 221 'systemd_service_parser.cpp', 222 'systemd_target_monitor.cpp', 223 'systemd_target_parser.cpp', 224 'systemd_target_signal.cpp', 225 'utils.cpp', 226 dependencies: [ 227 CLI11, 228 libgpiod, 229 nlohmann_json_dep, 230 phosphorlogging, 231 sdbusplus, 232 sdeventplus, 233 ], 234 implicit_include_directories: true, 235 install: true 236) 237 238executable('phosphor-scheduled-host-transition', 239 'scheduled_host_transition_main.cpp', 240 'scheduled_host_transition.cpp', 241 'utils.cpp', 242 dependencies: [ 243 cereal, 244 libgpiod, 245 phosphorlogging, 246 sdbusplus, 247 sdeventplus, 248 ], 249 implicit_include_directories: true, 250 install: true 251) 252 253executable('phosphor-host-reset-recovery', 254 'host_reset_recovery.cpp', 255 dependencies: [ 256 phosphorlogging, 257 sdbusplus, 258 ], 259 implicit_include_directories: true, 260 install: true 261) 262 263executable('phosphor-secure-boot-check', 264 'secure_boot_check.cpp', 265 'utils.cpp', 266 dependencies: [ 267 fmt, sdbusplus, 268 phosphorlogging, libgpiod 269 ], 270 implicit_include_directories: true, 271 install: true 272) 273 274install_data('obmcutil', 275 install_mode: 'rwxr-xr-x', 276 install_dir: get_option('bindir') 277) 278 279install_data('scripts/host-reboot', 280 install_mode: 'rwxr-xr-x', 281 install_dir: get_option('libexecdir') 282) 283 284systemd = dependency('systemd') 285systemd_system_unit_dir = systemd.get_variable( 286 'systemdsystemunitdir') 287subdir('service_files') 288subdir('target_files') 289 290if build_host_gpios.allowed() 291 subdir('host_condition_gpio') 292endif 293 294datadir = join_paths( 295 get_option('sysconfdir'), 296 'phosphor-systemd-target-monitor' 297) 298subdir('data') 299 300build_tests = get_option('tests') 301 302# If test coverage of source files within the root directory are wanted, 303# need to define and build the tests from here 304if not build_tests.disabled() 305gtest = dependency('gtest', main: true, disabler: true, required: build_tests) 306gmock = dependency('gmock', disabler: true, required: build_tests) 307 test( 308 'test_systemd_parser', 309 executable('test_systemd_parser', 310 './test/systemd_parser.cpp', 311 'systemd_target_parser.cpp', 312 dependencies: [ 313 gtest, 314 nlohmann_json_dep, 315 ], 316 implicit_include_directories: true, 317 include_directories: '../' 318 ) 319 ) 320 321 test( 322 'test_systemd_signal', 323 executable('test_systemd_signal', 324 './test/systemd_signal.cpp', 325 'systemd_target_signal.cpp', 326 'utils.cpp', 327 dependencies: [ 328 gtest, 329 libgpiod, 330 nlohmann_json_dep, 331 phosphorlogging, 332 sdbusplus, 333 sdeventplus, 334 ], 335 implicit_include_directories: true, 336 include_directories: '../' 337 ) 338 ) 339 340 test( 341 'test_scheduled_host_transition', 342 executable('test_scheduled_host_transition', 343 './test/test_scheduled_host_transition.cpp', 344 'scheduled_host_transition.cpp', 345 'utils.cpp', 346 dependencies: [ 347 cereal, 348 gmock, 349 gtest, 350 libgpiod, 351 phosphorlogging, 352 sdbusplus, 353 sdeventplus, 354 ], 355 implicit_include_directories: true, 356 include_directories: '../' 357 ) 358 ) 359 360 test( 361 'test_hypervisor_state', 362 executable('test_hypervisor_state', 363 './test/hypervisor_state.cpp', 364 'hypervisor_state_manager.cpp', 365 dependencies: [ 366 gtest, 367 phosphorlogging, 368 sdbusplus, 369 sdeventplus, 370 ], 371 implicit_include_directories: true, 372 include_directories: '../' 373 ) 374 ) 375endif 376