xref: /openbmc/phosphor-objmgr/meson.build (revision cf72403d)
1project(
2    'phosphor-objmgr',
3    'c', 'cpp',
4    default_options: [
5        'buildtype=debugoptimized',
6        'cpp_std=c++23',
7        'warning_level=3',
8        'werror=true',
9    ],
10    license: 'Apache-2.0',
11    meson_version: '>=1.1.1',
12    version: '1.0',
13)
14
15cxx = meson.get_compiler('cpp')
16
17if cxx.has_header('CLI/CLI.hpp')
18    cli11_dep = declare_dependency()
19else
20    cli11_dep = dependency('cli11')
21endif
22phosphor_logging = dependency('phosphor-logging')
23phosphor_dbus_interfaces = dependency('phosphor-dbus-interfaces')
24sdbusplus = dependency('sdbusplus')
25boost = dependency('boost', version : '>=1.79.0', required: false, include_type: 'system')
26if not boost.found()
27  subproject('boost', required: false)
28  boost_inc = include_directories('subprojects/boost_1_79_0/', is_system:true)
29  boost  = declare_dependency(include_directories : boost_inc)
30  boost = boost.as_system('system')
31endif
32
33if get_option('buildtype').startswith('debug')
34    add_project_arguments('-DMAPPER_ENABLE_DEBUG', language : 'cpp')
35endif
36
37if get_option('tests').allowed()
38    gtest = dependency('gtest', main: true, disabler: true, required: false)
39    gmock = dependency('gmock', disabler: true, required: false)
40    if not gtest.found() or not gmock.found()
41        gtest_proj = import('cmake').subproject('googletest', required: false)
42        if gtest_proj.found()
43            gtest = declare_dependency(
44                dependencies: [
45                    dependency('threads'),
46                    gtest_proj.dependency('gtest'),
47                    gtest_proj.dependency('gtest_main'),
48                ]
49            )
50            gmock = gtest_proj.dependency('gmock')
51        else
52            assert(
53                not get_option('tests').allowed(),
54                'Googletest is required if tests are enabled'
55            )
56        endif
57    endif
58    subdir('src/test')
59    subdir('libmapper/test')
60endif
61
62install_headers('libmapper/mapper.h')
63
64libmapper = library(
65    'mapper',
66    'libmapper/mapper.c',
67    dependencies: [ dependency('libsystemd') ],
68    gnu_symbol_visibility: 'hidden',
69    version: meson.project_version(),
70    install: true)
71
72mapper_dep = declare_dependency(
73    link_with: libmapper,
74    include_directories: include_directories('libmapper'),
75    dependencies: [ dependency('libsystemd') ],
76)
77
78import('pkgconfig').generate(
79    name: 'libmapper',
80    description: 'OpenBMC service discovery utility library',
81    version: meson.project_version(),
82    libraries: libmapper)
83
84executable(
85    'mapper',
86    'libmapper/app.c',
87    link_with: libmapper,
88    dependencies: [ dependency('libsystemd') ],
89    install: true)
90
91mapperx = executable(
92    'mapperx',
93    [
94        'src/main.cpp',
95        'src/processing.cpp',
96        'src/associations.cpp',
97        'src/handler.cpp',
98    ],
99    dependencies: [
100        boost,
101        dependency('libsystemd'),
102        phosphor_dbus_interfaces,
103        phosphor_logging,
104        sdbusplus,
105        dependency('threads'),
106        dependency('tinyxml2', default_options: ['tests=false']),
107    ],
108    install: true,
109    install_dir: join_paths(
110        get_option('prefix'), get_option('libexecdir'), meson.project_name())
111)
112meson.override_find_program('mapperx', mapperx)
113
114systemd_system_unit_dir = dependency('systemd').get_variable(
115    'systemdsystemunitdir'
116)
117
118conf = configuration_data()
119conf.set('BINDIR', join_paths(get_option('prefix'), get_option('bindir')))
120conf.set('LIBEXECDIR', join_paths(
121    get_option('prefix'), get_option('libexecdir')))
122
123unit_files = [
124    'xyz.openbmc_project.ObjectMapper.service',
125    'mapper-subtree-remove@.service',
126    'mapper-wait@.service'
127]
128
129foreach u : unit_files
130    configure_file(
131        configuration: conf,
132        input : join_paths('src/systemd', u) + '.in',
133        install : true,
134        install_dir: systemd_system_unit_dir,
135        output : u
136    )
137endforeach
138
139dbus_system_bus_services_dir = dependency('dbus-1').get_variable(
140    'system_bus_services_dir',
141    pkgconfig_define: ['prefix', get_option('prefix')]
142)
143
144install_data(
145    'src/dbus/xyz.openbmc_project.ObjectMapper.service',
146    install_dir: dbus_system_bus_services_dir)
147
148install_data(
149    'src/dbus/xyz.openbmc_project.ObjectMapper.conf',
150    install_dir: get_option('datadir') / 'dbus-1' / 'system.d')
151
152if not get_option('unit-failure-monitor').disabled()
153    executable(
154        'phosphor-unit-failure-monitor',
155        [
156            'fail-monitor/main.cpp',
157            'fail-monitor/monitor.cpp',
158        ],
159        dependencies: [
160            cli11_dep,
161            phosphor_logging,
162        ],
163        install: true
164    )
165endif
166