xref: /openbmc/phosphor-pid-control/meson.build (revision 6df8bb5086b29c43217596b194dda7fbc4e3ec4a)
1project(
2    'phosphor-pid-control', 'cpp',
3    version : '1.0.0',
4    meson_version: '>=1.1.1',
5    default_options: [
6        'warning_level=3',
7        'werror=true',
8        'cpp_std=c++23',
9        'b_lto=true',
10    ]
11)
12
13cxx = meson.get_compiler('cpp')
14
15conf_data = configuration_data()
16
17bindir = get_option('prefix') / get_option('bindir')
18conf_data.set('BINDIR', bindir)
19conf_data.set('SYSTEMD_TARGET', get_option('systemd_target'))
20conf_data.set('STRICT_FAILSAFE_PWM', get_option('strict-failsafe-pwm'))
21conf_data.set('OFFLINE_FAILSAFE_PWM', get_option('offline-failsafe-pwm'))
22conf_data.set('UNC_FAILSAFE', get_option('unc-failsafe'))
23
24configure_file(output: 'config.h',
25    configuration: conf_data
26)
27
28if get_option('oe-sdk').allowed()
29    OECORE_TARGET_SYSROOT = run_command('sh', '-c', 'echo $OECORE_TARGET_SYSROOT').stdout().strip()
30    if OECORE_TARGET_SYSROOT == ''
31        error('OECORE_TARGET_SYSROOT must be set with enable oe-sdk')
32    endif
33    message('Enabling OE-SDK at OECORE_TARGET_SYSROOT: ' + OECORE_TARGET_SYSROOT)
34    rpath = ':'.join([OECORE_TARGET_SYSROOT + '/lib', OECORE_TARGET_SYSROOT + '/usr/lib'])
35    ld_so = run_command('sh', '-c', 'find ' + OECORE_TARGET_SYSROOT + '/lib/ld-*.so | sort -r -n | head -n1').stdout().strip()
36    dynamic_linker = ['-Wl,-dynamic-linker,' + ld_so]
37else
38    dynamic_linker = []
39endif
40
41systemd = dependency('systemd')
42systemd_system_unit_dir = systemd.get_variable(
43        'systemdsystemunitdir',
44        pkgconfig_define: ['prefix', get_option('prefix')])
45
46configure_file(input: 'phosphor-pid-control.service.in',
47               output: 'phosphor-pid-control.service',
48               configuration: conf_data,
49               install: true,
50               install_dir: systemd_system_unit_dir)
51
52nlohmann_json_dep = dependency('nlohmann_json', include_type: 'system')
53phosphor_dbus_interfaces_dep = dependency('phosphor-dbus-interfaces')
54phosphor_logging_dep = dependency('phosphor-logging')
55sdbusplus_dep = dependency('sdbusplus')
56libsystemd_dep = dependency('libsystemd')
57ipmid_dep = dependency('libipmid')
58
59
60if cxx.has_header('CLI/CLI.hpp')
61    CLI11_dep = declare_dependency()
62else
63    CLI11_dep = dependency('CLI11')
64endif
65
66deps = [
67    CLI11_dep,
68    ipmid_dep,
69    libsystemd_dep,
70    nlohmann_json_dep,
71    phosphor_dbus_interfaces_dep,
72    phosphor_logging_dep,
73    sdbusplus_dep,
74]
75
76root_inc = include_directories(
77    '.',
78    'buildjson',
79    'dbus',
80    'errors',
81    'experiments',
82    'ipmi',
83    'notimpl',
84    'pid',
85    'sensors',
86    'sysfs',
87)
88
89setsensor_sources = [
90    'setsensor.cpp'
91]
92
93libswampd_sources = [
94    'main.cpp',
95    'util.cpp',
96    'notimpl/readonly.cpp',
97    'notimpl/writeonly.cpp',
98    'dbus/dbusconfiguration.cpp',
99    'dbus/dbusutil.cpp',
100    'dbus/dbushelper.cpp',
101    'dbus/dbuspassiveredundancy.cpp',
102    'dbus/dbuspassive.cpp',
103    'dbus/dbusactiveread.cpp',
104    'dbus/dbuswrite.cpp',
105    'failsafeloggers/builder.cpp',
106    'failsafeloggers/failsafe_logger_utility.cpp',
107    'sysfs/sysfsread.cpp',
108    'sysfs/sysfswrite.cpp',
109    'sysfs/util.cpp',
110    'sensors/pluggable.cpp',
111    'sensors/host.cpp',
112    'sensors/builder.cpp',
113    'sensors/buildjson.cpp',
114    'sensors/manager.cpp',
115    'sensors/build_utils.cpp',
116    'pid/ec/pid.cpp',
117    'pid/ec/logging.cpp',
118    'pid/ec/stepwise.cpp',
119    'pid/fancontroller.cpp',
120    'pid/thermalcontroller.cpp',
121    'pid/pidcontroller.cpp',
122    'pid/stepwisecontroller.cpp',
123    'pid/builder.cpp',
124    'pid/buildjson.cpp',
125    'pid/zone.cpp',
126    'pid/util.cpp',
127    'pid/pidloop.cpp',
128    'pid/tuning.cpp',
129    'buildjson/buildjson.cpp',
130    'experiments/drive.cpp',
131]
132
133libmanualcmds_sources = [
134    'ipmi/main_ipmi.cpp',
135    'ipmi/manualcmds.cpp',
136    'ipmi/dbus_mode.cpp',
137]
138
139libmanualcmds = library(
140    'manualcmds',
141    libmanualcmds_sources,
142    implicit_include_directories: false,
143    dependencies: deps,
144    version: meson.project_version(),
145    override_options: ['b_lundef=false'],
146    install: true,
147    install_dir: get_option('libdir') / 'ipmid-providers')
148
149executable(
150    'swampd',
151    libswampd_sources,
152    implicit_include_directories: false,
153    include_directories: root_inc,
154    dependencies: deps,
155    install: true,
156    install_dir: get_option('bindir')
157)
158
159executable(
160    'setsensor',
161    setsensor_sources,
162    implicit_include_directories: true,
163    dependencies: deps,
164    install: true,
165    install_dir: get_option('bindir')
166)
167
168if not get_option('tests').disabled()
169    subdir('test')
170endif
171