xref: /openbmc/telemetry/meson.build (revision 2f9f9b875ad61666b1308a94fa700ae6e9d5ed1e)
1project(
2    'Telemetry',
3    'cpp',
4    meson_version: '>=0.55.0',
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/persistent_json_storage.cpp',
76        'src/report.cpp',
77        'src/report_factory.cpp',
78        'src/report_manager.cpp',
79        'src/sensor.cpp',
80        'src/sensor_cache.cpp',
81    ],
82    dependencies: [
83        boost,
84        nlohmann_json,
85        sdbusplus,
86        phosphor_logging,
87    ],
88    include_directories: 'src',
89    install: true,
90    install_dir: get_option('prefix') / get_option('bindir'),
91    pie: true,
92)
93
94configure_file(
95    input: 'xyz.openbmc_project.Telemetry.service.in',
96    output: 'xyz.openbmc_project.Telemetry.service',
97    configuration: {
98        'bindir': get_option('prefix') / get_option('bindir'),
99    },
100    install: true,
101    install_dir: systemd.get_pkgconfig_variable('systemdsystemunitdir'),
102)
103
104if get_option('buildtest')
105    subdir('tests')
106endif
107