1project( 2 'Telemetry', 3 'cpp', 4 meson_version: '>=0.54.3', 5 default_options: [ 6 'buildtype=debugoptimized', 7 'cpp_std=c++17', 8 # TODO: Without RTTI telemetry does not build using Boost 1.74.0 9 # https://github.com/chriskohlhoff/asio/issues/533 10 #'cpp_rtti=false', 11 'warning_level=3', 12 'werror=true', 13 'b_lto=true', 14 ], 15 license: 'Apache-2.0', 16) 17 18cpp = meson.get_compiler('cpp') 19add_project_arguments( 20 cpp.get_supported_arguments([ 21 '-DBOOST_ASIO_DISABLE_THREADS', 22 '-DBOOST_ALL_NO_LIB', 23 '-DBOOST_SYSTEM_NO_DEPRECATED', 24 '-DBOOST_ASIO_NO_DEPRECATED', 25 '-DBOOST_NO_RTTI', 26 '-DBOOST_NO_TYPEID', 27 '-Wno-unused-parameter', 28 ]), 29 language: 'cpp' 30) 31 32boost = dependency( 33 'boost', 34 version: '>=1.74.0', 35 required: false, 36 modules: ['coroutine']) 37 38if not boost.found() 39 subproject('boost', required: false) 40 boost = declare_dependency(include_directories: 'subprojects/boost_1_74_0') 41endif 42 43phosphor_logging = dependency('phosphor-logging', required: false) 44if not phosphor_logging.found() 45 subproject('phosphor-logging', required: false) 46 phosphor_logging = declare_dependency( 47 include_directories: 'subprojects/phosphor-logging' 48 ) 49endif 50 51sdbusplus = dependency('sdbusplus',required : false) 52if not sdbusplus.found() 53 sdbusplus_proj = subproject('sdbusplus', required: true) 54 sdbusplus = sdbusplus_proj.get_variable('sdbusplus_dep') 55endif 56 57systemd = dependency('systemd') 58 59if cpp.has_header('nlohmann/json.hpp') 60 nlohmann_json = declare_dependency() 61else 62 subproject('nlohmann', required: false) 63 nlohmann_json = declare_dependency( 64 include_directories: [ 65 'subprojects/nlohmann/single_include', 66 'subprojects/nlohmann/single_include/nlohmann', 67 ] 68 ) 69endif 70 71executable( 72 'telemetry', 73 [ 74 'src/main.cpp', 75 'src/metric.cpp', 76 'src/persistent_json_storage.cpp', 77 'src/report.cpp', 78 'src/report_factory.cpp', 79 'src/report_manager.cpp', 80 'src/sensor.cpp', 81 'src/sensor_cache.cpp', 82 ], 83 dependencies: [ 84 boost, 85 nlohmann_json, 86 sdbusplus, 87 phosphor_logging, 88 ], 89 include_directories: 'src', 90 install: true, 91 install_dir: get_option('prefix') / get_option('bindir'), 92 pie: true, 93) 94 95configure_file( 96 input: 'xyz.openbmc_project.Telemetry.service.in', 97 output: 'xyz.openbmc_project.Telemetry.service', 98 configuration: { 99 'bindir': get_option('prefix') / get_option('bindir'), 100 }, 101 install: true, 102 install_dir: systemd.get_pkgconfig_variable('systemdsystemunitdir'), 103) 104 105if get_option('buildtest') 106 subdir('tests') 107endif 108