1project( 2 'phosphor-inventory-manager', 'cpp', 3 version : '1.0.0', 4 meson_version: '>=1.1.1', 5 default_options: [ 6 'warning_level=3', 7 'werror=true', 8 'cpp_std=c++23', 9 'buildtype=debugoptimized', 10 ] 11) 12 13conf_data = configuration_data() 14conf_data.set_quoted('BUSNAME', 'xyz.openbmc_project.Inventory.Manager') 15conf_data.set_quoted('INVENTORY_ROOT', '/xyz/openbmc_project/inventory') 16conf_data.set_quoted('IFACE', 'xyz.openbmc_project.Inventory.Manager') 17conf_data.set_quoted('PIM_PERSIST_PATH', '/var/lib/phosphor-inventory-manager') 18conf_data.set_quoted('ASSOCIATIONS_FILE_PATH', '/usr/share/phosphor-inventory-manager/associations.json') 19conf_data.set('CLASS_VERSION', 2) 20conf_data.set('CREATE_ASSOCIATIONS', get_option('associations').allowed()) 21configure_file(output: 'config.h', 22 configuration: conf_data 23) 24 25cpp = meson.get_compiler('cpp') 26# Get Cereal dependency. 27cereal_dep = dependency('cereal', required: false) 28has_cereal = cpp.has_header_symbol( 29 'cereal/cereal.hpp', 30 'cereal::specialize', 31 dependencies: cereal_dep, 32 required: false) 33if not has_cereal 34 cereal_opts = import('cmake').subproject_options() 35 cereal_opts.add_cmake_defines({'BUILD_TESTS': 'OFF'}) 36 cereal_proj = import('cmake').subproject( 37 'cereal', 38 options: cereal_opts, 39 required: false) 40 assert(cereal_proj.found(), 'cereal is required') 41 cereal_dep = cereal_proj.dependency('cereal') 42endif 43 44sdbusplus_dep = dependency('sdbusplus') 45phosphor_dbus_interfaces_dep = dependency('phosphor-dbus-interfaces') 46phosphor_logging_dep = dependency('phosphor-logging') 47 48prog_python = find_program('python3', required: true) 49 50sources = [] 51deps = [] 52if get_option('associations').allowed() 53 sources += [ 54 'association_manager.cpp', 55 ] 56 deps += [ 57 dependency('nlohmann_json', include_type: 'system'), 58 ] 59endif 60 61ifacesdir = get_option('IFACES_PATH') 62if ifacesdir == '' 63 ifacesdir = phosphor_dbus_interfaces_dep.get_variable('yamldir') 64endif 65 66generated_cpp = custom_target( 67 'generated.cpp', 68 command : [ 69 prog_python, 70 meson.project_source_root() + '/pimgen.py', 71 '-i', ifacesdir, 72 '-d', get_option('YAML_PATH'), 73 '-o', meson.current_build_dir(), 74 '-b', conf_data.get_unquoted('BUSNAME'), 75 'generate-cpp' 76 ], 77 output : 'generated.cpp') 78 79gen_serialization_hpp = custom_target( 80 'gen_serialization.hpp', 81 command : [ 82 prog_python, 83 meson.project_source_root() + '/pimgen.py', 84 '-i', ifacesdir, 85 '-d', get_option('YAML_PATH'), 86 '-o', meson.current_build_dir(), 87 '-b', conf_data.get_unquoted('BUSNAME'), 88 'generate-serialization' 89 ], 90 output : 'gen_serialization.hpp') 91 92sources += [ 93 generated_cpp, 94 gen_serialization_hpp, 95 'app.cpp', 96 'errors.cpp', 97 'functor.cpp', 98 'manager.cpp', 99] 100 101deps += [ 102 cereal_dep, 103 phosphor_dbus_interfaces_dep, 104 phosphor_logging_dep, 105 sdbusplus_dep, 106] 107 108executable( 109 'phosphor-inventory', 110 sources, 111 implicit_include_directories: true, 112 dependencies: deps, 113 install: true, 114 install_dir: get_option('bindir'), 115) 116 117build_tests = get_option('tests') 118if not build_tests.disabled() 119 subdir('test') 120endif 121