blob: a172113e62678d6a148eb3a56881c1699b864cc6 [file] [log] [blame]
Brad Bishopa0fa15b2020-11-06 14:42:24 -05001project(
2 'openpower-pnor-code-mgmt',
3 'cpp',
4 default_options: [
5 'warning_level=3',
6 'werror=true',
Patrick Williams90475e72023-07-12 11:15:12 -05007 'cpp_std=c++23',
Brad Bishopa0fa15b2020-11-06 14:42:24 -05008 'buildtype=debugoptimized',
9 'b_ndebug=if-release',
10 'b_lto=true',
11 ],
12 license: 'Apache-2.0',
13 version: '1.0',
Patrick Williams90475e72023-07-12 11:15:12 -050014 meson_version: '>=1.1.1',
Brad Bishopa0fa15b2020-11-06 14:42:24 -050015)
16
Patrick Williams9df0f3f2025-02-01 08:36:28 -050017if (get_option('buildtype') == 'minsize')
18 add_project_arguments('-DNDEBUG', language: 'cpp')
Brad Bishopa0fa15b2020-11-06 14:42:24 -050019endif
20
21# Disable lto when compiling with no optimization
Patrick Williams9df0f3f2025-02-01 08:36:28 -050022if (get_option('optimization') == '0')
Brad Bishopa0fa15b2020-11-06 14:42:24 -050023 add_project_arguments('-fno-lto', language: 'cpp')
24 message('Disabling lto because optimization is disabled')
25endif
26
Brad Bishop099543e2020-11-09 15:37:58 -050027cxx = meson.get_compiler('cpp')
28
Brad Bishopa0fa15b2020-11-06 14:42:24 -050029extra_sources = []
30extra_unit_files = []
31extra_scripts = []
32
Patrick Williams9c6fa9b2023-11-29 06:43:59 -060033build_vpnor = get_option('vpnor').allowed()
34build_pldm = get_option('pldm').allowed()
35build_verify_signature = get_option('verify-signature').allowed()
Brad Bishopa0fa15b2020-11-06 14:42:24 -050036
Brad Bishop099543e2020-11-09 15:37:58 -050037if not cxx.has_header('CLI/CLI.hpp')
Patrick Williams9df0f3f2025-02-01 08:36:28 -050038 error('Could not find CLI.hpp')
Brad Bishop099543e2020-11-09 15:37:58 -050039endif
40
Brad Bishopa0fa15b2020-11-06 14:42:24 -050041summary('building for device type', '@0@'.format(get_option('device-type')))
42summary('building vpnor', build_vpnor)
Adriana Kobylak6fc7fcd2021-10-18 18:47:55 +000043summary('building pldm', build_pldm)
Brad Bishopa0fa15b2020-11-06 14:42:24 -050044summary('building signature verify', build_verify_signature)
45
46subs = configuration_data()
47subs.set_quoted('ACTIVATION_FWD_ASSOCIATION', 'inventory')
48subs.set_quoted('ACTIVATION_REV_ASSOCIATION', 'activation')
49subs.set_quoted('ACTIVE_FWD_ASSOCIATION', 'active')
50subs.set('ACTIVE_PNOR_MAX_ALLOWED', 2)
51subs.set_quoted('ACTIVE_REV_ASSOCIATION', 'software_version')
Patrick Williams9df0f3f2025-02-01 08:36:28 -050052subs.set_quoted(
53 'ASSOCIATIONS_INTERFACE',
54 'xyz.openbmc_project.Association.Definitions',
55)
Brad Bishop7c053c32020-11-16 12:58:11 -050056subs.set_quoted('BUSNAME_UPDATER', 'org.open_power.Software.Host.Updater')
Brad Bishopa0fa15b2020-11-06 14:42:24 -050057subs.set_quoted('CHASSIS_STATE_OBJ', 'xyz.openbmc_project.State.Chassis')
Patrick Williams9df0f3f2025-02-01 08:36:28 -050058subs.set_quoted(
59 'CHASSIS_STATE_OFF',
60 'xyz.openbmc_project.State.Chassis.PowerState.Off',
61)
Brad Bishopa0fa15b2020-11-06 14:42:24 -050062subs.set_quoted('CHASSIS_STATE_PATH', '/xyz/openbmc_project/state/chassis0')
63subs.set_quoted('FILEPATH_IFACE', 'xyz.openbmc_project.Common.FilePath')
64subs.set_quoted('FUNCTIONAL_FWD_ASSOCIATION', 'functional')
65subs.set_quoted('FUNCTIONAL_REV_ASSOCIATION', 'software_version')
66subs.set_quoted('HASH_FILE_NAME', 'hashfunc')
Patrick Williams9df0f3f2025-02-01 08:36:28 -050067subs.set_quoted(
68 'HOST_INVENTORY_PATH',
69 '/xyz/openbmc_project/inventory/system/chassis',
70)
Brad Bishopa0fa15b2020-11-06 14:42:24 -050071subs.set_quoted('IMG_DIR', '/tmp/images')
72subs.set_quoted('MANIFEST_FILE', 'MANIFEST')
73subs.set_quoted('MAPPER_BUSNAME', 'xyz.openbmc_project.ObjectMapper')
74subs.set_quoted('MAPPER_INTERFACE', 'xyz.openbmc_project.ObjectMapper')
75subs.set_quoted('MAPPER_PATH', '/xyz/openbmc_project/object_mapper')
76subs.set_quoted('MEDIA_DIR', '/media/')
77subs.set('MMC_LAYOUT', get_option('device-type') == 'mmc')
78subs.set_quoted('PERSIST_DIR', '/var/lib/obmc/openpower-pnor-code-mgmt/')
79subs.set_quoted('PNOR_ACTIVE_PATH', '/var/lib/phosphor-software-manager/pnor/')
80subs.set_quoted('PNOR_MSL', get_option('msl'))
81subs.set_quoted('PNOR_PRSV', '/media/pnor-prsv')
Patrick Williams9df0f3f2025-02-01 08:36:28 -050082subs.set_quoted(
83 'PNOR_PRSV_ACTIVE_PATH',
84 '/var/lib/phosphor-software-manager/pnor/prsv',
85)
86subs.set_quoted(
87 'PNOR_RO_ACTIVE_PATH',
88 '/var/lib/phosphor-software-manager/pnor/ro',
89)
Brad Bishopa0fa15b2020-11-06 14:42:24 -050090subs.set_quoted('PNOR_RO_PREFIX', '/media/pnor-ro-')
Patrick Williams9df0f3f2025-02-01 08:36:28 -050091subs.set_quoted(
92 'PNOR_RW_ACTIVE_PATH',
93 '/var/lib/phosphor-software-manager/pnor/rw',
94)
Brad Bishopa0fa15b2020-11-06 14:42:24 -050095subs.set_quoted('PNOR_RW_PREFIX', '/media/pnor-rw-')
96subs.set_quoted('PNOR_SIGNED_IMAGE_CONF_PATH', '/etc/activationdata/')
97subs.set_quoted('PNOR_TOC_FILE', 'pnor.toc')
98subs.set_quoted('PNOR_VERSION_PARTITION', 'VERSION')
99subs.set_quoted('PUBLICKEY_FILE_NAME', 'publickey')
100subs.set_quoted('SIGNATURE_FILE_EXT', '.sig')
101subs.set_quoted('SOFTWARE_OBJPATH', '/xyz/openbmc_project/software')
102subs.set_quoted('SYSTEMD_BUSNAME', 'org.freedesktop.systemd1')
103subs.set_quoted('SYSTEMD_INTERFACE', 'org.freedesktop.systemd1.Manager')
104subs.set_quoted('SYSTEMD_PATH', '/org/freedesktop/systemd1')
105subs.set_quoted('SYSTEMD_PROPERTY_INTERFACE', 'org.freedesktop.DBus.Properties')
106subs.set('UBIFS_LAYOUT', get_option('device-type') == 'ubi')
107subs.set_quoted('UPDATEABLE_FWD_ASSOCIATION', 'updateable')
108subs.set_quoted('UPDATEABLE_REV_ASSOCIATION', 'software_version')
109subs.set_quoted('VERSION_IFACE', 'xyz.openbmc_project.Software.Version')
110subs.set('WANT_SIGNATURE_VERIFY', build_verify_signature)
Patrick Williams9df0f3f2025-02-01 08:36:28 -0500111configure_file(output: 'config.h', configuration: subs)
Brad Bishopa0fa15b2020-11-06 14:42:24 -0500112
113if get_option('device-type') == 'ubi'
114 extra_sources += [
115 'ubi/activation_ubi.cpp',
116 'ubi/item_updater_ubi.cpp',
117 'ubi/serialize.cpp',
118 'ubi/watch.cpp',
119 ]
Patrick Williams9df0f3f2025-02-01 08:36:28 -0500120 extra_scripts += ['ubi/obmc-flash-bios']
Brad Bishopa0fa15b2020-11-06 14:42:24 -0500121 extra_unit_files += [
122 'ubi/obmc-flash-bios-cleanup.service',
123 'ubi/obmc-flash-bios-ubiattach.service',
124 'ubi/obmc-flash-bios-ubimount@.service',
125 'ubi/obmc-flash-bios-ubipatch.service',
126 'ubi/obmc-flash-bios-ubiremount.service',
127 'ubi/obmc-flash-bios-ubiumount-ro@.service',
128 'ubi/obmc-flash-bios-ubiumount-rw@.service',
129 ]
130endif
131
132if get_option('device-type') == 'mmc'
Patrick Williams9df0f3f2025-02-01 08:36:28 -0500133 extra_sources += ['mmc/activation_mmc.cpp', 'mmc/item_updater_mmc.cpp']
134 extra_scripts += ['mmc/obmc-flash-bios', 'mmc/recover_pnor_files']
Brad Bishopa0fa15b2020-11-06 14:42:24 -0500135 extra_unit_files += [
136 'mmc/obmc-flash-bios-init.service',
137 'mmc/obmc-flash-bios-patch.service',
Isaac Kurth514a0942021-10-19 21:17:44 +0000138 'mmc/openpower-bios-factory-reset.service',
Deepa Karthikeyana96df3e2024-04-16 11:22:29 -0500139 'mmc/obmc-recover-pnor.service',
Adriana Kobylak6fc7fcd2021-10-18 18:47:55 +0000140 ]
141endif
142
143if build_pldm
144 extra_unit_files += [
Adriana Kobylakac5aec12021-06-22 16:22:17 +0000145 'mmc/openpower-process-host-firmware.service',
Adriana Kobylak53a27392021-06-14 17:42:40 +0000146 'mmc/openpower-update-bios-attr-table.service',
Brad Bishopa0fa15b2020-11-06 14:42:24 -0500147 ]
148endif
149
150if get_option('device-type') == 'static'
151 extra_sources += [
152 'static/item_updater_static.cpp',
153 'static/activation_static.cpp',
154 ]
Patrick Williams9df0f3f2025-02-01 08:36:28 -0500155 extra_unit_files += ['openpower-pnor-update@.service']
Brad Bishopa0fa15b2020-11-06 14:42:24 -0500156endif
157
158if build_verify_signature
Patrick Williams9df0f3f2025-02-01 08:36:28 -0500159 extra_sources += ['image_verify.cpp']
Brad Bishopa0fa15b2020-11-06 14:42:24 -0500160endif
161
162if build_vpnor
Patrick Williams9df0f3f2025-02-01 08:36:28 -0500163 extra_scripts += ['vpnor/obmc-vpnor-util']
Brad Bishopa0fa15b2020-11-06 14:42:24 -0500164 extra_unit_files += [
165 'vpnor/obmc-vpnor-check-clearvolatile@.service',
166 'vpnor/obmc-vpnor-enable-clearvolatile@.service',
167 'vpnor/obmc-vpnor-updatesymlinks.service',
168 ]
169endif
170
171executable(
172 'openpower-update-manager',
173 [
174 'activation.cpp',
Brad Bishop099543e2020-11-09 15:37:58 -0500175 'functions.cpp',
Brad Bishopa0fa15b2020-11-06 14:42:24 -0500176 'version.cpp',
177 'item_updater.cpp',
178 'item_updater_main.cpp',
179 'utils.cpp',
180 ] + extra_sources,
181 dependencies: [
182 dependency('libcrypto'),
183 dependency('libsystemd'),
184 dependency('openssl'),
185 dependency('phosphor-dbus-interfaces'),
186 dependency('phosphor-logging'),
187 dependency('sdbusplus'),
Brad Bishop0283f7c2020-11-09 10:09:26 -0500188 dependency('sdeventplus'),
Brad Bishopa0fa15b2020-11-06 14:42:24 -0500189 ],
Patrick Williams9df0f3f2025-02-01 08:36:28 -0500190 install: true,
Brad Bishopa0fa15b2020-11-06 14:42:24 -0500191)
192
193executable(
194 'openpower-pnor-msl',
Patrick Williams9df0f3f2025-02-01 08:36:28 -0500195 ['msl_verify.cpp', 'msl_verify_main.cpp'],
Brad Bishopa0fa15b2020-11-06 14:42:24 -0500196 dependencies: [
197 dependency('libsystemd'),
198 dependency('phosphor-dbus-interfaces'),
199 dependency('phosphor-logging'),
200 dependency('sdbusplus'),
201 ],
Patrick Williams9df0f3f2025-02-01 08:36:28 -0500202 install: true,
Brad Bishopa0fa15b2020-11-06 14:42:24 -0500203)
204
George Liu24bfa192023-08-16 14:32:24 +0800205fs = import('fs')
Brad Bishopa0fa15b2020-11-06 14:42:24 -0500206foreach s : extra_scripts
George Liu24bfa192023-08-16 14:32:24 +0800207 fs.copyfile(
208 s,
Brad Bishopa0fa15b2020-11-06 14:42:24 -0500209 install: true,
210 install_mode: 'rwxr-xr-x',
Patrick Williams9df0f3f2025-02-01 08:36:28 -0500211 install_dir: get_option('bindir'),
Brad Bishopa0fa15b2020-11-06 14:42:24 -0500212 )
213endforeach
214
215unit_files = [
216 'op-pnor-msl.service',
217 'org.open_power.Software.Host.Updater.service',
218] + extra_unit_files
219
Adriana Kobylak067876a2021-04-26 19:36:39 +0000220systemd_system_unit_dir = dependency('systemd').get_variable(
Patrick Williamsfe34ccd2023-04-12 08:01:04 -0500221 'systemdsystemunitdir',
Patrick Williams9df0f3f2025-02-01 08:36:28 -0500222 pkgconfig_define: ['prefix', get_option('prefix')],
223)
Brad Bishopa0fa15b2020-11-06 14:42:24 -0500224foreach u : unit_files
Patrick Williams9df0f3f2025-02-01 08:36:28 -0500225 fs.copyfile(u, install: true, install_dir: systemd_system_unit_dir)
Brad Bishopa0fa15b2020-11-06 14:42:24 -0500226endforeach
227
Adriana Kobylak067876a2021-04-26 19:36:39 +0000228dbus_system_bus_services_dir = dependency('dbus-1').get_variable(
Patrick Williamsfe34ccd2023-04-12 08:01:04 -0500229 'system_bus_services_dir',
Patrick Williams9df0f3f2025-02-01 08:36:28 -0500230 pkgconfig_define: ['prefix', get_option('prefix')],
231)
Brad Bishop671a7da2020-11-15 13:31:05 -0500232dbus_policy_dir = run_command(
233 'realpath',
Patrick Williams9df0f3f2025-02-01 08:36:28 -0500234 join_paths(dbus_system_bus_services_dir, '..', 'system.d'),
235).stdout().strip()
Brad Bishop671a7da2020-11-15 13:31:05 -0500236
237install_data(
238 'dbus/org.open_power.Software.Host.Updater.conf',
Patrick Williams9df0f3f2025-02-01 08:36:28 -0500239 install_dir: dbus_policy_dir,
240)
Brad Bishop671a7da2020-11-15 13:31:05 -0500241
Patrick Williamsd1ff1a42025-01-30 17:47:20 -0500242if get_option('tests').allowed()
Adriana Kobylak588a9fa2021-06-22 14:28:45 +0000243 oe_sdk = get_option('oe-sdk')
Patrick Williams9c6fa9b2023-11-29 06:43:59 -0600244 if oe_sdk.allowed()
Adriana Kobylak588a9fa2021-06-22 14:28:45 +0000245 # Setup OE SYSROOT
Patrick Williams9df0f3f2025-02-01 08:36:28 -0500246 OECORE_TARGET_SYSROOT = run_command(
247 'sh',
248 '-c',
249 'echo $OECORE_TARGET_SYSROOT',
250 ).stdout().strip()
Adriana Kobylak588a9fa2021-06-22 14:28:45 +0000251 if OECORE_TARGET_SYSROOT == ''
Patrick Williams9df0f3f2025-02-01 08:36:28 -0500252 error(
253 'Unable to get $OECORE_TARGET_SYSROOT, check your environment.',
254 )
Adriana Kobylak588a9fa2021-06-22 14:28:45 +0000255 endif
256 message('OE_SYSROOT: ' + OECORE_TARGET_SYSROOT)
Patrick Williams9df0f3f2025-02-01 08:36:28 -0500257 rpath = ':'.join(
258 [OECORE_TARGET_SYSROOT + '/lib', OECORE_TARGET_SYSROOT + '/usr/lib'],
259 )
260 ld_so = run_command(
261 'sh',
262 '-c',
263 'find ' + OECORE_TARGET_SYSROOT + '/lib/ld-*.so | sort -r -n | head -n1',
264 ).stdout().strip()
Adriana Kobylak588a9fa2021-06-22 14:28:45 +0000265 dynamic_linker = ['-Wl,-dynamic-linker,' + ld_so]
266 else
267 dynamic_linker = []
268 endif
269
Brad Bishopa0fa15b2020-11-06 14:42:24 -0500270 test(
271 'utest',
272 executable(
273 'utest',
274 'activation.cpp',
275 'version.cpp',
276 'item_updater.cpp',
277 'image_verify.cpp',
278 'utils.cpp',
279 'msl_verify.cpp',
280 'ubi/activation_ubi.cpp',
281 'ubi/item_updater_ubi.cpp',
282 'ubi/serialize.cpp',
283 'ubi/watch.cpp',
284 'static/item_updater_static.cpp',
285 'static/activation_static.cpp',
286 'test/test_signature.cpp',
287 'test/test_version.cpp',
288 'test/test_item_updater_static.cpp',
289 'msl_verify.cpp',
290 dependencies: [
291 dependency('libcrypto'),
292 dependency('gtest', main: true),
293 dependency('openssl'),
294 dependency('phosphor-logging'),
295 dependency('phosphor-dbus-interfaces'),
296 ],
297 implicit_include_directories: false,
298 include_directories: '.',
Patrick Williams9df0f3f2025-02-01 08:36:28 -0500299 ),
Brad Bishopa0fa15b2020-11-06 14:42:24 -0500300 )
Brad Bishop099543e2020-11-09 15:37:58 -0500301 test(
302 'test_functions',
303 executable(
304 'test_functions',
305 'test/test_functions.cpp',
306 'functions.cpp',
307 dependencies: [
308 dependency('gtest', main: true),
Adriana Kobylak2b78eb02022-04-06 19:38:47 +0000309 dependency('phosphor-dbus-interfaces'),
Brad Bishop099543e2020-11-09 15:37:58 -0500310 dependency('sdbusplus'),
311 dependency('sdeventplus'),
312 ],
Patrick Williams9df0f3f2025-02-01 08:36:28 -0500313 ),
Brad Bishop099543e2020-11-09 15:37:58 -0500314 )
Brad Bishopa0fa15b2020-11-06 14:42:24 -0500315endif