1project(
2    'phosphor-state-manager',
3    'cpp',
4    default_options: [
5        'warning_level=3',
6        'werror=true',
7        'cpp_std=c++20'
8    ],
9    meson_version: '>= 0.57.0',
10    license: 'Apache-2.0',
11    version: '0.1',
12)
13
14build_host_gpios = get_option('host-gpios')
15
16conf = configuration_data()
17conf.set_quoted(
18    'HOST_BUSNAME', get_option('host-busname'))
19conf.set_quoted(
20    'HOST_OBJPATH', get_option('host-objpath'))
21conf.set_quoted(
22    'HYPERVISOR_BUSNAME', get_option('hypervisor-busname'))
23conf.set_quoted(
24    'HYPERVISOR_OBJPATH', get_option('hypervisor-objpath'))
25conf.set_quoted(
26    'CHASSIS_BUSNAME', get_option('chassis-busname'))
27conf.set_quoted(
28    'CHASSIS_OBJPATH', get_option('chassis-objpath'))
29conf.set_quoted(
30    'BMC_BUSNAME', get_option('bmc-busname'))
31conf.set_quoted(
32    'BMC_OBJPATH', get_option('bmc-objpath'))
33conf.set_quoted(
34    'HOST_STATE_PERSIST_PATH', get_option('host-state-persist-path'))
35conf.set_quoted(
36    'POH_COUNTER_PERSIST_PATH', get_option('poh-counter-persist-path'))
37conf.set_quoted(
38    'CHASSIS_STATE_CHANGE_PERSIST_PATH', get_option('chassis-state-change-persist-path'))
39conf.set_quoted(
40    'SCHEDULED_HOST_TRANSITION_PERSIST_PATH', get_option('scheduled-host-transition-persist-path'))
41conf.set_quoted(
42    'SCHEDULED_HOST_TRANSITION_BUSNAME', get_option('scheduled-host-transition-busname'))
43conf.set(
44    'BOOT_COUNT_MAX_ALLOWED', get_option('boot-count-max-allowed'))
45conf.set(
46    'CLASS_VERSION', get_option('class-version'))
47if build_host_gpios.enabled()
48    conf.set_quoted(
49        'HOST_GPIOS_BUSNAME', get_option('host-gpios-busname'))
50    conf.set_quoted(
51        'HOST_GPIOS_OBJPATH', get_option('host-gpios-objpath'))
52endif
53
54# globals shared across applications
55conf.set_quoted(
56    'HOST_RUNNING_FILE', '/run/openbmc/host@%d-on')
57
58conf.set_quoted(
59    'CHASSIS_ON_FILE', '/run/openbmc/chassis@%d-on')
60
61configure_file(output: 'config.h', configuration: conf)
62
63if(get_option('warm-reboot').enabled())
64    add_project_arguments('-DENABLE_WARM_REBOOT',language:'cpp')
65endif
66
67sdbusplus = dependency('sdbusplus')
68sdeventplus = dependency('sdeventplus')
69phosphorlogging = dependency('phosphor-logging')
70phosphordbusinterfaces = dependency('phosphor-dbus-interfaces')
71libgpiod = dependency('libgpiod', version : '>=1.4.1')
72
73cppfs = meson.get_compiler('cpp').find_library('stdc++fs')
74
75executable('phosphor-host-state-manager',
76            'host_state_manager.cpp',
77            'host_state_manager_main.cpp',
78            'settings.cpp',
79            'host_check.cpp',
80            dependencies: [
81            sdbusplus, sdeventplus, phosphorlogging,
82            phosphordbusinterfaces, cppfs
83            ],
84    implicit_include_directories: true,
85    install: true
86)
87
88executable('phosphor-hypervisor-state-manager',
89            'hypervisor_state_manager.cpp',
90            'hypervisor_state_manager_main.cpp',
91            'settings.cpp',
92            dependencies: [
93            sdbusplus, sdeventplus, phosphorlogging,
94            phosphordbusinterfaces, cppfs
95            ],
96    implicit_include_directories: true,
97    install: true
98)
99
100executable('phosphor-chassis-state-manager',
101            'chassis_state_manager.cpp',
102            'chassis_state_manager_main.cpp',
103            'utils.cpp',
104            dependencies: [
105            sdbusplus, sdeventplus, phosphorlogging,
106            phosphordbusinterfaces, cppfs, libgpiod
107            ],
108    implicit_include_directories: true,
109    install: true
110)
111
112executable('phosphor-chassis-check-power-status',
113            'chassis_check_power_status.cpp',
114            'utils.cpp',
115            dependencies: [
116            sdbusplus, phosphorlogging,
117            phosphordbusinterfaces, cppfs, libgpiod
118            ],
119    implicit_include_directories: true,
120    install: true
121)
122
123executable('phosphor-bmc-state-manager',
124            'bmc_state_manager.cpp',
125            'bmc_state_manager_main.cpp',
126            'utils.cpp',
127            dependencies: [
128            sdbusplus, sdeventplus, phosphorlogging,
129            phosphordbusinterfaces, cppfs, libgpiod
130            ],
131    implicit_include_directories: true,
132    install: true
133)
134
135executable('phosphor-discover-system-state',
136            'discover_system_state.cpp',
137            'settings.cpp',
138            'utils.cpp',
139            dependencies: [
140            sdbusplus, phosphorlogging, libgpiod
141            ],
142    implicit_include_directories: true,
143    install: true
144)
145
146executable('phosphor-systemd-target-monitor',
147            'systemd_service_parser.cpp',
148            'systemd_target_monitor.cpp',
149            'systemd_target_parser.cpp',
150            'systemd_target_signal.cpp',
151            dependencies: [
152            sdbusplus, sdeventplus, phosphorlogging
153            ],
154    implicit_include_directories: true,
155    install: true
156)
157
158executable('phosphor-scheduled-host-transition',
159            'scheduled_host_transition_main.cpp',
160            'scheduled_host_transition.cpp',
161            'utils.cpp',
162            dependencies: [
163            sdbusplus, sdeventplus, phosphorlogging, libgpiod
164            ],
165    implicit_include_directories: true,
166    install: true
167)
168
169executable('phosphor-host-reset-recovery',
170            'host_reset_recovery.cpp',
171            dependencies: [
172            sdbusplus, phosphorlogging
173            ],
174    implicit_include_directories: true,
175    install: true
176)
177
178install_data('obmcutil',
179        install_mode: 'rwxr-xr-x',
180        install_dir: get_option('bindir')
181)
182
183systemd = dependency('systemd')
184systemd_system_unit_dir = systemd.get_variable(
185    pkgconfig : 'systemdsystemunitdir')
186subdir('service_files')
187subdir('target_files')
188
189if build_host_gpios.enabled()
190    subdir('host_condition_gpio')
191endif
192
193datadir = join_paths(
194    get_option('sysconfdir'),
195    'phosphor-systemd-target-monitor'
196)
197subdir('data')
198
199build_tests = get_option('tests')
200
201# If test coverage of source files within the root directory are wanted,
202# need to define and build the tests from here
203if not build_tests.disabled()
204gtest = dependency('gtest', main: true, disabler: true, required: build_tests)
205gmock = dependency('gmock', disabler: true, required: build_tests)
206  test(
207      'test_systemd_parser',
208      executable('test_systemd_parser',
209          './test/systemd_parser.cpp',
210          'systemd_target_parser.cpp',
211          dependencies: [
212              gtest,
213          ],
214          implicit_include_directories: true,
215          include_directories: '../'
216      )
217  )
218
219  test(
220      'test_systemd_signal',
221      executable('test_systemd_signal',
222          './test/systemd_signal.cpp',
223          'systemd_target_signal.cpp',
224          dependencies: [
225              gtest, sdbusplus, sdeventplus, phosphorlogging,
226          ],
227          implicit_include_directories: true,
228          include_directories: '../'
229      )
230  )
231
232  test(
233      'test_scheduled_host_transition',
234      executable('test_scheduled_host_transition',
235          './test/test_scheduled_host_transition.cpp',
236          'scheduled_host_transition.cpp',
237          'utils.cpp',
238          dependencies: [
239              gtest, gmock, sdbusplus, sdeventplus, phosphorlogging, libgpiod
240          ],
241          implicit_include_directories: true,
242          include_directories: '../'
243      )
244  )
245
246  test(
247      'test_hypervisor_state',
248      executable('test_hypervisor_state',
249          './test/hypervisor_state.cpp',
250          'hypervisor_state_manager.cpp',
251          dependencies: [
252              gtest, sdbusplus, sdeventplus, phosphorlogging,
253          ],
254          implicit_include_directories: true,
255          include_directories: '../'
256      )
257  )
258endif
259