xref: /openbmc/phosphor-bmc-code-mgmt/meson.build (revision c538727d70f3673771f18e559d7ecab203abf6d3)
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_dep = dependency('systemd')
63systemd_system_unit_dir = systemd_dep.get_variable(
64    'systemd_system_unit_dir',
65    pkgconfig_define: ['prefix', get_option('prefix')],
66)
67
68build_tests = get_option('tests')
69
70common_include = include_directories('.')
71
72subdir('bmc')
73
74
75all_options = {
76    'bios-software-update': {'dirs' : ['bios'], 'deps': ['libgpiod']},
77    'cpld-software-update': {'dirs' : ['common/i2c', 'cpld']},
78    'eepromdevice-software-update': {
79        'dirs': ['eeprom-device'],
80        'deps': ['libgpiod'],
81    },
82    'i2cvr-software-update': {'dirs' : ['common/i2c', 'i2c-vr']},
83    'tpm-software-update': {'dirs': ['tpm']},
84}
85
86optioned_subdirs = []
87optioned_deps = []
88common_build = false
89
90foreach option_name, option_settings : all_options
91    if get_option(option_name).allowed()
92        common_build = true
93
94        foreach dir : option_settings.get('dirs', [])
95            if not optioned_subdirs.contains(dir)
96                optioned_subdirs += dir
97            endif
98        endforeach
99
100        foreach dep : option_settings.get('deps', [])
101            if not optioned_deps.contains(dep)
102                optioned_deps += dep
103            endif
104        endforeach
105    endif
106endforeach
107
108if common_build or build_tests.allowed()
109    libpldm_dep = dependency('libpldm')
110    subdir('common')
111endif
112
113if optioned_deps.contains('libgpiod')
114    libgpiod_dep = dependency(
115        'libgpiodcxx',
116        default_options: ['bindings=cxx'],
117        version: '>=1.1.2',
118    )
119endif
120
121foreach dir : optioned_subdirs
122    subdir(dir)
123endforeach
124
125if build_tests.allowed()
126    subdir('test')
127endif
128