xref: /openbmc/phosphor-bmc-code-mgmt/meson.build (revision 5afc9aa0e413308908c02489fdb767114bb1694d)
1project(
2    'phosphor-bmc-code-mgmt',
3    'cpp',
4    default_options: [
5        'buildtype=debugoptimized',
6        'cpp_std=c++23',
7        'warning_level=3',
8        'werror=true',
9    ],
10    meson_version: '>=1.1.1',
11    license: 'Apache-2.0',
12    version: '1.0',
13)
14
15add_project_arguments(
16    '-DBOOST_SYSTEM_NO_DEPRECATED',
17    '-DBOOST_ERROR_CODE_HEADER_ONLY',
18    '-DBOOST_NO_RTTI',
19    '-DBOOST_NO_TYPEID',
20    '-DBOOST_ALL_NO_LIB',
21    '-DBOOST_ASIO_DISABLE_THREADS',
22    '-DBOOST_ASIO_NO_DEPRECATED',
23    language: 'cpp',
24)
25
26cpp = meson.get_compiler('cpp')
27
28boost_dep = dependency('boost')
29
30sdbusplus_dep = dependency('sdbusplus')
31sdbusplusplus_prog = find_program('sdbus++', native: true)
32sdbuspp_gen_meson_prog = find_program('sdbus++-gen-meson', native: true)
33
34pdi_dep = dependency('phosphor-dbus-interfaces')
35phosphor_logging_dep = dependency('phosphor-logging')
36
37cereal_dep = dependency('cereal', required: false)
38has_cereal = cpp.has_header_symbol(
39    'cereal/cereal.hpp',
40    'cereal::specialize',
41    dependencies: cereal_dep,
42    required: false,
43)
44if not has_cereal
45    cereal_opts = import('cmake').subproject_options()
46    cereal_opts.add_cmake_defines(
47        {'BUILD_TESTS': 'OFF', 'SKIP_PERFORMANCE_COMPARISON': 'ON'},
48    )
49    cereal_proj = import('cmake').subproject(
50        'cereal',
51        options: cereal_opts,
52        required: false,
53    )
54    assert(cereal_proj.found(), 'cereal is required')
55    cereal_dep = cereal_proj.dependency('cereal')
56endif
57
58deps = [cereal_dep, pdi_dep, phosphor_logging_dep, sdbusplus_dep]
59
60ssl_dep = dependency('openssl')
61
62systemd = dependency('systemd')
63systemd_system_unit_dir = systemd.get_variable(
64    'systemd_system_unit_dir',
65    pkgconfig_define: ['prefix', get_option('prefix')],
66)
67
68build_tests = get_option('tests')
69
70subdir('bmc')
71
72common_include = include_directories('.')
73
74common_build = build_tests.allowed() or get_option('bios-software-update').allowed() or get_option(
75    'cpld-software-update',
76).allowed() or get_option(
77    'eepromdevice-software-update',
78).allowed() or get_option(
79    'i2cvr-software-update',
80).allowed()
81
82if common_build
83    libpldm_dep = dependency('libpldm')
84    subdir('common')
85endif
86
87gpiod_needed = get_option('bios-software-update').allowed() or get_option(
88    'eepromdevice-software-update',
89).allowed()
90
91if gpiod_needed
92    libgpiod_dep = dependency(
93        'libgpiodcxx',
94        default_options: ['bindings=cxx'],
95        version: '>=1.1.2',
96    )
97endif
98
99if get_option('bios-software-update').allowed()
100    subdir('bios')
101endif
102
103if get_option('i2cvr-software-update').allowed() or get_option(
104    'cpld-software-update',
105).allowed()
106    subdir('common/i2c/')
107endif
108
109if get_option('i2cvr-software-update').allowed()
110    subdir('i2c-vr')
111endif
112
113if get_option('eepromdevice-software-update').allowed()
114    subdir('eeprom-device')
115endif
116
117if get_option('cpld-software-update').allowed()
118    subdir('cpld')
119endif
120
121if build_tests.allowed()
122    subdir('test')
123endif
124