blob: c8590f737e500026954998c5aa269f83bbd832e3 [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
Brad Bishopa0fa15b2020-11-06 14:42:24 -050017if(get_option('buildtype') == 'minsize')
18 add_project_arguments('-DNDEBUG', language : 'cpp')
19endif
20
21# Disable lto when compiling with no optimization
22if(get_option('optimization') == '0')
23 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')
38 error('Could not find CLI.hpp')
39endif
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')
52subs.set_quoted('ASSOCIATIONS_INTERFACE', 'xyz.openbmc_project.Association.Definitions')
Brad Bishop7c053c32020-11-16 12:58:11 -050053subs.set_quoted('BUSNAME_UPDATER', 'org.open_power.Software.Host.Updater')
Brad Bishopa0fa15b2020-11-06 14:42:24 -050054subs.set_quoted('CHASSIS_STATE_OBJ', 'xyz.openbmc_project.State.Chassis')
55subs.set_quoted('CHASSIS_STATE_OFF', 'xyz.openbmc_project.State.Chassis.PowerState.Off')
56subs.set_quoted('CHASSIS_STATE_PATH', '/xyz/openbmc_project/state/chassis0')
57subs.set_quoted('FILEPATH_IFACE', 'xyz.openbmc_project.Common.FilePath')
58subs.set_quoted('FUNCTIONAL_FWD_ASSOCIATION', 'functional')
59subs.set_quoted('FUNCTIONAL_REV_ASSOCIATION', 'software_version')
60subs.set_quoted('HASH_FILE_NAME', 'hashfunc')
61subs.set_quoted('HOST_INVENTORY_PATH', '/xyz/openbmc_project/inventory/system/chassis')
62subs.set_quoted('IMG_DIR', '/tmp/images')
63subs.set_quoted('MANIFEST_FILE', 'MANIFEST')
64subs.set_quoted('MAPPER_BUSNAME', 'xyz.openbmc_project.ObjectMapper')
65subs.set_quoted('MAPPER_INTERFACE', 'xyz.openbmc_project.ObjectMapper')
66subs.set_quoted('MAPPER_PATH', '/xyz/openbmc_project/object_mapper')
67subs.set_quoted('MEDIA_DIR', '/media/')
68subs.set('MMC_LAYOUT', get_option('device-type') == 'mmc')
69subs.set_quoted('PERSIST_DIR', '/var/lib/obmc/openpower-pnor-code-mgmt/')
70subs.set_quoted('PNOR_ACTIVE_PATH', '/var/lib/phosphor-software-manager/pnor/')
71subs.set_quoted('PNOR_MSL', get_option('msl'))
72subs.set_quoted('PNOR_PRSV', '/media/pnor-prsv')
73subs.set_quoted('PNOR_PRSV_ACTIVE_PATH', '/var/lib/phosphor-software-manager/pnor/prsv')
74subs.set_quoted('PNOR_RO_ACTIVE_PATH', '/var/lib/phosphor-software-manager/pnor/ro')
75subs.set_quoted('PNOR_RO_PREFIX', '/media/pnor-ro-')
76subs.set_quoted('PNOR_RW_ACTIVE_PATH', '/var/lib/phosphor-software-manager/pnor/rw')
77subs.set_quoted('PNOR_RW_PREFIX', '/media/pnor-rw-')
78subs.set_quoted('PNOR_SIGNED_IMAGE_CONF_PATH', '/etc/activationdata/')
79subs.set_quoted('PNOR_TOC_FILE', 'pnor.toc')
80subs.set_quoted('PNOR_VERSION_PARTITION', 'VERSION')
81subs.set_quoted('PUBLICKEY_FILE_NAME', 'publickey')
82subs.set_quoted('SIGNATURE_FILE_EXT', '.sig')
83subs.set_quoted('SOFTWARE_OBJPATH', '/xyz/openbmc_project/software')
84subs.set_quoted('SYSTEMD_BUSNAME', 'org.freedesktop.systemd1')
85subs.set_quoted('SYSTEMD_INTERFACE', 'org.freedesktop.systemd1.Manager')
86subs.set_quoted('SYSTEMD_PATH', '/org/freedesktop/systemd1')
87subs.set_quoted('SYSTEMD_PROPERTY_INTERFACE', 'org.freedesktop.DBus.Properties')
88subs.set('UBIFS_LAYOUT', get_option('device-type') == 'ubi')
89subs.set_quoted('UPDATEABLE_FWD_ASSOCIATION', 'updateable')
90subs.set_quoted('UPDATEABLE_REV_ASSOCIATION', 'software_version')
91subs.set_quoted('VERSION_IFACE', 'xyz.openbmc_project.Software.Version')
92subs.set('WANT_SIGNATURE_VERIFY', build_verify_signature)
93configure_file(
94 output: 'config.h',
95 configuration: subs)
96
97if get_option('device-type') == 'ubi'
98 extra_sources += [
99 'ubi/activation_ubi.cpp',
100 'ubi/item_updater_ubi.cpp',
101 'ubi/serialize.cpp',
102 'ubi/watch.cpp',
103 ]
104 extra_scripts += [
105 'ubi/obmc-flash-bios',
106 ]
107 extra_unit_files += [
108 'ubi/obmc-flash-bios-cleanup.service',
109 'ubi/obmc-flash-bios-ubiattach.service',
110 'ubi/obmc-flash-bios-ubimount@.service',
111 'ubi/obmc-flash-bios-ubipatch.service',
112 'ubi/obmc-flash-bios-ubiremount.service',
113 'ubi/obmc-flash-bios-ubiumount-ro@.service',
114 'ubi/obmc-flash-bios-ubiumount-rw@.service',
115 ]
116endif
117
118if get_option('device-type') == 'mmc'
119 extra_sources += [
120 'mmc/activation_mmc.cpp',
121 'mmc/item_updater_mmc.cpp',
122 ]
123 extra_scripts += [
124 'mmc/obmc-flash-bios',
125 ]
126 extra_unit_files += [
127 'mmc/obmc-flash-bios-init.service',
128 'mmc/obmc-flash-bios-patch.service',
Isaac Kurth514a0942021-10-19 21:17:44 +0000129 'mmc/openpower-bios-factory-reset.service',
Adriana Kobylak6fc7fcd2021-10-18 18:47:55 +0000130 ]
131endif
132
133if build_pldm
134 extra_unit_files += [
Adriana Kobylakac5aec12021-06-22 16:22:17 +0000135 'mmc/openpower-process-host-firmware.service',
Adriana Kobylak53a27392021-06-14 17:42:40 +0000136 'mmc/openpower-update-bios-attr-table.service',
Brad Bishopa0fa15b2020-11-06 14:42:24 -0500137 ]
138endif
139
140if get_option('device-type') == 'static'
141 extra_sources += [
142 'static/item_updater_static.cpp',
143 'static/activation_static.cpp',
144 ]
145 extra_unit_files += [
146 'openpower-pnor-update@.service',
147 ]
148endif
149
150if build_verify_signature
151 extra_sources += [
152 'image_verify.cpp'
153 ]
154endif
155
156if build_vpnor
157 extra_scripts += [
158 'vpnor/obmc-vpnor-util',
159 ]
160 extra_unit_files += [
161 'vpnor/obmc-vpnor-check-clearvolatile@.service',
162 'vpnor/obmc-vpnor-enable-clearvolatile@.service',
163 'vpnor/obmc-vpnor-updatesymlinks.service',
164 ]
165endif
166
167executable(
168 'openpower-update-manager',
169 [
170 'activation.cpp',
Brad Bishop099543e2020-11-09 15:37:58 -0500171 'functions.cpp',
Brad Bishopa0fa15b2020-11-06 14:42:24 -0500172 'version.cpp',
173 'item_updater.cpp',
174 'item_updater_main.cpp',
175 'utils.cpp',
176 ] + extra_sources,
177 dependencies: [
178 dependency('libcrypto'),
179 dependency('libsystemd'),
180 dependency('openssl'),
181 dependency('phosphor-dbus-interfaces'),
182 dependency('phosphor-logging'),
183 dependency('sdbusplus'),
Brad Bishop0283f7c2020-11-09 10:09:26 -0500184 dependency('sdeventplus'),
Brad Bishopa0fa15b2020-11-06 14:42:24 -0500185 ],
186 install: true
187)
188
189executable(
190 'openpower-pnor-msl',
191 [
192 'msl_verify.cpp',
193 'msl_verify_main.cpp',
194 ],
195 dependencies: [
196 dependency('libsystemd'),
197 dependency('phosphor-dbus-interfaces'),
198 dependency('phosphor-logging'),
199 dependency('sdbusplus'),
200 ],
201 install: true
202)
203
George Liu24bfa192023-08-16 14:32:24 +0800204fs = import('fs')
Brad Bishopa0fa15b2020-11-06 14:42:24 -0500205foreach s : extra_scripts
George Liu24bfa192023-08-16 14:32:24 +0800206 fs.copyfile(
207 s,
Brad Bishopa0fa15b2020-11-06 14:42:24 -0500208 install: true,
209 install_mode: 'rwxr-xr-x',
George Liu24bfa192023-08-16 14:32:24 +0800210 install_dir: get_option('bindir')
Brad Bishopa0fa15b2020-11-06 14:42:24 -0500211 )
212endforeach
213
214unit_files = [
215 'op-pnor-msl.service',
216 'org.open_power.Software.Host.Updater.service',
217] + extra_unit_files
218
Adriana Kobylak067876a2021-04-26 19:36:39 +0000219systemd_system_unit_dir = dependency('systemd').get_variable(
Patrick Williamsfe34ccd2023-04-12 08:01:04 -0500220 'systemdsystemunitdir',
Adriana Kobylak067876a2021-04-26 19:36:39 +0000221 pkgconfig_define: ['prefix', get_option('prefix')])
Brad Bishopa0fa15b2020-11-06 14:42:24 -0500222foreach u : unit_files
George Liu24bfa192023-08-16 14:32:24 +0800223 fs.copyfile(
224 u,
Brad Bishopa0fa15b2020-11-06 14:42:24 -0500225 install: true,
George Liu24bfa192023-08-16 14:32:24 +0800226 install_dir: systemd_system_unit_dir
Brad Bishopa0fa15b2020-11-06 14:42:24 -0500227 )
228endforeach
229
Adriana Kobylak067876a2021-04-26 19:36:39 +0000230dbus_system_bus_services_dir = dependency('dbus-1').get_variable(
Patrick Williamsfe34ccd2023-04-12 08:01:04 -0500231 'system_bus_services_dir',
Adriana Kobylak067876a2021-04-26 19:36:39 +0000232 pkgconfig_define: ['prefix', get_option('prefix')])
Brad Bishop671a7da2020-11-15 13:31:05 -0500233dbus_policy_dir = run_command(
234 'realpath',
235 join_paths(dbus_system_bus_services_dir, '..', 'system.d')).stdout().strip()
236
237install_data(
238 'dbus/org.open_power.Software.Host.Updater.conf',
239 install_dir: dbus_policy_dir)
240
Brad Bishopa0fa15b2020-11-06 14:42:24 -0500241if not get_option('tests').disabled()
Adriana Kobylak588a9fa2021-06-22 14:28:45 +0000242 oe_sdk = get_option('oe-sdk')
Patrick Williams9c6fa9b2023-11-29 06:43:59 -0600243 if oe_sdk.allowed()
Adriana Kobylak588a9fa2021-06-22 14:28:45 +0000244 # Setup OE SYSROOT
245 OECORE_TARGET_SYSROOT = run_command('sh', '-c', 'echo $OECORE_TARGET_SYSROOT').stdout().strip()
246 if OECORE_TARGET_SYSROOT == ''
247 error('Unable to get $OECORE_TARGET_SYSROOT, check your environment.')
248 endif
249 message('OE_SYSROOT: ' + OECORE_TARGET_SYSROOT)
250 rpath = ':'.join([OECORE_TARGET_SYSROOT + '/lib', OECORE_TARGET_SYSROOT + '/usr/lib'])
251 ld_so = run_command('sh', '-c', 'find ' + OECORE_TARGET_SYSROOT + '/lib/ld-*.so | sort -r -n | head -n1').stdout().strip()
252 dynamic_linker = ['-Wl,-dynamic-linker,' + ld_so]
253 else
254 dynamic_linker = []
255 endif
256
Brad Bishopa0fa15b2020-11-06 14:42:24 -0500257 test(
258 'utest',
259 executable(
260 'utest',
261 'activation.cpp',
262 'version.cpp',
263 'item_updater.cpp',
264 'image_verify.cpp',
265 'utils.cpp',
266 'msl_verify.cpp',
267 'ubi/activation_ubi.cpp',
268 'ubi/item_updater_ubi.cpp',
269 'ubi/serialize.cpp',
270 'ubi/watch.cpp',
271 'static/item_updater_static.cpp',
272 'static/activation_static.cpp',
273 'test/test_signature.cpp',
274 'test/test_version.cpp',
275 'test/test_item_updater_static.cpp',
276 'msl_verify.cpp',
277 dependencies: [
278 dependency('libcrypto'),
279 dependency('gtest', main: true),
280 dependency('openssl'),
281 dependency('phosphor-logging'),
282 dependency('phosphor-dbus-interfaces'),
283 ],
284 implicit_include_directories: false,
285 include_directories: '.',
286 )
287 )
Brad Bishop099543e2020-11-09 15:37:58 -0500288 test(
289 'test_functions',
290 executable(
291 'test_functions',
292 'test/test_functions.cpp',
293 'functions.cpp',
294 dependencies: [
295 dependency('gtest', main: true),
Adriana Kobylak2b78eb02022-04-06 19:38:47 +0000296 dependency('phosphor-dbus-interfaces'),
Brad Bishop099543e2020-11-09 15:37:58 -0500297 dependency('sdbusplus'),
298 dependency('sdeventplus'),
299 ],
300 )
301 )
Brad Bishopa0fa15b2020-11-06 14:42:24 -0500302endif