summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bitbake/doc/bitbake-user-manual/bitbake-user-manual-fetching.rst4
-rw-r--r--bitbake/lib/bb/fetch2/az.py4
-rw-r--r--meta-selftest/recipes-test/ext-dtb/bbb-dtbs-as-ext.bb29
-rw-r--r--meta-selftest/recipes-test/ext-dtb/files/BBORG_RELAY-00A2.dts49
-rw-r--r--meta-selftest/recipes-test/ext-dtb/files/am335x-bonegreen-ext.dts14
-rw-r--r--meta/classes-recipe/barebox.bbclass2
-rw-r--r--meta/classes-recipe/devicetree.bbclass22
-rw-r--r--meta/classes-recipe/kernel-fit-extra-artifacts.bbclass19
-rw-r--r--meta/classes-recipe/kernel-fit-image.bbclass190
-rw-r--r--meta/classes-recipe/kernel-fitimage.bbclass839
-rw-r--r--meta/classes-recipe/kernel-uboot.bbclass38
-rw-r--r--meta/classes-recipe/kernel-uimage.bbclass3
-rw-r--r--meta/classes-recipe/kernel.bbclass18
-rw-r--r--meta/classes-recipe/populate_sdk_ext.bbclass2
-rw-r--r--meta/classes-recipe/uboot-sign.bbclass5
-rw-r--r--meta/classes-recipe/update-alternatives.bbclass34
-rw-r--r--meta/classes/icecc.bbclass443
-rw-r--r--meta/classes/multilib.bbclass1
-rw-r--r--meta/conf/bitbake.conf2
-rw-r--r--meta/conf/distro/include/distro_alias.inc1
-rw-r--r--meta/conf/distro/include/maintainers.inc4
-rw-r--r--meta/conf/documentation.conf5
-rw-r--r--meta/conf/fragments/yocto/sstate-mirror-cdn.conf12
-rw-r--r--meta/conf/layer.conf1
-rw-r--r--meta/lib/oe/fitimage.py547
-rw-r--r--meta/lib/oeqa/core/decorator/data.py12
-rw-r--r--meta/lib/oeqa/files/maturin/guessing-game/Cargo.toml2
-rw-r--r--meta/lib/oeqa/selftest/cases/fitimage.py365
-rw-r--r--meta/lib/oeqa/selftest/cases/uboot.py59
-rw-r--r--meta/lib/oeqa/utils/subprocesstweak.py13
-rw-r--r--meta/recipes-bsp/u-boot/files/disable-CONFIG_BLOBLIST.cfg1
-rw-r--r--meta/recipes-bsp/u-boot/files/disable_CONFIG_USB.cfg1
-rw-r--r--meta/recipes-bsp/u-boot/u-boot-common.inc4
-rw-r--r--meta/recipes-connectivity/dhcpcd/dhcpcd_10.2.4.bb (renamed from meta/recipes-connectivity/dhcpcd/dhcpcd_10.2.2.bb)2
-rw-r--r--meta/recipes-connectivity/dhcpcd/files/0001-20-resolv.conf-improve-the-sitation-of-working-with-.patch8
-rw-r--r--meta/recipes-connectivity/iproute2/iproute2_6.15.0.bb (renamed from meta/recipes-connectivity/iproute2/iproute2_6.14.0.bb)2
-rw-r--r--meta/recipes-connectivity/nfs-utils/nfs-utils/0001-Fix-typecast-warning-with-clang.patch32
-rw-r--r--meta/recipes-connectivity/nfs-utils/nfs-utils/0003-support-nfs-xcommon.c-fix-a-formatting-error-with-cl.patch40
-rw-r--r--meta/recipes-connectivity/nfs-utils/nfs-utils_2.8.3.bb (renamed from meta/recipes-connectivity/nfs-utils/nfs-utils_2.8.2.bb)4
-rw-r--r--meta/recipes-connectivity/ofono/ofono_2.17.bb (renamed from meta/recipes-connectivity/ofono/ofono_2.16.bb)2
-rw-r--r--meta/recipes-connectivity/slirp/libslirp_4.9.1.bb (renamed from meta/recipes-connectivity/slirp/libslirp_4.9.0.bb)2
-rw-r--r--meta/recipes-core/kbd/kbd_2.8.0.bb (renamed from meta/recipes-core/kbd/kbd_2.7.1.bb)2
-rw-r--r--meta/recipes-core/musl/libucontext_1.3.2.bb (renamed from meta/recipes-core/musl/libucontext_1.2.bb)2
-rw-r--r--meta/recipes-core/musl/musl-locales_git.bb17
-rwxr-xr-xmeta/recipes-devtools/icecc-create-env/icecc-create-env/icecc-create-env382
-rw-r--r--meta/recipes-devtools/icecc-create-env/icecc-create-env_0.1.bb39
-rw-r--r--meta/recipes-devtools/icecc-toolchain/icecc-toolchain/icecc-env.sh49
-rw-r--r--meta/recipes-devtools/icecc-toolchain/icecc-toolchain/icecc-setup.sh38
-rw-r--r--meta/recipes-devtools/icecc-toolchain/nativesdk-icecc-toolchain_0.1.bb39
-rw-r--r--meta/recipes-devtools/libmodulemd/libmodulemd_git.bb4
-rw-r--r--meta/recipes-devtools/m4/m4-1.4.20.inc5
-rw-r--r--meta/recipes-devtools/m4/m4/0001-gettext-h-Avoid-gcc-Wformat-security-warnings-with-d.patch133
-rw-r--r--meta/recipes-devtools/meson/meson/0001-Make-CPU-family-warnings-fatal.patch6
-rw-r--r--meta/recipes-devtools/meson/meson/0001-python-module-do-not-manipulate-the-environment-when.patch8
-rw-r--r--meta/recipes-devtools/meson/meson_1.8.1.bb (renamed from meta/recipes-devtools/meson/meson_1.8.0.bb)2
-rw-r--r--meta/recipes-devtools/mtd/files/0001-Improve-check-for-GCC-compiler-version.patch2
-rw-r--r--meta/recipes-devtools/mtd/files/0001-ubifs-utils-ubifs.h-Include-fcntl.h.patch2
-rw-r--r--meta/recipes-devtools/mtd/files/0002-ubifs-utils-journal-Include-sys-stat.h.patch2
-rw-r--r--meta/recipes-devtools/mtd/files/0003-ubifs-utils-link-libmissing.a-in-case-execinfo.h-isn.patch2
-rw-r--r--meta/recipes-devtools/mtd/files/0004-ubifs-utils-extract_files-Include-linux-limits.h.patch2
-rw-r--r--meta/recipes-devtools/python/python3-beartype_0.21.0.bb (renamed from meta/recipes-devtools/python/python3-beartype_0.20.2.bb)2
-rw-r--r--meta/recipes-devtools/python/python3-cython_3.1.1.bb (renamed from meta/recipes-devtools/python/python3-cython_3.1.0.bb)2
-rw-r--r--meta/recipes-devtools/python/python3-hypothesis_6.132.0.bb (renamed from meta/recipes-devtools/python/python3-hypothesis_6.131.14.bb)2
-rw-r--r--meta/recipes-devtools/python/python3-jsonschema/d71f96a6523875c9694fcdf468c9f458323d07f2.patch44
-rw-r--r--meta/recipes-devtools/python/python3-jsonschema_4.24.0.bb (renamed from meta/recipes-devtools/python/python3-jsonschema_4.23.0.bb)4
-rw-r--r--meta/recipes-devtools/python/python3-maturin-crates.inc20
-rw-r--r--meta/recipes-devtools/python/python3-maturin_1.8.6.bb (renamed from meta/recipes-devtools/python/python3-maturin_1.8.3.bb)3
-rw-r--r--meta/recipes-devtools/python/python3-pdm_2.24.2.bb (renamed from meta/recipes-devtools/python/python3-pdm_2.24.1.bb)2
-rw-r--r--meta/recipes-devtools/python/python3-pycryptodome_3.22.0.bb5
-rw-r--r--meta/recipes-devtools/python/python3-pycryptodome_3.23.0.bb5
-rw-r--r--meta/recipes-devtools/python/python3-pycryptodomex_3.23.0.bb (renamed from meta/recipes-devtools/python/python3-pycryptodomex_3.22.0.bb)2
-rw-r--r--meta/recipes-devtools/python/python3-ruamel-yaml_0.18.12.bb (renamed from meta/recipes-devtools/python/python3-ruamel-yaml_0.18.10.bb)2
-rw-r--r--meta/recipes-devtools/python/python3-setuptools/0001-_distutils-sysconfig.py-make-it-possible-to-substite.patch8
-rw-r--r--meta/recipes-devtools/python/python3-setuptools_80.9.0.bb (renamed from meta/recipes-devtools/python/python3-setuptools_80.8.0.bb)2
-rw-r--r--meta/recipes-devtools/python/python3-trove-classifiers_2025.5.9.12.bb (renamed from meta/recipes-devtools/python/python3-trove-classifiers_2025.3.19.19.bb)2
-rw-r--r--meta/recipes-devtools/python/python3-uritools_5.0.0.bb (renamed from meta/recipes-devtools/python/python3-uritools_4.0.3.bb)4
-rw-r--r--meta/recipes-devtools/qemu/qemu/run-ptest5
-rw-r--r--meta/recipes-devtools/quilt/quilt-native_0.69.bb (renamed from meta/recipes-devtools/quilt/quilt-native_0.68.bb)0
-rw-r--r--meta/recipes-devtools/quilt/quilt.inc3
-rw-r--r--meta/recipes-devtools/quilt/quilt/0001-contrib-spec-filters-obs-usr-bin-sh-bin-sh.patch28
-rw-r--r--meta/recipes-devtools/quilt/quilt_0.69.bb (renamed from meta/recipes-devtools/quilt/quilt_0.68.bb)0
-rw-r--r--meta/recipes-devtools/repo/repo_2.55.bb (renamed from meta/recipes-devtools/repo/repo_2.54.bb)2
-rw-r--r--meta/recipes-devtools/ruby/ruby/0002-Obey-LDFLAGS-for-the-link-of-libruby.patch6
-rw-r--r--meta/recipes-devtools/ruby/ruby/0005-Mark-Gemspec-reproducible-change-fixing-784225-too.patch6
-rw-r--r--meta/recipes-devtools/ruby/ruby_3.4.4.bb (renamed from meta/recipes-devtools/ruby/ruby_3.4.3.bb)2
-rw-r--r--meta/recipes-devtools/strace/strace/Makefile-ptest.patch7
-rw-r--r--meta/recipes-devtools/strace/strace_6.15.bb (renamed from meta/recipes-devtools/strace/strace_6.12.bb)4
-rw-r--r--meta/recipes-extended/msmtp/msmtp_1.8.30.bb (renamed from meta/recipes-extended/msmtp/msmtp_1.8.28.bb)2
-rw-r--r--meta/recipes-gnome/libadwaita/libadwaita_1.7.4.bb (renamed from meta/recipes-gnome/libadwaita/libadwaita_1.7.2.bb)2
-rw-r--r--meta/recipes-graphics/harfbuzz/harfbuzz/0001-Use-Os-to-compile-hb-subset-plan-layout.cc.patch14
-rw-r--r--meta/recipes-graphics/harfbuzz/harfbuzz_11.2.1.bb (renamed from meta/recipes-graphics/harfbuzz/harfbuzz_11.2.0.bb)2
-rw-r--r--meta/recipes-graphics/vulkan/vulkan-samples_git.bb2
-rw-r--r--meta/recipes-graphics/xorg-lib/libxkbcommon_1.10.0.bb (renamed from meta/recipes-graphics/xorg-lib/libxkbcommon_1.9.2.bb)2
-rw-r--r--meta/recipes-kernel/kernel-signing-keys/kernel-signing-keys-native.bb75
-rw-r--r--meta/recipes-kernel/linux/cve-exclusion_6.12.inc26
-rw-r--r--meta/recipes-kernel/linux/linux-yocto-fitimage.bb13
-rw-r--r--meta/recipes-kernel/linux/linux-yocto-rt_6.12.bb6
-rw-r--r--meta/recipes-kernel/linux/linux-yocto-tiny_6.12.bb6
-rw-r--r--meta/recipes-kernel/linux/linux-yocto_6.12.bb28
-rw-r--r--meta/recipes-multimedia/gstreamer/gst-devtools_1.26.2.bb (renamed from meta/recipes-multimedia/gstreamer/gst-devtools_1.26.1.bb)2
-rw-r--r--meta/recipes-multimedia/gstreamer/gst-examples_1.26.2.bb (renamed from meta/recipes-multimedia/gstreamer/gst-examples_1.26.1.bb)2
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.26.2.bb (renamed from meta/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.26.1.bb)2
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.26.2.bb (renamed from meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.26.1.bb)2
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.26.2.bb (renamed from meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.26.1.bb)2
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.26.2.bb (renamed from meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.26.1.bb)2
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.26.2.bb (renamed from meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.26.1.bb)2
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-python_1.26.2.bb (renamed from meta/recipes-multimedia/gstreamer/gstreamer1.0-python_1.26.1.bb)2
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server_1.26.2.bb (renamed from meta/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server_1.26.1.bb)2
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0-vaapi_1.26.2.bb (renamed from meta/recipes-multimedia/gstreamer/gstreamer1.0-vaapi_1.26.1.bb)2
-rw-r--r--meta/recipes-multimedia/gstreamer/gstreamer1.0_1.26.2.bb (renamed from meta/recipes-multimedia/gstreamer/gstreamer1.0_1.26.1.bb)2
-rw-r--r--meta/recipes-support/apr/apr/0001-Add-option-to-disable-timed-dependant-tests.patch11
-rw-r--r--meta/recipes-support/apr/apr/0001-configure-Remove-runtime-test-for-mmap-that-can-map-.patch7
-rw-r--r--meta/recipes-support/apr/apr/0002-apr-Remove-workdir-path-references-from-installed-ap.patch9
-rw-r--r--meta/recipes-support/apr/apr/0005-configure.in-fix-LTFLAGS-to-make-it-work-with-ccache.patch11
-rw-r--r--meta/recipes-support/apr/apr_1.7.6.bb (renamed from meta/recipes-support/apr/apr_1.7.5.bb)2
-rw-r--r--meta/recipes-support/enchant/enchant2_2.8.6.bb (renamed from meta/recipes-support/enchant/enchant2_2.8.4.bb)2
-rw-r--r--meta/recipes-support/gpgme/gpgme_1.24.3.bb (renamed from meta/recipes-support/gpgme/gpgme_1.24.2.bb)2
-rw-r--r--meta/recipes-support/hwdata/hwdata_0.395.bb (renamed from meta/recipes-support/hwdata/hwdata_0.394.bb)2
-rw-r--r--meta/recipes-support/libgcrypt/files/0001-tests-Fix-link-errors-for-t-thread-local.patch34
-rw-r--r--meta/recipes-support/libgcrypt/libgcrypt_1.11.1.bb1
-rw-r--r--meta/recipes-support/libunwind/libunwind/0003-Fixed-miscompilation-of-unw_getcontext-on-ARM.patch27
-rw-r--r--meta/recipes-support/libunwind/libunwind/0004-Rework-inline-aarch64-as-for-setcontext.patch163
-rw-r--r--meta/recipes-support/libunwind/libunwind/libatomic.patch6
-rw-r--r--meta/recipes-support/libunwind/libunwind/malloc.patch10
-rw-r--r--meta/recipes-support/libunwind/libunwind_1.8.2.bb (renamed from meta/recipes-support/libunwind/libunwind_1.8.1.bb)4
-rw-r--r--meta/recipes-support/liburcu/liburcu_0.15.3.bb (renamed from meta/recipes-support/liburcu/liburcu_0.15.2.bb)2
-rw-r--r--meta/recipes-support/libusb/libusb1_1.0.29.bb (renamed from meta/recipes-support/libusb/libusb1_1.0.28.bb)2
-rw-r--r--meta/recipes-support/taglib/taglib_2.1.bb (renamed from meta/recipes-support/taglib/taglib_2.0.2.bb)2
-rw-r--r--scripts/lib/recipetool/create.py2
-rw-r--r--scripts/lib/scriptutils.py5
130 files changed, 1792 insertions, 2457 deletions
diff --git a/bitbake/doc/bitbake-user-manual/bitbake-user-manual-fetching.rst b/bitbake/doc/bitbake-user-manual/bitbake-user-manual-fetching.rst
index fb4f0a23d7..eac3cbdfb5 100644
--- a/bitbake/doc/bitbake-user-manual/bitbake-user-manual-fetching.rst
+++ b/bitbake/doc/bitbake-user-manual/bitbake-user-manual-fetching.rst
@@ -686,9 +686,9 @@ Such functionality is set by the variable:
686 delegate access to resources, if this variable is set, the Az Fetcher will 686 delegate access to resources, if this variable is set, the Az Fetcher will
687 use it when fetching artifacts from the cloud. 687 use it when fetching artifacts from the cloud.
688 688
689You can specify the AZ_SAS variable as shown below:: 689You can specify the AZ_SAS variable prefixed with a ? as shown below::
690 690
691 AZ_SAS = "se=2021-01-01&sp=r&sv=2018-11-09&sr=c&skoid=<skoid>&sig=<signature>" 691 AZ_SAS = "?se=2021-01-01&sp=r&sv=2018-11-09&sr=c&skoid=<skoid>&sig=<signature>"
692 692
693Here is an example URL:: 693Here is an example URL::
694 694
diff --git a/bitbake/lib/bb/fetch2/az.py b/bitbake/lib/bb/fetch2/az.py
index 346124a8bf..1d3664f213 100644
--- a/bitbake/lib/bb/fetch2/az.py
+++ b/bitbake/lib/bb/fetch2/az.py
@@ -36,6 +36,8 @@ class Az(Wget):
36 36
37 az_sas = d.getVar('AZ_SAS') 37 az_sas = d.getVar('AZ_SAS')
38 if az_sas and az_sas not in ud.url: 38 if az_sas and az_sas not in ud.url:
39 if not az_sas.startswith('?'):
40 raise FetchError("When using AZ_SAS, it must start with a '?' character to mark the start of the query-parameters.")
39 ud.url += az_sas 41 ud.url += az_sas
40 42
41 return Wget.checkstatus(self, fetch, ud, d, try_again) 43 return Wget.checkstatus(self, fetch, ud, d, try_again)
@@ -62,6 +64,8 @@ class Az(Wget):
62 az_sas = d.getVar('AZ_SAS') 64 az_sas = d.getVar('AZ_SAS')
63 65
64 if az_sas: 66 if az_sas:
67 if not az_sas.startswith('?'):
68 raise FetchError("When using AZ_SAS, it must start with a '?' character to mark the start of the query-parameters.")
65 azuri = '%s%s%s%s' % ('https://', ud.host, ud.path, az_sas) 69 azuri = '%s%s%s%s' % ('https://', ud.host, ud.path, az_sas)
66 else: 70 else:
67 azuri = '%s%s%s' % ('https://', ud.host, ud.path) 71 azuri = '%s%s%s' % ('https://', ud.host, ud.path)
diff --git a/meta-selftest/recipes-test/ext-dtb/bbb-dtbs-as-ext.bb b/meta-selftest/recipes-test/ext-dtb/bbb-dtbs-as-ext.bb
new file mode 100644
index 0000000000..5055d03e54
--- /dev/null
+++ b/meta-selftest/recipes-test/ext-dtb/bbb-dtbs-as-ext.bb
@@ -0,0 +1,29 @@
1SUMMARY = "Boeaglebone Devicetrees"
2DESCRIPTION = "Handle the dtc files of the beaglebone-yocto via devicetree.bbclass just for testing purpose"
3SECTION = "kernel"
4LICENSE = "MIT"
5LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
6
7inherit devicetree
8
9COMPATIBLE_MACHINE = "^(beaglebone-yocto)$"
10
11# Take a copy of a small devicetree from the kernel's source directory for handling it externally
12# Borrowed an example DTB overlay from
13# https://raw.githubusercontent.com/beagleboard/linux/refs/heads/5.10/arch/arm/boot/dts/overlays/BBORG_RELAY-00A2.dts
14SRC_URI = "\
15 file://am335x-bonegreen-ext.dts \
16 file://BBORG_RELAY-00A2.dts \
17"
18
19# The am335x-bonegreen-ext.dts needs also the ti directories
20DT_INCLUDE:append = " ${STAGING_KERNEL_DIR}/arch/${ARCH}/boot/dts/ti/omap"
21
22# Sym-links are handled as extra configuration nodes in FIT images.
23do_install:append() {
24 ln -sf am335x-bonegreen-ext.dtb "${D}/boot/devicetree/am335x-bonegreen-ext-alias.dtb"
25}
26
27do_deploy:append() {
28 ln -sf am335x-bonegreen-ext.dtb "${DEPLOYDIR}/devicetree/am335x-bonegreen-ext-alias.dtb"
29}
diff --git a/meta-selftest/recipes-test/ext-dtb/files/BBORG_RELAY-00A2.dts b/meta-selftest/recipes-test/ext-dtb/files/BBORG_RELAY-00A2.dts
new file mode 100644
index 0000000000..9530fa50fe
--- /dev/null
+++ b/meta-selftest/recipes-test/ext-dtb/files/BBORG_RELAY-00A2.dts
@@ -0,0 +1,49 @@
1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * Copyright (C) 2015 Robert Nelson <robertcnelson@gmail.com>
4 * Copyright (C) 2019 Amilcar Lucas <amilcar.lucas@iav.de>
5 */
6
7/dts-v1/;
8/plugin/;
9
10&{/chosen} {
11 overlays {
12 BBORG_RELAY-00A2.kernel = __TIMESTAMP__;
13 };
14};
15
16&ocp {
17 P9_41_pinmux { pinctrl-0 = <&P9_41_gpio_pin>;};
18 P9_42_pinmux { pinctrl-0 = <&P9_42_gpio_pin>;};
19 P9_30_pinmux { pinctrl-0 = <&P9_30_gpio_pin>;};
20 P9_27_pinmux { pinctrl-0 = <&P9_27_gpio_pin>;};
21};
22
23// relay1
24&bone_led_P9_41 {
25 status = "okay";
26 label = "relay1";
27 default-state = "keep";
28};
29
30// relay2
31&bone_led_P9_42 {
32 status = "okay";
33 label = "relay2";
34 default-state = "keep";
35};
36
37// realy3
38&bone_led_P9_30 {
39 status = "okay";
40 label = "relay3";
41 default-state = "keep";
42};
43
44// realy4
45&bone_led_P9_27 {
46 status = "okay";
47 label = "relay4";
48 default-state = "keep";
49};
diff --git a/meta-selftest/recipes-test/ext-dtb/files/am335x-bonegreen-ext.dts b/meta-selftest/recipes-test/ext-dtb/files/am335x-bonegreen-ext.dts
new file mode 100644
index 0000000000..a0b39337a9
--- /dev/null
+++ b/meta-selftest/recipes-test/ext-dtb/files/am335x-bonegreen-ext.dts
@@ -0,0 +1,14 @@
1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
4 */
5/dts-v1/;
6
7#include "am33xx.dtsi"
8#include "am335x-bone-common.dtsi"
9#include "am335x-bonegreen-common.dtsi"
10
11/ {
12 model = "TI AM335x BeagleBone Green External";
13 compatible = "ti,am335x-bone-green", "ti,am335x-bone-black", "ti,am335x-bone", "ti,am33xx";
14};
diff --git a/meta/classes-recipe/barebox.bbclass b/meta/classes-recipe/barebox.bbclass
index 200ba08326..a562dce169 100644
--- a/meta/classes-recipe/barebox.bbclass
+++ b/meta/classes-recipe/barebox.bbclass
@@ -12,7 +12,7 @@ PROVIDES += "virtual/bootloader"
12 12
13PACKAGE_ARCH = "${MACHINE_ARCH}" 13PACKAGE_ARCH = "${MACHINE_ARCH}"
14 14
15DEPENDS += "bison-native flex-native" 15DEPENDS += "bison-native flex-native lz4-native"
16 16
17S = "${WORKDIR}/barebox-${PV}" 17S = "${WORKDIR}/barebox-${PV}"
18B = "${WORKDIR}/build" 18B = "${WORKDIR}/build"
diff --git a/meta/classes-recipe/devicetree.bbclass b/meta/classes-recipe/devicetree.bbclass
index 1806cb62cb..2a2ac93e9b 100644
--- a/meta/classes-recipe/devicetree.bbclass
+++ b/meta/classes-recipe/devicetree.bbclass
@@ -109,7 +109,11 @@ def devicetree_compile(dtspath, includes, d):
109 ppargs.append("-I{0}".format(i)) 109 ppargs.append("-I{0}".format(i))
110 ppargs += ["-o", "{0}.pp".format(dts), dtspath] 110 ppargs += ["-o", "{0}.pp".format(dts), dtspath]
111 bb.note("Running {0}".format(" ".join(ppargs))) 111 bb.note("Running {0}".format(" ".join(ppargs)))
112 subprocess.run(ppargs, check = True) 112 try:
113 subprocess.run(ppargs, check=True, capture_output=True)
114 except subprocess.CalledProcessError as e:
115 bb.fatal(f"Command '{' '.join(ppargs)}' failed with return code {e.returncode}\nstdout: {e.stdout.decode()}\nstderr: {e.stderr.decode()}\ndtspath: {os.path.abspath(dtspath)}")
116
113 117
114 # determine if the file is an overlay or not (using the preprocessed file) 118 # determine if the file is an overlay or not (using the preprocessed file)
115 isoverlay = devicetree_source_is_overlay("{0}.pp".format(dts)) 119 isoverlay = devicetree_source_is_overlay("{0}.pp".format(dts))
@@ -125,7 +129,11 @@ def devicetree_compile(dtspath, includes, d):
125 dtcargs += ["-o", "{0}.{1}".format(dtname, "dtbo" if isoverlay else "dtb")] 129 dtcargs += ["-o", "{0}.{1}".format(dtname, "dtbo" if isoverlay else "dtb")]
126 dtcargs += ["-I", "dts", "-O", "dtb", "{0}.pp".format(dts)] 130 dtcargs += ["-I", "dts", "-O", "dtb", "{0}.pp".format(dts)]
127 bb.note("Running {0}".format(" ".join(dtcargs))) 131 bb.note("Running {0}".format(" ".join(dtcargs)))
128 subprocess.run(dtcargs, check = True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 132 try:
133 subprocess.run(dtcargs, check=True, capture_output=True)
134 except subprocess.CalledProcessError as e:
135 bb.fatal(f"Command '{' '.join(dtcargs)}' failed with return code {e.returncode}\nstdout: {e.stdout.decode()}\nstderr: {e.stderr.decode()}\ndtname: {dtname}")
136
129 137
130python devicetree_do_compile() { 138python devicetree_do_compile() {
131 import re 139 import re
@@ -144,14 +152,16 @@ python devicetree_do_compile() {
144} 152}
145 153
146devicetree_do_install() { 154devicetree_do_install() {
147 for DTB_FILE in `ls *.dtb *.dtbo`; do 155 for dtb_file in *.dtb *.dtbo; do
148 install -Dm 0644 ${B}/${DTB_FILE} ${D}/boot/devicetree/${DTB_FILE} 156 [ -e "$dtb_file" ] || continue
157 install -Dm 0644 "${B}/$dtb_file" "${D}/boot/devicetree/$dtb_file"
149 done 158 done
150} 159}
151 160
152devicetree_do_deploy() { 161devicetree_do_deploy() {
153 for DTB_FILE in `ls *.dtb *.dtbo`; do 162 for dtb_file in *.dtb *.dtbo; do
154 install -Dm 0644 ${B}/${DTB_FILE} ${DEPLOYDIR}/devicetree/${DTB_FILE} 163 [ -e "$dtb_file" ] || continue
164 install -Dm 0644 "${B}/$dtb_file" "${DEPLOYDIR}/devicetree/$dtb_file"
155 done 165 done
156} 166}
157addtask deploy before do_build after do_install 167addtask deploy before do_build after do_install
diff --git a/meta/classes-recipe/kernel-fit-extra-artifacts.bbclass b/meta/classes-recipe/kernel-fit-extra-artifacts.bbclass
new file mode 100644
index 0000000000..385fe9895a
--- /dev/null
+++ b/meta/classes-recipe/kernel-fit-extra-artifacts.bbclass
@@ -0,0 +1,19 @@
1#
2# Copyright OpenEmbedded Contributors
3#
4# SPDX-License-Identifier: MIT
5#
6
7# Generate and deploy additional artifacts required for FIT image creation.
8# To use this class, add it to the KERNEL_CLASSES variable.
9
10inherit kernel-uboot
11
12kernel_do_deploy:append() {
13 # Provide the kernel artifacts to post processing recipes e.g. for creating a FIT image
14 uboot_prep_kimage "$deployDir"
15 # For x86 a setup.bin needs to be include"d in a fitImage as well
16 if [ -e ${KERNEL_OUTPUT_DIR}/setup.bin ]; then
17 install -D "${B}/${KERNEL_OUTPUT_DIR}/setup.bin" "$deployDir/"
18 fi
19}
diff --git a/meta/classes-recipe/kernel-fit-image.bbclass b/meta/classes-recipe/kernel-fit-image.bbclass
new file mode 100644
index 0000000000..d2eebb88bc
--- /dev/null
+++ b/meta/classes-recipe/kernel-fit-image.bbclass
@@ -0,0 +1,190 @@
1
2inherit kernel-arch kernel-artifact-names uboot-config deploy
3require conf/image-fitimage.conf
4
5S = "${WORKDIR}/sources"
6UNPACKDIR = "${S}"
7
8PACKAGE_ARCH = "${MACHINE_ARCH}"
9
10# This bbclass requires KERNEL_CLASSES += "kernel-fit-extra-artifacts"
11EXCLUDE_FROM_WORLD = "1"
12
13DEPENDS += "\
14 u-boot-tools-native dtc-native \
15 ${@'kernel-signing-keys-native' if d.getVar('FIT_GENERATE_KEYS') == '1' else ''} \
16"
17
18python () {
19 image = d.getVar('INITRAMFS_IMAGE')
20 if image and d.getVar('INITRAMFS_IMAGE_BUNDLE') != '1':
21 if d.getVar('INITRAMFS_MULTICONFIG'):
22 mc = d.getVar('BB_CURRENT_MC')
23 d.appendVarFlag('do_compile', 'mcdepends', ' mc:' + mc + ':${INITRAMFS_MULTICONFIG}:${INITRAMFS_IMAGE}:do_image_complete')
24 else:
25 d.appendVarFlag('do_compile', 'depends', ' ${INITRAMFS_IMAGE}:do_image_complete')
26
27 #check if there are any dtb providers
28 providerdtb = d.getVar("PREFERRED_PROVIDER_virtual/dtb")
29 if providerdtb:
30 d.appendVarFlag('do_compile', 'depends', ' virtual/dtb:do_populate_sysroot')
31 d.setVar('EXTERNAL_KERNEL_DEVICETREE', "${RECIPE_SYSROOT}/boot/devicetree")
32}
33
34do_configure[noexec] = "1"
35
36UBOOT_MKIMAGE_KERNEL_TYPE ?= "kernel"
37KERNEL_IMAGEDEST ?= "/boot"
38
39python do_compile() {
40 import shutil
41 import oe.fitimage
42
43 itsfile = "fit-image.its"
44 fitname = "fitImage"
45 kernel_deploydir = d.getVar('DEPLOY_DIR_IMAGE')
46 kernel_deploysubdir = d.getVar('KERNEL_DEPLOYSUBDIR')
47 if kernel_deploysubdir:
48 kernel_deploydir = os.path.join(kernel_deploydir, kernel_deploysubdir)
49
50 # Collect all the its nodes before the its file is generated and mkimage gets executed
51 root_node = oe.fitimage.ItsNodeRootKernel(
52 d.getVar("FIT_DESC"), d.getVar("FIT_ADDRESS_CELLS"),
53 d.getVar('HOST_PREFIX'), d.getVar('UBOOT_ARCH'), d.getVar("FIT_CONF_PREFIX"),
54 oe.types.boolean(d.getVar('UBOOT_SIGN_ENABLE')), d.getVar("UBOOT_SIGN_KEYDIR"),
55 d.getVar("UBOOT_MKIMAGE"), d.getVar("UBOOT_MKIMAGE_DTCOPTS"),
56 d.getVar("UBOOT_MKIMAGE_SIGN"), d.getVar("UBOOT_MKIMAGE_SIGN_ARGS"),
57 d.getVar('FIT_HASH_ALG'), d.getVar('FIT_SIGN_ALG'), d.getVar('FIT_PAD_ALG'),
58 d.getVar('UBOOT_SIGN_KEYNAME'),
59 oe.types.boolean(d.getVar('FIT_SIGN_INDIVIDUAL')), d.getVar('UBOOT_SIGN_IMG_KEYNAME')
60 )
61
62 # Prepare a kernel image section.
63 shutil.copyfile(os.path.join(kernel_deploydir, "linux.bin"), "linux.bin")
64 with open(os.path.join(kernel_deploydir, "linux_comp")) as linux_comp_f:
65 linux_comp = linux_comp_f.read()
66 root_node.fitimage_emit_section_kernel("kernel-1", "linux.bin", linux_comp,
67 d.getVar('UBOOT_LOADADDRESS'), d.getVar('UBOOT_ENTRYPOINT'),
68 d.getVar('UBOOT_MKIMAGE_KERNEL_TYPE'), d.getVar("UBOOT_ENTRYSYMBOL"))
69
70 # Prepare a DTB image section
71 kernel_devicetree = d.getVar('KERNEL_DEVICETREE')
72 external_kernel_devicetree = d.getVar("EXTERNAL_KERNEL_DEVICETREE")
73 if kernel_devicetree:
74 for dtb in kernel_devicetree.split():
75 # In deploy_dir the DTBs are without sub-directories also with KERNEL_DTBVENDORED = "1"
76 dtb_name = os.path.basename(dtb)
77
78 # Skip DTB if it's also provided in EXTERNAL_KERNEL_DEVICETREE directory
79 if external_kernel_devicetree:
80 ext_dtb_path = os.path.join(external_kernel_devicetree, dtb_name)
81 if os.path.exists(ext_dtb_path) and os.path.getsize(ext_dtb_path) > 0:
82 continue
83
84 # Copy the dtb or dtbo file into the FIT image assembly directory
85 shutil.copyfile(os.path.join(kernel_deploydir, dtb_name), dtb_name)
86 root_node.fitimage_emit_section_dtb(dtb_name, dtb_name,
87 d.getVar("UBOOT_DTB_LOADADDRESS"), d.getVar("UBOOT_DTBO_LOADADDRESS"))
88
89 if external_kernel_devicetree:
90 # iterate over all .dtb and .dtbo files in the external kernel devicetree directory
91 # and copy them to the FIT image assembly directory
92 for dtb_name in sorted(os.listdir(external_kernel_devicetree)):
93 if dtb_name.endswith('.dtb') or dtb_name.endswith('.dtbo'):
94 dtb_path = os.path.join(external_kernel_devicetree, dtb_name)
95
96 # For symlinks, add a configuration node that refers to the DTB image node to which the symlink points
97 symlink_target = oe.fitimage.symlink_points_below(dtb_name, external_kernel_devicetree)
98 if symlink_target:
99 root_node.fitimage_emit_section_dtb_alias(dtb_name, symlink_target, True)
100 # For real DTB files add an image node and a configuration node
101 else:
102 shutil.copyfile(dtb_path, dtb_name)
103 root_node.fitimage_emit_section_dtb(dtb_name, dtb_name,
104 d.getVar("UBOOT_DTB_LOADADDRESS"), d.getVar("UBOOT_DTBO_LOADADDRESS"), True)
105
106 # Prepare a u-boot script section
107 fit_uboot_env = d.getVar("FIT_UBOOT_ENV")
108 if fit_uboot_env:
109 root_node.fitimage_emit_section_boot_script("bootscr-"+fit_uboot_env , fit_uboot_env)
110
111 # Prepare a setup section (For x86)
112 setup_bin_path = os.path.join(kernel_deploydir, "setup.bin")
113 if os.path.exists(setup_bin_path):
114 shutil.copyfile(setup_bin_path, "setup.bin")
115 root_node.fitimage_emit_section_setup("setup-1", "setup.bin")
116
117 # Prepare a ramdisk section.
118 initramfs_image = d.getVar('INITRAMFS_IMAGE')
119 if initramfs_image and d.getVar("INITRAMFS_IMAGE_BUNDLE") != '1':
120 # Find and use the first initramfs image archive type we find
121 found = False
122 for img in d.getVar("FIT_SUPPORTED_INITRAMFS_FSTYPES").split():
123 initramfs_path = os.path.join(d.getVar("DEPLOY_DIR_IMAGE"), "%s.%s" % (d.getVar('INITRAMFS_IMAGE_NAME'), img))
124 if os.path.exists(initramfs_path):
125 bb.note("Found initramfs image: " + initramfs_path)
126 found = True
127 root_node.fitimage_emit_section_ramdisk("ramdisk-1", initramfs_path,
128 initramfs_image,
129 d.getVar("UBOOT_RD_LOADADDRESS"),
130 d.getVar("UBOOT_RD_ENTRYPOINT"))
131 break
132 else:
133 bb.note("Did not find initramfs image: " + initramfs_path)
134
135 if not found:
136 bb.fatal("Could not find a valid initramfs type for %s, the supported types are: %s" % (d.getVar('INITRAMFS_IMAGE_NAME'), d.getVar('FIT_SUPPORTED_INITRAMFS_FSTYPES')))
137
138 # Generate the configuration section
139 root_node.fitimage_emit_section_config(d.getVar("FIT_CONF_DEFAULT_DTB"))
140
141 # Write the its file
142 root_node.write_its_file(itsfile)
143
144 # Assemble the FIT image
145 root_node.run_mkimage_assemble(itsfile, fitname)
146
147 # Sign the FIT image if required
148 root_node.run_mkimage_sign(fitname)
149}
150do_compile[depends] += "virtual/kernel:do_deploy"
151
152do_install() {
153 install -d "${D}/${KERNEL_IMAGEDEST}"
154 install -m 0644 "${B}/fitImage" "${D}/${KERNEL_IMAGEDEST}/fitImage"
155}
156
157FILES:${PN} = "${KERNEL_IMAGEDEST}"
158
159
160do_deploy() {
161 deploy_dir="${DEPLOYDIR}"
162 if [ -n "${KERNEL_DEPLOYSUBDIR}" ]; then
163 deploy_dir="${DEPLOYDIR}/${KERNEL_DEPLOYSUBDIR}"
164 fi
165 install -d "$deploy_dir"
166 install -m 0644 "${B}/fitImage" "$deploy_dir/fitImage"
167 install -m 0644 "${B}/fit-image.its" "$deploy_dir/fit-image.its"
168
169 if [ "${INITRAMFS_IMAGE_BUNDLE}" != "1" ]; then
170 ln -snf fit-image.its "$deploy_dir/fitImage-its-${KERNEL_FIT_NAME}.its"
171 if [ -n "${KERNEL_FIT_LINK_NAME}" ] ; then
172 ln -snf fit-image.its "$deploy_dir/fitImage-its-${KERNEL_FIT_LINK_NAME}"
173 fi
174 fi
175
176 if [ -n "${INITRAMFS_IMAGE}" ]; then
177 ln -snf fit-image-its "$deploy_dir/fitImage-its-${INITRAMFS_IMAGE_NAME}-${KERNEL_FIT_NAME}.its"
178 if [ -n "${KERNEL_FIT_LINK_NAME}" ]; then
179 ln -snf fit-image.its "$deploy_dir/fitImage-its-${INITRAMFS_IMAGE_NAME}-${KERNEL_FIT_LINK_NAME}"
180 fi
181
182 if [ "${INITRAMFS_IMAGE_BUNDLE}" != "1" ]; then
183 ln -snf fitImage "$deploy_dir/fitImage-${INITRAMFS_IMAGE_NAME}-${KERNEL_FIT_NAME}${KERNEL_FIT_BIN_EXT}"
184 if [ -n "${KERNEL_FIT_LINK_NAME}" ] ; then
185 ln -snf fitImage "$deploy_dir/fitImage-${INITRAMFS_IMAGE_NAME}-${KERNEL_FIT_LINK_NAME}"
186 fi
187 fi
188 fi
189}
190addtask deploy after do_compile before do_build
diff --git a/meta/classes-recipe/kernel-fitimage.bbclass b/meta/classes-recipe/kernel-fitimage.bbclass
deleted file mode 100644
index 07786647e1..0000000000
--- a/meta/classes-recipe/kernel-fitimage.bbclass
+++ /dev/null
@@ -1,839 +0,0 @@
1#
2# Copyright OpenEmbedded Contributors
3#
4# SPDX-License-Identifier: MIT
5#
6
7inherit kernel-uboot kernel-artifact-names uboot-config
8require conf/image-fitimage.conf
9
10def get_fit_replacement_type(d):
11 kerneltypes = d.getVar('KERNEL_IMAGETYPES') or ""
12 replacementtype = ""
13 if 'fitImage' in kerneltypes.split():
14 uarch = d.getVar("UBOOT_ARCH")
15 if uarch == "arm64":
16 replacementtype = "Image"
17 elif uarch == "riscv":
18 replacementtype = "Image"
19 elif uarch == "mips":
20 replacementtype = "vmlinuz.bin"
21 elif uarch == "x86":
22 replacementtype = "bzImage"
23 elif uarch == "microblaze":
24 replacementtype = "linux.bin"
25 else:
26 replacementtype = "zImage"
27 return replacementtype
28
29KERNEL_IMAGETYPE_REPLACEMENT ?= "${@get_fit_replacement_type(d)}"
30DEPENDS:append = " ${@'u-boot-tools-native dtc-native' if 'fitImage' in (d.getVar('KERNEL_IMAGETYPES') or '').split() else ''}"
31
32python __anonymous () {
33 # Override KERNEL_IMAGETYPE_FOR_MAKE variable, which is internal
34 # to kernel.bbclass . We have to override it, since we pack zImage
35 # (at least for now) into the fitImage .
36 typeformake = d.getVar("KERNEL_IMAGETYPE_FOR_MAKE") or ""
37 if 'fitImage' in typeformake.split():
38 d.setVar('KERNEL_IMAGETYPE_FOR_MAKE', typeformake.replace('fitImage', d.getVar('KERNEL_IMAGETYPE_REPLACEMENT')))
39
40 image = d.getVar('INITRAMFS_IMAGE')
41 if image and not bb.utils.to_boolean(d.getVar('INITRAMFS_IMAGE_BUNDLE')):
42 if d.getVar('INITRAMFS_MULTICONFIG'):
43 mc = d.getVar('BB_CURRENT_MC')
44 d.appendVarFlag('do_assemble_fitimage_initramfs', 'mcdepends', ' mc:' + mc + ':${INITRAMFS_MULTICONFIG}:${INITRAMFS_IMAGE}:do_image_complete')
45 else:
46 d.appendVarFlag('do_assemble_fitimage_initramfs', 'depends', ' ${INITRAMFS_IMAGE}:do_image_complete')
47
48 #check if there are any dtb providers
49 providerdtb = d.getVar("PREFERRED_PROVIDER_virtual/dtb")
50 if providerdtb:
51 d.appendVarFlag('do_assemble_fitimage', 'depends', ' virtual/dtb:do_populate_sysroot')
52 d.appendVarFlag('do_assemble_fitimage_initramfs', 'depends', ' virtual/dtb:do_populate_sysroot')
53 d.setVar('EXTERNAL_KERNEL_DEVICETREE', "${RECIPE_SYSROOT}/boot/devicetree")
54}
55
56#
57# Emit the fitImage ITS header
58#
59# $1 ... .its filename
60fitimage_emit_fit_header() {
61 cat << EOF >> $1
62/dts-v1/;
63
64/ {
65 description = "${FIT_DESC}";
66 #address-cells = <${FIT_ADDRESS_CELLS}>;
67EOF
68}
69
70#
71# Emit the fitImage section bits
72#
73# $1 ... .its filename
74# $2 ... Section bit type: imagestart - image section start
75# confstart - configuration section start
76# sectend - section end
77# fitend - fitimage end
78#
79fitimage_emit_section_maint() {
80 case $2 in
81 imagestart)
82 cat << EOF >> $1
83
84 images {
85EOF
86 ;;
87 confstart)
88 cat << EOF >> $1
89
90 configurations {
91EOF
92 ;;
93 sectend)
94 cat << EOF >> $1
95 };
96EOF
97 ;;
98 fitend)
99 cat << EOF >> $1
100};
101EOF
102 ;;
103 esac
104}
105
106#
107# Emit the fitImage ITS kernel section
108#
109# $1 ... .its filename
110# $2 ... Image counter
111# $3 ... Path to kernel image
112# $4 ... Compression type
113fitimage_emit_section_kernel() {
114
115 kernel_csum="${FIT_HASH_ALG}"
116 kernel_sign_algo="${FIT_SIGN_ALG}"
117 kernel_sign_keyname="${UBOOT_SIGN_IMG_KEYNAME}"
118
119 ENTRYPOINT="${UBOOT_ENTRYPOINT}"
120 if [ -n "${UBOOT_ENTRYSYMBOL}" ]; then
121 ENTRYPOINT=`${HOST_PREFIX}nm vmlinux | \
122 awk '$3=="${UBOOT_ENTRYSYMBOL}" {print "0x"$1;exit}'`
123 fi
124
125 cat << EOF >> $1
126 kernel-$2 {
127 description = "Linux kernel";
128 data = /incbin/("$3");
129 type = "${UBOOT_MKIMAGE_KERNEL_TYPE}";
130 arch = "${UBOOT_ARCH}";
131 os = "linux";
132 compression = "$4";
133 load = <${UBOOT_LOADADDRESS}>;
134 entry = <$ENTRYPOINT>;
135 hash-1 {
136 algo = "$kernel_csum";
137 };
138 };
139EOF
140
141 if [ "${UBOOT_SIGN_ENABLE}" = "1" -a "${FIT_SIGN_INDIVIDUAL}" = "1" -a -n "$kernel_sign_keyname" ] ; then
142 sed -i '$ d' $1
143 cat << EOF >> $1
144 signature-1 {
145 algo = "$kernel_csum,$kernel_sign_algo";
146 key-name-hint = "$kernel_sign_keyname";
147 };
148 };
149EOF
150 fi
151}
152
153#
154# Emit the fitImage ITS DTB section
155#
156# $1 ... .its filename
157# $2 ... Image counter
158# $3 ... Path to DTB image
159fitimage_emit_section_dtb() {
160
161 dtb_csum="${FIT_HASH_ALG}"
162 dtb_sign_algo="${FIT_SIGN_ALG}"
163 dtb_sign_keyname="${UBOOT_SIGN_IMG_KEYNAME}"
164
165 dtb_loadline=""
166 dtb_ext=${DTB##*.}
167 if [ "${dtb_ext}" = "dtbo" ]; then
168 if [ -n "${UBOOT_DTBO_LOADADDRESS}" ]; then
169 dtb_loadline="load = <${UBOOT_DTBO_LOADADDRESS}>;"
170 fi
171 elif [ -n "${UBOOT_DTB_LOADADDRESS}" ]; then
172 dtb_loadline="load = <${UBOOT_DTB_LOADADDRESS}>;"
173 fi
174 cat << EOF >> $1
175 fdt-$2 {
176 description = "Flattened Device Tree blob";
177 data = /incbin/("$3");
178 type = "flat_dt";
179 arch = "${UBOOT_ARCH}";
180 compression = "none";
181 $dtb_loadline
182 hash-1 {
183 algo = "$dtb_csum";
184 };
185 };
186EOF
187
188 if [ "${UBOOT_SIGN_ENABLE}" = "1" -a "${FIT_SIGN_INDIVIDUAL}" = "1" -a -n "$dtb_sign_keyname" ] ; then
189 sed -i '$ d' $1
190 cat << EOF >> $1
191 signature-1 {
192 algo = "$dtb_csum,$dtb_sign_algo";
193 key-name-hint = "$dtb_sign_keyname";
194 };
195 };
196EOF
197 fi
198}
199
200#
201# Emit the fitImage ITS u-boot script section
202#
203# $1 ... .its filename
204# $2 ... Image counter
205# $3 ... Path to boot script image
206fitimage_emit_section_boot_script() {
207
208 bootscr_csum="${FIT_HASH_ALG}"
209 bootscr_sign_algo="${FIT_SIGN_ALG}"
210 bootscr_sign_keyname="${UBOOT_SIGN_IMG_KEYNAME}"
211
212 cat << EOF >> $1
213 bootscr-$2 {
214 description = "U-boot script";
215 data = /incbin/("$3");
216 type = "script";
217 arch = "${UBOOT_ARCH}";
218 compression = "none";
219 hash-1 {
220 algo = "$bootscr_csum";
221 };
222 };
223EOF
224
225 if [ "${UBOOT_SIGN_ENABLE}" = "1" -a "${FIT_SIGN_INDIVIDUAL}" = "1" -a -n "$bootscr_sign_keyname" ] ; then
226 sed -i '$ d' $1
227 cat << EOF >> $1
228 signature-1 {
229 algo = "$bootscr_csum,$bootscr_sign_algo";
230 key-name-hint = "$bootscr_sign_keyname";
231 };
232 };
233EOF
234 fi
235}
236
237#
238# Emit the fitImage ITS setup section
239#
240# $1 ... .its filename
241# $2 ... Image counter
242# $3 ... Path to setup image
243fitimage_emit_section_setup() {
244
245 setup_csum="${FIT_HASH_ALG}"
246 setup_sign_algo="${FIT_SIGN_ALG}"
247 setup_sign_keyname="${UBOOT_SIGN_IMG_KEYNAME}"
248
249 cat << EOF >> $1
250 setup-$2 {
251 description = "Linux setup.bin";
252 data = /incbin/("$3");
253 type = "x86_setup";
254 arch = "${UBOOT_ARCH}";
255 os = "linux";
256 compression = "none";
257 load = <0x00090000>;
258 entry = <0x00090000>;
259 hash-1 {
260 algo = "$setup_csum";
261 };
262 };
263EOF
264
265 if [ "${UBOOT_SIGN_ENABLE}" = "1" -a "${FIT_SIGN_INDIVIDUAL}" = "1" -a -n "$setup_sign_keyname" ] ; then
266 sed -i '$ d' $1
267 cat << EOF >> $1
268 signature-1 {
269 algo = "$setup_csum,$setup_sign_algo";
270 key-name-hint = "$setup_sign_keyname";
271 };
272 };
273EOF
274 fi
275}
276
277#
278# Emit the fitImage ITS ramdisk section
279#
280# $1 ... .its filename
281# $2 ... Image counter
282# $3 ... Path to ramdisk image
283fitimage_emit_section_ramdisk() {
284
285 ramdisk_csum="${FIT_HASH_ALG}"
286 ramdisk_sign_algo="${FIT_SIGN_ALG}"
287 ramdisk_sign_keyname="${UBOOT_SIGN_IMG_KEYNAME}"
288 ramdisk_loadline=""
289 ramdisk_entryline=""
290
291 if [ -n "${UBOOT_RD_LOADADDRESS}" ]; then
292 ramdisk_loadline="load = <${UBOOT_RD_LOADADDRESS}>;"
293 fi
294 if [ -n "${UBOOT_RD_ENTRYPOINT}" ]; then
295 ramdisk_entryline="entry = <${UBOOT_RD_ENTRYPOINT}>;"
296 fi
297
298 cat << EOF >> $1
299 ramdisk-$2 {
300 description = "${INITRAMFS_IMAGE}";
301 data = /incbin/("$3");
302 type = "ramdisk";
303 arch = "${UBOOT_ARCH}";
304 os = "linux";
305 compression = "none";
306 $ramdisk_loadline
307 $ramdisk_entryline
308 hash-1 {
309 algo = "$ramdisk_csum";
310 };
311 };
312EOF
313
314 if [ "${UBOOT_SIGN_ENABLE}" = "1" -a "${FIT_SIGN_INDIVIDUAL}" = "1" -a -n "$ramdisk_sign_keyname" ] ; then
315 sed -i '$ d' $1
316 cat << EOF >> $1
317 signature-1 {
318 algo = "$ramdisk_csum,$ramdisk_sign_algo";
319 key-name-hint = "$ramdisk_sign_keyname";
320 };
321 };
322EOF
323 fi
324}
325
326#
327# echoes symlink destination if it points below directory
328#
329# $1 ... file that's a potential symlink
330# $2 ... expected parent directory
331symlink_points_below() {
332 file="$2/$1"
333 dir=$2
334
335 if ! [ -L "$file" ]; then
336 return
337 fi
338
339 realpath="$(realpath --relative-to=$dir $file)"
340 if [ -z "${realpath%%../*}" ]; then
341 return
342 fi
343
344 echo "$realpath"
345}
346
347#
348# Emit the fitImage ITS configuration section
349#
350# $1 ... .its filename
351# $2 ... Linux kernel ID
352# $3 ... DTB image name
353# $4 ... ramdisk ID
354# $5 ... u-boot script ID
355# $6 ... config ID
356# $7 ... default flag
357# $8 ... default DTB image name
358fitimage_emit_section_config() {
359
360 conf_csum="${FIT_HASH_ALG}"
361 conf_sign_algo="${FIT_SIGN_ALG}"
362 conf_padding_algo="${FIT_PAD_ALG}"
363 if [ "${UBOOT_SIGN_ENABLE}" = "1" ] ; then
364 conf_sign_keyname="${UBOOT_SIGN_KEYNAME}"
365 fi
366
367 its_file="$1"
368 kernel_id="$2"
369 dtb_image="$3"
370 ramdisk_id="$4"
371 bootscr_id="$5"
372 config_id="$6"
373 default_flag="$7"
374 default_dtb_image="$8"
375
376 # Test if we have any DTBs at all
377 sep=""
378 conf_desc=""
379 conf_node="${FIT_CONF_PREFIX}"
380 kernel_line=""
381 fdt_line=""
382 ramdisk_line=""
383 bootscr_line=""
384 setup_line=""
385 default_line=""
386 compatible_line=""
387
388 dtb_image_sect=$(symlink_points_below $dtb_image "${EXTERNAL_KERNEL_DEVICETREE}")
389 if [ -z "$dtb_image_sect" ]; then
390 dtb_image_sect=$dtb_image
391 fi
392
393 dtb_path="${EXTERNAL_KERNEL_DEVICETREE}/${dtb_image_sect}"
394 if [ -f "$dtb_path" ] || [ -L "$dtb_path" ]; then
395 compat=$(fdtget -t s "$dtb_path" / compatible | sed 's/ /", "/g')
396 if [ -n "$compat" ]; then
397 compatible_line="compatible = \"$compat\";"
398 fi
399 fi
400
401 dtb_image=$(echo $dtb_image | tr '/' '_')
402 dtb_image_sect=$(echo "${dtb_image_sect}" | tr '/' '_')
403
404 # conf node name is selected based on dtb ID if it is present,
405 # otherwise its selected based on kernel ID
406 if [ -n "$dtb_image" ]; then
407 conf_node=$conf_node$dtb_image
408 else
409 conf_node=$conf_node$kernel_id
410 fi
411
412 if [ -n "$kernel_id" ]; then
413 conf_desc="Linux kernel"
414 sep=", "
415 kernel_line="kernel = \"kernel-$kernel_id\";"
416 fi
417
418 if [ -n "$dtb_image" ]; then
419 conf_desc="$conf_desc${sep}FDT blob"
420 sep=", "
421 fdt_line="fdt = \"fdt-$dtb_image_sect\";"
422 fi
423
424 if [ -n "$ramdisk_id" ]; then
425 conf_desc="$conf_desc${sep}ramdisk"
426 sep=", "
427 ramdisk_line="ramdisk = \"ramdisk-$ramdisk_id\";"
428 fi
429
430 if [ -n "$bootscr_id" ]; then
431 conf_desc="$conf_desc${sep}u-boot script"
432 sep=", "
433 bootscr_line="bootscr = \"bootscr-$bootscr_id\";"
434 fi
435
436 if [ -n "$config_id" ]; then
437 conf_desc="$conf_desc${sep}setup"
438 setup_line="setup = \"setup-$config_id\";"
439 fi
440
441 if [ "$default_flag" = "1" ]; then
442 # default node is selected based on dtb ID if it is present,
443 # otherwise its selected based on kernel ID
444 if [ -n "$dtb_image" ]; then
445 # Select default node as user specified dtb when
446 # multiple dtb exists.
447 if [ -n "$default_dtb_image" ]; then
448 default_line="default = \"${FIT_CONF_PREFIX}$default_dtb_image\";"
449 else
450 default_line="default = \"${FIT_CONF_PREFIX}$dtb_image\";"
451 fi
452 else
453 default_line="default = \"${FIT_CONF_PREFIX}$kernel_id\";"
454 fi
455 fi
456
457 cat << EOF >> $its_file
458 $default_line
459 $conf_node {
460 description = "$default_flag $conf_desc";
461 $compatible_line
462 $kernel_line
463 $fdt_line
464 $ramdisk_line
465 $bootscr_line
466 $setup_line
467 hash-1 {
468 algo = "$conf_csum";
469 };
470EOF
471
472 if [ -n "$conf_sign_keyname" ] ; then
473
474 sign_line="sign-images = "
475 sep=""
476
477 if [ -n "$kernel_id" ]; then
478 sign_line="$sign_line${sep}\"kernel\""
479 sep=", "
480 fi
481
482 if [ -n "$dtb_image" ]; then
483 sign_line="$sign_line${sep}\"fdt\""
484 sep=", "
485 fi
486
487 if [ -n "$ramdisk_id" ]; then
488 sign_line="$sign_line${sep}\"ramdisk\""
489 sep=", "
490 fi
491
492 if [ -n "$bootscr_id" ]; then
493 sign_line="$sign_line${sep}\"bootscr\""
494 sep=", "
495 fi
496
497 if [ -n "$config_id" ]; then
498 sign_line="$sign_line${sep}\"setup\""
499 fi
500
501 sign_line="$sign_line;"
502
503 cat << EOF >> $its_file
504 signature-1 {
505 algo = "$conf_csum,$conf_sign_algo";
506 key-name-hint = "$conf_sign_keyname";
507 padding = "$conf_padding_algo";
508 $sign_line
509 };
510EOF
511 fi
512
513 cat << EOF >> $its_file
514 };
515EOF
516}
517
518#
519# Assemble fitImage
520#
521# $1 ... .its filename
522# $2 ... fitImage name
523# $3 ... include ramdisk
524fitimage_assemble() {
525 kernelcount=1
526 dtbcount=""
527 DTBS=""
528 ramdiskcount=$3
529 setupcount=""
530 bootscr_id=""
531 default_dtb_image=""
532 rm -f $1 arch/${ARCH}/boot/$2
533
534 if [ -n "${UBOOT_SIGN_IMG_KEYNAME}" -a "${UBOOT_SIGN_KEYNAME}" = "${UBOOT_SIGN_IMG_KEYNAME}" ]; then
535 bbfatal "Keys used to sign images and configuration nodes must be different."
536 fi
537
538 fitimage_emit_fit_header $1
539
540 #
541 # Step 1: Prepare a kernel image section.
542 #
543 fitimage_emit_section_maint $1 imagestart
544
545 uboot_prep_kimage
546 fitimage_emit_section_kernel $1 $kernelcount linux.bin "$linux_comp"
547
548 #
549 # Step 2: Prepare a DTB image section
550 #
551
552 if [ -n "${KERNEL_DEVICETREE}" ]; then
553 dtbcount=1
554 for DTB in ${KERNEL_DEVICETREE}; do
555 if echo $DTB | grep -q '/dts/'; then
556 bbwarn "$DTB contains the full path to the the dts file, but only the dtb name should be used."
557 DTB=`basename $DTB | sed 's,\.dts$,.dtb,g'`
558 fi
559
560 # Skip ${DTB} if it's also provided in ${EXTERNAL_KERNEL_DEVICETREE}
561 if [ -n "${EXTERNAL_KERNEL_DEVICETREE}" ] && [ -s ${EXTERNAL_KERNEL_DEVICETREE}/${DTB} ]; then
562 continue
563 fi
564
565 DTB_PATH="${KERNEL_OUTPUT_DIR}/dts/$DTB"
566 if [ ! -e "$DTB_PATH" ]; then
567 DTB_PATH="${KERNEL_OUTPUT_DIR}/$DTB"
568 fi
569
570 # Strip off the path component from the filename
571 if "${@'false' if oe.types.boolean(d.getVar('KERNEL_DTBVENDORED')) else 'true'}"; then
572 DTB=`basename $DTB`
573 fi
574
575 # Set the default dtb image if it exists in the devicetree.
576 if [ "${FIT_CONF_DEFAULT_DTB}" = "$DTB" ];then
577 default_dtb_image=$(echo "$DTB" | tr '/' '_')
578 fi
579
580 DTB=$(echo "$DTB" | tr '/' '_')
581
582 # Skip DTB if we've picked it up previously
583 echo "$DTBS" | tr ' ' '\n' | grep -xq "$DTB" && continue
584
585 DTBS="$DTBS $DTB"
586 DTB=$(echo $DTB | tr '/' '_')
587 fitimage_emit_section_dtb $1 $DTB $DTB_PATH
588 done
589 fi
590
591 if [ -n "${EXTERNAL_KERNEL_DEVICETREE}" ]; then
592 dtbcount=1
593 for DTB in $(find "${EXTERNAL_KERNEL_DEVICETREE}" -name '*.dtb' -printf '%P\n' | sort) \
594 $(find "${EXTERNAL_KERNEL_DEVICETREE}" -name '*.dtbo' -printf '%P\n' | sort); do
595 # Set the default dtb image if it exists in the devicetree.
596 if [ ${FIT_CONF_DEFAULT_DTB} = $DTB ];then
597 default_dtb_image=$(echo "$DTB" | tr '/' '_')
598 fi
599
600 DTB=$(echo "$DTB" | tr '/' '_')
601
602 # Skip DTB/DTBO if we've picked it up previously
603 echo "$DTBS" | tr ' ' '\n' | grep -xq "$DTB" && continue
604
605 DTBS="$DTBS $DTB"
606
607 # Also skip if a symlink. We'll later have each config section point at it
608 [ $(symlink_points_below $DTB "${EXTERNAL_KERNEL_DEVICETREE}") ] && continue
609
610 DTB=$(echo $DTB | tr '/' '_')
611 fitimage_emit_section_dtb $1 $DTB "${EXTERNAL_KERNEL_DEVICETREE}/$DTB"
612 done
613 fi
614
615 if [ -n "${FIT_CONF_DEFAULT_DTB}" ] && [ -z $default_dtb_image ]; then
616 bbwarn "${FIT_CONF_DEFAULT_DTB} is not available in the list of device trees."
617 fi
618
619 #
620 # Step 3: Prepare a u-boot script section
621 #
622
623 if [ -n "${FIT_UBOOT_ENV}" ]; then
624 cp ${UNPACKDIR}/${FIT_UBOOT_ENV} ${B}
625 bootscr_id="${FIT_UBOOT_ENV}"
626 fitimage_emit_section_boot_script $1 "$bootscr_id" ${FIT_UBOOT_ENV}
627 fi
628
629 #
630 # Step 4: Prepare a setup section. (For x86)
631 #
632 if [ -e ${KERNEL_OUTPUT_DIR}/setup.bin ]; then
633 setupcount=1
634 fitimage_emit_section_setup $1 $setupcount ${KERNEL_OUTPUT_DIR}/setup.bin
635 fi
636
637 #
638 # Step 5: Prepare a ramdisk section.
639 #
640 if [ "x${ramdiskcount}" = "x1" ] && [ "${INITRAMFS_IMAGE_BUNDLE}" != "1" ]; then
641 # Find and use the first initramfs image archive type we find
642 found=
643 for img in ${FIT_SUPPORTED_INITRAMFS_FSTYPES}; do
644 initramfs_path="${INITRAMFS_DEPLOY_DIR_IMAGE}/${INITRAMFS_IMAGE_NAME}.$img"
645 if [ -e "$initramfs_path" ]; then
646 bbnote "Found initramfs image: $initramfs_path"
647 found=true
648 fitimage_emit_section_ramdisk $1 "$ramdiskcount" "$initramfs_path"
649 break
650 else
651 bbnote "Did not find initramfs image: $initramfs_path"
652 fi
653 done
654
655 if [ -z "$found" ]; then
656 bbfatal "Could not find a valid initramfs type for ${INITRAMFS_IMAGE_NAME}, the supported types are: ${FIT_SUPPORTED_INITRAMFS_FSTYPES}"
657 fi
658 fi
659
660 fitimage_emit_section_maint $1 sectend
661
662 # Force the first Kernel and DTB in the default config
663 kernelcount=1
664 if [ -n "$dtbcount" ]; then
665 dtbcount=1
666 fi
667
668 #
669 # Step 6: Prepare a configurations section
670 #
671 fitimage_emit_section_maint $1 confstart
672
673 # kernel-fitimage.bbclass currently only supports a single kernel (no less or
674 # more) to be added to the FIT image along with 0 or more device trees and
675 # 0 or 1 ramdisk.
676 # It is also possible to include an initramfs bundle (kernel and rootfs in one binary)
677 # When the initramfs bundle is used ramdisk is disabled.
678 # If a device tree is to be part of the FIT image, then select
679 # the default configuration to be used is based on the dtbcount. If there is
680 # no dtb present than select the default configuation to be based on
681 # the kernelcount.
682 if [ -n "$DTBS" ]; then
683 i=1
684 for DTB in ${DTBS}; do
685 dtb_ext=${DTB##*.}
686 if [ "$dtb_ext" = "dtbo" ]; then
687 fitimage_emit_section_config $1 "" "$DTB" "" "$bootscr_id" "" "`expr $i = $dtbcount`" "$default_dtb_image"
688 else
689 fitimage_emit_section_config $1 $kernelcount "$DTB" "$ramdiskcount" "$bootscr_id" "$setupcount" "`expr $i = $dtbcount`" "$default_dtb_image"
690 fi
691 i=`expr $i + 1`
692 done
693 else
694 defaultconfigcount=1
695 fitimage_emit_section_config $1 $kernelcount "" "$ramdiskcount" "$bootscr_id" "$setupcount" $defaultconfigcount "$default_dtb_image"
696 fi
697
698 fitimage_emit_section_maint $1 sectend
699
700 fitimage_emit_section_maint $1 fitend
701
702 #
703 # Step 7: Assemble the image
704 #
705 ${UBOOT_MKIMAGE} \
706 ${@'-D "${UBOOT_MKIMAGE_DTCOPTS}"' if len('${UBOOT_MKIMAGE_DTCOPTS}') else ''} \
707 -f $1 \
708 ${KERNEL_OUTPUT_DIR}/$2
709
710 #
711 # Step 8: Sign the image
712 #
713 if [ "x${UBOOT_SIGN_ENABLE}" = "x1" ] ; then
714 ${UBOOT_MKIMAGE_SIGN} \
715 ${@'-D "${UBOOT_MKIMAGE_DTCOPTS}"' if len('${UBOOT_MKIMAGE_DTCOPTS}') else ''} \
716 -F -k "${UBOOT_SIGN_KEYDIR}" \
717 -r ${KERNEL_OUTPUT_DIR}/$2 \
718 ${UBOOT_MKIMAGE_SIGN_ARGS}
719 fi
720}
721
722do_assemble_fitimage() {
723 if echo ${KERNEL_IMAGETYPES} | grep -wq "fitImage"; then
724 cd ${B}
725 fitimage_assemble fit-image.its fitImage-none ""
726 if [ "${INITRAMFS_IMAGE_BUNDLE}" != "1" ]; then
727 ln -sf fitImage-none ${B}/${KERNEL_OUTPUT_DIR}/fitImage
728 fi
729 fi
730}
731
732addtask assemble_fitimage before do_install after do_compile
733
734SYSROOT_DIRS:append = " /sysroot-only"
735do_install:append() {
736 if echo ${KERNEL_IMAGETYPES} | grep -wq "fitImage" && \
737 [ "${UBOOT_SIGN_ENABLE}" = "1" ]; then
738 install -D ${B}/${KERNEL_OUTPUT_DIR}/fitImage-none ${D}/sysroot-only/fitImage
739 fi
740}
741
742do_assemble_fitimage_initramfs() {
743 if echo ${KERNEL_IMAGETYPES} | grep -wq "fitImage" && \
744 test -n "${INITRAMFS_IMAGE}" ; then
745 cd ${B}
746 if [ "${INITRAMFS_IMAGE_BUNDLE}" = "1" ]; then
747 fitimage_assemble fit-image-${INITRAMFS_IMAGE}.its fitImage-bundle ""
748 ln -sf fitImage-bundle ${B}/${KERNEL_OUTPUT_DIR}/fitImage
749 else
750 fitimage_assemble fit-image-${INITRAMFS_IMAGE}.its fitImage-${INITRAMFS_IMAGE} 1
751 fi
752 fi
753}
754
755addtask assemble_fitimage_initramfs before do_deploy after do_bundle_initramfs
756
757do_kernel_generate_rsa_keys() {
758 if [ "${UBOOT_SIGN_ENABLE}" = "0" ] && [ "${FIT_GENERATE_KEYS}" = "1" ]; then
759 bbwarn "FIT_GENERATE_KEYS is set to 1 even though UBOOT_SIGN_ENABLE is set to 0. The keys will not be generated as they won't be used."
760 fi
761
762 if [ "${UBOOT_SIGN_ENABLE}" = "1" ] && [ "${FIT_GENERATE_KEYS}" = "1" ]; then
763
764 # Generate keys to sign configuration nodes, only if they don't already exist
765 if [ ! -f "${UBOOT_SIGN_KEYDIR}/${UBOOT_SIGN_KEYNAME}".key ] || \
766 [ ! -f "${UBOOT_SIGN_KEYDIR}/${UBOOT_SIGN_KEYNAME}".crt ]; then
767
768 # make directory if it does not already exist
769 mkdir -p "${UBOOT_SIGN_KEYDIR}"
770
771 bbnote "Generating RSA private key for signing fitImage"
772 openssl genrsa ${FIT_KEY_GENRSA_ARGS} -out \
773 "${UBOOT_SIGN_KEYDIR}/${UBOOT_SIGN_KEYNAME}".key \
774 "${FIT_SIGN_NUMBITS}"
775
776 bbnote "Generating certificate for signing fitImage"
777 openssl req ${FIT_KEY_REQ_ARGS} "${FIT_KEY_SIGN_PKCS}" \
778 -key "${UBOOT_SIGN_KEYDIR}/${UBOOT_SIGN_KEYNAME}".key \
779 -out "${UBOOT_SIGN_KEYDIR}/${UBOOT_SIGN_KEYNAME}".crt
780 fi
781
782 # Generate keys to sign image nodes, only if they don't already exist
783 if [ ! -f "${UBOOT_SIGN_KEYDIR}/${UBOOT_SIGN_IMG_KEYNAME}".key ] || \
784 [ ! -f "${UBOOT_SIGN_KEYDIR}/${UBOOT_SIGN_IMG_KEYNAME}".crt ]; then
785
786 # make directory if it does not already exist
787 mkdir -p "${UBOOT_SIGN_KEYDIR}"
788
789 bbnote "Generating RSA private key for signing fitImage"
790 openssl genrsa ${FIT_KEY_GENRSA_ARGS} -out \
791 "${UBOOT_SIGN_KEYDIR}/${UBOOT_SIGN_IMG_KEYNAME}".key \
792 "${FIT_SIGN_NUMBITS}"
793
794 bbnote "Generating certificate for signing fitImage"
795 openssl req ${FIT_KEY_REQ_ARGS} "${FIT_KEY_SIGN_PKCS}" \
796 -key "${UBOOT_SIGN_KEYDIR}/${UBOOT_SIGN_IMG_KEYNAME}".key \
797 -out "${UBOOT_SIGN_KEYDIR}/${UBOOT_SIGN_IMG_KEYNAME}".crt
798 fi
799 fi
800}
801
802addtask kernel_generate_rsa_keys before do_assemble_fitimage after do_compile
803
804kernel_do_deploy[vardepsexclude] = "DATETIME"
805kernel_do_deploy:append() {
806 # Update deploy directory
807 if echo ${KERNEL_IMAGETYPES} | grep -wq "fitImage"; then
808
809 if [ "${INITRAMFS_IMAGE_BUNDLE}" != "1" ]; then
810 bbnote "Copying fit-image.its source file..."
811 install -m 0644 ${B}/fit-image.its "$deployDir/fitImage-its-${KERNEL_FIT_NAME}.its"
812 if [ -n "${KERNEL_FIT_LINK_NAME}" ] ; then
813 ln -snf fitImage-its-${KERNEL_FIT_NAME}.its "$deployDir/fitImage-its-${KERNEL_FIT_LINK_NAME}"
814 fi
815
816 bbnote "Copying linux.bin file..."
817 install -m 0644 ${B}/linux.bin $deployDir/fitImage-linux.bin-${KERNEL_FIT_NAME}${KERNEL_FIT_BIN_EXT}
818 if [ -n "${KERNEL_FIT_LINK_NAME}" ] ; then
819 ln -snf fitImage-linux.bin-${KERNEL_FIT_NAME}${KERNEL_FIT_BIN_EXT} "$deployDir/fitImage-linux.bin-${KERNEL_FIT_LINK_NAME}"
820 fi
821 fi
822
823 if [ -n "${INITRAMFS_IMAGE}" ]; then
824 bbnote "Copying fit-image-${INITRAMFS_IMAGE}.its source file..."
825 install -m 0644 ${B}/fit-image-${INITRAMFS_IMAGE}.its "$deployDir/fitImage-its-${INITRAMFS_IMAGE_NAME}-${KERNEL_FIT_NAME}.its"
826 if [ -n "${KERNEL_FIT_LINK_NAME}" ] ; then
827 ln -snf fitImage-its-${INITRAMFS_IMAGE_NAME}-${KERNEL_FIT_NAME}.its "$deployDir/fitImage-its-${INITRAMFS_IMAGE_NAME}-${KERNEL_FIT_LINK_NAME}"
828 fi
829
830 if [ "${INITRAMFS_IMAGE_BUNDLE}" != "1" ]; then
831 bbnote "Copying fitImage-${INITRAMFS_IMAGE} file..."
832 install -m 0644 ${B}/${KERNEL_OUTPUT_DIR}/fitImage-${INITRAMFS_IMAGE} "$deployDir/fitImage-${INITRAMFS_IMAGE_NAME}-${KERNEL_FIT_NAME}${KERNEL_FIT_BIN_EXT}"
833 if [ -n "${KERNEL_FIT_LINK_NAME}" ] ; then
834 ln -snf fitImage-${INITRAMFS_IMAGE_NAME}-${KERNEL_FIT_NAME}${KERNEL_FIT_BIN_EXT} "$deployDir/fitImage-${INITRAMFS_IMAGE_NAME}-${KERNEL_FIT_LINK_NAME}"
835 fi
836 fi
837 fi
838 fi
839}
diff --git a/meta/classes-recipe/kernel-uboot.bbclass b/meta/classes-recipe/kernel-uboot.bbclass
index 6d4aff6b11..62974baaf0 100644
--- a/meta/classes-recipe/kernel-uboot.bbclass
+++ b/meta/classes-recipe/kernel-uboot.bbclass
@@ -12,19 +12,27 @@ FIT_KERNEL_COMP_ALG_EXTENSION ?= ".gz"
12UBOOT_MKIMAGE_KERNEL_TYPE ?= "kernel" 12UBOOT_MKIMAGE_KERNEL_TYPE ?= "kernel"
13 13
14uboot_prep_kimage() { 14uboot_prep_kimage() {
15 if [ -e arch/${ARCH}/boot/compressed/vmlinux ]; then 15 output_dir=$1
16 # For backward compatibility with kernel-fitimage.bbclass and kernel-uboot.bbclass
17 # support calling without parameter as well
18 if [ -z "$output_dir" ]; then
19 output_dir='.'
20 fi
21
22 linux_bin=$output_dir/linux.bin
23 if [ -e "arch/${ARCH}/boot/compressed/vmlinux" ]; then
16 vmlinux_path="arch/${ARCH}/boot/compressed/vmlinux" 24 vmlinux_path="arch/${ARCH}/boot/compressed/vmlinux"
17 linux_suffix="" 25 linux_suffix=""
18 linux_comp="none" 26 linux_comp="none"
19 elif [ -e arch/${ARCH}/boot/vmlinuz.bin ]; then 27 elif [ -e "arch/${ARCH}/boot/vmlinuz.bin" ]; then
20 rm -f linux.bin 28 rm -f "$linux_bin"
21 cp -l arch/${ARCH}/boot/vmlinuz.bin linux.bin 29 cp -l "arch/${ARCH}/boot/vmlinuz.bin" "$linux_bin"
22 vmlinux_path="" 30 vmlinux_path=""
23 linux_suffix="" 31 linux_suffix=""
24 linux_comp="none" 32 linux_comp="none"
25 else 33 else
26 vmlinux_path="vmlinux" 34 vmlinux_path="vmlinux"
27 # Use vmlinux.initramfs for linux.bin when INITRAMFS_IMAGE_BUNDLE set 35 # Use vmlinux.initramfs for $linux_bin when INITRAMFS_IMAGE_BUNDLE set
28 # As per the implementation in kernel.bbclass. 36 # As per the implementation in kernel.bbclass.
29 # See do_bundle_initramfs function 37 # See do_bundle_initramfs function
30 if [ "${INITRAMFS_IMAGE_BUNDLE}" = "1" ] && [ -e vmlinux.initramfs ]; then 38 if [ "${INITRAMFS_IMAGE_BUNDLE}" = "1" ] && [ -e vmlinux.initramfs ]; then
@@ -34,18 +42,18 @@ uboot_prep_kimage() {
34 linux_comp="${FIT_KERNEL_COMP_ALG}" 42 linux_comp="${FIT_KERNEL_COMP_ALG}"
35 fi 43 fi
36 44
37 [ -n "${vmlinux_path}" ] && ${KERNEL_OBJCOPY} -O binary -R .note -R .comment -S "${vmlinux_path}" linux.bin 45 [ -n "$vmlinux_path" ] && ${KERNEL_OBJCOPY} -O binary -R .note -R .comment -S "$vmlinux_path" "$linux_bin"
38 46
39 if [ "${linux_comp}" != "none" ] ; then 47 if [ "$linux_comp" != "none" ] ; then
40 if [ "${linux_comp}" = "gzip" ] ; then 48 if [ "$linux_comp" = "gzip" ] ; then
41 gzip -9 linux.bin 49 gzip -9 "$linux_bin"
42 elif [ "${linux_comp}" = "lzo" ] ; then 50 elif [ "$linux_comp" = "lzo" ] ; then
43 lzop -9 linux.bin 51 lzop -9 "$linux_bin"
44 elif [ "${linux_comp}" = "lzma" ] ; then 52 elif [ "$linux_comp" = "lzma" ] ; then
45 xz --format=lzma -f -6 linux.bin 53 xz --format=lzma -f -6 "$linux_bin"
46 fi 54 fi
47 mv -f "linux.bin${linux_suffix}" linux.bin 55 mv -f "$linux_bin$linux_suffix" "$linux_bin"
48 fi 56 fi
49 57
50 echo "${linux_comp}" 58 printf "$linux_comp" > "$output_dir/linux_comp"
51} 59}
diff --git a/meta/classes-recipe/kernel-uimage.bbclass b/meta/classes-recipe/kernel-uimage.bbclass
index 1a599e656c..e353232a0e 100644
--- a/meta/classes-recipe/kernel-uimage.bbclass
+++ b/meta/classes-recipe/kernel-uimage.bbclass
@@ -29,6 +29,7 @@ python __anonymous () {
29do_uboot_mkimage[dirs] += "${B}" 29do_uboot_mkimage[dirs] += "${B}"
30do_uboot_mkimage() { 30do_uboot_mkimage() {
31 uboot_prep_kimage 31 uboot_prep_kimage
32 linux_comp="$(cat linux_comp)"
32 33
33 ENTRYPOINT=${UBOOT_ENTRYPOINT} 34 ENTRYPOINT=${UBOOT_ENTRYPOINT}
34 if [ -n "${UBOOT_ENTRYSYMBOL}" ]; then 35 if [ -n "${UBOOT_ENTRYSYMBOL}" ]; then
@@ -36,6 +37,6 @@ do_uboot_mkimage() {
36 awk '$3=="${UBOOT_ENTRYSYMBOL}" {print "0x"$1;exit}'` 37 awk '$3=="${UBOOT_ENTRYSYMBOL}" {print "0x"$1;exit}'`
37 fi 38 fi
38 39
39 uboot-mkimage -A ${UBOOT_ARCH} -O linux -T ${UBOOT_MKIMAGE_KERNEL_TYPE} -C "${linux_comp}" -a ${UBOOT_LOADADDRESS} -e $ENTRYPOINT -n "${DISTRO_NAME}/${PV}/${MACHINE}" -d linux.bin ${B}/arch/${ARCH}/boot/uImage 40 uboot-mkimage -A ${UBOOT_ARCH} -O linux -T ${UBOOT_MKIMAGE_KERNEL_TYPE} -C "$linux_comp" -a ${UBOOT_LOADADDRESS} -e $ENTRYPOINT -n "${DISTRO_NAME}/${PV}/${MACHINE}" -d linux.bin ${B}/arch/${ARCH}/boot/uImage
40 rm -f linux.bin 41 rm -f linux.bin
41} 42}
diff --git a/meta/classes-recipe/kernel.bbclass b/meta/classes-recipe/kernel.bbclass
index 36ce659762..2d9943c8a0 100644
--- a/meta/classes-recipe/kernel.bbclass
+++ b/meta/classes-recipe/kernel.bbclass
@@ -84,6 +84,10 @@ python __anonymous () {
84 types = (alttype + ' ' + types).strip() 84 types = (alttype + ' ' + types).strip()
85 d.setVar('KERNEL_IMAGETYPES', types) 85 d.setVar('KERNEL_IMAGETYPES', types)
86 86
87 # Since kernel-fitimage.bbclass got replaced by kernel-fit-image.bbclass
88 if "fitImage" in types:
89 bb.error("fitImage is no longer supported as a KERNEL_IMAGETYPE(S). FIT images are built by the linux-yocto-fitimage recipe.")
90
87 # KERNEL_IMAGETYPES may contain a mixture of image types supported directly 91 # KERNEL_IMAGETYPES may contain a mixture of image types supported directly
88 # by the kernel build system and types which are created by post-processing 92 # by the kernel build system and types which are created by post-processing
89 # the output of the kernel build system (e.g. compressing vmlinux -> 93 # the output of the kernel build system (e.g. compressing vmlinux ->
@@ -477,17 +481,10 @@ kernel_do_install() {
477 install -d ${D}/${KERNEL_IMAGEDEST} 481 install -d ${D}/${KERNEL_IMAGEDEST}
478 482
479 # 483 #
480 # When including an initramfs bundle inside a FIT image, the fitImage is created after the install task 484 # bundle_initramfs runs after do_install before do_deploy. do_deploy does what's needed therefore.
481 # by do_assemble_fitimage_initramfs.
482 # This happens after the generation of the initramfs bundle (done by do_bundle_initramfs).
483 # So, at the level of the install task we should not try to install the fitImage. fitImage is still not
484 # generated yet.
485 # After the generation of the fitImage, the deploy task copies the fitImage from the build directory to
486 # the deploy folder.
487 # 485 #
488
489 for imageType in ${KERNEL_IMAGETYPES} ; do 486 for imageType in ${KERNEL_IMAGETYPES} ; do
490 if [ $imageType != "fitImage" ] || [ "${INITRAMFS_IMAGE_BUNDLE}" != "1" ] ; then 487 if [ "${INITRAMFS_IMAGE_BUNDLE}" != "1" ] ; then
491 install -m 0644 ${KERNEL_OUTPUT_DIR}/$imageType ${D}/${KERNEL_IMAGEDEST}/$imageType-${KERNEL_VERSION} 488 install -m 0644 ${KERNEL_OUTPUT_DIR}/$imageType ${D}/${KERNEL_IMAGEDEST}/$imageType-${KERNEL_VERSION}
492 fi 489 fi
493 done 490 done
@@ -845,9 +842,6 @@ kernel_do_deploy() {
845 842
846 if [ ! -z "${INITRAMFS_IMAGE}" -a x"${INITRAMFS_IMAGE_BUNDLE}" = x1 ]; then 843 if [ ! -z "${INITRAMFS_IMAGE}" -a x"${INITRAMFS_IMAGE_BUNDLE}" = x1 ]; then
847 for imageType in ${KERNEL_IMAGETYPES} ; do 844 for imageType in ${KERNEL_IMAGETYPES} ; do
848 if [ "$imageType" = "fitImage" ] ; then
849 continue
850 fi
851 initramfsBaseName=$imageType-${INITRAMFS_NAME} 845 initramfsBaseName=$imageType-${INITRAMFS_NAME}
852 install -m 0644 ${KERNEL_OUTPUT_DIR}/$imageType.initramfs $deployDir/$initramfsBaseName${KERNEL_IMAGE_BIN_EXT} 846 install -m 0644 ${KERNEL_OUTPUT_DIR}/$imageType.initramfs $deployDir/$initramfsBaseName${KERNEL_IMAGE_BIN_EXT}
853 if [ -n "${INITRAMFS_LINK_NAME}" ] ; then 847 if [ -n "${INITRAMFS_LINK_NAME}" ] ; then
diff --git a/meta/classes-recipe/populate_sdk_ext.bbclass b/meta/classes-recipe/populate_sdk_ext.bbclass
index de4799f013..2d7d661d25 100644
--- a/meta/classes-recipe/populate_sdk_ext.bbclass
+++ b/meta/classes-recipe/populate_sdk_ext.bbclass
@@ -40,7 +40,7 @@ ESDK_LOCALCONF_REMOVE ?= "CONF_VERSION \
40 TMPDIR \ 40 TMPDIR \
41 BB_SERVER_TIMEOUT \ 41 BB_SERVER_TIMEOUT \
42 " 42 "
43ESDK_CLASS_INHERIT_DISABLE ?= "buildhistory icecc" 43ESDK_CLASS_INHERIT_DISABLE ?= "buildhistory"
44SDK_UPDATE_URL ?= "" 44SDK_UPDATE_URL ?= ""
45 45
46SDK_TARGETS ?= "${PN}" 46SDK_TARGETS ?= "${PN}"
diff --git a/meta/classes-recipe/uboot-sign.bbclass b/meta/classes-recipe/uboot-sign.bbclass
index 796c040e8b..73e9ce3f11 100644
--- a/meta/classes-recipe/uboot-sign.bbclass
+++ b/meta/classes-recipe/uboot-sign.bbclass
@@ -112,13 +112,14 @@ UBOOT_FIT_CONF_USER_LOADABLES ?= ''
112UBOOT_FIT_UBOOT_LOADADDRESS ?= "${UBOOT_LOADADDRESS}" 112UBOOT_FIT_UBOOT_LOADADDRESS ?= "${UBOOT_LOADADDRESS}"
113UBOOT_FIT_UBOOT_ENTRYPOINT ?= "${UBOOT_ENTRYPOINT}" 113UBOOT_FIT_UBOOT_ENTRYPOINT ?= "${UBOOT_ENTRYPOINT}"
114 114
115
116DEPENDS:append = " ${@'kernel-signing-keys-native' if d.getVar('FIT_GENERATE_KEYS') == '1' else ''}"
117
115python() { 118python() {
116 # We need u-boot-tools-native if we're creating a U-Boot fitImage 119 # We need u-boot-tools-native if we're creating a U-Boot fitImage
117 sign = d.getVar('UBOOT_SIGN_ENABLE') == '1' 120 sign = d.getVar('UBOOT_SIGN_ENABLE') == '1'
118 if d.getVar('UBOOT_FITIMAGE_ENABLE') == '1' or sign: 121 if d.getVar('UBOOT_FITIMAGE_ENABLE') == '1' or sign:
119 d.appendVar('DEPENDS', " u-boot-tools-native dtc-native") 122 d.appendVar('DEPENDS', " u-boot-tools-native dtc-native")
120 if d.getVar('FIT_GENERATE_KEYS') == '1' and sign:
121 d.appendVarFlag('do_uboot_assemble_fitimage', 'depends', ' virtual/kernel:do_kernel_generate_rsa_keys')
122} 123}
123 124
124concat_dtb() { 125concat_dtb() {
diff --git a/meta/classes-recipe/update-alternatives.bbclass b/meta/classes-recipe/update-alternatives.bbclass
index b153e1b297..5f40dc23ea 100644
--- a/meta/classes-recipe/update-alternatives.bbclass
+++ b/meta/classes-recipe/update-alternatives.bbclass
@@ -73,24 +73,6 @@ UPDALTVARS = "ALTERNATIVE ALTERNATIVE_LINK_NAME ALTERNATIVE_TARGET ALTERNATIVE_
73 73
74PACKAGE_WRITE_DEPS += "virtual/update-alternatives-native" 74PACKAGE_WRITE_DEPS += "virtual/update-alternatives-native"
75 75
76def gen_updatealternativesvardeps(d):
77 pkgs = (d.getVar("PACKAGES") or "").split()
78 vars = (d.getVar("UPDALTVARS") or "").split()
79
80 # First compute them for non_pkg versions
81 for v in vars:
82 for flag in sorted((d.getVarFlags(v) or {}).keys()):
83 if flag == "doc" or flag == "vardeps" or flag == "vardepsexp":
84 continue
85 d.appendVar('%s_VARDEPS' % (v), ' %s:%s' % (flag, d.getVarFlag(v, flag, False)))
86
87 for p in pkgs:
88 for v in vars:
89 for flag in sorted((d.getVarFlags("%s:%s" % (v,p)) or {}).keys()):
90 if flag == "doc" or flag == "vardeps" or flag == "vardepsexp":
91 continue
92 d.appendVar('%s_VARDEPS_%s' % (v,p), ' %s:%s' % (flag, d.getVarFlag('%s:%s' % (v,p), flag, False)))
93
94def ua_extend_depends(d): 76def ua_extend_depends(d):
95 if not 'virtual/update-alternatives' in d.getVar('PROVIDES'): 77 if not 'virtual/update-alternatives' in d.getVar('PROVIDES'):
96 d.appendVar('DEPENDS', ' virtual/${MLPREFIX}update-alternatives') 78 d.appendVar('DEPENDS', ' virtual/${MLPREFIX}update-alternatives')
@@ -112,9 +94,6 @@ python __anonymous() {
112 if not update_alternatives_enabled(d): 94 if not update_alternatives_enabled(d):
113 return 95 return
114 96
115 # compute special vardeps
116 gen_updatealternativesvardeps(d)
117
118 # extend the depends to include virtual/update-alternatives 97 # extend the depends to include virtual/update-alternatives
119 ua_extend_depends(d) 98 ua_extend_depends(d)
120} 99}
@@ -124,13 +103,20 @@ def gen_updatealternativesvars(d):
124 pkgs = (d.getVar("PACKAGES") or "").split() 103 pkgs = (d.getVar("PACKAGES") or "").split()
125 vars = (d.getVar("UPDALTVARS") or "").split() 104 vars = (d.getVar("UPDALTVARS") or "").split()
126 105
106 # First compute them for non_pkg versions
127 for v in vars: 107 for v in vars:
128 ret.append(v + "_VARDEPS") 108 for flag in sorted((d.getVarFlags(v) or {}).keys()):
109 if flag == "doc" or flag == "vardeps" or flag == "vardepsexp":
110 continue
111 ret.append(v + "[" + flag + "]")
129 112
130 for p in pkgs: 113 for p in pkgs:
131 for v in vars: 114 for v in vars:
132 ret.append(v + ":" + p) 115 for flag in sorted((d.getVarFlags("%s:%s" % (v,p)) or {}).keys()):
133 ret.append(v + "_VARDEPS_" + p) 116 if flag == "doc" or flag == "vardeps" or flag == "vardepsexp":
117 continue
118 ret.append('%s:%s' % (v,p) + "[" + flag + "]")
119
134 return " ".join(ret) 120 return " ".join(ret)
135 121
136# Now the new stuff, we use a custom function to generate the right values 122# Now the new stuff, we use a custom function to generate the right values
diff --git a/meta/classes/icecc.bbclass b/meta/classes/icecc.bbclass
deleted file mode 100644
index 8a48f2ad63..0000000000
--- a/meta/classes/icecc.bbclass
+++ /dev/null
@@ -1,443 +0,0 @@
1#
2# Copyright OpenEmbedded Contributors
3#
4# SPDX-License-Identifier: MIT
5#
6
7# Icecream distributed compiling support
8#
9# Stages directories with symlinks from gcc/g++ to icecc, for both
10# native and cross compilers. Depending on each configure or compile,
11# the directories are added at the head of the PATH list and ICECC_CXX
12# and ICECC_CC are set.
13#
14# For the cross compiler, creates a tar.gz of our toolchain and sets
15# ICECC_VERSION accordingly.
16#
17# The class now handles all 3 different compile 'stages' (i.e native ,cross-kernel and target) creating the
18# necessary environment tar.gz file to be used by the remote machines.
19# It also supports meta-toolchain generation.
20#
21# If ICECC_PATH is not set in local.conf then the class will try to locate it using 'bb.utils.which'
22# but nothing is sure. ;)
23#
24# If ICECC_ENV_EXEC is set in local.conf, then it should point to the icecc-create-env script provided by the user
25# or the default one provided by icecc-create-env_0.1.bb will be used.
26# (NOTE that this is a modified version of the needed script and *not the one that comes with icecream*).
27#
28# User can specify if specific recipes or recipes inheriting specific classes should not use icecc to distribute
29# compile jobs to remote machines, but handle them locally by defining ICECC_CLASS_DISABLE and ICECC_RECIPE_DISABLE
30# with the appropriate values in local.conf. In addition the user can force to enable icecc for recipes
31# which set an empty PARALLEL_MAKE variable by defining ICECC_RECIPE_ENABLE.
32#
33#########################################################################################
34# Error checking is kept to minimum so double check any parameters you pass to the class
35#########################################################################################
36
37BB_BASEHASH_IGNORE_VARS += "ICECC_PARALLEL_MAKE ICECC_DISABLED ICECC_RECIPE_DISABLE \
38 ICECC_CLASS_DISABLE ICECC_RECIPE_ENABLE ICECC_PATH ICECC_ENV_EXEC \
39 ICECC_CARET_WORKAROUND ICECC_CFLAGS ICECC_ENV_VERSION \
40 ICECC_DEBUG ICECC_LOGFILE ICECC_REPEAT_RATE ICECC_PREFERRED_HOST \
41 ICECC_CLANG_REMOTE_CPP ICECC_IGNORE_UNVERIFIED ICECC_TEST_SOCKET \
42 ICECC_ENV_DEBUG ICECC_REMOTE_CPP \
43 "
44
45ICECC_ENV_EXEC ?= "${STAGING_BINDIR_NATIVE}/icecc-create-env"
46
47HOSTTOOLS_NONFATAL += "icecc patchelf"
48
49# This version can be incremented when changes are made to the environment that
50# invalidate the version on the compile nodes. Changing it will cause a new
51# environment to be created.
52#
53# A useful thing to do for testing icecream changes locally is to add a
54# subversion in local.conf:
55# ICECC_ENV_VERSION:append = "-my-ver-1"
56ICECC_ENV_VERSION = "2"
57
58# Default to disabling the caret workaround, If set to "1" in local.conf, icecc
59# will locally recompile any files that have warnings, which can adversely
60# affect performance.
61#
62# See: https://github.com/icecc/icecream/issues/190
63export ICECC_CARET_WORKAROUND ??= "0"
64
65export ICECC_REMOTE_CPP ??= "0"
66
67ICECC_CFLAGS = ""
68CFLAGS += "${ICECC_CFLAGS}"
69CXXFLAGS += "${ICECC_CFLAGS}"
70
71# Debug flags when generating environments
72ICECC_ENV_DEBUG ??= ""
73
74# Disable recipe list contains a list of recipes that can not distribute
75# compile tasks for one reason or the other. When adding a new entry, please
76# document why (how it failed) so that we can re-evaluate it later e.g. when
77# there is a new version.
78#
79# libgcc-initial - fails with CPP sanity check error if host sysroot contains
80# cross gcc built for another target tune/variant.
81# pixman - prng_state: TLS reference mismatches non-TLS reference, possibly due to
82# pragma omp threadprivate(prng_state).
83# systemtap - _HelperSDT.c undefs macros and uses the identifiers in macros emitting
84# inline assembly.
85# target-sdk-provides-dummy - ${HOST_PREFIX} is empty which triggers the "NULL
86# prefix" error.
87ICECC_RECIPE_DISABLE += "\
88 libgcc-initial \
89 pixman \
90 systemtap \
91 target-sdk-provides-dummy \
92 "
93
94# Classes that should not use icecc. When adding a new entry, please
95# document why (how it failed) so that we can re-evaluate it later.
96#
97# image - images aren't compiling, but the testing framework for images captures
98# PARALLEL_MAKE as part of the test environment. Many tests won't use
99# icecream, but leaving the high level of parallelism can cause them to
100# consume an unnecessary amount of resources.
101ICECC_CLASS_DISABLE += "\
102 image \
103 "
104
105def get_icecc_dep(d):
106 # INHIBIT_DEFAULT_DEPS doesn't apply to the patch command. Whether or not
107 # we need that built is the responsibility of the patch function / class, not
108 # the application.
109 if not d.getVar('INHIBIT_DEFAULT_DEPS'):
110 return "icecc-create-env-native"
111 return ""
112
113DEPENDS:prepend = "${@get_icecc_dep(d)} "
114
115get_cross_kernel_cc[vardepsexclude] += "KERNEL_CC"
116def get_cross_kernel_cc(bb,d):
117 if not icecc_is_kernel(bb, d):
118 return None
119
120 # evaluate the expression by the shell if necessary
121 kernel_cc = d.getVar('KERNEL_CC')
122 if '`' in kernel_cc or '$(' in kernel_cc:
123 import subprocess
124 kernel_cc = subprocess.check_output("echo %s" % kernel_cc, shell=True).decode("utf-8")[:-1]
125
126 kernel_cc = kernel_cc.replace('ccache', '').strip()
127 kernel_cc = kernel_cc.split(' ')[0]
128 kernel_cc = kernel_cc.strip()
129 return kernel_cc
130
131def get_icecc(d):
132 return d.getVar('ICECC_PATH') or bb.utils.which(os.getenv("PATH"), "icecc")
133
134def use_icecc(bb,d):
135 if d.getVar('ICECC_DISABLED') == "1":
136 # don't even try it, when explicitly disabled
137 return "no"
138
139 # allarch recipes don't use compiler
140 if icecc_is_allarch(bb, d):
141 return "no"
142
143 if icecc_is_cross_canadian(bb, d):
144 return "no"
145
146 pn = d.getVar('PN')
147 bpn = d.getVar('BPN')
148
149 # Enable/disable checks are made against BPN, because there is a good
150 # chance that if icecc should be skipped for a recipe, it should be skipped
151 # for all the variants of that recipe. PN is still checked in case a user
152 # specified a more specific recipe.
153 check_pn = set([pn, bpn])
154
155 class_disable = (d.getVar('ICECC_CLASS_DISABLE') or "").split()
156
157 for bbclass in class_disable:
158 if bb.data.inherits_class(bbclass, d):
159 bb.debug(1, "%s: bbclass %s found in disable, disable icecc" % (pn, bbclass))
160 return "no"
161
162 disabled_recipes = (d.getVar('ICECC_RECIPE_DISABLE') or "").split()
163 enabled_recipes = (d.getVar('ICECC_RECIPE_ENABLE') or "").split()
164
165 if check_pn & set(disabled_recipes):
166 bb.debug(1, "%s: found in disable list, disable icecc" % pn)
167 return "no"
168
169 if check_pn & set(enabled_recipes):
170 bb.debug(1, "%s: found in enabled recipes list, enable icecc" % pn)
171 return "yes"
172
173 if d.getVar('PARALLEL_MAKE') == "":
174 bb.debug(1, "%s: has empty PARALLEL_MAKE, disable icecc" % pn)
175 return "no"
176
177 return "yes"
178
179def icecc_is_allarch(bb, d):
180 return d.getVar("PACKAGE_ARCH") == "all"
181
182def icecc_is_kernel(bb, d):
183 return \
184 bb.data.inherits_class("kernel", d);
185
186def icecc_is_native(bb, d):
187 return \
188 bb.data.inherits_class("cross", d) or \
189 bb.data.inherits_class("native", d);
190
191def icecc_is_cross_canadian(bb, d):
192 return bb.data.inherits_class("cross-canadian", d)
193
194def icecc_dir(bb, d):
195 return d.expand('${TMPDIR}/work-shared/ice')
196
197# Don't pollute allarch signatures with TARGET_FPU
198icecc_version[vardepsexclude] += "TARGET_FPU"
199def icecc_version(bb, d):
200 if use_icecc(bb, d) == "no":
201 return ""
202
203 parallel = d.getVar('ICECC_PARALLEL_MAKE') or ""
204 if not d.getVar('PARALLEL_MAKE') == "" and parallel:
205 d.setVar("PARALLEL_MAKE", parallel)
206
207 # Disable showing the caret in the GCC compiler output if the workaround is
208 # disabled
209 if d.getVar('ICECC_CARET_WORKAROUND') == '0':
210 d.setVar('ICECC_CFLAGS', '-fno-diagnostics-show-caret')
211
212 if icecc_is_native(bb, d):
213 archive_name = "local-host-env"
214 elif d.expand('${HOST_PREFIX}') == "":
215 bb.fatal(d.expand("${PN}"), " NULL prefix")
216 else:
217 prefix = d.expand('${HOST_PREFIX}' )
218 distro = d.expand('${DISTRO}')
219 target_sys = d.expand('${TARGET_SYS}')
220 float = d.getVar('TARGET_FPU') or "hard"
221 archive_name = prefix + distro + "-" + target_sys + "-" + float
222 if icecc_is_kernel(bb, d):
223 archive_name += "-kernel"
224
225 import socket
226 ice_dir = icecc_dir(bb, d)
227 tar_file = os.path.join(ice_dir, "{archive}-{version}-@VERSION@-{hostname}.tar.gz".format(
228 archive=archive_name,
229 version=d.getVar('ICECC_ENV_VERSION'),
230 hostname=socket.gethostname()
231 ))
232
233 return tar_file
234
235def icecc_path(bb,d):
236 if use_icecc(bb, d) == "no":
237 # don't create unnecessary directories when icecc is disabled
238 return
239
240 staging = os.path.join(d.expand('${STAGING_BINDIR}'), "ice")
241 if icecc_is_kernel(bb, d):
242 staging += "-kernel"
243
244 return staging
245
246def icecc_get_external_tool(bb, d, tool):
247 external_toolchain_bindir = d.expand('${EXTERNAL_TOOLCHAIN}${bindir_cross}')
248 target_prefix = d.expand('${TARGET_PREFIX}')
249 return os.path.join(external_toolchain_bindir, '%s%s' % (target_prefix, tool))
250
251def icecc_get_tool_link(tool, d):
252 import subprocess
253 try:
254 return subprocess.check_output("readlink -f %s" % tool, shell=True).decode("utf-8")[:-1]
255 except subprocess.CalledProcessError as e:
256 bb.note("icecc: one of the tools probably disappeared during recipe parsing, cmd readlink -f %s returned %d:\n%s" % (tool, e.returncode, e.output.decode("utf-8")))
257 return tool
258
259def icecc_get_path_tool(tool, d):
260 # This is a little ugly, but we want to make sure we add an actual
261 # compiler to the toolchain, not ccache. Some distros (e.g. Fedora)
262 # have ccache enabled by default using symlinks in PATH, meaning ccache
263 # would be found first when looking for the compiler.
264 paths = os.getenv("PATH").split(':')
265 while True:
266 p, hist = bb.utils.which(':'.join(paths), tool, history=True)
267 if not p or os.path.basename(icecc_get_tool_link(p, d)) != 'ccache':
268 return p
269 paths = paths[len(hist):]
270
271 return ""
272
273# Don't pollute native signatures with target TUNE_PKGARCH through STAGING_BINDIR_TOOLCHAIN
274icecc_get_tool[vardepsexclude] += "STAGING_BINDIR_TOOLCHAIN"
275def icecc_get_tool(bb, d, tool):
276 if icecc_is_native(bb, d):
277 return icecc_get_path_tool(tool, d)
278 elif icecc_is_kernel(bb, d):
279 return icecc_get_path_tool(get_cross_kernel_cc(bb, d), d)
280 else:
281 ice_dir = d.expand('${STAGING_BINDIR_TOOLCHAIN}')
282 target_sys = d.expand('${TARGET_SYS}')
283 for p in ice_dir.split(':'):
284 tool_bin = os.path.join(p, "%s-%s" % (target_sys, tool))
285 if os.path.isfile(tool_bin):
286 return tool_bin
287 external_tool_bin = icecc_get_external_tool(bb, d, tool)
288 if os.path.isfile(external_tool_bin):
289 return external_tool_bin
290 return ""
291
292def icecc_get_and_check_tool(bb, d, tool):
293 # Check that g++ or gcc is not a symbolic link to icecc binary in
294 # PATH or icecc-create-env script will silently create an invalid
295 # compiler environment package.
296 t = icecc_get_tool(bb, d, tool)
297 if t:
298 link_path = icecc_get_tool_link(t, d)
299 if link_path == get_icecc(d):
300 bb.error("%s is a symlink to %s in PATH and this prevents icecc from working" % (t, link_path))
301 return ""
302 else:
303 return t
304 else:
305 return t
306
307set_icecc_env[vardepsexclude] += "KERNEL_CC"
308python set_icecc_env() {
309 import os
310 import subprocess
311
312 if use_icecc(bb, d) == "no":
313 return
314 ICECC_VERSION = icecc_version(bb, d)
315 if not ICECC_VERSION:
316 bb.warn("Cannot use icecc: could not get ICECC_VERSION")
317 return
318
319 ICE_PATH = icecc_path(bb, d)
320 if not ICE_PATH:
321 bb.warn("Cannot use icecc: could not get ICE_PATH")
322 return
323
324 ICECC_BIN = get_icecc(d)
325 if not ICECC_BIN:
326 bb.warn("Cannot use icecc: icecc binary not found")
327 return
328
329 if (not bb.utils.which(os.getenv("PATH"), "patchelf") and
330 not bb.utils.which(os.getenv("PATH"), "patchelf-uninative")):
331 bb.warn("Cannot use icecc: patchelf not found")
332 return
333
334 ICECC_CC = icecc_get_and_check_tool(bb, d, "gcc")
335 ICECC_CXX = icecc_get_and_check_tool(bb, d, "g++")
336 # cannot use icecc_get_and_check_tool here because it assumes as without target_sys prefix
337 ICECC_WHICH_AS = bb.utils.which(os.getenv('PATH'), 'as')
338 if (not os.access(ICECC_CC, os.X_OK) or
339 not os.access(ICECC_CXX, os.X_OK)):
340 bb.note("Cannot use icecc: could not get ICECC_CC or ICECC_CXX")
341 return
342
343 cmd = []
344 try:
345 cmd = [ICECC_CC, '-dumpversion']
346 ICE_VERSION = subprocess.check_output(cmd).decode("utf-8").strip()
347 except subprocess.CalledProcessError as e:
348 bb.warn("icecc: '{}' returned {}:\n{}".format(cmd, e.returncode, e.output.decode("utf-8")))
349 return
350
351 ICECC_VERSION = ICECC_VERSION.replace("@VERSION@", ICE_VERSION)
352
353 if not os.access(d.getVar('ICECC_ENV_EXEC'), os.X_OK):
354 bb.warn("Cannot use icecc: invalid ICECC_ENV_EXEC")
355 return
356
357 # Create symlinks to icecc and wrapper-scripts in the recipe-sysroot directory
358 symlink_path = os.path.join(ICE_PATH, "symlinks")
359 bb.utils.mkdirhier(symlink_path)
360 compilers = []
361 if icecc_is_kernel(bb, d):
362 compilers.append(get_cross_kernel_cc(bb,d))
363 else:
364 host_prefix = d.getVar('HOST_PREFIX')
365 compilers.extend([host_prefix + 'gcc', host_prefix + 'g++'])
366
367 for compiler in compilers:
368 try:
369 os.symlink(ICECC_BIN, symlink_path + '/' + compiler)
370 except FileExistsError:
371 pass
372 wrapper_script = os.path.join(ICE_PATH, compiler)
373 with open(wrapper_script, 'w') as fd:
374 fd.write("#!/bin/sh -e\n")
375 fd.write("export ICECC_VERSION={}\n".format(ICECC_VERSION))
376 fd.write("export ICECC_CC={}\n".format(ICECC_CC))
377 fd.write("export ICECC_CXX={}\n".format(ICECC_CXX))
378 fd.write("{} \"$@\"\n".format(os.path.join(ICE_PATH, "symlinks", compiler)))
379 os.chmod(wrapper_script, 0o755)
380
381 try:
382 cmd = [ICECC_CC, '-print-prog-name=as']
383 ICECC_AS = subprocess.check_output(cmd).decode("utf-8").strip()
384 except subprocess.CalledProcessError as e:
385 bb.warn("icecc: '{}' returned {}:\n{}".format(cmd, e.returncode, e.output.decode("utf-8")))
386 return
387 # for target recipes should return something like:
388 # /OE/tmp-eglibc/sysroots/x86_64-linux/usr/libexec/arm920tt-oe-linux-gnueabi/gcc/arm-oe-linux-gnueabi/4.8.2/as
389 # and just "as" for native, if it returns "as" in current directory (for whatever reason) use "as" from PATH
390 if not os.path.dirname(ICECC_AS):
391 ICECC_AS = ICECC_WHICH_AS
392
393 if not os.path.isfile(ICECC_VERSION + ".done"):
394 bb.utils.mkdirhier(os.path.dirname(ICECC_VERSION))
395
396 # the ICECC_VERSION generation step must be locked by a mutex
397 # in order to prevent race conditions
398 lock = bb.utils.lockfile(ICECC_VERSION + '.lock')
399 try:
400 cmd = [d.getVar('ICECC_ENV_EXEC')]
401 if d.getVar('ICECC_ENV_DEBUG'):
402 cmd.append(d.getVar('ICECC_ENV_DEBUG'))
403 cmd.extend([ICECC_CC, ICECC_CXX, ICECC_AS, ICECC_VERSION])
404 subprocess.check_output(cmd)
405 cmd = ['touch', ICECC_VERSION + '.done']
406 subprocess.check_output(cmd)
407 except subprocess.CalledProcessError as e:
408 bb.warn("icecc: '{}' returned {}:\n{}".format(cmd, e.returncode, e.output.decode("utf-8")))
409 bb.utils.unlockfile(lock)
410 return
411 bb.utils.unlockfile(lock)
412
413 # Don't let ccache find the icecream compiler links that have been created, otherwise
414 # it can end up invoking icecream recursively.
415 d.setVar('CCACHE_PATH', d.getVar('PATH'))
416 d.setVar('CCACHE_DISABLE', '1')
417
418 d.prependVar('PATH', ICE_PATH + ':')
419
420 bb.note("Using icecc path: {}".format(ICE_PATH))
421 bb.note("Using icecc tarball: {}".format(ICECC_VERSION))
422}
423
424do_configure[prefuncs] += "set_icecc_env"
425do_compile[prefuncs] += "set_icecc_env"
426do_compile_kernelmodules[prefuncs] += "set_icecc_env"
427do_install[prefuncs] += "set_icecc_env"
428
429# Icecream is not (currently) supported in the extensible SDK
430ICECC_SDK_HOST_TASK = "nativesdk-icecc-toolchain"
431ICECC_SDK_HOST_TASK:task-populate-sdk-ext = ""
432
433# Don't include icecream in uninative tarball
434ICECC_SDK_HOST_TASK:pn-uninative-tarball = ""
435
436# Add the toolchain scripts to the SDK
437TOOLCHAIN_HOST_TASK:append = " ${ICECC_SDK_HOST_TASK}"
438
439python () {
440 if d.getVar('ICECC_DISABLED') != "1":
441 for task in ['do_configure', 'do_compile', 'do_compile_kernelmodules', 'do_install']:
442 d.setVarFlag(task, 'network', '1')
443}
diff --git a/meta/classes/multilib.bbclass b/meta/classes/multilib.bbclass
index a4151658a6..b959bbd93c 100644
--- a/meta/classes/multilib.bbclass
+++ b/meta/classes/multilib.bbclass
@@ -21,6 +21,7 @@ python multilib_virtclass_handler () {
21 bpn = d.getVar("BPN") 21 bpn = d.getVar("BPN")
22 if ("virtual/kernel" in provides 22 if ("virtual/kernel" in provides
23 or bb.data.inherits_class('module-base', d) 23 or bb.data.inherits_class('module-base', d)
24 or bb.data.inherits_class('kernel-fit-image', d)
24 or bpn in non_ml_recipes): 25 or bpn in non_ml_recipes):
25 raise bb.parse.SkipRecipe("We shouldn't have multilib variants for %s" % bpn) 26 raise bb.parse.SkipRecipe("We shouldn't have multilib variants for %s" % bpn)
26 27
diff --git a/meta/conf/bitbake.conf b/meta/conf/bitbake.conf
index 13d55923b7..52e74a6879 100644
--- a/meta/conf/bitbake.conf
+++ b/meta/conf/bitbake.conf
@@ -518,7 +518,7 @@ HOSTTOOLS += " \
518 [ ar as awk basename bash bunzip2 bzip2 cat chgrp chmod chown chrpath cmp comm cp cpio \ 518 [ ar as awk basename bash bunzip2 bzip2 cat chgrp chmod chown chrpath cmp comm cp cpio \
519 cpp cut date dd diff diffstat dirname du echo egrep env expand expr false \ 519 cpp cut date dd diff diffstat dirname du echo egrep env expand expr false \
520 fgrep file find flock g++ gawk gcc getconf getopt git grep gunzip gzip \ 520 fgrep file find flock g++ gawk gcc getconf getopt git grep gunzip gzip \
521 head hostname iconv id install ld ldd ln ls lz4 make md5sum mkdir mkfifo mknod \ 521 head hostname iconv id install ld ldd ln ls make md5sum mkdir mkfifo mknod \
522 mktemp mv nm objcopy objdump od patch perl pr printf pwd \ 522 mktemp mv nm objcopy objdump od patch perl pr printf pwd \
523 python3 pzstd ranlib readelf readlink realpath rm rmdir rpcgen sed seq sh \ 523 python3 pzstd ranlib readelf readlink realpath rm rmdir rpcgen sed seq sh \
524 sha1sum sha224sum sha256sum sha384sum sha512sum \ 524 sha1sum sha224sum sha256sum sha384sum sha512sum \
diff --git a/meta/conf/distro/include/distro_alias.inc b/meta/conf/distro/include/distro_alias.inc
index 8052464f1d..20882523c2 100644
--- a/meta/conf/distro/include/distro_alias.inc
+++ b/meta/conf/distro/include/distro_alias.inc
@@ -105,7 +105,6 @@ DISTRO_PN_ALIAS:pn-gtk-icon-utils-native = "OSPDT"
105DISTRO_PN_ALIAS:pn-systemd-boot = "Ubuntu=systemd-boot Fedora=systemd-boot" 105DISTRO_PN_ALIAS:pn-systemd-boot = "Ubuntu=systemd-boot Fedora=systemd-boot"
106DISTRO_PN_ALIAS:pn-hello-mod = "OE-Core" 106DISTRO_PN_ALIAS:pn-hello-mod = "OE-Core"
107DISTRO_PN_ALIAS:pn-hwlatdetect = "OSPDT" 107DISTRO_PN_ALIAS:pn-hwlatdetect = "OSPDT"
108DISTRO_PN_ALIAS:pn-icecc-create-env = "OE-Core"
109DISTRO_PN_ALIAS:pn-init-ifupdown = "Debian=ifupdown Ubuntu=ifupdown" 108DISTRO_PN_ALIAS:pn-init-ifupdown = "Debian=ifupdown Ubuntu=ifupdown"
110DISTRO_PN_ALIAS:pn-initramfs-boot = "OE-Core" 109DISTRO_PN_ALIAS:pn-initramfs-boot = "OE-Core"
111DISTRO_PN_ALIAS:pn-initramfs-framework = "OE-Core" 110DISTRO_PN_ALIAS:pn-initramfs-framework = "OE-Core"
diff --git a/meta/conf/distro/include/maintainers.inc b/meta/conf/distro/include/maintainers.inc
index e5d24ac2c8..5c315d58cf 100644
--- a/meta/conf/distro/include/maintainers.inc
+++ b/meta/conf/distro/include/maintainers.inc
@@ -272,7 +272,6 @@ RECIPE_MAINTAINER:pn-hicolor-icon-theme = "Anuj Mittal <anuj.mittal@intel.com>"
272RECIPE_MAINTAINER:pn-hwdata = "Hiago De Franco <hiago.franco@toradex.com>" 272RECIPE_MAINTAINER:pn-hwdata = "Hiago De Franco <hiago.franco@toradex.com>"
273RECIPE_MAINTAINER:pn-hwlatdetect = "Unassigned <unassigned@yoctoproject.org>" 273RECIPE_MAINTAINER:pn-hwlatdetect = "Unassigned <unassigned@yoctoproject.org>"
274RECIPE_MAINTAINER:pn-i2c-tools = "Anuj Mittal <anuj.mittal@intel.com>" 274RECIPE_MAINTAINER:pn-i2c-tools = "Anuj Mittal <anuj.mittal@intel.com>"
275RECIPE_MAINTAINER:pn-icecc-create-env = "Joshua Watt <JPEWhacker@gmail.com>"
276RECIPE_MAINTAINER:pn-icon-naming-utils = "Richard Purdie <richard.purdie@linuxfoundation.org>" 275RECIPE_MAINTAINER:pn-icon-naming-utils = "Richard Purdie <richard.purdie@linuxfoundation.org>"
277RECIPE_MAINTAINER:pn-icu = "Unassigned <unassigned@yoctoproject.org>" 276RECIPE_MAINTAINER:pn-icu = "Unassigned <unassigned@yoctoproject.org>"
278RECIPE_MAINTAINER:pn-ifupdown = "Anuj Mittal <anuj.mittal@intel.com>" 277RECIPE_MAINTAINER:pn-ifupdown = "Anuj Mittal <anuj.mittal@intel.com>"
@@ -307,6 +306,7 @@ RECIPE_MAINTAINER:pn-kbd = "Unassigned <unassigned@yoctoproject.org>"
307RECIPE_MAINTAINER:pn-kea = "Unassigned <unassigned@yoctoproject.org>" 306RECIPE_MAINTAINER:pn-kea = "Unassigned <unassigned@yoctoproject.org>"
308RECIPE_MAINTAINER:pn-kern-tools-native = "Bruce Ashfield <bruce.ashfield@gmail.com>" 307RECIPE_MAINTAINER:pn-kern-tools-native = "Bruce Ashfield <bruce.ashfield@gmail.com>"
309RECIPE_MAINTAINER:pn-kernel-devsrc = "Bruce Ashfield <bruce.ashfield@gmail.com>" 308RECIPE_MAINTAINER:pn-kernel-devsrc = "Bruce Ashfield <bruce.ashfield@gmail.com>"
309RECIPE_MAINTAINER:pn-kernel-signing-keys-native = "Adrian Freihofer <adrian.freihofer@siemens.com>"
310RECIPE_MAINTAINER:pn-kexec-tools = "Unassigned <unassigned@yoctoproject.org>" 310RECIPE_MAINTAINER:pn-kexec-tools = "Unassigned <unassigned@yoctoproject.org>"
311RECIPE_MAINTAINER:pn-keymaps = "Unassigned <unassigned@yoctoproject.org>" 311RECIPE_MAINTAINER:pn-keymaps = "Unassigned <unassigned@yoctoproject.org>"
312RECIPE_MAINTAINER:pn-kmod = "Chen Qi <Qi.Chen@windriver.com>" 312RECIPE_MAINTAINER:pn-kmod = "Chen Qi <Qi.Chen@windriver.com>"
@@ -471,6 +471,7 @@ RECIPE_MAINTAINER:pn-libxxf86vm = "Unassigned <unassigned@yoctoproject.org>"
471RECIPE_MAINTAINER:pn-libyaml = "Wang Mingyu <wangmy@fujitsu.com>" 471RECIPE_MAINTAINER:pn-libyaml = "Wang Mingyu <wangmy@fujitsu.com>"
472RECIPE_MAINTAINER:pn-lighttpd = "Unassigned <unassigned@yoctoproject.org>" 472RECIPE_MAINTAINER:pn-lighttpd = "Unassigned <unassigned@yoctoproject.org>"
473RECIPE_MAINTAINER:pn-linux-dummy = "Unassigned <unassigned@yoctoproject.org>" 473RECIPE_MAINTAINER:pn-linux-dummy = "Unassigned <unassigned@yoctoproject.org>"
474RECIPE_MAINTAINER:pn-linux-yocto-fitimage = "Adrian Freihofer <adrian.freihofer@siemens.com>"
474RECIPE_MAINTAINER:pn-linux-firmware = "Otavio Salvador <otavio.salvador@ossystems.com.br>" 475RECIPE_MAINTAINER:pn-linux-firmware = "Otavio Salvador <otavio.salvador@ossystems.com.br>"
475RECIPE_MAINTAINER:pn-linux-libc-headers = "Bruce Ashfield <bruce.ashfield@gmail.com>" 476RECIPE_MAINTAINER:pn-linux-libc-headers = "Bruce Ashfield <bruce.ashfield@gmail.com>"
476RECIPE_MAINTAINER:pn-linux-yocto = "Bruce Ashfield <bruce.ashfield@gmail.com>" 477RECIPE_MAINTAINER:pn-linux-yocto = "Bruce Ashfield <bruce.ashfield@gmail.com>"
@@ -546,7 +547,6 @@ RECIPE_MAINTAINER:pn-musl-utils = "Khem Raj <raj.khem@gmail.com>"
546RECIPE_MAINTAINER:pn-nasm = "Richard Purdie <richard.purdie@linuxfoundation.org>" 547RECIPE_MAINTAINER:pn-nasm = "Richard Purdie <richard.purdie@linuxfoundation.org>"
547RECIPE_MAINTAINER:pn-nativesdk-buildtools-perl-dummy = "Richard Purdie <richard.purdie@linuxfoundation.org>" 548RECIPE_MAINTAINER:pn-nativesdk-buildtools-perl-dummy = "Richard Purdie <richard.purdie@linuxfoundation.org>"
548RECIPE_MAINTAINER:pn-nativesdk-clang-glue = "Khem Raj <raj.khem@gmail.com>" 549RECIPE_MAINTAINER:pn-nativesdk-clang-glue = "Khem Raj <raj.khem@gmail.com>"
549RECIPE_MAINTAINER:pn-nativesdk-icecc-toolchain = "Joshua Watt <JPEWhacker@gmail.com>"
550RECIPE_MAINTAINER:pn-nativesdk-libtool = "Richard Purdie <richard.purdie@linuxfoundation.org>" 550RECIPE_MAINTAINER:pn-nativesdk-libtool = "Richard Purdie <richard.purdie@linuxfoundation.org>"
551RECIPE_MAINTAINER:pn-nativesdk-packagegroup-sdk-host = "Ross Burton <ross.burton@arm.com>" 551RECIPE_MAINTAINER:pn-nativesdk-packagegroup-sdk-host = "Ross Burton <ross.burton@arm.com>"
552RECIPE_MAINTAINER:pn-nativesdk-qemu-helper = "Richard Purdie <richard.purdie@linuxfoundation.org>" 552RECIPE_MAINTAINER:pn-nativesdk-qemu-helper = "Richard Purdie <richard.purdie@linuxfoundation.org>"
diff --git a/meta/conf/documentation.conf b/meta/conf/documentation.conf
index 570a604494..2710485227 100644
--- a/meta/conf/documentation.conf
+++ b/meta/conf/documentation.conf
@@ -201,11 +201,6 @@ HOST_VENDOR[doc] = "The name of the vendor. Normally same as the TARGET_VENDOR."
201 201
202#I 202#I
203 203
204ICECC_ENV_EXEC[doc] = "Points to the icecc-create-env script that you provide."
205ICECC_PATH[doc] = "The location of the icecc binary."
206ICECC_CLASS_DISABLE[doc] = "Identifies user classes that you do not want the Icecream distributed compile support to consider."
207ICECC_RECIPE_DISABLE[doc] = "Identifies user recipes that you do not want the Icecream distributed compile support to consider."
208ICECC_RECIPE_ENABLE[doc] = "Identifies user recipes that use an empty PARALLEL_MAKE variable that you want to force remote distributed compilation on using the Icecream distributed compile support."
209IMAGE_BASENAME[doc] = "The base name of image output files." 204IMAGE_BASENAME[doc] = "The base name of image output files."
210IMAGE_BOOT_FILES[doc] = "Whitespace separated list of files from ${DEPLOY_DIR_IMAGE} to place in boot partition. Entries will be installed under a same name as the source file. To change the destination file name, pass a desired name after a semicolon (eg. u-boot.img;uboot)." 205IMAGE_BOOT_FILES[doc] = "Whitespace separated list of files from ${DEPLOY_DIR_IMAGE} to place in boot partition. Entries will be installed under a same name as the source file. To change the destination file name, pass a desired name after a semicolon (eg. u-boot.img;uboot)."
211IMAGE_CLASSES[doc] = "A list of classes that all images should inherit." 206IMAGE_CLASSES[doc] = "A list of classes that all images should inherit."
diff --git a/meta/conf/fragments/yocto/sstate-mirror-cdn.conf b/meta/conf/fragments/yocto/sstate-mirror-cdn.conf
new file mode 100644
index 0000000000..e204975ce3
--- /dev/null
+++ b/meta/conf/fragments/yocto/sstate-mirror-cdn.conf
@@ -0,0 +1,12 @@
1BB_CONF_FRAGMENT_SUMMARY = "Use prebuilt sstate artifacts for standard Yocto build configurations."
2BB_CONF_FRAGMENT_DESCRIPTION = "The Yocto Project has prebuilt artefacts available for standard build configurations. \
3This fragment enables their use. This will mean the build will query the \
4the network to check for artefacts at the start of builds, which does slow it down \
5initially but it will then speed up the builds by not having to build things if they are \
6present in the cache. It assumes you can download something faster than you can build it \
7which will depend on your network. \
8Note: For this to work you also need hash-equivalence passthrough to the matching server \
9"
10
11BB_HASHSERVE_UPSTREAM = 'wss://hashserv.yoctoproject.org/ws'
12SSTATE_MIRRORS ?= "file://.* http://sstate.yoctoproject.org/all/PATH;downloadfilename=PATH"
diff --git a/meta/conf/layer.conf b/meta/conf/layer.conf
index e19431e724..44267ce8e2 100644
--- a/meta/conf/layer.conf
+++ b/meta/conf/layer.conf
@@ -53,7 +53,6 @@ SIGGEN_EXCLUDE_SAFE_RECIPE_DEPS += " \
53 *->quilt-native \ 53 *->quilt-native \
54 *->subversion-native \ 54 *->subversion-native \
55 *->git-native \ 55 *->git-native \
56 *->icecc-create-env-native \
57 gcc-cross-${TARGET_ARCH}->linux-libc-headers \ 56 gcc-cross-${TARGET_ARCH}->linux-libc-headers \
58 ppp-dialin->ppp \ 57 ppp-dialin->ppp \
59 resolvconf->bash \ 58 resolvconf->bash \
diff --git a/meta/lib/oe/fitimage.py b/meta/lib/oe/fitimage.py
new file mode 100644
index 0000000000..f303799155
--- /dev/null
+++ b/meta/lib/oe/fitimage.py
@@ -0,0 +1,547 @@
1#
2# Copyright OpenEmbedded Contributors
3#
4# SPDX-License-Identifier: GPL-2.0-only
5#
6# This file contains common functions for the fitimage generation
7
8import os
9import shlex
10import subprocess
11import bb
12
13from oeqa.utils.commands import runCmd
14
15class ItsNode:
16 INDENT_SIZE = 8
17
18 def __init__(self, name, parent_node, sub_nodes=None, properties=None):
19 self.name = name
20 self.parent_node = parent_node
21
22 self.sub_nodes = []
23 if sub_nodes:
24 self.sub_nodes = sub_nodes
25
26 self.properties = {}
27 if properties:
28 self.properties = properties
29
30 if parent_node:
31 parent_node.add_sub_node(self)
32
33 def add_sub_node(self, sub_node):
34 self.sub_nodes.append(sub_node)
35
36 def add_property(self, key, value):
37 self.properties[key] = value
38
39 def emit(self, f, indent):
40 indent_str_name = " " * indent
41 indent_str_props = " " * (indent + self.INDENT_SIZE)
42 f.write("%s%s {\n" % (indent_str_name, self.name))
43 for key, value in self.properties.items():
44 bb.debug(1, "key: %s, value: %s" % (key, str(value)))
45 # Single integer: <0x12ab>
46 if isinstance(value, int):
47 f.write(indent_str_props + key + ' = <0x%x>;\n' % value)
48 # list of strings: "string1", "string2" or integers: <0x12ab 0x34cd>
49 elif isinstance(value, list):
50 if len(value) == 0:
51 f.write(indent_str_props + key + ' = "";\n')
52 elif isinstance(value[0], int):
53 list_entries = ' '.join('0x%x' % entry for entry in value)
54 f.write(indent_str_props + key + ' = <%s>;\n' % list_entries)
55 else:
56 list_entries = ', '.join('"%s"' % entry for entry in value)
57 f.write(indent_str_props + key + ' = %s;\n' % list_entries)
58 elif isinstance(value, str):
59 # path: /incbin/("path/to/file")
60 if key in ["data"] and value.startswith('/incbin/('):
61 f.write(indent_str_props + key + ' = %s;\n' % value)
62 # Integers which are already string formatted
63 elif value.startswith("<") and value.endswith(">"):
64 f.write(indent_str_props + key + ' = %s;\n' % value)
65 else:
66 f.write(indent_str_props + key + ' = "%s";\n' % value)
67 else:
68 bb.fatal("%s has unexpexted data type." % str(value))
69 for sub_node in self.sub_nodes:
70 sub_node.emit(f, indent + self.INDENT_SIZE)
71 f.write(indent_str_name + '};\n')
72
73class ItsNodeImages(ItsNode):
74 def __init__(self, parent_node):
75 super().__init__("images", parent_node)
76
77class ItsNodeConfigurations(ItsNode):
78 def __init__(self, parent_node):
79 super().__init__("configurations", parent_node)
80
81class ItsNodeHash(ItsNode):
82 def __init__(self, name, parent_node, algo, opt_props=None):
83 properties = {
84 "algo": algo
85 }
86 if opt_props:
87 properties.update(opt_props)
88 super().__init__(name, parent_node, None, properties)
89
90class ItsImageSignature(ItsNode):
91 def __init__(self, name, parent_node, algo, keyname, opt_props=None):
92 properties = {
93 "algo": algo,
94 "key-name-hint": keyname
95 }
96 if opt_props:
97 properties.update(opt_props)
98 super().__init__(name, parent_node, None, properties)
99
100class ItsNodeImage(ItsNode):
101 def __init__(self, name, parent_node, description, type, compression, sub_nodes=None, opt_props=None):
102 properties = {
103 "description": description,
104 "type": type,
105 "compression": compression,
106 }
107 if opt_props:
108 properties.update(opt_props)
109 super().__init__(name, parent_node, sub_nodes, properties)
110
111class ItsNodeDtb(ItsNodeImage):
112 def __init__(self, name, parent_node, description, type, compression,
113 sub_nodes=None, opt_props=None, compatible=None):
114 super().__init__(name, parent_node, description, type, compression, sub_nodes, opt_props)
115 self.compatible = compatible
116
117class ItsNodeDtbAlias(ItsNode):
118 """Additional Configuration Node for a DTB
119
120 Symlinks pointing to a DTB file are handled by an addtitional
121 configuration node referring to another DTB image node.
122 """
123 def __init__(self, name, alias_name, compatible=None):
124 super().__init__(name, parent_node=None, sub_nodes=None, properties=None)
125 self.alias_name = alias_name
126 self.compatible = compatible
127
128class ItsNodeConfigurationSignature(ItsNode):
129 def __init__(self, name, parent_node, algo, keyname, opt_props=None):
130 properties = {
131 "algo": algo,
132 "key-name-hint": keyname
133 }
134 if opt_props:
135 properties.update(opt_props)
136 super().__init__(name, parent_node, None, properties)
137
138class ItsNodeConfiguration(ItsNode):
139 def __init__(self, name, parent_node, description, sub_nodes=None, opt_props=None):
140 properties = {
141 "description": description,
142 }
143 if opt_props:
144 properties.update(opt_props)
145 super().__init__(name, parent_node, sub_nodes, properties)
146
147class ItsNodeRootKernel(ItsNode):
148 """Create FIT images for the kernel
149
150 Currently only a single kernel (no less or more) can be added to the FIT
151 image along with 0 or more device trees and 0 or 1 ramdisk.
152
153 If a device tree included in the FIT image, the default configuration is the
154 firt DTB. If there is no dtb present than the default configuation the kernel.
155 """
156 def __init__(self, description, address_cells, host_prefix, arch, conf_prefix,
157 sign_enable=False, sign_keydir=None,
158 mkimage=None, mkimage_dtcopts=None,
159 mkimage_sign=None, mkimage_sign_args=None,
160 hash_algo=None, sign_algo=None, pad_algo=None,
161 sign_keyname_conf=None,
162 sign_individual=False, sign_keyname_img=None):
163 props = {
164 "description": description,
165 "#address-cells": f"<{address_cells}>"
166 }
167 super().__init__("/", None, None, props)
168 self.images = ItsNodeImages(self)
169 self.configurations = ItsNodeConfigurations(self)
170
171 self._host_prefix = host_prefix
172 self._arch = arch
173 self._conf_prefix = conf_prefix
174
175 # Signature related properties
176 self._sign_enable = sign_enable
177 self._sign_keydir = sign_keydir
178 self._mkimage = mkimage
179 self._mkimage_dtcopts = mkimage_dtcopts
180 self._mkimage_sign = mkimage_sign
181 self._mkimage_sign_args = mkimage_sign_args
182 self._hash_algo = hash_algo
183 self._sign_algo = sign_algo
184 self._pad_algo = pad_algo
185 self._sign_keyname_conf = sign_keyname_conf
186 self._sign_individual = sign_individual
187 self._sign_keyname_img = sign_keyname_img
188 self._sanitize_sign_config()
189
190 self._dtbs = []
191 self._dtb_alias = []
192 self._kernel = None
193 self._ramdisk = None
194 self._bootscr = None
195 self._setup = None
196
197 def _sanitize_sign_config(self):
198 if self._sign_enable:
199 if not self._hash_algo:
200 bb.fatal("FIT image signing is enabled but no hash algorithm is provided.")
201 if not self._sign_algo:
202 bb.fatal("FIT image signing is enabled but no signature algorithm is provided.")
203 if not self._pad_algo:
204 bb.fatal("FIT image signing is enabled but no padding algorithm is provided.")
205 if not self._sign_keyname_conf:
206 bb.fatal("FIT image signing is enabled but no configuration key name is provided.")
207 if self._sign_individual and not self._sign_keyname_img:
208 bb.fatal("FIT image signing is enabled for individual images but no image key name is provided.")
209
210 def write_its_file(self, itsfile):
211 with open(itsfile, 'w') as f:
212 f.write("/dts-v1/;\n\n")
213 self.emit(f, 0)
214
215 def its_add_node_image(self, image_id, description, image_type, compression, opt_props):
216 image_node = ItsNodeImage(
217 image_id,
218 self.images,
219 description,
220 image_type,
221 compression,
222 opt_props=opt_props
223 )
224 if self._hash_algo:
225 ItsNodeHash(
226 "hash-1",
227 image_node,
228 self._hash_algo
229 )
230 if self._sign_individual:
231 ItsImageSignature(
232 "signature-1",
233 image_node,
234 f"{self._hash_algo},{self._sign_algo}",
235 self._sign_keyname_img
236 )
237 return image_node
238
239 def its_add_node_dtb(self, image_id, description, image_type, compression, opt_props, compatible):
240 dtb_node = ItsNodeDtb(
241 image_id,
242 self.images,
243 description,
244 image_type,
245 compression,
246 opt_props=opt_props,
247 compatible=compatible
248 )
249 if self._hash_algo:
250 ItsNodeHash(
251 "hash-1",
252 dtb_node,
253 self._hash_algo
254 )
255 if self._sign_individual:
256 ItsImageSignature(
257 "signature-1",
258 dtb_node,
259 f"{self._hash_algo},{self._sign_algo}",
260 self._sign_keyname_img
261 )
262 return dtb_node
263
264 def fitimage_emit_section_kernel(self, kernel_id, kernel_path, compression,
265 load, entrypoint, mkimage_kernel_type, entrysymbol=None):
266 """Emit the fitImage ITS kernel section"""
267 if self._kernel:
268 bb.fatal("Kernel section already exists in the ITS file.")
269 if entrysymbol:
270 result = subprocess.run([self._host_prefix + "nm", "vmlinux"], capture_output=True, text=True)
271 for line in result.stdout.splitlines():
272 parts = line.split()
273 if len(parts) == 3 and parts[2] == entrysymbol:
274 entrypoint = "<0x%s>" % parts[0]
275 break
276 kernel_node = self.its_add_node_image(
277 kernel_id,
278 "Linux kernel",
279 mkimage_kernel_type,
280 compression,
281 {
282 "data": '/incbin/("' + kernel_path + '")',
283 "arch": self._arch,
284 "os": "linux",
285 "load": f"<{load}>",
286 "entry": f"<{entrypoint}>"
287 }
288 )
289 self._kernel = kernel_node
290
291 def fitimage_emit_section_dtb(self, dtb_id, dtb_path, dtb_loadaddress=None,
292 dtbo_loadaddress=None, add_compatible=False):
293 """Emit the fitImage ITS DTB section"""
294 load=None
295 dtb_ext = os.path.splitext(dtb_path)[1]
296 if dtb_ext == ".dtbo":
297 if dtbo_loadaddress:
298 load = dtbo_loadaddress
299 elif dtb_loadaddress:
300 load = dtb_loadaddress
301
302 opt_props = {
303 "data": '/incbin/("' + dtb_path + '")',
304 "arch": self._arch
305 }
306 if load:
307 opt_props["load"] = f"<{load}>"
308
309 # Preserve the DTB's compatible string to be added to the configuration node
310 compatible = None
311 if add_compatible:
312 compatible = get_compatible_from_dtb(dtb_path)
313
314 dtb_node = self.its_add_node_dtb(
315 "fdt-" + dtb_id,
316 "Flattened Device Tree blob",
317 "flat_dt",
318 "none",
319 opt_props,
320 compatible
321 )
322 self._dtbs.append(dtb_node)
323
324 def fitimage_emit_section_dtb_alias(self, dtb_alias_id, dtb_path, add_compatible=False):
325 """Add a configuration node referring to another DTB"""
326 # Preserve the DTB's compatible string to be added to the configuration node
327 compatible = None
328 if add_compatible:
329 compatible = get_compatible_from_dtb(dtb_path)
330
331 dtb_id = os.path.basename(dtb_path)
332 dtb_alias_node = ItsNodeDtbAlias("fdt-" + dtb_id, dtb_alias_id, compatible)
333 self._dtb_alias.append(dtb_alias_node)
334 bb.warn(f"compatible: {compatible}, dtb_alias_id: {dtb_alias_id}, dtb_id: {dtb_id}, dtb_path: {dtb_path}")
335
336 def fitimage_emit_section_boot_script(self, bootscr_id, bootscr_path):
337 """Emit the fitImage ITS u-boot script section"""
338 if self._bootscr:
339 bb.fatal("U-boot script section already exists in the ITS file.")
340 bootscr_node = self.its_add_node_image(
341 bootscr_id,
342 "U-boot script",
343 "script",
344 "none",
345 {
346 "data": '/incbin/("' + bootscr_path + '")',
347 "arch": self._arch,
348 "type": "script"
349 }
350 )
351 self._bootscr = bootscr_node
352
353 def fitimage_emit_section_setup(self, setup_id, setup_path):
354 """Emit the fitImage ITS setup section"""
355 if self._setup:
356 bb.fatal("Setup section already exists in the ITS file.")
357 load = "<0x00090000>"
358 entry = "<0x00090000>"
359 setup_node = self.its_add_node_image(
360 setup_id,
361 "Linux setup.bin",
362 "x86_setup",
363 "none",
364 {
365 "data": '/incbin/("' + setup_path + '")',
366 "arch": self._arch,
367 "os": "linux",
368 "load": load,
369 "entry": entry
370 }
371 )
372 self._setup = setup_node
373
374 def fitimage_emit_section_ramdisk(self, ramdisk_id, ramdisk_path, description="ramdisk", load=None, entry=None):
375 """Emit the fitImage ITS ramdisk section"""
376 if self._ramdisk:
377 bb.fatal("Ramdisk section already exists in the ITS file.")
378 opt_props = {
379 "data": '/incbin/("' + ramdisk_path + '")',
380 "type": "ramdisk",
381 "arch": self._arch,
382 "os": "linux"
383 }
384 if load:
385 opt_props["load"] = f"<{load}>"
386 if entry:
387 opt_props["entry"] = f"<{entry}>"
388
389 ramdisk_node = self.its_add_node_image(
390 ramdisk_id,
391 description,
392 "ramdisk",
393 "none",
394 opt_props
395 )
396 self._ramdisk = ramdisk_node
397
398 def _fitimage_emit_one_section_config(self, conf_node_name, dtb=None):
399 """Emit the fitImage ITS configuration section"""
400 opt_props = {}
401 conf_desc = []
402 sign_entries = []
403
404 if self._kernel:
405 conf_desc.append("Linux kernel")
406 opt_props["kernel"] = self._kernel.name
407 if self._sign_enable:
408 sign_entries.append("kernel")
409
410 if dtb:
411 conf_desc.append("FDT blob")
412 opt_props["fdt"] = dtb.name
413 if dtb.compatible:
414 opt_props["compatible"] = dtb.compatible
415 if self._sign_enable:
416 sign_entries.append("fdt")
417
418 if self._ramdisk:
419 conf_desc.append("ramdisk")
420 opt_props["ramdisk"] = self._ramdisk.name
421 if self._sign_enable:
422 sign_entries.append("ramdisk")
423
424 if self._bootscr:
425 conf_desc.append("u-boot script")
426 opt_props["bootscr"] = self._bootscr.name
427 if self._sign_enable:
428 sign_entries.append("bootscr")
429
430 if self._setup:
431 conf_desc.append("setup")
432 opt_props["setup"] = self._setup.name
433 if self._sign_enable:
434 sign_entries.append("setup")
435
436 # First added configuration is the default configuration
437 default_flag = "0"
438 if len(self.configurations.sub_nodes) == 0:
439 default_flag = "1"
440
441 conf_node = ItsNodeConfiguration(
442 conf_node_name,
443 self.configurations,
444 f"{default_flag} {', '.join(conf_desc)}",
445 opt_props=opt_props
446 )
447 if self._hash_algo:
448 ItsNodeHash(
449 "hash-1",
450 conf_node,
451 self._hash_algo
452 )
453 if self._sign_enable:
454 ItsNodeConfigurationSignature(
455 "signature-1",
456 conf_node,
457 f"{self._hash_algo},{self._sign_algo}",
458 self._sign_keyname_conf,
459 opt_props={
460 "padding": self._pad_algo,
461 "sign-images": sign_entries
462 }
463 )
464
465 def fitimage_emit_section_config(self, default_dtb_image=None):
466 if self._dtbs:
467 for dtb in self._dtbs:
468 dtb_name = dtb.name
469 if dtb.name.startswith("fdt-"):
470 dtb_name = dtb.name[len("fdt-"):]
471 self._fitimage_emit_one_section_config(self._conf_prefix + dtb_name, dtb)
472 for dtb in self._dtb_alias:
473 self._fitimage_emit_one_section_config(self._conf_prefix + dtb.alias_name, dtb)
474 else:
475 # Currently exactly one kernel is supported.
476 self._fitimage_emit_one_section_config(self._conf_prefix + "1")
477
478 default_conf = self.configurations.sub_nodes[0].name
479 if default_dtb_image and self._dtbs:
480 default_conf = self._conf_prefix + default_dtb_image
481 self.configurations.add_property('default', default_conf)
482
483 def run_mkimage_assemble(self, itsfile, fitfile):
484 cmd = [
485 self._mkimage,
486 '-f', itsfile,
487 fitfile
488 ]
489 if self._mkimage_dtcopts:
490 cmd.insert(1, '-D')
491 cmd.insert(2, self._mkimage_dtcopts)
492 try:
493 subprocess.run(cmd, check=True, capture_output=True)
494 except subprocess.CalledProcessError as e:
495 bb.fatal(f"Command '{' '.join(cmd)}' failed with return code {e.returncode}\nstdout: {e.stdout.decode()}\nstderr: {e.stderr.decode()}\nitsflile: {os.path.abspath(itsfile)}")
496
497 def run_mkimage_sign(self, fitfile):
498 if not self._sign_enable:
499 bb.debug(1, "FIT image signing is disabled. Skipping signing.")
500 return
501
502 # Some sanity checks because mkimage exits with 0 also without needed keys
503 sign_key_path = os.path.join(self._sign_keydir, self._sign_keyname_conf)
504 if not os.path.exists(sign_key_path + '.key') or not os.path.exists(sign_key_path + '.crt'):
505 bb.fatal("%s.key or .crt does not exist" % sign_key_path)
506 if self._sign_individual:
507 sign_key_img_path = os.path.join(self._sign_keydir, self._sign_keyname_img)
508 if not os.path.exists(sign_key_img_path + '.key') or not os.path.exists(sign_key_img_path + '.crt'):
509 bb.fatal("%s.key or .crt does not exist" % sign_key_img_path)
510
511 cmd = [
512 self._mkimage_sign,
513 '-F',
514 '-k', self._sign_keydir,
515 '-r', fitfile
516 ]
517 if self._mkimage_dtcopts:
518 cmd.extend(['-D', self._mkimage_dtcopts])
519 if self._mkimage_sign_args:
520 cmd.extend(shlex.split(self._mkimage_sign_args))
521 try:
522 subprocess.run(cmd, check=True, capture_output=True)
523 except subprocess.CalledProcessError as e:
524 bb.fatal(f"Command '{' '.join(cmd)}' failed with return code {e.returncode}\nstdout: {e.stdout.decode()}\nstderr: {e.stderr.decode()}")
525
526
527def symlink_points_below(file_or_symlink, expected_parent_dir):
528 """returns symlink destination if it points below directory"""
529 file_path = os.path.join(expected_parent_dir, file_or_symlink)
530 if not os.path.islink(file_path):
531 return None
532
533 realpath = os.path.relpath(os.path.realpath(file_path), expected_parent_dir)
534 if realpath.startswith(".."):
535 return None
536
537 return realpath
538
539def get_compatible_from_dtb(dtb_path, fdtget_path="fdtget"):
540 compatible = None
541 cmd = [fdtget_path, "-t", "s", dtb_path, "/", "compatible"]
542 try:
543 ret = subprocess.run(cmd, check=True, capture_output=True, text=True)
544 compatible = ret.stdout.strip().split()
545 except subprocess.CalledProcessError:
546 compatible = None
547 return compatible
diff --git a/meta/lib/oeqa/core/decorator/data.py b/meta/lib/oeqa/core/decorator/data.py
index 5444b2cb75..0daf46334f 100644
--- a/meta/lib/oeqa/core/decorator/data.py
+++ b/meta/lib/oeqa/core/decorator/data.py
@@ -228,3 +228,15 @@ class skipIfNotArch(OETestDecorator):
228 arch = self.case.td['HOST_ARCH'] 228 arch = self.case.td['HOST_ARCH']
229 if arch not in self.archs: 229 if arch not in self.archs:
230 self.case.skipTest('Test skipped on %s' % arch) 230 self.case.skipTest('Test skipped on %s' % arch)
231
232@registerDecorator
233class skipIfNotBuildArch(OETestDecorator):
234 """
235 Skip test if BUILD_ARCH is not present in the tuple specified.
236 """
237
238 attrs = ('archs',)
239 def setUpDecorator(self):
240 arch = self.case.td['BUILD_ARCH']
241 if arch not in self.archs:
242 self.case.skipTest('Test skipped on %s' % arch)
diff --git a/meta/lib/oeqa/files/maturin/guessing-game/Cargo.toml b/meta/lib/oeqa/files/maturin/guessing-game/Cargo.toml
index de95025e86..a78ada2593 100644
--- a/meta/lib/oeqa/files/maturin/guessing-game/Cargo.toml
+++ b/meta/lib/oeqa/files/maturin/guessing-game/Cargo.toml
@@ -14,7 +14,7 @@ crate-type = ["cdylib"]
14rand = "0.8.4" 14rand = "0.8.4"
15 15
16[dependencies.pyo3] 16[dependencies.pyo3]
17version = "0.19.0" 17version = "0.24.1"
18# "abi3-py38" tells pyo3 (and maturin) to build using the stable ABI with minimum Python version 3.8 18# "abi3-py38" tells pyo3 (and maturin) to build using the stable ABI with minimum Python version 3.8
19features = ["abi3-py38"] 19features = ["abi3-py38"]
20 20
diff --git a/meta/lib/oeqa/selftest/cases/fitimage.py b/meta/lib/oeqa/selftest/cases/fitimage.py
index b39f2622df..be291e4b0f 100644
--- a/meta/lib/oeqa/selftest/cases/fitimage.py
+++ b/meta/lib/oeqa/selftest/cases/fitimage.py
@@ -4,13 +4,36 @@
4# SPDX-License-Identifier: MIT 4# SPDX-License-Identifier: MIT
5# 5#
6 6
7from oeqa.selftest.case import OESelftestTestCase
8from oeqa.utils.commands import runCmd, bitbake, get_bb_vars
9import os 7import os
10import re 8import re
11import shlex 9import shlex
12import logging 10import logging
13import pprint 11import pprint
12import tempfile
13
14import oe.fitimage
15
16from oeqa.selftest.case import OESelftestTestCase
17from oeqa.utils.commands import runCmd, bitbake, get_bb_vars, get_bb_var
18
19
20class BbVarsMockGenKeys:
21 def __init__(self, keydir, gen_keys="0", sign_enabled="0", keyname="", sign_ind="0", img_keyname=""):
22 self.bb_vars = {
23 'FIT_GENERATE_KEYS': gen_keys,
24 'FIT_KEY_GENRSA_ARGS': "-F4",
25 'FIT_KEY_REQ_ARGS': "-batch -new",
26 'FIT_KEY_SIGN_PKCS': "-x509",
27 'FIT_SIGN_INDIVIDUAL': sign_ind,
28 'FIT_SIGN_NUMBITS': "2048",
29 'UBOOT_SIGN_ENABLE': sign_enabled,
30 'UBOOT_SIGN_IMG_KEYNAME': img_keyname,
31 'UBOOT_SIGN_KEYDIR': keydir,
32 'UBOOT_SIGN_KEYNAME': keyname,
33 }
34
35 def getVar(self, var):
36 return self.bb_vars[var]
14 37
15class FitImageTestCase(OESelftestTestCase): 38class FitImageTestCase(OESelftestTestCase):
16 """Test functions usable for testing kernel-fitimage.bbclass and uboot-sign.bbclass 39 """Test functions usable for testing kernel-fitimage.bbclass and uboot-sign.bbclass
@@ -161,10 +184,23 @@ class FitImageTestCase(OESelftestTestCase):
161 184
162 @staticmethod 185 @staticmethod
163 def _get_dtb_files(bb_vars): 186 def _get_dtb_files(bb_vars):
187 """Return a list of devicetree names
188
189 The list should be used to check the dtb and conf nodes in the FIT image or its file.
190 In addition to the entries from KERNEL_DEVICETREE, the external devicetree and the
191 external devicetree overlay added by the test recipe bbb-dtbs-as-ext are handled as well.
192 """
164 kernel_devicetree = bb_vars.get('KERNEL_DEVICETREE') 193 kernel_devicetree = bb_vars.get('KERNEL_DEVICETREE')
194 all_dtbs = []
195 dtb_symlinks = []
165 if kernel_devicetree: 196 if kernel_devicetree:
166 return [os.path.basename(dtb) for dtb in kernel_devicetree.split()] 197 all_dtbs += [os.path.basename(dtb) for dtb in kernel_devicetree.split()]
167 return [] 198 # Support only the test recipe which provides 1 devicetree and 1 devicetree overlay
199 pref_prov_dtb = bb_vars.get('PREFERRED_PROVIDER_virtual/dtb')
200 if pref_prov_dtb == "bbb-dtbs-as-ext":
201 all_dtbs += ["am335x-bonegreen-ext.dtb", "BBORG_RELAY-00A2.dtbo"]
202 dtb_symlinks.append("am335x-bonegreen-ext-alias.dtb")
203 return (all_dtbs, dtb_symlinks)
168 204
169 def _is_req_dict_in_dict(self, found_dict, req_dict): 205 def _is_req_dict_in_dict(self, found_dict, req_dict):
170 """ 206 """
@@ -243,7 +279,7 @@ class FitImageTestCase(OESelftestTestCase):
243 self.logger.debug("sigs:\n%s\n" % pprint.pformat(sigs, indent=4)) 279 self.logger.debug("sigs:\n%s\n" % pprint.pformat(sigs, indent=4))
244 if req_sigvalues_config or req_sigvalues_image: 280 if req_sigvalues_config or req_sigvalues_image:
245 for its_path, values in sigs.items(): 281 for its_path, values in sigs.items():
246 if 'conf-' in its_path: 282 if bb_vars.get('FIT_CONF_PREFIX', "conf-") in its_path:
247 reqsigvalues = req_sigvalues_config 283 reqsigvalues = req_sigvalues_config
248 else: 284 else:
249 reqsigvalues = req_sigvalues_image 285 reqsigvalues = req_sigvalues_image
@@ -356,9 +392,8 @@ class FitImageTestCase(OESelftestTestCase):
356 # Verify the FIT image 392 # Verify the FIT image
357 self._check_fitimage(bb_vars, fitimage_path, uboot_tools_bindir) 393 self._check_fitimage(bb_vars, fitimage_path, uboot_tools_bindir)
358 394
359 395class KernelFitImageBase(FitImageTestCase):
360class KernelFitImageTests(FitImageTestCase): 396 """Test cases for the linux-yocto-fitimage recipe"""
361 """Test cases for the kernel-fitimage bbclass"""
362 397
363 def _fit_get_bb_vars(self, additional_vars=[]): 398 def _fit_get_bb_vars(self, additional_vars=[]):
364 """Retrieve BitBake variables specific to the test case. 399 """Retrieve BitBake variables specific to the test case.
@@ -367,6 +402,8 @@ class KernelFitImageTests(FitImageTestCase):
367 """ 402 """
368 internal_used = { 403 internal_used = {
369 'DEPLOY_DIR_IMAGE', 404 'DEPLOY_DIR_IMAGE',
405 'FIT_CONF_DEFAULT_DTB',
406 'FIT_CONF_PREFIX',
370 'FIT_DESC', 407 'FIT_DESC',
371 'FIT_HASH_ALG', 408 'FIT_HASH_ALG',
372 'FIT_KERNEL_COMP_ALG', 409 'FIT_KERNEL_COMP_ALG',
@@ -376,9 +413,11 @@ class KernelFitImageTests(FitImageTestCase):
376 'INITRAMFS_IMAGE_BUNDLE', 413 'INITRAMFS_IMAGE_BUNDLE',
377 'INITRAMFS_IMAGE_NAME', 414 'INITRAMFS_IMAGE_NAME',
378 'INITRAMFS_IMAGE', 415 'INITRAMFS_IMAGE',
416 'KERNEL_DEPLOYSUBDIR',
379 'KERNEL_DEVICETREE', 417 'KERNEL_DEVICETREE',
380 'KERNEL_FIT_LINK_NAME', 418 'KERNEL_FIT_LINK_NAME',
381 'MACHINE', 419 'MACHINE',
420 'PREFERRED_PROVIDER_virtual/dtb',
382 'UBOOT_ARCH', 421 'UBOOT_ARCH',
383 'UBOOT_ENTRYPOINT', 422 'UBOOT_ENTRYPOINT',
384 'UBOOT_LOADADDRESS', 423 'UBOOT_LOADADDRESS',
@@ -391,10 +430,19 @@ class KernelFitImageTests(FitImageTestCase):
391 'UBOOT_SIGN_KEYDIR', 430 'UBOOT_SIGN_KEYDIR',
392 'UBOOT_SIGN_KEYNAME', 431 'UBOOT_SIGN_KEYNAME',
393 } 432 }
394 bb_vars = get_bb_vars(list(internal_used | set(additional_vars)), "virtual/kernel") 433 bb_vars = get_bb_vars(list(internal_used | set(additional_vars)), self.kernel_recipe)
395 self.logger.debug("bb_vars: %s" % pprint.pformat(bb_vars, indent=4)) 434 self.logger.debug("bb_vars: %s" % pprint.pformat(bb_vars, indent=4))
396 return bb_vars 435 return bb_vars
397 436
437 def _config_add_kernel_classes(self, config):
438 config += '# Use kernel-fit-extra-artifacts.bbclass for the creation of the vmlinux artifact' + os.linesep
439 config += 'KERNEL_CLASSES = "kernel-fit-extra-artifacts"' + os.linesep
440 return config
441
442 @property
443 def kernel_recipe(self):
444 return "linux-yocto-fitimage"
445
398 def _config_add_uboot_env(self, config): 446 def _config_add_uboot_env(self, config):
399 """Generate an u-boot environment 447 """Generate an u-boot environment
400 448
@@ -408,7 +456,7 @@ class KernelFitImageTests(FitImageTestCase):
408 config += '# Add an u-boot script to the fitImage' + os.linesep 456 config += '# Add an u-boot script to the fitImage' + os.linesep
409 config += 'FIT_UBOOT_ENV = "%s"' % fit_uenv_file + os.linesep 457 config += 'FIT_UBOOT_ENV = "%s"' % fit_uenv_file + os.linesep
410 config += 'FILESEXTRAPATHS:prepend := "${TOPDIR}/%s:"' % test_files_dir + os.linesep 458 config += 'FILESEXTRAPATHS:prepend := "${TOPDIR}/%s:"' % test_files_dir + os.linesep
411 config += 'SRC_URI:append:pn-linux-yocto = " file://${FIT_UBOOT_ENV}"' + os.linesep 459 config += 'SRC_URI:append:pn-%s = " file://${FIT_UBOOT_ENV}"' % self.kernel_recipe + os.linesep
412 460
413 if not os.path.isdir(test_files_dir): 461 if not os.path.isdir(test_files_dir):
414 os.makedirs(test_files_dir) 462 os.makedirs(test_files_dir)
@@ -420,7 +468,7 @@ class KernelFitImageTests(FitImageTestCase):
420 468
421 def _bitbake_fit_image(self, bb_vars): 469 def _bitbake_fit_image(self, bb_vars):
422 """Bitbake the kernel and return the paths to the its file and the FIT image""" 470 """Bitbake the kernel and return the paths to the its file and the FIT image"""
423 bitbake("virtual/kernel") 471 bitbake(self.kernel_recipe)
424 472
425 # Find the right its file and the final fitImage and check if both files are available 473 # Find the right its file and the final fitImage and check if both files are available
426 deploy_dir_image = bb_vars['DEPLOY_DIR_IMAGE'] 474 deploy_dir_image = bb_vars['DEPLOY_DIR_IMAGE']
@@ -439,8 +487,13 @@ class KernelFitImageTests(FitImageTestCase):
439 fitimage_name = "fitImage" # or fitImage-${KERNEL_IMAGE_LINK_NAME}${KERNEL_IMAGE_BIN_EXT} 487 fitimage_name = "fitImage" # or fitImage-${KERNEL_IMAGE_LINK_NAME}${KERNEL_IMAGE_BIN_EXT}
440 else: 488 else:
441 self.fail('Invalid configuration: INITRAMFS_IMAGE_BUNDLE = "1" and not INITRAMFS_IMAGE') 489 self.fail('Invalid configuration: INITRAMFS_IMAGE_BUNDLE = "1" and not INITRAMFS_IMAGE')
442 fitimage_its_path = os.path.realpath(os.path.join(deploy_dir_image, fitimage_its_name)) 490 kernel_deploysubdir = bb_vars['KERNEL_DEPLOYSUBDIR']
443 fitimage_path = os.path.realpath(os.path.join(deploy_dir_image, fitimage_name)) 491 if kernel_deploysubdir:
492 fitimage_its_path = os.path.realpath(os.path.join(deploy_dir_image, kernel_deploysubdir, fitimage_its_name))
493 fitimage_path = os.path.realpath(os.path.join(deploy_dir_image, kernel_deploysubdir, fitimage_name))
494 else:
495 fitimage_its_path = os.path.realpath(os.path.join(deploy_dir_image, fitimage_its_name))
496 fitimage_path = os.path.realpath(os.path.join(deploy_dir_image, fitimage_name))
444 return (fitimage_its_path, fitimage_path) 497 return (fitimage_its_path, fitimage_path)
445 498
446 def _get_req_its_paths(self, bb_vars): 499 def _get_req_its_paths(self, bb_vars):
@@ -452,7 +505,7 @@ class KernelFitImageTests(FitImageTestCase):
452 ['/', 'images', 'kernel-1', 'signature-1'], 505 ['/', 'images', 'kernel-1', 'signature-1'],
453 ] 506 ]
454 """ 507 """
455 dtb_files = FitImageTestCase._get_dtb_files(bb_vars) 508 dtb_files, dtb_symlinks = FitImageTestCase._get_dtb_files(bb_vars)
456 fit_sign_individual = bb_vars['FIT_SIGN_INDIVIDUAL'] 509 fit_sign_individual = bb_vars['FIT_SIGN_INDIVIDUAL']
457 fit_uboot_env = bb_vars['FIT_UBOOT_ENV'] 510 fit_uboot_env = bb_vars['FIT_UBOOT_ENV']
458 initramfs_image = bb_vars['INITRAMFS_IMAGE'] 511 initramfs_image = bb_vars['INITRAMFS_IMAGE']
@@ -470,11 +523,11 @@ class KernelFitImageTests(FitImageTestCase):
470 if initramfs_image and initramfs_image_bundle != "1": 523 if initramfs_image and initramfs_image_bundle != "1":
471 images.append('ramdisk-1') 524 images.append('ramdisk-1')
472 525
473 # configuration nodes 526 # configuration nodes (one per DTB and also one per symlink)
474 if dtb_files: 527 if dtb_files:
475 configurations = [ 'conf-' + conf for conf in dtb_files ] 528 configurations = [bb_vars['FIT_CONF_PREFIX'] + conf for conf in dtb_files + dtb_symlinks]
476 else: 529 else:
477 configurations = [ 'conf-1' ] 530 configurations = [bb_vars['FIT_CONF_PREFIX'] + '1']
478 531
479 # Create a list of paths for all image and configuration nodes 532 # Create a list of paths for all image and configuration nodes
480 req_its_paths = [] 533 req_its_paths = []
@@ -497,11 +550,11 @@ class KernelFitImageTests(FitImageTestCase):
497 its_field_check = [ 550 its_field_check = [
498 'description = "%s";' % bb_vars['FIT_DESC'], 551 'description = "%s";' % bb_vars['FIT_DESC'],
499 'description = "Linux kernel";', 552 'description = "Linux kernel";',
500 'data = /incbin/("linux.bin");',
501 'type = "' + str(bb_vars['UBOOT_MKIMAGE_KERNEL_TYPE']) + '";', 553 'type = "' + str(bb_vars['UBOOT_MKIMAGE_KERNEL_TYPE']) + '";',
554 # 'compression = "' + str(bb_vars['FIT_KERNEL_COMP_ALG']) + '";', defined based on files in TMPDIR, not ideal...
555 'data = /incbin/("linux.bin");',
502 'arch = "' + str(bb_vars['UBOOT_ARCH']) + '";', 556 'arch = "' + str(bb_vars['UBOOT_ARCH']) + '";',
503 'os = "linux";', 557 'os = "linux";',
504 # 'compression = "' + str(bb_vars['FIT_KERNEL_COMP_ALG']) + '";', defined based on files in TMPDIR, not ideal...
505 'load = <' + str(bb_vars['UBOOT_LOADADDRESS']) + '>;', 558 'load = <' + str(bb_vars['UBOOT_LOADADDRESS']) + '>;',
506 'entry = <' + str(bb_vars['UBOOT_ENTRYPOINT']) + '>;', 559 'entry = <' + str(bb_vars['UBOOT_ENTRYPOINT']) + '>;',
507 ] 560 ]
@@ -511,10 +564,14 @@ class KernelFitImageTests(FitImageTestCase):
511 its_field_check.append("load = <%s>;" % uboot_rd_loadaddress) 564 its_field_check.append("load = <%s>;" % uboot_rd_loadaddress)
512 if uboot_rd_entrypoint: 565 if uboot_rd_entrypoint:
513 its_field_check.append("entry = <%s>;" % uboot_rd_entrypoint) 566 its_field_check.append("entry = <%s>;" % uboot_rd_entrypoint)
514 its_field_check += [ 567
515 # 'default = "conf-1";', needs more work 568 fit_conf_default_dtb = bb_vars.get('FIT_CONF_DEFAULT_DTB')
516 'kernel = "kernel-1";', 569 if fit_conf_default_dtb:
517 ] 570 fit_conf_prefix = bb_vars.get('FIT_CONF_PREFIX', "conf-")
571 its_field_check.append('default = "' + fit_conf_prefix + fit_conf_default_dtb + '";')
572
573 its_field_check.append('kernel = "kernel-1";')
574
518 if initramfs_image and initramfs_image_bundle != "1": 575 if initramfs_image and initramfs_image_bundle != "1":
519 its_field_check.append('ramdisk = "ramdisk-1";') 576 its_field_check.append('ramdisk = "ramdisk-1";')
520 577
@@ -548,7 +605,7 @@ class KernelFitImageTests(FitImageTestCase):
548 605
549 def _get_req_sections(self, bb_vars): 606 def _get_req_sections(self, bb_vars):
550 """Generate a dictionary of expected sections in the output of dumpimage""" 607 """Generate a dictionary of expected sections in the output of dumpimage"""
551 dtb_files = FitImageTestCase._get_dtb_files(bb_vars) 608 dtb_files, dtb_symlinks = FitImageTestCase._get_dtb_files(bb_vars)
552 fit_hash_alg = bb_vars['FIT_HASH_ALG'] 609 fit_hash_alg = bb_vars['FIT_HASH_ALG']
553 fit_sign_alg = bb_vars['FIT_SIGN_ALG'] 610 fit_sign_alg = bb_vars['FIT_SIGN_ALG']
554 fit_sign_individual = bb_vars['FIT_SIGN_INDIVIDUAL'] 611 fit_sign_individual = bb_vars['FIT_SIGN_INDIVIDUAL']
@@ -584,25 +641,36 @@ class KernelFitImageTests(FitImageTestCase):
584 } 641 }
585 # Create a configuration section for each DTB 642 # Create a configuration section for each DTB
586 if dtb_files: 643 if dtb_files:
587 for dtb in dtb_files: 644 for dtb in dtb_files + dtb_symlinks:
588 req_sections['conf-' + dtb] = { 645 conf_name = bb_vars['FIT_CONF_PREFIX'] + dtb
589 "Kernel": "kernel-1", 646 # Assume that DTBs with an "-alias" in its name are symlink DTBs created e.g. by the
590 "FDT": 'fdt-' + dtb, 647 # bbb-dtbs-as-ext test recipe. Make the configuration node pointing to the real DTB.
591 } 648 real_dtb = dtb.replace("-alias", "")
649 # dtb overlays do not refer to a kernel (yet?)
650 if dtb.endswith('.dtbo'):
651 req_sections[conf_name] = {
652 "FDT": 'fdt-' + real_dtb,
653 }
654 else:
655 req_sections[conf_name] = {
656 "Kernel": "kernel-1",
657 "FDT": 'fdt-' + real_dtb,
658 }
592 if initramfs_image and initramfs_image_bundle != "1": 659 if initramfs_image and initramfs_image_bundle != "1":
593 req_sections['conf-' + dtb]['Init Ramdisk'] = "ramdisk-1" 660 req_sections[conf_name]['Init Ramdisk'] = "ramdisk-1"
594 else: 661 else:
595 req_sections['conf-1'] = { 662 conf_name = bb_vars['FIT_CONF_PREFIX'] + '1'
663 req_sections[conf_name] = {
596 "Kernel": "kernel-1" 664 "Kernel": "kernel-1"
597 } 665 }
598 if initramfs_image and initramfs_image_bundle != "1": 666 if initramfs_image and initramfs_image_bundle != "1":
599 req_sections['conf-1']['Init Ramdisk'] = "ramdisk-1" 667 req_sections[conf_name]['Init Ramdisk'] = "ramdisk-1"
600 668
601 # Add signing related properties if needed 669 # Add signing related properties if needed
602 if uboot_sign_enable == "1": 670 if uboot_sign_enable == "1":
603 for section in req_sections: 671 for section in req_sections:
604 req_sections[section]['Hash algo'] = fit_hash_alg 672 req_sections[section]['Hash algo'] = fit_hash_alg
605 if section.startswith('conf-'): 673 if section.startswith(bb_vars['FIT_CONF_PREFIX']):
606 req_sections[section]['Hash value'] = "unavailable" 674 req_sections[section]['Hash value'] = "unavailable"
607 req_sections[section]['Sign algo'] = "%s,%s:%s" % (fit_hash_alg, fit_sign_alg, uboot_sign_keyname) 675 req_sections[section]['Sign algo'] = "%s,%s:%s" % (fit_hash_alg, fit_sign_alg, uboot_sign_keyname)
608 num_signatures += 1 676 num_signatures += 1
@@ -624,18 +692,26 @@ class KernelFitImageTests(FitImageTestCase):
624 uboot_sign_keyname = bb_vars['UBOOT_SIGN_KEYNAME'] 692 uboot_sign_keyname = bb_vars['UBOOT_SIGN_KEYNAME']
625 uboot_sign_img_keyname = bb_vars['UBOOT_SIGN_IMG_KEYNAME'] 693 uboot_sign_img_keyname = bb_vars['UBOOT_SIGN_IMG_KEYNAME']
626 deploy_dir_image = bb_vars['DEPLOY_DIR_IMAGE'] 694 deploy_dir_image = bb_vars['DEPLOY_DIR_IMAGE']
695 kernel_deploysubdir = bb_vars['KERNEL_DEPLOYSUBDIR']
627 fit_sign_individual = bb_vars['FIT_SIGN_INDIVIDUAL'] 696 fit_sign_individual = bb_vars['FIT_SIGN_INDIVIDUAL']
628 fit_hash_alg_len = FitImageTestCase.MKIMAGE_HASH_LENGTHS[fit_hash_alg] 697 fit_hash_alg_len = FitImageTestCase.MKIMAGE_HASH_LENGTHS[fit_hash_alg]
629 fit_sign_alg_len = FitImageTestCase.MKIMAGE_SIGNATURE_LENGTHS[fit_sign_alg] 698 fit_sign_alg_len = FitImageTestCase.MKIMAGE_SIGNATURE_LENGTHS[fit_sign_alg]
630 for section, values in sections.items(): 699 for section, values in sections.items():
631 # Configuration nodes are always signed with UBOOT_SIGN_KEYNAME (if UBOOT_SIGN_ENABLE = "1") 700 # Configuration nodes are always signed with UBOOT_SIGN_KEYNAME (if UBOOT_SIGN_ENABLE = "1")
632 if section.startswith("conf"): 701 if section.startswith(bb_vars['FIT_CONF_PREFIX']):
633 sign_algo = values.get('Sign algo', None) 702 sign_algo = values.get('Sign algo', None)
634 req_sign_algo = "%s,%s:%s" % (fit_hash_alg, fit_sign_alg, uboot_sign_keyname) 703 req_sign_algo = "%s,%s:%s" % (fit_hash_alg, fit_sign_alg, uboot_sign_keyname)
635 self.assertEqual(sign_algo, req_sign_algo, 'Signature algorithm for %s not expected value' % section) 704 self.assertEqual(sign_algo, req_sign_algo, 'Signature algorithm for %s not expected value' % section)
636 sign_value = values.get('Sign value', None) 705 sign_value = values.get('Sign value', None)
637 self.assertEqual(len(sign_value), fit_sign_alg_len, 'Signature value for section %s not expected length' % section) 706 self.assertEqual(len(sign_value), fit_sign_alg_len, 'Signature value for section %s not expected length' % section)
638 dtb_path = os.path.join(deploy_dir_image, section.replace('conf-', '')) 707 dtb_file_name = section.replace(bb_vars['FIT_CONF_PREFIX'], '')
708 dtb_path = os.path.join(deploy_dir_image, dtb_file_name)
709 if kernel_deploysubdir:
710 dtb_path = os.path.join(deploy_dir_image, kernel_deploysubdir, dtb_file_name)
711 # External devicetrees created by devicetree.bbclass are in a subfolder and have priority
712 dtb_path_ext = os.path.join(deploy_dir_image, "devicetree", dtb_file_name)
713 if os.path.exists(dtb_path_ext):
714 dtb_path = dtb_path_ext
639 self._verify_fit_image_signature(uboot_tools_bindir, fitimage_path, dtb_path, section) 715 self._verify_fit_image_signature(uboot_tools_bindir, fitimage_path, dtb_path, section)
640 else: 716 else:
641 # Image nodes always need a hash which gets indirectly signed by the config signature 717 # Image nodes always need a hash which gets indirectly signed by the config signature
@@ -660,6 +736,8 @@ class KernelFitImageTests(FitImageTestCase):
660 self.assertEqual(found_comments, num_signatures, "Expected %d signed and commented (%s) sections in the fitImage." % 736 self.assertEqual(found_comments, num_signatures, "Expected %d signed and commented (%s) sections in the fitImage." %
661 (num_signatures, a_comment)) 737 (num_signatures, a_comment))
662 738
739class KernelFitImageRecipeTests(KernelFitImageBase):
740 """Test cases for the kernel-fitimage bbclass"""
663 741
664 def test_fit_image(self): 742 def test_fit_image(self):
665 """ 743 """
@@ -675,10 +753,7 @@ class KernelFitImageTests(FitImageTestCase):
675 Author: Usama Arif <usama.arif@arm.com> 753 Author: Usama Arif <usama.arif@arm.com>
676 """ 754 """
677 config = """ 755 config = """
678# Enable creation of fitImage
679KERNEL_IMAGETYPE = "Image" 756KERNEL_IMAGETYPE = "Image"
680KERNEL_IMAGETYPES += " fitImage "
681KERNEL_CLASSES = " kernel-fitimage "
682 757
683# RAM disk variables including load address and entrypoint for kernel and RAM disk 758# RAM disk variables including load address and entrypoint for kernel and RAM disk
684IMAGE_FSTYPES += "cpio.gz" 759IMAGE_FSTYPES += "cpio.gz"
@@ -690,8 +765,76 @@ UBOOT_RD_ENTRYPOINT = "0x88000000"
690UBOOT_LOADADDRESS = "0x80080000" 765UBOOT_LOADADDRESS = "0x80080000"
691UBOOT_ENTRYPOINT = "0x80080000" 766UBOOT_ENTRYPOINT = "0x80080000"
692FIT_DESC = "A model description" 767FIT_DESC = "A model description"
768FIT_CONF_PREFIX = "foo-"
769"""
770 config = self._config_add_kernel_classes(config)
771 self.write_config(config)
772 bb_vars = self._fit_get_bb_vars()
773 self._test_fitimage(bb_vars)
774
775 def test_get_compatible_from_dtb(self):
776 """Test the oe.fitimage.get_compatible_from_dtb function
777
778 1. bitbake bbb-dtbs-as-ext
779 2. Check if symlink_points_below returns the path to the DTB
780 3. Check if the expected compatible string is found by get_compatible_from_dtb()
781 """
782 DTB_RECIPE = "bbb-dtbs-as-ext"
783 DTB_FILE = "am335x-bonegreen-ext.dtb"
784 DTB_SYMLINK = "am335x-bonegreen-ext-alias.dtb"
785 DTBO_FILE = "BBORG_RELAY-00A2.dtbo"
786 EXPECTED_COMP = ["ti,am335x-bone-green", "ti,am335x-bone-black", "ti,am335x-bone", "ti,am33xx"]
787
788 config = """
789DISTRO="poky"
790MACHINE = "beaglebone-yocto"
693""" 791"""
694 self.write_config(config) 792 self.write_config(config)
793
794 # Provide the fdtget command called by get_compatible_from_dtb
795 dtc_bindir = FitImageTestCase._setup_native('dtc-native')
796 fdtget_path = os.path.join(dtc_bindir, "fdtget")
797 self.assertExists(fdtget_path)
798
799 # bitbake an external DTB with a symlink to it and a DTB overlay
800 bitbake(DTB_RECIPE)
801 deploy_dir_image = get_bb_var("DEPLOY_DIR_IMAGE", DTB_RECIPE)
802 devicetree_dir = os.path.join(deploy_dir_image, "devicetree")
803 dtb_path = os.path.join(devicetree_dir, DTB_FILE)
804 dtb_alias_path = os.path.join(devicetree_dir, DTB_SYMLINK)
805 dtbo_file = os.path.join(devicetree_dir, DTBO_FILE)
806 self.assertExists(dtb_path)
807 self.assertExists(dtb_alias_path)
808 self.assertExists(dtbo_file)
809
810 # Test symlink_points_below
811 linked_dtb = oe.fitimage.symlink_points_below(dtb_alias_path, devicetree_dir)
812 self.assertEqual(linked_dtb, DTB_FILE)
813
814 # Check if get_compatible_from_dtb finds the expected compatible string in the DTBs
815 comp = oe.fitimage.get_compatible_from_dtb(dtb_path, fdtget_path)
816 self.assertEqual(comp, EXPECTED_COMP)
817 comp_alias = oe.fitimage.get_compatible_from_dtb(dtb_alias_path, fdtget_path)
818 self.assertEqual(comp_alias, EXPECTED_COMP)
819 # The alias is a symlink, therefore the compatible string is equal
820 self.assertEqual(comp_alias, comp)
821
822 def test_fit_image_ext_dtb_dtbo(self):
823 """
824 Summary: Check if FIT image and Image Tree Source (its) are created correctly.
825 Expected: 1) its and FIT image are built successfully
826 2) The its file contains also the external devicetree overlay
827 3) Dumping the FIT image indicates the devicetree overlay
828 """
829 config = """
830# Enable creation of fitImage
831MACHINE = "beaglebone-yocto"
832# Add a devicetree overlay which does not need kernel sources
833PREFERRED_PROVIDER_virtual/dtb = "bbb-dtbs-as-ext"
834"""
835 config = self._config_add_kernel_classes(config)
836 config = self._config_add_uboot_env(config)
837 self.write_config(config)
695 bb_vars = self._fit_get_bb_vars() 838 bb_vars = self._fit_get_bb_vars()
696 self._test_fitimage(bb_vars) 839 self._test_fitimage(bb_vars)
697 840
@@ -702,8 +845,7 @@ FIT_DESC = "A model description"
702 and the configuration nodes are signed correctly. 845 and the configuration nodes are signed correctly.
703 Expected: 1) its and FIT image are built successfully 846 Expected: 1) its and FIT image are built successfully
704 2) Scanning the its file indicates signing is enabled 847 2) Scanning the its file indicates signing is enabled
705 as requested by UBOOT_SIGN_ENABLE (using 1 key 848 as requested by UBOOT_SIGN_ENABLE
706 generated by the test not via FIT_GENERATE_KEYS)
707 3) Dumping the FIT image indicates signature values 849 3) Dumping the FIT image indicates signature values
708 are present (only for the configuration nodes as 850 are present (only for the configuration nodes as
709 FIT_SIGN_INDIVIDUAL is disabled) 851 FIT_SIGN_INDIVIDUAL is disabled)
@@ -714,13 +856,13 @@ FIT_DESC = "A model description"
714 config = """ 856 config = """
715# Enable creation of fitImage 857# Enable creation of fitImage
716MACHINE = "beaglebone-yocto" 858MACHINE = "beaglebone-yocto"
717KERNEL_IMAGETYPES += " fitImage "
718KERNEL_CLASSES = " kernel-fitimage "
719UBOOT_SIGN_ENABLE = "1" 859UBOOT_SIGN_ENABLE = "1"
720UBOOT_SIGN_KEYDIR = "${TOPDIR}/signing-keys" 860UBOOT_SIGN_KEYDIR = "${TOPDIR}/signing-keys"
721UBOOT_SIGN_KEYNAME = "dev" 861UBOOT_SIGN_KEYNAME = "dev"
722UBOOT_MKIMAGE_SIGN_ARGS = "-c 'a smart comment'" 862UBOOT_MKIMAGE_SIGN_ARGS = "-c 'a smart comment'"
863FIT_CONF_DEFAULT_DTB = "am335x-bonegreen.dtb"
723""" 864"""
865 config = self._config_add_kernel_classes(config)
724 config = self._config_add_uboot_env(config) 866 config = self._config_add_uboot_env(config)
725 self.write_config(config) 867 self.write_config(config)
726 868
@@ -733,10 +875,7 @@ UBOOT_MKIMAGE_SIGN_ARGS = "-c 'a smart comment'"
733 'UBOOT_SIGN_KEYDIR', 875 'UBOOT_SIGN_KEYDIR',
734 ]) 876 ])
735 877
736 # Do not use the random keys generated by FIT_GENERATE_KEYS.
737 # Using a static key is probably a more realistic scenario.
738 self._gen_signing_key(bb_vars) 878 self._gen_signing_key(bb_vars)
739
740 self._test_fitimage(bb_vars) 879 self._test_fitimage(bb_vars)
741 880
742 def test_sign_fit_image_individual(self): 881 def test_sign_fit_image_individual(self):
@@ -745,11 +884,11 @@ UBOOT_MKIMAGE_SIGN_ARGS = "-c 'a smart comment'"
745 and all nodes are signed correctly. 884 and all nodes are signed correctly.
746 Expected: 1) its and FIT image are built successfully 885 Expected: 1) its and FIT image are built successfully
747 2) Scanning the its file indicates signing is enabled 886 2) Scanning the its file indicates signing is enabled
748 as requested by UBOOT_SIGN_ENABLE (using 2 keys 887 as requested by UBOOT_SIGN_ENABLE
749 generated via FIT_GENERATE_KEYS)
750 3) Dumping the FIT image indicates signature values 888 3) Dumping the FIT image indicates signature values
751 are present (including for images as enabled via 889 are present (including for images as enabled via
752 FIT_SIGN_INDIVIDUAL) 890 FIT_SIGN_INDIVIDUAL)
891 This also implies that FIT_GENERATE_KEYS = "1" works.
753 4) Verify the FIT image contains the comments passed via 892 4) Verify the FIT image contains the comments passed via
754 UBOOT_MKIMAGE_SIGN_ARGS once per image and per 893 UBOOT_MKIMAGE_SIGN_ARGS once per image and per
755 configuration node. 894 configuration node.
@@ -765,8 +904,6 @@ UBOOT_MKIMAGE_SIGN_ARGS = "-c 'a smart comment'"
765 config = """ 904 config = """
766# Enable creation of fitImage 905# Enable creation of fitImage
767MACHINE = "beaglebone-yocto" 906MACHINE = "beaglebone-yocto"
768KERNEL_IMAGETYPES += " fitImage "
769KERNEL_CLASSES = " kernel-fitimage "
770UBOOT_SIGN_ENABLE = "1" 907UBOOT_SIGN_ENABLE = "1"
771FIT_GENERATE_KEYS = "1" 908FIT_GENERATE_KEYS = "1"
772UBOOT_SIGN_KEYDIR = "${TOPDIR}/signing-keys" 909UBOOT_SIGN_KEYDIR = "${TOPDIR}/signing-keys"
@@ -775,9 +912,14 @@ UBOOT_SIGN_KEYNAME = "cfg-oe-selftest"
775FIT_SIGN_INDIVIDUAL = "1" 912FIT_SIGN_INDIVIDUAL = "1"
776UBOOT_MKIMAGE_SIGN_ARGS = "-c 'a smart comment'" 913UBOOT_MKIMAGE_SIGN_ARGS = "-c 'a smart comment'"
777""" 914"""
915 config = self._config_add_kernel_classes(config)
778 config = self._config_add_uboot_env(config) 916 config = self._config_add_uboot_env(config)
779 self.write_config(config) 917 self.write_config(config)
780 bb_vars = self._fit_get_bb_vars() 918 bb_vars = self._fit_get_bb_vars()
919
920 # Ensure new keys are generated and FIT_GENERATE_KEYS = "1" is tested
921 bitbake("kernel-signing-keys-native -c cleansstate")
922
781 self._test_fitimage(bb_vars) 923 self._test_fitimage(bb_vars)
782 924
783 def test_fit_image_sign_initramfs(self): 925 def test_fit_image_sign_initramfs(self):
@@ -801,8 +943,6 @@ MACHINE = "beaglebone-yocto"
801INITRAMFS_IMAGE = "core-image-minimal-initramfs" 943INITRAMFS_IMAGE = "core-image-minimal-initramfs"
802INITRAMFS_SCRIPTS = "" 944INITRAMFS_SCRIPTS = ""
803UBOOT_MACHINE = "am335x_evm_defconfig" 945UBOOT_MACHINE = "am335x_evm_defconfig"
804KERNEL_CLASSES = " kernel-fitimage "
805KERNEL_IMAGETYPES = "fitImage"
806UBOOT_SIGN_ENABLE = "1" 946UBOOT_SIGN_ENABLE = "1"
807UBOOT_SIGN_KEYNAME = "beaglebonekey" 947UBOOT_SIGN_KEYNAME = "beaglebonekey"
808UBOOT_SIGN_KEYDIR ?= "${DEPLOY_DIR_IMAGE}" 948UBOOT_SIGN_KEYDIR ?= "${DEPLOY_DIR_IMAGE}"
@@ -816,11 +956,11 @@ UBOOT_ARCH = "arm"
816UBOOT_MKIMAGE_DTCOPTS = "-I dts -O dtb -p 2000" 956UBOOT_MKIMAGE_DTCOPTS = "-I dts -O dtb -p 2000"
817UBOOT_MKIMAGE_KERNEL_TYPE = "kernel" 957UBOOT_MKIMAGE_KERNEL_TYPE = "kernel"
818UBOOT_EXTLINUX = "0" 958UBOOT_EXTLINUX = "0"
819FIT_GENERATE_KEYS = "1"
820KERNEL_IMAGETYPE_REPLACEMENT = "zImage" 959KERNEL_IMAGETYPE_REPLACEMENT = "zImage"
821FIT_KERNEL_COMP_ALG = "none" 960FIT_KERNEL_COMP_ALG = "none"
822FIT_HASH_ALG = "sha256" 961FIT_HASH_ALG = "sha256"
823""" 962"""
963 config = self._config_add_kernel_classes(config)
824 config = self._config_add_uboot_env(config) 964 config = self._config_add_uboot_env(config)
825 self.write_config(config) 965 self.write_config(config)
826 966
@@ -833,10 +973,7 @@ FIT_HASH_ALG = "sha256"
833 'UBOOT_SIGN_KEYDIR', 973 'UBOOT_SIGN_KEYDIR',
834 ]) 974 ])
835 975
836 # Do not use the random keys generated by FIT_GENERATE_KEYS.
837 # Using a static key is probably a more realistic scenario.
838 self._gen_signing_key(bb_vars) 976 self._gen_signing_key(bb_vars)
839
840 self._test_fitimage(bb_vars) 977 self._test_fitimage(bb_vars)
841 978
842 def test_fit_image_sign_initramfs_bundle(self): 979 def test_fit_image_sign_initramfs_bundle(self):
@@ -861,8 +998,6 @@ INITRAMFS_IMAGE_BUNDLE = "1"
861INITRAMFS_IMAGE = "core-image-minimal-initramfs" 998INITRAMFS_IMAGE = "core-image-minimal-initramfs"
862INITRAMFS_SCRIPTS = "" 999INITRAMFS_SCRIPTS = ""
863UBOOT_MACHINE = "am335x_evm_defconfig" 1000UBOOT_MACHINE = "am335x_evm_defconfig"
864KERNEL_CLASSES = " kernel-fitimage "
865KERNEL_IMAGETYPES = "fitImage"
866UBOOT_SIGN_ENABLE = "1" 1001UBOOT_SIGN_ENABLE = "1"
867UBOOT_SIGN_KEYNAME = "beaglebonekey" 1002UBOOT_SIGN_KEYNAME = "beaglebonekey"
868UBOOT_SIGN_KEYDIR ?= "${DEPLOY_DIR_IMAGE}" 1003UBOOT_SIGN_KEYDIR ?= "${DEPLOY_DIR_IMAGE}"
@@ -874,20 +1009,124 @@ UBOOT_ARCH = "arm"
874UBOOT_MKIMAGE_DTCOPTS = "-I dts -O dtb -p 2000" 1009UBOOT_MKIMAGE_DTCOPTS = "-I dts -O dtb -p 2000"
875UBOOT_MKIMAGE_KERNEL_TYPE = "kernel" 1010UBOOT_MKIMAGE_KERNEL_TYPE = "kernel"
876UBOOT_EXTLINUX = "0" 1011UBOOT_EXTLINUX = "0"
877FIT_GENERATE_KEYS = "1"
878KERNEL_IMAGETYPE_REPLACEMENT = "zImage" 1012KERNEL_IMAGETYPE_REPLACEMENT = "zImage"
879FIT_KERNEL_COMP_ALG = "none" 1013FIT_KERNEL_COMP_ALG = "none"
880FIT_HASH_ALG = "sha256" 1014FIT_HASH_ALG = "sha256"
881""" 1015"""
1016 config = self._config_add_kernel_classes(config)
882 config = self._config_add_uboot_env(config) 1017 config = self._config_add_uboot_env(config)
883 self.write_config(config) 1018 self.write_config(config)
884 bb_vars = self._fit_get_bb_vars() 1019 bb_vars = self._fit_get_bb_vars()
1020 self._gen_signing_key(bb_vars)
885 self._test_fitimage(bb_vars) 1021 self._test_fitimage(bb_vars)
886 1022
1023class FitImagePyTests(KernelFitImageBase):
1024 """Test cases for the fitimage.py module without calling bitbake"""
1025
1026 def _test_fitimage_py(self, bb_vars_overrides=None):
1027 topdir = os.path.join(os.environ['BUILDDIR'])
1028 fitimage_its_path = os.path.join(topdir, self._testMethodName + '.its')
1029
1030 # Provide variables without calling bitbake
1031 bb_vars = {
1032 # image-fitimage.conf
1033 'FIT_DESC': "Kernel fitImage for a dummy distro",
1034 'FIT_HASH_ALG': "sha256",
1035 'FIT_SIGN_ALG': "rsa2048",
1036 'FIT_PAD_ALG': "pkcs-1.5",
1037 'FIT_GENERATE_KEYS': "0",
1038 'FIT_SIGN_NUMBITS': "2048",
1039 'FIT_KEY_GENRSA_ARGS': "-F4",
1040 'FIT_KEY_REQ_ARGS': "-batch -new",
1041 'FIT_KEY_SIGN_PKCS': "-x509",
1042 'FIT_SIGN_INDIVIDUAL': "0",
1043 'FIT_CONF_PREFIX': "conf-",
1044 'FIT_SUPPORTED_INITRAMFS_FSTYPES': "cpio.lz4 cpio.lzo cpio.lzma cpio.xz cpio.zst cpio.gz ext2.gz cpio",
1045 'FIT_CONF_DEFAULT_DTB': "",
1046 'FIT_ADDRESS_CELLS': "1",
1047 'FIT_UBOOT_ENV': "",
1048 # kernel.bbclass
1049 'UBOOT_ENTRYPOINT': "0x20008000",
1050 'UBOOT_LOADADDRESS': "0x20008000",
1051 'INITRAMFS_IMAGE': "",
1052 'INITRAMFS_IMAGE_BUNDLE': "",
1053 # kernel-uboot.bbclass
1054 'FIT_KERNEL_COMP_ALG': "gzip",
1055 'FIT_KERNEL_COMP_ALG_EXTENSION': ".gz",
1056 'UBOOT_MKIMAGE_KERNEL_TYPE': "kernel",
1057 # uboot-config.bbclass
1058 'UBOOT_MKIMAGE_DTCOPTS': "",
1059 'UBOOT_MKIMAGE': "uboot-mkimage",
1060 'UBOOT_MKIMAGE_SIGN': "uboot-mkimage",
1061 'UBOOT_MKIMAGE_SIGN_ARGS': "",
1062 'UBOOT_SIGN_ENABLE': "0",
1063 'UBOOT_SIGN_KEYDIR': None,
1064 'UBOOT_SIGN_KEYNAME': None,
1065 'UBOOT_SIGN_IMG_KEYNAME': None,
1066 # others
1067 'MACHINE': "qemux86-64",
1068 'UBOOT_ARCH': "x86",
1069 'HOST_PREFIX': "x86_64-poky-linux-"
1070 }
1071 if bb_vars_overrides:
1072 bb_vars.update(bb_vars_overrides)
1073
1074 root_node = oe.fitimage.ItsNodeRootKernel(
1075 bb_vars["FIT_DESC"], bb_vars["FIT_ADDRESS_CELLS"],
1076 bb_vars['HOST_PREFIX'], bb_vars['UBOOT_ARCH'], bb_vars["FIT_CONF_PREFIX"],
1077 oe.types.boolean(bb_vars['UBOOT_SIGN_ENABLE']), bb_vars["UBOOT_SIGN_KEYDIR"],
1078 bb_vars["UBOOT_MKIMAGE"], bb_vars["UBOOT_MKIMAGE_DTCOPTS"],
1079 bb_vars["UBOOT_MKIMAGE_SIGN"], bb_vars["UBOOT_MKIMAGE_SIGN_ARGS"],
1080 bb_vars['FIT_HASH_ALG'], bb_vars['FIT_SIGN_ALG'], bb_vars['FIT_PAD_ALG'],
1081 bb_vars['UBOOT_SIGN_KEYNAME'],
1082 oe.types.boolean(bb_vars['FIT_SIGN_INDIVIDUAL']), bb_vars['UBOOT_SIGN_IMG_KEYNAME']
1083 )
1084
1085 root_node.fitimage_emit_section_kernel("kernel-1", "linux.bin", "none",
1086 bb_vars.get('UBOOT_LOADADDRESS'), bb_vars.get('UBOOT_ENTRYPOINT'),
1087 bb_vars.get('UBOOT_MKIMAGE_KERNEL_TYPE'), bb_vars.get("UBOOT_ENTRYSYMBOL")
1088 )
1089
1090 dtb_files, _ = FitImageTestCase._get_dtb_files(bb_vars)
1091 for dtb in dtb_files:
1092 root_node.fitimage_emit_section_dtb(dtb, os.path.join("a-dir", dtb),
1093 bb_vars.get("UBOOT_DTB_LOADADDRESS"), bb_vars.get("UBOOT_DTBO_LOADADDRESS"))
1094
1095 if bb_vars.get('FIT_UBOOT_ENV'):
1096 root_node.fitimage_emit_section_boot_script(
1097 "bootscr-" + bb_vars['FIT_UBOOT_ENV'], bb_vars['FIT_UBOOT_ENV'])
1098
1099 if bb_vars['MACHINE'] == "qemux86-64": # Not really the right if
1100 root_node.fitimage_emit_section_setup("setup-1", "setup1.bin")
1101
1102 if bb_vars.get('INITRAMFS_IMAGE') and bb_vars.get("INITRAMFS_IMAGE_BUNDLE") != "1":
1103 root_node.fitimage_emit_section_ramdisk("ramdisk-1", "a-dir/a-initramfs-1",
1104 "core-image-minimal-initramfs",
1105 bb_vars.get("UBOOT_RD_LOADADDRESS"), bb_vars.get("UBOOT_RD_ENTRYPOINT"))
1106
1107 root_node.fitimage_emit_section_config(bb_vars['FIT_CONF_DEFAULT_DTB'])
1108 root_node.write_its_file(fitimage_its_path)
1109
1110 self.assertExists(fitimage_its_path, "%s image tree source doesn't exist" % (fitimage_its_path))
1111 self.logger.debug("Checking its: %s" % fitimage_its_path)
1112 self._check_its_file(bb_vars, fitimage_its_path)
1113
1114 def test_fitimage_py_default(self):
1115 self._test_fitimage_py()
1116
1117 def test_fitimage_py_default_dtb(self):
1118 bb_vars_overrides = {
1119 'KERNEL_DEVICETREE': "one.dtb two.dtb three.dtb",
1120 'FIT_CONF_DEFAULT_DTB': "two.dtb"
1121 }
1122 self._test_fitimage_py(bb_vars_overrides)
1123
887 1124
888class UBootFitImageTests(FitImageTestCase): 1125class UBootFitImageTests(FitImageTestCase):
889 """Test cases for the uboot-sign bbclass""" 1126 """Test cases for the uboot-sign bbclass"""
890 1127
1128 BOOTLOADER_RECIPE = "virtual/bootloader"
1129
891 def _fit_get_bb_vars(self, additional_vars=[]): 1130 def _fit_get_bb_vars(self, additional_vars=[]):
892 """Get bb_vars as needed by _test_sign_fit_image 1131 """Get bb_vars as needed by _test_sign_fit_image
893 1132
@@ -929,13 +1168,13 @@ class UBootFitImageTests(FitImageTestCase):
929 'UBOOT_SIGN_KEYDIR', 1168 'UBOOT_SIGN_KEYDIR',
930 'UBOOT_SIGN_KEYNAME', 1169 'UBOOT_SIGN_KEYNAME',
931 } 1170 }
932 bb_vars = get_bb_vars(list(internal_used | set(additional_vars)), "virtual/bootloader") 1171 bb_vars = get_bb_vars(list(internal_used | set(additional_vars)), UBootFitImageTests.BOOTLOADER_RECIPE)
933 self.logger.debug("bb_vars: %s" % pprint.pformat(bb_vars, indent=4)) 1172 self.logger.debug("bb_vars: %s" % pprint.pformat(bb_vars, indent=4))
934 return bb_vars 1173 return bb_vars
935 1174
936 def _bitbake_fit_image(self, bb_vars): 1175 def _bitbake_fit_image(self, bb_vars):
937 """Bitbake the bootloader and return the paths to the its file and the FIT image""" 1176 """Bitbake the bootloader and return the paths to the its file and the FIT image"""
938 bitbake("virtual/bootloader") 1177 bitbake(UBootFitImageTests.BOOTLOADER_RECIPE)
939 1178
940 deploy_dir_image = bb_vars['DEPLOY_DIR_IMAGE'] 1179 deploy_dir_image = bb_vars['DEPLOY_DIR_IMAGE']
941 machine = bb_vars['MACHINE'] 1180 machine = bb_vars['MACHINE']
@@ -1286,9 +1525,7 @@ UBOOT_SIGN_KEYNAME = "cfg-oe-selftest"
1286 self.write_config(config) 1525 self.write_config(config)
1287 bb_vars = self._fit_get_bb_vars() 1526 bb_vars = self._fit_get_bb_vars()
1288 1527
1289 # Using a static key. FIT_GENERATE_KEYS = "1" does not work without kernel-fitimage.bbclass
1290 self._gen_signing_key(bb_vars) 1528 self._gen_signing_key(bb_vars)
1291
1292 self._test_fitimage(bb_vars) 1529 self._test_fitimage(bb_vars)
1293 self._check_kernel_dtb(bb_vars) 1530 self._check_kernel_dtb(bb_vars)
1294 1531
@@ -1449,11 +1686,9 @@ FIT_SIGN_INDIVIDUAL = "1"
1449""" 1686"""
1450 self.write_config(config) 1687 self.write_config(config)
1451 bb_vars = self._fit_get_bb_vars() 1688 bb_vars = self._fit_get_bb_vars()
1452
1453 # Using a static key. FIT_GENERATE_KEYS = "1" does not work without kernel-fitimage.bbclass
1454 self._gen_signing_key(bb_vars) 1689 self._gen_signing_key(bb_vars)
1455 1690
1456 bitbake("virtual/bootloader") 1691 bitbake(UBootFitImageTests.BOOTLOADER_RECIPE)
1457 1692
1458 # Just check the DTB of u-boot since there is no u-boot FIT image 1693 # Just check the DTB of u-boot since there is no u-boot FIT image
1459 self._check_kernel_dtb(bb_vars) 1694 self._check_kernel_dtb(bb_vars)
diff --git a/meta/lib/oeqa/selftest/cases/uboot.py b/meta/lib/oeqa/selftest/cases/uboot.py
index 96da4efb06..980ea327f0 100644
--- a/meta/lib/oeqa/selftest/cases/uboot.py
+++ b/meta/lib/oeqa/selftest/cases/uboot.py
@@ -6,8 +6,8 @@
6# 6#
7 7
8from oeqa.selftest.case import OESelftestTestCase 8from oeqa.selftest.case import OESelftestTestCase
9from oeqa.utils.commands import bitbake, runqemu 9from oeqa.utils.commands import bitbake, runqemu, get_bb_var, get_bb_vars, runCmd
10from oeqa.core.decorator.data import skipIfNotArch 10from oeqa.core.decorator.data import skipIfNotArch, skipIfNotBuildArch
11from oeqa.core.decorator import OETestTag 11from oeqa.core.decorator import OETestTag
12 12
13uboot_boot_patterns = { 13uboot_boot_patterns = {
@@ -41,3 +41,58 @@ QEMU_USE_KVM = "False"
41 status, output = qemu.run_serial(cmd) 41 status, output = qemu.run_serial(cmd)
42 self.assertEqual(status, 1, msg=output) 42 self.assertEqual(status, 1, msg=output)
43 self.assertTrue("U-Boot" in output, msg=output) 43 self.assertTrue("U-Boot" in output, msg=output)
44
45 @skipIfNotArch(['aarch64'])
46 @skipIfNotBuildArch(['aarch64'])
47 @OETestTag("runqemu")
48 def test_boot_uboot_kvm_to_full_target(self):
49 """
50 Tests building u-boot and booting it with QEMU and KVM.
51 Requires working KVM on build host. See "kvm-ok" output.
52 """
53
54 runCmd("kvm-ok")
55
56 image = "core-image-minimal"
57 vars = get_bb_vars(['HOST_ARCH', 'BUILD_ARCH'], image)
58 host_arch = vars['HOST_ARCH']
59 build_arch = vars['BUILD_ARCH']
60
61 self.assertEqual(host_arch, build_arch, 'HOST_ARCH %s and BUILD_ARCH %s must match for KVM' % (host_arch, build_arch))
62
63 self.write_config("""
64QEMU_USE_KVM = "1"
65
66# Using u-boot in EFI mode, need ESP partition for grub/systemd-boot/kernel etc
67IMAGE_FSTYPES:pn-core-image-minimal:append = " wic"
68
69# easiest to follow genericarm64 setup with wks file, initrd and EFI loader
70INITRAMFS_IMAGE = "core-image-initramfs-boot"
71EFI_PROVIDER = "${@bb.utils.contains("DISTRO_FEATURES", "systemd", "systemd-boot", "grub-efi", d)}"
72WKS_FILE = "genericarm64.wks.in"
73
74# use wic image with ESP for u-boot, not ext4
75QB_DEFAULT_FSTYPE = "wic"
76
77PREFERRED_PROVIDER_virtual/bootloader = "u-boot"
78QB_DEFAULT_BIOS = "u-boot.bin"
79
80# let u-boot or EFI loader load kernel from ESP
81QB_DEFAULT_KERNEL = "none"
82
83# virt pci, not scsi because support not in u-boot to find ESP
84QB_DRIVE_TYPE = "/dev/vd"
85""")
86 bitbake("virtual/bootloader %s" % image)
87
88 runqemu_params = get_bb_var('TEST_RUNQEMUPARAMS', image) or ""
89 with runqemu(image, ssh=False, runqemuparams='nographic kvm %s' % runqemu_params) as qemu:
90
91 # boot to target and login worked, should have been fast with kvm
92 cmd = "dmesg"
93 status, output = qemu.run_serial(cmd)
94 self.assertEqual(status, 1, msg=output)
95 # Machine is qemu
96 self.assertTrue("Machine model: linux,dummy-virt" in output, msg=output)
97 # with KVM enabled
98 self.assertTrue("KVM: hypervisor services detected" in output, msg=output)
diff --git a/meta/lib/oeqa/utils/subprocesstweak.py b/meta/lib/oeqa/utils/subprocesstweak.py
index 3e43ed547b..1774513023 100644
--- a/meta/lib/oeqa/utils/subprocesstweak.py
+++ b/meta/lib/oeqa/utils/subprocesstweak.py
@@ -8,16 +8,11 @@ import subprocess
8class OETestCalledProcessError(subprocess.CalledProcessError): 8class OETestCalledProcessError(subprocess.CalledProcessError):
9 def __str__(self): 9 def __str__(self):
10 def strify(o): 10 def strify(o):
11 if isinstance(o, bytes): 11 return o.decode("utf-8", errors="replace") if isinstance(o, bytes) else o
12 return o.decode("utf-8", errors="replace")
13 else:
14 return o
15 12
16 s = "Command '%s' returned non-zero exit status %d" % (self.cmd, self.returncode) 13 s = super().__str__()
17 if hasattr(self, "output") and self.output: 14 s = s + "\nStandard Output: " + strify(self.output)
18 s = s + "\nStandard Output: " + strify(self.output) 15 s = s + "\nStandard Error: " + strify(self.stderr)
19 if hasattr(self, "stderr") and self.stderr:
20 s = s + "\nStandard Error: " + strify(self.stderr)
21 return s 16 return s
22 17
23def errors_have_output(): 18def errors_have_output():
diff --git a/meta/recipes-bsp/u-boot/files/disable-CONFIG_BLOBLIST.cfg b/meta/recipes-bsp/u-boot/files/disable-CONFIG_BLOBLIST.cfg
new file mode 100644
index 0000000000..d01d3d12d8
--- /dev/null
+++ b/meta/recipes-bsp/u-boot/files/disable-CONFIG_BLOBLIST.cfg
@@ -0,0 +1 @@
# CONFIG_BLOBLIST is not set
diff --git a/meta/recipes-bsp/u-boot/files/disable_CONFIG_USB.cfg b/meta/recipes-bsp/u-boot/files/disable_CONFIG_USB.cfg
new file mode 100644
index 0000000000..1d2509982b
--- /dev/null
+++ b/meta/recipes-bsp/u-boot/files/disable_CONFIG_USB.cfg
@@ -0,0 +1 @@
# CONFIG_USB is not set
diff --git a/meta/recipes-bsp/u-boot/u-boot-common.inc b/meta/recipes-bsp/u-boot/u-boot-common.inc
index fd1eab5cdd..6cd9c39430 100644
--- a/meta/recipes-bsp/u-boot/u-boot-common.inc
+++ b/meta/recipes-bsp/u-boot/u-boot-common.inc
@@ -16,6 +16,10 @@ SRCREV = "34820924edbc4ec7803eb89d9852f4b870fa760a"
16 16
17SRC_URI = "git://source.denx.de/u-boot/u-boot.git;protocol=https;branch=master;tag=v${PV}" 17SRC_URI = "git://source.denx.de/u-boot/u-boot.git;protocol=https;branch=master;tag=v${PV}"
18 18
19# workarounds for aarch64 kvm qemu boot regressions
20SRC_URI:append:qemuarm64 = " file://disable-CONFIG_BLOBLIST.cfg file://disable_CONFIG_USB.cfg"
21SRC_URI:append:genericarm64 = " file://disable-CONFIG_BLOBLIST.cfg file://disable_CONFIG_USB.cfg"
22
19S = "${WORKDIR}/git" 23S = "${WORKDIR}/git"
20B = "${WORKDIR}/build" 24B = "${WORKDIR}/build"
21 25
diff --git a/meta/recipes-connectivity/dhcpcd/dhcpcd_10.2.2.bb b/meta/recipes-connectivity/dhcpcd/dhcpcd_10.2.4.bb
index f9dfd2e245..dee921d21c 100644
--- a/meta/recipes-connectivity/dhcpcd/dhcpcd_10.2.2.bb
+++ b/meta/recipes-connectivity/dhcpcd/dhcpcd_10.2.4.bb
@@ -17,7 +17,7 @@ SRC_URI = "git://github.com/NetworkConfiguration/dhcpcd;protocol=https;branch=ma
17 file://0001-dhcpcd.8-Fix-conflict-error-when-enable-multilib.patch \ 17 file://0001-dhcpcd.8-Fix-conflict-error-when-enable-multilib.patch \
18 " 18 "
19 19
20SRCREV = "f6983c18dbf7989f43a2838beeaf62a54c53ff1d" 20SRCREV = "93df2b254caf9639f9ffb66e0fe2b584eeba6220"
21S = "${WORKDIR}/git" 21S = "${WORKDIR}/git"
22 22
23# Doesn't use automake so we can't do out-of-tree builds 23# Doesn't use automake so we can't do out-of-tree builds
diff --git a/meta/recipes-connectivity/dhcpcd/files/0001-20-resolv.conf-improve-the-sitation-of-working-with-.patch b/meta/recipes-connectivity/dhcpcd/files/0001-20-resolv.conf-improve-the-sitation-of-working-with-.patch
index 4f687b0292..512e33aebf 100644
--- a/meta/recipes-connectivity/dhcpcd/files/0001-20-resolv.conf-improve-the-sitation-of-working-with-.patch
+++ b/meta/recipes-connectivity/dhcpcd/files/0001-20-resolv.conf-improve-the-sitation-of-working-with-.patch
@@ -1,4 +1,4 @@
1From 33710a648a805d96abf49d5adf6ca55b89f9c858 Mon Sep 17 00:00:00 2001 1From d1581ce103db0a5db0b1761907fff9ddd6b55a8a Mon Sep 17 00:00:00 2001
2From: Chen Qi <Qi.Chen@windriver.com> 2From: Chen Qi <Qi.Chen@windriver.com>
3Date: Wed, 9 Nov 2022 16:33:18 +0800 3Date: Wed, 9 Nov 2022 16:33:18 +0800
4Subject: [PATCH] 20-resolv.conf: improve the sitation of working with systemd 4Subject: [PATCH] 20-resolv.conf: improve the sitation of working with systemd
@@ -27,7 +27,7 @@ Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
27 1 file changed, 13 insertions(+), 4 deletions(-) 27 1 file changed, 13 insertions(+), 4 deletions(-)
28 28
29diff --git a/hooks/20-resolv.conf b/hooks/20-resolv.conf 29diff --git a/hooks/20-resolv.conf b/hooks/20-resolv.conf
30index 7c29e276..becc019f 100644 30index bd0b0df5..9c7721de 100644
31--- a/hooks/20-resolv.conf 31--- a/hooks/20-resolv.conf
32+++ b/hooks/20-resolv.conf 32+++ b/hooks/20-resolv.conf
33@@ -11,8 +11,12 @@ nocarrier_roaming_dir="$state_dir/roaming" 33@@ -11,8 +11,12 @@ nocarrier_roaming_dir="$state_dir/roaming"
@@ -59,7 +59,7 @@ index 7c29e276..becc019f 100644
59 fi 59 fi
60 rm -f "$cf" 60 rm -f "$cf"
61 } 61 }
62@@ -170,7 +179,7 @@ add_resolv_conf() 62@@ -179,7 +188,7 @@ add_resolv_conf()
63 for x in ${new_domain_name_servers}; do 63 for x in ${new_domain_name_servers}; do
64 conf="${conf}nameserver $x$NL" 64 conf="${conf}nameserver $x$NL"
65 done 65 done
@@ -68,7 +68,7 @@ index 7c29e276..becc019f 100644
68 [ -n "$ifmetric" ] && export IF_METRIC="$ifmetric" 68 [ -n "$ifmetric" ] && export IF_METRIC="$ifmetric"
69 printf %s "$conf" | "$resolvconf" -a "$ifname" 69 printf %s "$conf" | "$resolvconf" -a "$ifname"
70 return $? 70 return $?
71@@ -186,7 +195,7 @@ add_resolv_conf() 71@@ -195,7 +204,7 @@ add_resolv_conf()
72 72
73 remove_resolv_conf() 73 remove_resolv_conf()
74 { 74 {
diff --git a/meta/recipes-connectivity/iproute2/iproute2_6.14.0.bb b/meta/recipes-connectivity/iproute2/iproute2_6.15.0.bb
index a32ac34245..592e3e15af 100644
--- a/meta/recipes-connectivity/iproute2/iproute2_6.14.0.bb
+++ b/meta/recipes-connectivity/iproute2/iproute2_6.15.0.bb
@@ -15,7 +15,7 @@ SRC_URI = "${KERNELORG_MIRROR}/linux/utils/net/${BPN}/${BP}.tar.xz \
15 file://0001-include-libnetlink.h-add-missing-include-for-htobe64.patch \ 15 file://0001-include-libnetlink.h-add-missing-include-for-htobe64.patch \
16 " 16 "
17 17
18SRC_URI[sha256sum] = "a6d23588150096591c3d00fc27a324a82ee71d7a1a9eea78df5df17ad9b8461f" 18SRC_URI[sha256sum] = "8041854a882583ad5263466736c9c8c68c74b1a35754ab770d23343f947528fb"
19 19
20inherit update-alternatives bash-completion pkgconfig 20inherit update-alternatives bash-completion pkgconfig
21 21
diff --git a/meta/recipes-connectivity/nfs-utils/nfs-utils/0001-Fix-typecast-warning-with-clang.patch b/meta/recipes-connectivity/nfs-utils/nfs-utils/0001-Fix-typecast-warning-with-clang.patch
deleted file mode 100644
index f493a3051e..0000000000
--- a/meta/recipes-connectivity/nfs-utils/nfs-utils/0001-Fix-typecast-warning-with-clang.patch
+++ /dev/null
@@ -1,32 +0,0 @@
1From 0a64c5ad17786796d84390e480a38b4f762229ae Mon Sep 17 00:00:00 2001
2From: Khem Raj <raj.khem@gmail.com>
3Date: Wed, 18 Dec 2024 19:20:39 -0800
4Subject: [PATCH v2] Fix typecast warning with clang
5
6Fixes
7file.c:200:8: error: assigning to 'char *' from 'const char *' discards qualifiers [-Werror,-Wincompatible-pointer-types-discards-qualifiers]
8
9Upstream-Status: Submitted [https://marc.info/?l=linux-nfs&m=173463533411103&w=2]
10Signed-off-by: Khem Raj <raj.khem@gmail.com>
11Cc: Benjamin Coddington <bcodding@redhat.com>
12Cc: Steve Dickson <steved@redhat.com>
13---
14v2: Make base as const char pointer insread of trying type punning
15
16 support/nsm/file.c | 3 ++-
17 1 file changed, 2 insertions(+), 1 deletion(-)
18
19diff --git a/support/nsm/file.c b/support/nsm/file.c
20index de122b0f..68f99bf0 100644
21--- a/support/nsm/file.c
22+++ b/support/nsm/file.c
23@@ -184,7 +184,8 @@ static char *
24 nsm_make_temp_pathname(const char *pathname)
25 {
26 size_t size;
27- char *path, *base;
28+ char *path;
29+ const char *base;
30 int len;
31
32 size = strlen(pathname) + sizeof(".new") + 1;
diff --git a/meta/recipes-connectivity/nfs-utils/nfs-utils/0003-support-nfs-xcommon.c-fix-a-formatting-error-with-cl.patch b/meta/recipes-connectivity/nfs-utils/nfs-utils/0003-support-nfs-xcommon.c-fix-a-formatting-error-with-cl.patch
deleted file mode 100644
index a99ba284e0..0000000000
--- a/meta/recipes-connectivity/nfs-utils/nfs-utils/0003-support-nfs-xcommon.c-fix-a-formatting-error-with-cl.patch
+++ /dev/null
@@ -1,40 +0,0 @@
1From cc59a7fe15b6ca2ee43cba0dc1d699323b36ffcc Mon Sep 17 00:00:00 2001
2From: Alexander Kanavin <alex@linutronix.de>
3Date: Fri, 21 Mar 2025 10:42:56 +0100
4Subject: [PATCH] support/nfs/xcommon.c: fix a formatting error with clang
5
6Specifically, this happens:
7
8| xcommon.c:101:24: error: format string is not a string literal [-Werror,-Wformat-nonliteral]
9| 101 | vfprintf (stderr, fmt2, args);
10| | ^~~~
11
12A similar approach (print \n seprately) is already used elsewhere in
13the same file.
14
15Upstream-Status: Submitted [via email to steved@redhat.com,linux-nfs@vger.kernel.org]
16Signed-off-by: Alexander Kanavin <alex@linutronix.de>
17---
18 support/nfs/xcommon.c | 6 ++----
19 1 file changed, 2 insertions(+), 4 deletions(-)
20
21diff --git a/support/nfs/xcommon.c b/support/nfs/xcommon.c
22index 3989f0b..1d04dd1 100644
23--- a/support/nfs/xcommon.c
24+++ b/support/nfs/xcommon.c
25@@ -94,13 +94,11 @@ xstrconcat4 (const char *s, const char *t, const char *u, const char *v) {
26 void
27 nfs_error (const char *fmt, ...) {
28 va_list args;
29- char *fmt2;
30
31- fmt2 = xstrconcat2 (fmt, "\n");
32 va_start (args, fmt);
33- vfprintf (stderr, fmt2, args);
34+ vfprintf (stderr, fmt, args);
35+ fprintf (stderr, "\n");
36 va_end (args);
37- free (fmt2);
38 }
39
40 /* Make a canonical pathname from PATH. Returns a freshly malloced string.
diff --git a/meta/recipes-connectivity/nfs-utils/nfs-utils_2.8.2.bb b/meta/recipes-connectivity/nfs-utils/nfs-utils_2.8.3.bb
index 1f3afa0560..9668ac0e86 100644
--- a/meta/recipes-connectivity/nfs-utils/nfs-utils_2.8.2.bb
+++ b/meta/recipes-connectivity/nfs-utils/nfs-utils_2.8.3.bb
@@ -22,13 +22,11 @@ SRC_URI = "${KERNELORG_MIRROR}/linux/utils/nfs-utils/${PV}/nfs-utils-${PV}.tar.x
22 file://nfsserver \ 22 file://nfsserver \
23 file://nfscommon \ 23 file://nfscommon \
24 file://0001-locktest-Makefile.am-Do-not-use-build-flags.patch \ 24 file://0001-locktest-Makefile.am-Do-not-use-build-flags.patch \
25 file://0001-Fix-typecast-warning-with-clang.patch \
26 file://0004-Use-nogroup-for-nobody-group.patch \ 25 file://0004-Use-nogroup-for-nobody-group.patch \
27 file://0005-find-OE-provided-Kerberos.patch \ 26 file://0005-find-OE-provided-Kerberos.patch \
28 file://0003-support-nfs-xcommon.c-fix-a-formatting-error-with-cl.patch \
29 " 27 "
30 28
31SRC_URI[sha256sum] = "a39bbea76ac0ab9e6e8699caf3c308b6b310c20d458e8fa8606196d358e7fb15" 29SRC_URI[sha256sum] = "11e7c5847a8423a72931c865bd9296e7fd56ff270a795a849183900961711725"
32 30
33# Only kernel-module-nfsd is required here (but can be built-in) - the nfsd module will 31# Only kernel-module-nfsd is required here (but can be built-in) - the nfsd module will
34# pull in the remainder of the dependencies. 32# pull in the remainder of the dependencies.
diff --git a/meta/recipes-connectivity/ofono/ofono_2.16.bb b/meta/recipes-connectivity/ofono/ofono_2.17.bb
index ea3120974c..36bbe9439a 100644
--- a/meta/recipes-connectivity/ofono/ofono_2.16.bb
+++ b/meta/recipes-connectivity/ofono/ofono_2.17.bb
@@ -10,7 +10,7 @@ DEPENDS = "dbus glib-2.0 udev mobile-broadband-provider-info ell"
10SRC_URI = "${KERNELORG_MIRROR}/linux/network/${BPN}/${BP}.tar.xz \ 10SRC_URI = "${KERNELORG_MIRROR}/linux/network/${BPN}/${BP}.tar.xz \
11 file://ofono \ 11 file://ofono \
12 " 12 "
13SRC_URI[sha256sum] = "6fa2e168e74e1d1879008806537eff2f0b3c86eb5412fbc093f4236e2a15c9ef" 13SRC_URI[sha256sum] = "70bb50997d3a7657edf133355677f8e04b2158bcb031118a67b296107f6ea73e"
14 14
15inherit autotools pkgconfig update-rc.d systemd gobject-introspection-data 15inherit autotools pkgconfig update-rc.d systemd gobject-introspection-data
16 16
diff --git a/meta/recipes-connectivity/slirp/libslirp_4.9.0.bb b/meta/recipes-connectivity/slirp/libslirp_4.9.1.bb
index a159ed7c67..568bac389f 100644
--- a/meta/recipes-connectivity/slirp/libslirp_4.9.0.bb
+++ b/meta/recipes-connectivity/slirp/libslirp_4.9.1.bb
@@ -5,7 +5,7 @@ LICENSE = "BSD-3-Clause & MIT"
5LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=bca0186b14e6b05e338e729f106db727" 5LIC_FILES_CHKSUM = "file://COPYRIGHT;md5=bca0186b14e6b05e338e729f106db727"
6 6
7SRC_URI = "git://gitlab.freedesktop.org/slirp/libslirp.git;protocol=https;branch=master" 7SRC_URI = "git://gitlab.freedesktop.org/slirp/libslirp.git;protocol=https;branch=master"
8SRCREV = "c32a8a1ccaae8490142e67e078336a95c5ffc956" 8SRCREV = "9c744e1e52aa0d9646ed91d789d588696292c21e"
9 9
10S = "${WORKDIR}/git" 10S = "${WORKDIR}/git"
11 11
diff --git a/meta/recipes-core/kbd/kbd_2.7.1.bb b/meta/recipes-core/kbd/kbd_2.8.0.bb
index 9b9066e7b0..ababa09918 100644
--- a/meta/recipes-core/kbd/kbd_2.7.1.bb
+++ b/meta/recipes-core/kbd/kbd_2.8.0.bb
@@ -26,7 +26,7 @@ RCONFLICTS:${PN} = "console-tools"
26SRC_URI = "${KERNELORG_MIRROR}/linux/utils/${BPN}/${BP}.tar.xz \ 26SRC_URI = "${KERNELORG_MIRROR}/linux/utils/${BPN}/${BP}.tar.xz \
27 " 27 "
28 28
29SRC_URI[sha256sum] = "f167d899d92b56ccf12f6f49355173f93870a95f15d8aeebf5fdcd28a621aca8" 29SRC_URI[sha256sum] = "01f5806da7d1d34f594b7b2a6ae1ab23215344cf1064e8edcd3a90fef9776a11"
30 30
31# 'gzip -n' is set due to https://github.com/legionus/kbd/issues/124 31# 'gzip -n' is set due to https://github.com/legionus/kbd/issues/124
32EXTRA_OECONF = "--disable-tests --enable-compress='gzip -n'" 32EXTRA_OECONF = "--disable-tests --enable-compress='gzip -n'"
diff --git a/meta/recipes-core/musl/libucontext_1.2.bb b/meta/recipes-core/musl/libucontext_1.3.2.bb
index 4e34df1439..65ee77d06e 100644
--- a/meta/recipes-core/musl/libucontext_1.2.bb
+++ b/meta/recipes-core/musl/libucontext_1.3.2.bb
@@ -8,7 +8,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=ebea527af0602d509b7f4c49533fb1bd"
8SECTION = "libs" 8SECTION = "libs"
9DEPENDS = "" 9DEPENDS = ""
10 10
11SRCREV = "4dde3417b4bb4b1b1545bd913be337680b5e28c3" 11SRCREV = "a0323579ac50b9a9d4033754d089f1fed0f59a00"
12SRC_URI = "git://github.com/kaniini/libucontext;branch=master;protocol=https \ 12SRC_URI = "git://github.com/kaniini/libucontext;branch=master;protocol=https \
13 " 13 "
14 14
diff --git a/meta/recipes-core/musl/musl-locales_git.bb b/meta/recipes-core/musl/musl-locales_git.bb
index 1373c60daf..2815e2ddf0 100644
--- a/meta/recipes-core/musl/musl-locales_git.bb
+++ b/meta/recipes-core/musl/musl-locales_git.bb
@@ -82,4 +82,21 @@ FILES:locale-base-ru-ru += "${datadir}/i18n/locales/musl/ru_RU.UTF-8"
82FILES:locale-base-sr-rs += "${datadir}/i18n/locales/musl/sr_RS.UTF-8" 82FILES:locale-base-sr-rs += "${datadir}/i18n/locales/musl/sr_RS.UTF-8"
83FILES:locale-base-sv-se += "${datadir}/i18n/locales/musl/sv_SE.UTF-8" 83FILES:locale-base-sv-se += "${datadir}/i18n/locales/musl/sv_SE.UTF-8"
84 84
85RRECOMMENDS:locale-base-cs-cz += "${PN}"
86RRECOMMENDS:locale-base-de-ch += "${PN}"
87RRECOMMENDS:locale-base-de-de += "${PN}"
88RRECOMMENDS:locale-base-en-gb += "${PN}"
89RRECOMMENDS:locale-base-en-us += "${PN}"
90RRECOMMENDS:locale-base-es-es += "${PN}"
91RRECOMMENDS:locale-base-fi-fi += "${PN}"
92RRECOMMENDS:locale-base-fr-ca += "${PN}"
93RRECOMMENDS:locale-base-fr-fr += "${PN}"
94RRECOMMENDS:locale-base-it-it += "${PN}"
95RRECOMMENDS:locale-base-nb-no += "${PN}"
96RRECOMMENDS:locale-base-nl-nl += "${PN}"
97RRECOMMENDS:locale-base-pt-br += "${PN}"
98RRECOMMENDS:locale-base-ru-ru += "${PN}"
99RRECOMMENDS:locale-base-sr-sr += "${PN}"
100RRECOMMENDS:locale-base-sv-se += "${PN}"
101
85UPSTREAM_CHECK_COMMITS = "1" 102UPSTREAM_CHECK_COMMITS = "1"
diff --git a/meta/recipes-devtools/icecc-create-env/icecc-create-env/icecc-create-env b/meta/recipes-devtools/icecc-create-env/icecc-create-env/icecc-create-env
deleted file mode 100755
index 64b5e20785..0000000000
--- a/meta/recipes-devtools/icecc-create-env/icecc-create-env/icecc-create-env
+++ /dev/null
@@ -1,382 +0,0 @@
1#! /usr/bin/env bash
2# icecc -- A simple distributed compiler system
3#
4# Copyright (C) 2004 by the Icecream Authors
5# GPL
6
7target_paths=
8target_aliases=
9
10# Always prints, optionally to a log file
11print_output ()
12{
13 if test -n "$log_path"; then
14 echo "$@" | tee -a "$log_path"
15 else
16 echo "$@"
17 fi
18}
19
20# Only prints if the debug flag is specified
21print_debug ()
22{
23 if test -n "$debug"; then
24 print_output "$@"
25 fi
26}
27
28is_dynamic_elf ()
29{
30 # Is the file an dynamically linked ELF executable?
31 (file -L "$1" | grep 'ELF' > /dev/null 2>&1) && (! file -L "$1" | grep 'static' > /dev/null 2>&1)
32}
33
34fix_rpath ()
35{
36 # Patches the RPATH for a file. When the program is executed in the chroot
37 # be iceccd, /proc is not mounted. As such, $ORIGIN can't be resolved. To
38 # work around this, replace all instances of $ORIGIN in RPATH with the
39 # known chroot path to the executables directory
40 local path="$1"
41 local origin="$2"
42 if ! is_dynamic_elf "$path"; then
43 return
44 fi
45 local old_rpath="`$PATCHELF --print-rpath "$path"`"
46 local new_rpath="`echo "$old_rpath" | \
47 sed 's/.*\[\(.*\)\]/\1/g' | \
48 sed "s,\\\$ORIGIN,/$origin,g"`"
49
50 if test -n "$new_rpath"; then
51 print_debug "Converting RPATH '$old_rpath' -> '$new_rpath'"
52 $PATCHELF --set-rpath "$new_rpath" "$path"
53 fi
54}
55
56add_path ()
57{
58 case " $target_paths " in
59 *" $1 "*)
60 return 1
61 ;;
62 *)
63 target_paths="$target_paths $1"
64 return 0
65 ;;
66 esac
67}
68
69add_alias ()
70{
71 if test "$1" != "$2"; then
72 local alias="$1=$2"
73 case " $target_aliases " in
74 *" $alias "*)
75 ;;
76 *)
77 print_debug "Adding alias '$2' -> '$1'"
78 target_aliases="$target_aliases $alias"
79 ;;
80 esac
81 fi
82}
83
84normalize_path ()
85{
86 # Normalizes the path to a file or directory, removing all "." and ".."
87 # entries. Use pwd -L to explicitly prevent symlink expansion
88 local path=$1
89 if test -f "$path"; then
90 pushd $(dirname $path) > /dev/null 2>&1
91 dir_path=$(pwd -L)
92 path=$dir_path/$(basename $path)
93 popd > /dev/null 2>&1
94 elif test -d "$path"; then
95 pushd $path > /dev/null 2>&1
96 path=$(pwd -L)
97 popd > /dev/null 2>&1
98 fi
99 echo $path
100}
101
102add_file_common()
103{
104 local p="$1"
105 local path="$2"
106 local alias="$3"
107
108 add_alias "$path" "$p"
109 if test -n "$alias"; then
110 add_alias "$path" "$alias"
111 fi
112
113 add_path "$path" || return 1
114 print_debug "Adding file '$path'"
115
116 return 0
117}
118
119add_deps()
120{
121 local path="$1"
122 local interp="$2"
123
124 if test -n "$interp" && test -x "$interp"; then
125 # Use the dynamic loaders --list argument to list the
126 # dependencies. The program may have a different program
127 # interpreter (typical when using uninative tarballs), which is
128 # why we can't just call ldd.
129 deps="`$interp --list "$path"`"
130 else
131 deps="`ldd "$path"`"
132 fi
133
134 print_debug "Dependencies are:"
135 print_debug "$deps"
136 if test -n "$deps"; then
137 for lib in $deps; do
138 # ldd now outputs ld as /lib/ld-linux.so.xx on current nptl
139 # based glibc this regexp parse the outputs like:
140 # ldd /usr/bin/gcc
141 # linux-gate.so.1 => (0xffffe000)
142 # libc.so.6 => /lib/tls/libc.so.6 (0xb7e81000)
143 # /lib/ld-linux.so.2 (0xb7fe8000)
144 # covering both situations ( with => and without )
145 lib="`echo "$lib" | sed -n 's,^[^/]*\(/[^ ]*\).*,\1,p'`"
146
147 test -f "$lib" || continue
148 # Check whether the same library also exists in the parent
149 # directory, and prefer that on the assumption that it is a
150 # more generic one.
151 local baselib=`echo "$lib" | sed 's,\(/[^/]*\)/.*\(/[^/]*\)$,\1\2,'`
152 test -f "$baselib" && lib=$baselib
153 add_dependency "$lib" "$interp"
154 done
155 fi
156}
157
158add_dependency()
159{
160 local p=`normalize_path $1`
161 # readlink is required for Yocto, so we can use it
162 local path=`readlink -f "$p"`
163 local interp="$2"
164
165 add_file_common "$p" "$path" || return
166
167 if test -x "$path" && is_dynamic_elf "$path"; then
168 add_deps "$path" "$interp"
169 fi
170}
171
172add_file ()
173{
174 local p=`normalize_path $1`
175 # readlink is required for Yocto, so we can use it
176 local path=`readlink -f "$p"`
177
178 add_file_common "$p" "$path" "$2" || return
179
180 if test -x "$path" && is_dynamic_elf "$path"; then
181 # Request the program interpeter (dynamic loader)
182 interp=`readelf -W -l "$path" | grep "Requesting program interpreter:" | sed "s/\s*\[Requesting program interpreter:\s*\(.*\)\]/\1/g"`
183 print_debug "Interpreter is '$interp'"
184
185 add_deps "$path" "$interp"
186 fi
187}
188
189while test -n "$1"; do
190 case "$1" in
191 --respect-path)
192 # Ignore for backward compatability
193 ;;
194 --debug)
195 debug=1
196 ;;
197 --log)
198 do_log=1
199 ;;
200 --extra=*)
201 extra_tools="$extra_tools ${1#--extra=}"
202 ;;
203 *)
204 break
205 ;;
206 esac
207 shift
208done
209
210added_gcc=$1
211shift
212added_gxx=$1
213shift
214added_as=$1
215shift
216archive_name=$1
217
218if test -n "$do_log"; then
219 log_path="$archive_name.log"
220 rm -f "$log_path"
221fi
222
223if test -z "$PATCHELF"; then
224 PATCHELF=`which patchelf 2> /dev/null`
225fi
226if test -z "$PATCHELF"; then
227 PATCHELF=`which patchelf-uninative 2> /dev/null`
228fi
229if test -z "$PATCHELF"; then
230 print_output "patchelf is required"
231 exit 1
232fi
233
234if test -z "$added_gcc" || test -z "$added_gxx" ; then
235 print_output "usage: $0 <gcc_path> <g++_path>"
236 exit 1
237fi
238
239if ! test -x "$added_gcc" ; then
240 print_output "'$added_gcc' is not executable."
241 exit 1
242fi
243
244if ! test -x "$added_gxx" ; then
245 print_output "'$added_gcc' is not executable."
246 exit 1
247fi
248
249
250
251add_file $added_gcc /usr/bin/gcc
252add_file $added_gxx /usr/bin/g++
253
254if test -z "$added_as" ; then
255 add_file /usr/bin/as /usr/bin/as
256else
257 if ! test -x "$added_as" ; then
258 print_output "'$added_as' is not executable."
259 exit 1
260 fi
261
262 add_file $added_as /usr/bin/as
263fi
264
265add_file `$added_gcc -print-prog-name=cc1` /usr/bin/cc1
266add_file `$added_gxx -print-prog-name=cc1plus` /usr/bin/cc1plus
267specfile=`$added_gcc -print-file-name=specs`
268if test -n "$specfile" && test -e "$specfile"; then
269 add_file "$specfile"
270fi
271
272ltofile=`$added_gcc -print-prog-name=lto1`
273pluginfile=`normalize_path "${ltofile%lto1}liblto_plugin.so"`
274if test -r "$pluginfile"
275then
276 add_file $pluginfile ${pluginfile#*usr}
277 add_file $pluginfile /usr${pluginfile#*usr}
278fi
279
280# for testing the environment is usable at all
281if test -x /bin/true; then
282 add_file /bin/true
283elif test -x /usr/bin/true; then
284 add_file /usr/bin/true /bin/true
285else
286 print_output "'true' not found"
287 exit 1
288fi
289
290for extra in $extra_tools; do
291 if test -x "$extra"; then
292 add_file "$extra"
293 else
294 print_output "'$extra' not found"
295 exit 1
296 fi
297done
298
299link_rel ()
300{
301 local target="$1"
302 local name="$2"
303 local base="$3"
304
305 local prefix=`dirname $name`
306
307 prefix=`echo $prefix | sed 's,[^/]\+,..,g' | sed 's,^/*,,g'`
308
309 ln -s $prefix/$target $base/$name
310}
311
312tempdir=`mktemp -d /tmp/iceccenvXXXXXX`
313target_files=
314for path in $target_paths; do
315 mkdir -p $tempdir/`dirname $path`
316 cp -pH $path $tempdir/$path
317
318 if test -f $tempdir/$path -a -x $tempdir/$path; then
319 strip -s $tempdir/$path 2>/dev/null
320 fi
321
322 fix_rpath $tempdir/$path `dirname $path`
323 target_files="$target_files $path"
324done
325
326for i in $target_aliases; do
327 target=`echo $i | cut -d= -f1`
328 link_name=`echo $i | cut -d= -f2`
329
330 mkdir -p $tempdir/`dirname $link_name`
331 # Relative links are used because the files are checked for being
332 # executable outside the chroot
333 link_rel $target $link_name $tempdir
334
335 link_name=`echo $link_name | cut -b2-`
336 target_files="$target_files $link_name"
337done
338
339#sort the files
340target_files=`for i in $target_files; do echo $i; done | sort`
341
342#test if an archive name was supplied
343#if not use the md5 of all files as the archive name
344if test -z "$archive_name"; then
345 md5sum=NONE
346 for file in /usr/bin/md5sum /bin/md5 /usr/bin/md5; do
347 if test -x $file; then
348 md5sum=$file
349 break
350 fi
351 done
352
353 #calculate md5 and use it as the archive name
354 archive_name=`for i in $target_files; do test -f $tempdir/$i && $md5sum $tempdir/$i; done | sed -e 's/ .*$//' | $md5sum | sed -e 's/ .*$//'`.tar.gz || {
355 print_output "Couldn't compute MD5 sum."
356 exit 2
357 }
358 mydir=`pwd`
359else
360 mydir="`dirname "$archive_name"`"
361
362 #check if we have a full path or only a filename
363 if test "$mydir" = "." ; then
364 mydir=`pwd`
365 else
366 mydir=""
367 fi
368fi
369
370print_output "creating $archive_name"
371
372cd $tempdir
373# Add everything in the temp directory. Tar doesn't like to be given files with
374# ".." in them, which frequently happens in $target_files, and will strip off
375# the path prefix past the offending "..". This makes the archive generate
376# incorrectly
377tar -czf "$mydir/$archive_name" . || {
378 print_output "Couldn't create archive"
379 exit 3
380}
381cd ..
382rm -rf $tempdir
diff --git a/meta/recipes-devtools/icecc-create-env/icecc-create-env_0.1.bb b/meta/recipes-devtools/icecc-create-env/icecc-create-env_0.1.bb
deleted file mode 100644
index dd1b257b10..0000000000
--- a/meta/recipes-devtools/icecc-create-env/icecc-create-env_0.1.bb
+++ /dev/null
@@ -1,39 +0,0 @@
1SUMMARY = "icecc environment setup script"
2DESCRIPTION = "This is a version of the icecc-create-env script that has \
3been modified in order to make it work with OE."
4SECTION = "base"
5# source file has just a "GPL" word, but upstream is GPL-2.0-or-later.
6# most probably just GPL would be a mistake
7LICENSE = "GPL-2.0-or-later"
8LIC_FILES_CHKSUM = "file://icecc-create-env;beginline=2;endline=5;md5=ae1df3d6a058bfda40b66094c5f6065f"
9
10
11DEPENDS = ""
12INHIBIT_DEFAULT_DEPS = "1"
13ICECC_DISABLED = "1"
14
15# This is needed, because otherwise there is dependency loop from quilt-native
16# Dependency loop #1 found:
17# Task 10907 (meta/recipes-devtools/quilt/quilt-native_0.60.bb, do_install) (dependent Tasks ['quilt-native, do_compile'])
18# Task 10908 (meta/recipes-devtools/quilt/quilt-native_0.60.bb, do_populate_sysroot) (dependent Tasks ['quilt-native, do_install'])
19# Task 10997 (meta/recipes-devtools/icecc-create-env/icecc-create-env-native_0.1.bb, do_patch) (dependent Tasks ['icecc-create-env-native, do_unpack', 'quilt-native, do_populate_sysroot'])
20# Task 11001 (meta/recipes-devtools/icecc-create-env/icecc-create-env-native_0.1.bb, do_configure) (dependent Tasks ['icecc-create-env-native, do_patch'])
21# Task 11002 (meta/recipes-devtools/icecc-create-env/icecc-create-env-native_0.1.bb, do_compile) (dependent Tasks ['icecc-create-env-native, do_configure'])
22# Task 10998 (meta/recipes-devtools/icecc-create-env/icecc-create-env-native_0.1.bb, do_install) (dependent Tasks ['icecc-create-env-native, do_compile'])
23# Task 10999 (meta/recipes-devtools/icecc-create-env/icecc-create-env-native_0.1.bb, do_populate_sysroot) (dependent Tasks ['icecc-create-env-native, do_install'])
24# Task 10910 (meta/recipes-devtools/quilt/quilt-native_0.60.bb, do_configure) (dependent Tasks ['quilt-native, do_patch', 'icecc-create-env-native, do_populate_sysroot'])
25# Task 10911 (meta/recipes-devtools/quilt/quilt-native_0.60.bb, do_compile) (dependent Tasks ['quilt-native, do_configure'])
26PATCHTOOL = "patch"
27SRC_URI = "file://icecc-create-env"
28
29S = "${WORKDIR}/sources"
30UNPACKDIR = "${S}"
31
32do_install() {
33 install -d ${D}/${bindir}
34 install -m 0755 ${S}/icecc-create-env ${D}/${bindir}
35}
36
37BBCLASSEXTEND = "native nativesdk"
38
39RDEPENDS:${PN}:class-nativesdk = "patchelf"
diff --git a/meta/recipes-devtools/icecc-toolchain/icecc-toolchain/icecc-env.sh b/meta/recipes-devtools/icecc-toolchain/icecc-toolchain/icecc-env.sh
deleted file mode 100644
index 0dccc41c8a..0000000000
--- a/meta/recipes-devtools/icecc-toolchain/icecc-toolchain/icecc-env.sh
+++ /dev/null
@@ -1,49 +0,0 @@
1#! /bin/sh
2# Copyright (c) 2018 Joshua Watt, Garmin International,Inc.
3#
4# Permission is hereby granted, free of charge, to any person obtaining a copy
5# of this software and associated documentation files (the "Software"), to deal
6# in the Software without restriction, including without limitation the rights
7# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8# copies of the Software, and to permit persons to whom the Software is
9# furnished to do so, subject to the following conditions:
10#
11# The above copyright notice and this permission notice shall be included in
12# all copies or substantial portions of the Software.
13#
14# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20# SOFTWARE.
21#
22
23if [ -z "$ICECC_PATH" ]; then
24 ICECC_PATH=$(which icecc 2> /dev/null || true)
25fi
26
27if [ -n "$ICECC_PATH" ]; then
28 # Default to disabling the caret workaround. If set to "1", icecc will
29 # locally recompile any files that have warnings, which can adversely
30 # affect performance.
31 #
32 # See: https://github.com/icecc/icecream/issues/190
33 if [ -z "$ICECC_CARET_WORKAROUND" ]; then
34 ICECC_CARET_WORKAROUND="0"
35 fi
36 if [ "$ICECC_CARET_WORKAROUND" != "1" ]; then
37 CFLAGS="$CFLAGS -fno-diagnostics-show-caret"
38 CXXFLAGS="$CXXFLAGS -fno-diagnostics-show-caret"
39 fi
40 export ICECC_PATH ICECC_CARET_WORKAROUND
41 export ICECC_VERSION="$(echo "$OECORE_NATIVE_SYSROOT/usr/share/${TARGET_PREFIX}icecream/@TOOLCHAIN_ENV@" | sed "s,@TARGET_PREFIX@,$TARGET_PREFIX,g")"
42 export ICECC="$(which ${CROSS_COMPILE}gcc)"
43 export ICECXX="$(which ${CROSS_COMPILE}g++)"
44 export ICEAS="$(which ${CROSS_COMPILE}as)"
45 export PATH="$OECORE_NATIVE_SYSROOT/usr/share/${TARGET_PREFIX}icecream/bin:$PATH"
46else
47 echo "Icecc not found. Disabling distributed compiling"
48fi
49
diff --git a/meta/recipes-devtools/icecc-toolchain/icecc-toolchain/icecc-setup.sh b/meta/recipes-devtools/icecc-toolchain/icecc-toolchain/icecc-setup.sh
deleted file mode 100644
index fbd9f038b8..0000000000
--- a/meta/recipes-devtools/icecc-toolchain/icecc-toolchain/icecc-setup.sh
+++ /dev/null
@@ -1,38 +0,0 @@
1#! /bin/sh
2# Copyright (c) 2018 Joshua Watt, Garmin International,Inc.
3#
4# Permission is hereby granted, free of charge, to any person obtaining a copy
5# of this software and associated documentation files (the "Software"), to deal
6# in the Software without restriction, including without limitation the rights
7# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8# copies of the Software, and to permit persons to whom the Software is
9# furnished to do so, subject to the following conditions:
10#
11# The above copyright notice and this permission notice shall be included in
12# all copies or substantial portions of the Software.
13#
14# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20# SOFTWARE.
21#
22
23# ICECC_PATH will have been found icecc-env.sh
24if [ -z "$ICECC_PATH" ]; then
25 exit 0
26fi
27
28echo "Setting up IceCream distributed compiling..."
29
30# Create the environment
31mkdir -p "`dirname $ICECC_VERSION`"
32icecc-create-env $ICECC $ICECXX $ICEAS $ICECC_VERSION || exit $?
33
34# Create symbolic links
35d="$OECORE_NATIVE_SYSROOT/usr/share/${TARGET_PREFIX}icecream/bin"
36mkdir -p "$d"
37ln -sf "$ICECC_PATH" "$d/${CROSS_COMPILE}gcc"
38ln -sf "$ICECC_PATH" "$d/${CROSS_COMPILE}g++"
diff --git a/meta/recipes-devtools/icecc-toolchain/nativesdk-icecc-toolchain_0.1.bb b/meta/recipes-devtools/icecc-toolchain/nativesdk-icecc-toolchain_0.1.bb
deleted file mode 100644
index a7f5fc4cb4..0000000000
--- a/meta/recipes-devtools/icecc-toolchain/nativesdk-icecc-toolchain_0.1.bb
+++ /dev/null
@@ -1,39 +0,0 @@
1# Copyright (c) 2018 Joshua Watt, Garmin International,Inc.
2# Released under the MIT license (see COPYING.MIT for the terms)
3SUMMARY = "Generates Icecream toolchain for SDK"
4DESCRIPTION = "${SUMMARY}"
5LICENSE = "MIT"
6LIC_FILES_CHKSUM = "file://${UNPACKDIR}/icecc-env.sh;beginline=2;endline=20;md5=dd6b68c1efed8a9fb04e409b3b287d47"
7
8INHIBIT_DEFAULT_DEPS = "1"
9
10SRC_URI = "\
11 file://icecc-env.sh \
12 file://icecc-setup.sh \
13 "
14
15inherit nativesdk
16
17ENV_NAME = "${DISTRO}-${TCLIBC}-${SDK_ARCH}-@TARGET_PREFIX@${DISTRO_VERSION}.tar.gz"
18
19do_compile() {
20}
21
22do_install() {
23 install -d ${D}${SDKPATHNATIVE}${datadir}/icecream/bin
24
25 install -d ${D}${SDKPATHNATIVE}/environment-setup.d/
26 install -m 0644 ${UNPACKDIR}/icecc-env.sh ${D}${SDKPATHNATIVE}/environment-setup.d/
27 sed -i ${D}${SDKPATHNATIVE}/environment-setup.d/icecc-env.sh \
28 -e 's,@TOOLCHAIN_ENV@,${ENV_NAME},g'
29
30 install -d ${D}${SDKPATHNATIVE}/post-relocate-setup.d/
31 install -m 0755 ${UNPACKDIR}/icecc-setup.sh ${D}${SDKPATHNATIVE}/post-relocate-setup.d/
32 sed -i ${D}${SDKPATHNATIVE}/post-relocate-setup.d/icecc-setup.sh \
33 -e 's,@TOOLCHAIN_ENV@,${ENV_NAME},g'
34}
35
36PACKAGES = "${PN}"
37FILES:${PN} = "${SDKPATHNATIVE}"
38RDEPENDS:${PN} += "nativesdk-icecc-create-env"
39
diff --git a/meta/recipes-devtools/libmodulemd/libmodulemd_git.bb b/meta/recipes-devtools/libmodulemd/libmodulemd_git.bb
index d3bef83306..0c73032923 100644
--- a/meta/recipes-devtools/libmodulemd/libmodulemd_git.bb
+++ b/meta/recipes-devtools/libmodulemd/libmodulemd_git.bb
@@ -6,8 +6,8 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=25a3927bff3ee4f5b21bcb0ed3fcd6bb"
6 6
7SRC_URI = "git://github.com/fedora-modularity/libmodulemd;protocol=https;branch=main" 7SRC_URI = "git://github.com/fedora-modularity/libmodulemd;protocol=https;branch=main"
8 8
9PV = "2.15.0" 9PV = "2.15.1"
10SRCREV = "bfde7f2d04fbb22e26c9eb843e4ccc478762dd8d" 10SRCREV = "e7f179eeeb6eee1403f090fc43a3c80bb08b5bfd"
11 11
12S = "${WORKDIR}/git" 12S = "${WORKDIR}/git"
13 13
diff --git a/meta/recipes-devtools/m4/m4-1.4.20.inc b/meta/recipes-devtools/m4/m4-1.4.20.inc
index 2ea3a9bace..a31335f173 100644
--- a/meta/recipes-devtools/m4/m4-1.4.20.inc
+++ b/meta/recipes-devtools/m4/m4-1.4.20.inc
@@ -7,6 +7,7 @@ GNU M4 also has built-in functions for including files, running shell commands,
7inherit autotools texinfo ptest gettext 7inherit autotools texinfo ptest gettext
8 8
9SRC_URI = "${GNU_MIRROR}/m4/m4-${PV}.tar.gz \ 9SRC_URI = "${GNU_MIRROR}/m4/m4-${PV}.tar.gz \
10 file://0001-gettext-h-Avoid-gcc-Wformat-security-warnings-with-d.patch \
10 " 11 "
11SRC_URI:append:class-target = " file://run-ptest \ 12SRC_URI:append:class-target = " file://run-ptest \
12 file://serial-tests-config.patch \ 13 file://serial-tests-config.patch \
@@ -48,9 +49,9 @@ do_install_ptest:append:libc-glibc() {
48 -e "s;LOCALE_FR_UTF8='none';LOCALE_FR_UTF8='fr_FR.utf8';g" ${D}${PTEST_PATH}/tests/Makefile 49 -e "s;LOCALE_FR_UTF8='none';LOCALE_FR_UTF8='fr_FR.utf8';g" ${D}${PTEST_PATH}/tests/Makefile
49} 50}
50 51
51RDEPENDS:${PN}-ptest += "make coreutils diffutils bash" 52RDEPENDS:${PN}-ptest += "make coreutils diffutils bash locale-base-fr-fr"
53
52RDEPENDS:${PN}-ptest:append:libc-glibc = "\ 54RDEPENDS:${PN}-ptest:append:libc-glibc = "\
53 locale-base-fr-fr \
54 locale-base-fr-fr.iso-8859-1 \ 55 locale-base-fr-fr.iso-8859-1 \
55 glibc-gconv-iso8859-1 \ 56 glibc-gconv-iso8859-1 \
56" 57"
diff --git a/meta/recipes-devtools/m4/m4/0001-gettext-h-Avoid-gcc-Wformat-security-warnings-with-d.patch b/meta/recipes-devtools/m4/m4/0001-gettext-h-Avoid-gcc-Wformat-security-warnings-with-d.patch
new file mode 100644
index 0000000000..6fad05041f
--- /dev/null
+++ b/meta/recipes-devtools/m4/m4/0001-gettext-h-Avoid-gcc-Wformat-security-warnings-with-d.patch
@@ -0,0 +1,133 @@
1From c4dc0ab4424fca31635b7837b1c180f7d3df8ede Mon Sep 17 00:00:00 2001
2From: Bruno Haible <bruno@clisp.org>
3Date: Wed, 28 May 2025 15:14:07 +0200
4Subject: [PATCH] gettext-h: Avoid gcc -Wformat-security warnings with
5 --disable-nls.
6MIME-Version: 1.0
7Content-Type: text/plain; charset=UTF-8
8Content-Transfer-Encoding: 8bit
9
10Reported by Holger Hoffstätte <holger@applied-asynchrony.com> in
11<https://lists.gnu.org/archive/html/bug-gnulib/2025-05/msg00225.html>.
12
13* lib/gettext.h (gettext, dgettext, dcgettext): With gcc in C mode,
14define these as inline functions.
15* lib/sigpipe-die.c (sigpipe_die): Use translated string as a format
16string, relying on the format string checking done by 'msgfmt -c'.
17* lib/xmemcoll.c (collate_error): Revert commit from 2025-01-17.
18* lib/xprintf.c (xvprintf, xvfprintf): Likewise.
19* lib/openat-die.c (openat_save_fail, openat_restore_fail): Revert
20commit from 2024-12-10.
21
22Upstream-Status: Backport [https://cgit.git.savannah.gnu.org/cgit/gnulib.git/commit/?id=6e5015dd557b20ae4a0829c4bf78480ce2f4cb04]
23Signed-off-by: Peter Kjellerstedt <peter.kjellerstedt@axis.com>
24---
25 lib/gettext.h | 49 ++++++++++++++++++++++++++++++++++++------------
26 lib/openat-die.c | 4 ++--
27 lib/xprintf.c | 4 ++--
28 3 files changed, 41 insertions(+), 16 deletions(-)
29
30diff --git a/lib/gettext.h b/lib/gettext.h
31index ea0c27e..bb3d975 100644
32--- a/lib/gettext.h
33+++ b/lib/gettext.h
34@@ -59,18 +59,43 @@
35 # endif
36 # endif
37
38-/* Disabled NLS.
39- The casts to 'const char *' serve the purpose of producing warnings
40- for invalid uses of the value returned from these functions.
41- On pre-ANSI systems without 'const', the config.h file is supposed to
42- contain "#define const". */
43-# undef gettext
44-# define gettext(Msgid) ((const char *) (Msgid))
45-# undef dgettext
46-# define dgettext(Domainname, Msgid) ((void) (Domainname), gettext (Msgid))
47-# undef dcgettext
48-# define dcgettext(Domainname, Msgid, Category) \
49- ((void) (Category), dgettext (Domainname, Msgid))
50+/* Disabled NLS. */
51+# if defined __GNUC__ && !defined __clang__ && !defined __cplusplus
52+/* Use inline functions, to avoid warnings
53+ warning: format not a string literal and no format arguments
54+ that don't occur with enabled NLS. */
55+__attribute__ ((__always_inline__, __gnu_inline__)) extern inline
56+const char *
57+gettext (const char *msgid)
58+{
59+ return msgid;
60+}
61+__attribute__ ((__always_inline__, __gnu_inline__)) extern inline
62+const char *
63+dgettext (const char *domain, const char *msgid)
64+{
65+ (void) domain;
66+ return msgid;
67+}
68+__attribute__ ((__always_inline__, __gnu_inline__)) extern inline
69+const char *
70+dcgettext (const char *domain, const char *msgid, int category)
71+{
72+ (void) domain;
73+ (void) category;
74+ return msgid;
75+}
76+# else
77+/* The casts to 'const char *' serve the purpose of producing warnings
78+ for invalid uses of the value returned from these functions. */
79+# undef gettext
80+# define gettext(Msgid) ((const char *) (Msgid))
81+# undef dgettext
82+# define dgettext(Domainname, Msgid) ((void) (Domainname), gettext (Msgid))
83+# undef dcgettext
84+# define dcgettext(Domainname, Msgid, Category) \
85+ ((void) (Category), dgettext (Domainname, Msgid))
86+# endif
87 # undef ngettext
88 # define ngettext(Msgid1, Msgid2, N) \
89 ((N) == 1 \
90diff --git a/lib/openat-die.c b/lib/openat-die.c
91index 3fbb5d8..79a5b23 100644
92--- a/lib/openat-die.c
93+++ b/lib/openat-die.c
94@@ -34,7 +34,7 @@ _Noreturn void
95 openat_save_fail (int errnum)
96 {
97 #ifndef GNULIB_LIBPOSIX
98- error (exit_failure, errnum, "%s",
99+ error (exit_failure, errnum,
100 _("unable to record current working directory"));
101 #endif
102 /* _Noreturn cannot be applied to error, since it returns
103@@ -53,7 +53,7 @@ _Noreturn void
104 openat_restore_fail (int errnum)
105 {
106 #ifndef GNULIB_LIBPOSIX
107- error (exit_failure, errnum, "%s",
108+ error (exit_failure, errnum,
109 _("failed to return to initial working directory"));
110 #endif
111
112diff --git a/lib/xprintf.c b/lib/xprintf.c
113index 4d9a3e5..790af53 100644
114--- a/lib/xprintf.c
115+++ b/lib/xprintf.c
116@@ -45,7 +45,7 @@ xvprintf (char const *restrict format, va_list args)
117 {
118 off64_t retval = vzprintf (format, args);
119 if (retval < 0 && ! ferror (stdout))
120- error (exit_failure, errno, "%s", _("cannot perform formatted output"));
121+ error (exit_failure, errno, _("cannot perform formatted output"));
122
123 return retval;
124 }
125@@ -67,7 +67,7 @@ xvfprintf (FILE *restrict stream, char const *restrict format, va_list args)
126 {
127 off64_t retval = vfzprintf (stream, format, args);
128 if (retval < 0 && ! ferror (stream))
129- error (exit_failure, errno, "%s", _("cannot perform formatted output"));
130+ error (exit_failure, errno, _("cannot perform formatted output"));
131
132 return retval;
133 }
diff --git a/meta/recipes-devtools/meson/meson/0001-Make-CPU-family-warnings-fatal.patch b/meta/recipes-devtools/meson/meson/0001-Make-CPU-family-warnings-fatal.patch
index b5d0546967..98ca08c2ca 100644
--- a/meta/recipes-devtools/meson/meson/0001-Make-CPU-family-warnings-fatal.patch
+++ b/meta/recipes-devtools/meson/meson/0001-Make-CPU-family-warnings-fatal.patch
@@ -1,4 +1,4 @@
1From a503c007d3db87acf711d110c01e11c2d087f99c Mon Sep 17 00:00:00 2001 1From c01e5e29953e0302988f2d60adc50ebfa0e5d670 Mon Sep 17 00:00:00 2001
2From: Ross Burton <ross.burton@intel.com> 2From: Ross Burton <ross.burton@intel.com>
3Date: Tue, 3 Jul 2018 13:59:09 +0100 3Date: Tue, 3 Jul 2018 13:59:09 +0100
4Subject: [PATCH] Make CPU family warnings fatal 4Subject: [PATCH] Make CPU family warnings fatal
@@ -26,10 +26,10 @@ index 43fad0c..27be871 100644
26 endian = literal['endian'] 26 endian = literal['endian']
27 if endian not in ('little', 'big'): 27 if endian not in ('little', 'big'):
28diff --git a/mesonbuild/environment.py b/mesonbuild/environment.py 28diff --git a/mesonbuild/environment.py b/mesonbuild/environment.py
29index f322cda..53a0ac0 100644 29index 2a9cf16..6b2bd6b 100644
30--- a/mesonbuild/environment.py 30--- a/mesonbuild/environment.py
31+++ b/mesonbuild/environment.py 31+++ b/mesonbuild/environment.py
32@@ -429,10 +429,8 @@ def detect_cpu_family(compilers: CompilersDict) -> str: 32@@ -436,10 +436,8 @@ def detect_cpu_family(compilers: CompilersDict) -> str:
33 if compilers and not any_compiler_has_define(compilers, '__mips64'): 33 if compilers and not any_compiler_has_define(compilers, '__mips64'):
34 trial = 'mips' 34 trial = 'mips'
35 35
diff --git a/meta/recipes-devtools/meson/meson/0001-python-module-do-not-manipulate-the-environment-when.patch b/meta/recipes-devtools/meson/meson/0001-python-module-do-not-manipulate-the-environment-when.patch
index 85a93c8e7a..f654447013 100644
--- a/meta/recipes-devtools/meson/meson/0001-python-module-do-not-manipulate-the-environment-when.patch
+++ b/meta/recipes-devtools/meson/meson/0001-python-module-do-not-manipulate-the-environment-when.patch
@@ -1,4 +1,4 @@
1From 859711f99ea9b183a1dffb9b97de09ad0fe9803b Mon Sep 17 00:00:00 2001 1From 6c3734f533ee7ad493188c8fc17bb1c65b65f0bd Mon Sep 17 00:00:00 2001
2From: Alexander Kanavin <alex.kanavin@gmail.com> 2From: Alexander Kanavin <alex.kanavin@gmail.com>
3Date: Mon, 19 Nov 2018 14:24:26 +0100 3Date: Mon, 19 Nov 2018 14:24:26 +0100
4Subject: [PATCH] python module: do not manipulate the environment when calling 4Subject: [PATCH] python module: do not manipulate the environment when calling
@@ -12,10 +12,10 @@ Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
12 1 file changed, 1 insertion(+), 5 deletions(-) 12 1 file changed, 1 insertion(+), 5 deletions(-)
13 13
14diff --git a/mesonbuild/dependencies/python.py b/mesonbuild/dependencies/python.py 14diff --git a/mesonbuild/dependencies/python.py b/mesonbuild/dependencies/python.py
15index 3dab31c..b9307fc 100644 15index ab040b5..a34b271 100644
16--- a/mesonbuild/dependencies/python.py 16--- a/mesonbuild/dependencies/python.py
17+++ b/mesonbuild/dependencies/python.py 17+++ b/mesonbuild/dependencies/python.py
18@@ -410,9 +410,6 @@ def python_factory(env: 'Environment', for_machine: 'MachineChoice', 18@@ -412,9 +412,6 @@ def python_factory(env: 'Environment', for_machine: 'MachineChoice',
19 empty.name = 'python' 19 empty.name = 'python'
20 return empty 20 return empty
21 21
@@ -25,7 +25,7 @@ index 3dab31c..b9307fc 100644
25 try: 25 try:
26 return PythonPkgConfigDependency(name, env, kwargs, installation, True) 26 return PythonPkgConfigDependency(name, env, kwargs, installation, True)
27 finally: 27 finally:
28@@ -421,8 +418,7 @@ def python_factory(env: 'Environment', for_machine: 'MachineChoice', 28@@ -423,8 +420,7 @@ def python_factory(env: 'Environment', for_machine: 'MachineChoice',
29 os.environ[name] = value 29 os.environ[name] = value
30 elif name in os.environ: 30 elif name in os.environ:
31 del os.environ[name] 31 del os.environ[name]
diff --git a/meta/recipes-devtools/meson/meson_1.8.0.bb b/meta/recipes-devtools/meson/meson_1.8.1.bb
index 78e0a0ed80..af4bc9fecd 100644
--- a/meta/recipes-devtools/meson/meson_1.8.0.bb
+++ b/meta/recipes-devtools/meson/meson_1.8.1.bb
@@ -15,7 +15,7 @@ SRC_URI = "${GITHUB_BASE_URI}/download/${PV}/meson-${PV}.tar.gz \
15 file://0001-Make-CPU-family-warnings-fatal.patch \ 15 file://0001-Make-CPU-family-warnings-fatal.patch \
16 file://0002-Support-building-allarch-recipes-again.patch \ 16 file://0002-Support-building-allarch-recipes-again.patch \
17 " 17 "
18SRC_URI[sha256sum] = "0a9b23311271519bd03dca12d7d8b0eab582c3a2c5da433d465b6e519dc88e2f" 18SRC_URI[sha256sum] = "b4e3b80e8fa633555abf447a95a700aba1585419467b2710d5e5bf88df0a7011"
19UPSTREAM_CHECK_REGEX = "(?P<pver>\d+(\.\d+)+)$" 19UPSTREAM_CHECK_REGEX = "(?P<pver>\d+(\.\d+)+)$"
20 20
21inherit python_setuptools_build_meta github-releases 21inherit python_setuptools_build_meta github-releases
diff --git a/meta/recipes-devtools/mtd/files/0001-Improve-check-for-GCC-compiler-version.patch b/meta/recipes-devtools/mtd/files/0001-Improve-check-for-GCC-compiler-version.patch
index 3cd58e053d..2329dfece3 100644
--- a/meta/recipes-devtools/mtd/files/0001-Improve-check-for-GCC-compiler-version.patch
+++ b/meta/recipes-devtools/mtd/files/0001-Improve-check-for-GCC-compiler-version.patch
@@ -8,7 +8,7 @@ When using unreleased compiler has version like
8becomes true, therefore check for full version string 8becomes true, therefore check for full version string
9which is more rubust. 9which is more rubust.
10 10
11Upstream-Status: Submitted [https://lists.infradead.org/pipermail/linux-mtd/2025-March/108860.html] 11Upstream-Status: Backport [https://github.com/sigma-star/mtd-utils/commit/ac0ab65ebcd7b11739986b81343457469fbb43b0]
12Signed-off-by: Khem Raj <raj.khem@gmail.com> 12Signed-off-by: Khem Raj <raj.khem@gmail.com>
13--- 13---
14 ubifs-utils/common/atomic.h | 6 +++++- 14 ubifs-utils/common/atomic.h | 6 +++++-
diff --git a/meta/recipes-devtools/mtd/files/0001-ubifs-utils-ubifs.h-Include-fcntl.h.patch b/meta/recipes-devtools/mtd/files/0001-ubifs-utils-ubifs.h-Include-fcntl.h.patch
index a9ececc14c..b603ac8fd6 100644
--- a/meta/recipes-devtools/mtd/files/0001-ubifs-utils-ubifs.h-Include-fcntl.h.patch
+++ b/meta/recipes-devtools/mtd/files/0001-ubifs-utils-ubifs.h-Include-fcntl.h.patch
@@ -25,7 +25,7 @@ when building with musl:
25| | off_t 25| | off_t
26| make: *** [Makefile:4878: ubifs-utils/common/mkfs_ubifs-compr.o] Error 1 26| make: *** [Makefile:4878: ubifs-utils/common/mkfs_ubifs-compr.o] Error 1
27 27
28Upstream-Status: Submitted [https://lore.kernel.org/linux-mtd/20250219130244.2119582-1-festevam@gmail.com/T/#t] 28Upstream-Status: Backport [https://github.com/sigma-star/mtd-utils/commit/12bc9ad824bd8f18a5ec9c7154ad2374cf8c7ae3]
29Signed-off-by: Fabio Estevam <festevam@gmail.com> 29Signed-off-by: Fabio Estevam <festevam@gmail.com>
30Reviewed-by: Zhihao Cheng <chengzhihao1@huawei.com> 30Reviewed-by: Zhihao Cheng <chengzhihao1@huawei.com>
31Reviewed-by: Khem Raj <raj.khem@gmail.com> 31Reviewed-by: Khem Raj <raj.khem@gmail.com>
diff --git a/meta/recipes-devtools/mtd/files/0002-ubifs-utils-journal-Include-sys-stat.h.patch b/meta/recipes-devtools/mtd/files/0002-ubifs-utils-journal-Include-sys-stat.h.patch
index ea376437df..d92a3fb4b6 100644
--- a/meta/recipes-devtools/mtd/files/0002-ubifs-utils-journal-Include-sys-stat.h.patch
+++ b/meta/recipes-devtools/mtd/files/0002-ubifs-utils-journal-Include-sys-stat.h.patch
@@ -14,7 +14,7 @@ when building with musl:
14| ../git/ubifs-utils/libubifs/journal.c:415:14: error: 'S_IFREG' undeclared (first use in this function) 14| ../git/ubifs-utils/libubifs/journal.c:415:14: error: 'S_IFREG' undeclared (first use in this function)
15| 415 | case S_IFREG: 15| 415 | case S_IFREG:
16 16
17Upstream-Status: Submitted [https://lore.kernel.org/linux-mtd/20250219130244.2119582-2-festevam@gmail.com/T/#t] 17Upstream-Status: Backport [https://github.com/sigma-star/mtd-utils/commit/173f9714c8da1d685bfa951d43b9310d16bbab3c]
18Signed-off-by: Fabio Estevam <festevam@gmail.com> 18Signed-off-by: Fabio Estevam <festevam@gmail.com>
19Reviewed-by: Zhihao Cheng <chengzhihao1@huawei.com> 19Reviewed-by: Zhihao Cheng <chengzhihao1@huawei.com>
20--- 20---
diff --git a/meta/recipes-devtools/mtd/files/0003-ubifs-utils-link-libmissing.a-in-case-execinfo.h-isn.patch b/meta/recipes-devtools/mtd/files/0003-ubifs-utils-link-libmissing.a-in-case-execinfo.h-isn.patch
index b4c190d554..efaedad70b 100644
--- a/meta/recipes-devtools/mtd/files/0003-ubifs-utils-link-libmissing.a-in-case-execinfo.h-isn.patch
+++ b/meta/recipes-devtools/mtd/files/0003-ubifs-utils-link-libmissing.a-in-case-execinfo.h-isn.patch
@@ -13,7 +13,7 @@ backtrace().
13Guard the execinfo.h include and if it isn't available instead include 13Guard the execinfo.h include and if it isn't available instead include
14libmissing.h, and link to libmissing.a to provide backtrace() if needed. 14libmissing.h, and link to libmissing.a to provide backtrace() if needed.
15 15
16Upstream-Status: Submitted [https://lore.kernel.org/linux-mtd/20250226182400.1723418-1-ross.burton@arm.com/] 16Upstream-Status: Backport [https://github.com/sigma-star/mtd-utils/commit/8a83b306db64d6f60186d4396b0b770163b85b6e]
17Signed-off-by: Ross Burton <ross.burton@arm.com> 17Signed-off-by: Ross Burton <ross.burton@arm.com>
18Reviewed-by: Zhihao Cheng <chengzhihao1@huawei.com> 18Reviewed-by: Zhihao Cheng <chengzhihao1@huawei.com>
19Signed-off-by: Fabio Estevam <festevam@gmail.com> 19Signed-off-by: Fabio Estevam <festevam@gmail.com>
diff --git a/meta/recipes-devtools/mtd/files/0004-ubifs-utils-extract_files-Include-linux-limits.h.patch b/meta/recipes-devtools/mtd/files/0004-ubifs-utils-extract_files-Include-linux-limits.h.patch
index 87806af27d..3444f330dc 100644
--- a/meta/recipes-devtools/mtd/files/0004-ubifs-utils-extract_files-Include-linux-limits.h.patch
+++ b/meta/recipes-devtools/mtd/files/0004-ubifs-utils-extract_files-Include-linux-limits.h.patch
@@ -13,7 +13,7 @@ with musl:
13| ../git/ubifs-utils/fsck.ubifs/extract_files.c:144:47: note: each undeclared identifier is reported only once for each function it appears in 13| ../git/ubifs-utils/fsck.ubifs/extract_files.c:144:47: note: each undeclared identifier is reported only once for each function it appears in
14| make: *** [Makefile:4374: ubifs-utils/fsck.ubifs/fsck_ubifs-extract_files.o] Error 1 14| make: *** [Makefile:4374: ubifs-utils/fsck.ubifs/fsck_ubifs-extract_files.o] Error 1
15 15
16Upstream-Status: Submitted [https://lore.kernel.org/linux-mtd/20250219130244.2119582-4-festevam@gmail.com/T/#t] 16Upstream-Status: Backport [https://github.com/sigma-star/mtd-utils/commit/77981a2888c711268b0e7f32af6af159c2288e23]
17Signed-off-by: Fabio Estevam <festevam@gmail.com> 17Signed-off-by: Fabio Estevam <festevam@gmail.com>
18Reviewed-by: Zhihao Cheng <chengzhihao1@huawei.com> 18Reviewed-by: Zhihao Cheng <chengzhihao1@huawei.com>
19--- 19---
diff --git a/meta/recipes-devtools/python/python3-beartype_0.20.2.bb b/meta/recipes-devtools/python/python3-beartype_0.21.0.bb
index 9941b28fd8..43427c1472 100644
--- a/meta/recipes-devtools/python/python3-beartype_0.20.2.bb
+++ b/meta/recipes-devtools/python/python3-beartype_0.21.0.bb
@@ -4,7 +4,7 @@ HOMEPAGE = "https://beartype.readthedocs.io"
4LICENSE = "MIT" 4LICENSE = "MIT"
5LIC_FILES_CHKSUM = "file://LICENSE;md5=3a5bc05a109d235912da97a053cd7a58" 5LIC_FILES_CHKSUM = "file://LICENSE;md5=3a5bc05a109d235912da97a053cd7a58"
6 6
7SRC_URI[sha256sum] = "38c60c065ad99364a8c767e8a0e71ba8263d467b91414ed5dcffb7758a2e8079" 7SRC_URI[sha256sum] = "f9a5078f5ce87261c2d22851d19b050b64f6a805439e8793aecf01ce660d3244"
8 8
9inherit pypi python_hatchling 9inherit pypi python_hatchling
10 10
diff --git a/meta/recipes-devtools/python/python3-cython_3.1.0.bb b/meta/recipes-devtools/python/python3-cython_3.1.1.bb
index f93135b94b..1bc6eda4ac 100644
--- a/meta/recipes-devtools/python/python3-cython_3.1.0.bb
+++ b/meta/recipes-devtools/python/python3-cython_3.1.1.bb
@@ -7,7 +7,7 @@ SECTION = "devel/python"
7LICENSE = "Apache-2.0" 7LICENSE = "Apache-2.0"
8LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=61c3ee8961575861fa86c7e62bc9f69c" 8LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=61c3ee8961575861fa86c7e62bc9f69c"
9 9
10SRC_URI[sha256sum] = "1097dd60d43ad0fff614a57524bfd531b35c13a907d13bee2cc2ec152e6bf4a1" 10SRC_URI[sha256sum] = "505ccd413669d5132a53834d792c707974248088c4f60c497deb1b416e366397"
11 11
12inherit pypi setuptools3 cython 12inherit pypi setuptools3 cython
13 13
diff --git a/meta/recipes-devtools/python/python3-hypothesis_6.131.14.bb b/meta/recipes-devtools/python/python3-hypothesis_6.132.0.bb
index 269ed936b6..52688b8765 100644
--- a/meta/recipes-devtools/python/python3-hypothesis_6.131.14.bb
+++ b/meta/recipes-devtools/python/python3-hypothesis_6.132.0.bb
@@ -13,7 +13,7 @@ SRC_URI += " \
13 file://test_rle.py \ 13 file://test_rle.py \
14 " 14 "
15 15
16SRC_URI[sha256sum] = "347edc46cfe9bfcfb0598c4c927ed8fd573edfc8bacd2162023c4cf16accb702" 16SRC_URI[sha256sum] = "55868060add41baa6176ed9c3456655678d140c74e3514bdf03381dae6391403"
17 17
18RDEPENDS:${PN} += " \ 18RDEPENDS:${PN} += " \
19 python3-attrs \ 19 python3-attrs \
diff --git a/meta/recipes-devtools/python/python3-jsonschema/d71f96a6523875c9694fcdf468c9f458323d07f2.patch b/meta/recipes-devtools/python/python3-jsonschema/d71f96a6523875c9694fcdf468c9f458323d07f2.patch
deleted file mode 100644
index 65cc2b4cf0..0000000000
--- a/meta/recipes-devtools/python/python3-jsonschema/d71f96a6523875c9694fcdf468c9f458323d07f2.patch
+++ /dev/null
@@ -1,44 +0,0 @@
1From d71f96a6523875c9694fcdf468c9f458323d07f2 Mon Sep 17 00:00:00 2001
2From: Julian Berman <Julian@GrayVines.com>
3Date: Thu, 17 Oct 2024 09:36:35 -0400
4Subject: [PATCH] Fix the annotation for validator_for's default.
5
6This still doesn't seem to satisfy mypy, so tell it to be quiet.
7
8Upstream-Status: Backport [https://github.com/python-jsonschema/jsonschema/commit/d71f96a6523875c9694fcdf468c9f458323d07f2]
9Signed-off-by: Khem Raj <raj.khem@gmail.com>
10---
11 jsonschema/validators.py | 6 +++---
12 1 file changed, 3 insertions(+), 3 deletions(-)
13
14diff --git a/jsonschema/validators.py b/jsonschema/validators.py
15index 85c39160..b8ca3bd4 100644
16--- a/jsonschema/validators.py
17+++ b/jsonschema/validators.py
18@@ -857,7 +857,7 @@ def extend(
19 version="draft2020-12",
20 )
21
22-_LATEST_VERSION = Draft202012Validator
23+_LATEST_VERSION: type[Validator] = Draft202012Validator
24
25
26 class _RefResolver:
27@@ -1334,7 +1334,7 @@ def validate(instance, schema, cls=None, *args, **kwargs): # noqa: D417
28
29 def validator_for(
30 schema,
31- default: Validator | _utils.Unset = _UNSET,
32+ default: type[Validator] | _utils.Unset = _UNSET,
33 ) -> type[Validator]:
34 """
35 Retrieve the validator class appropriate for validating the given schema.
36@@ -1396,7 +1396,7 @@ class is returned:
37 DefaultValidator = _LATEST_VERSION if default is _UNSET else default
38
39 if schema is True or schema is False or "$schema" not in schema:
40- return DefaultValidator
41+ return DefaultValidator # type: ignore[return-value]
42 if schema["$schema"] not in _META_SCHEMAS and default is _UNSET:
43 warn(
44 (
diff --git a/meta/recipes-devtools/python/python3-jsonschema_4.23.0.bb b/meta/recipes-devtools/python/python3-jsonschema_4.24.0.bb
index 82b7bb23ed..7a5f4a09a6 100644
--- a/meta/recipes-devtools/python/python3-jsonschema_4.23.0.bb
+++ b/meta/recipes-devtools/python/python3-jsonschema_4.24.0.bb
@@ -4,9 +4,7 @@ LICENSE = "MIT"
4LIC_FILES_CHKSUM = "file://COPYING;md5=7a60a81c146ec25599a3e1dabb8610a8 \ 4LIC_FILES_CHKSUM = "file://COPYING;md5=7a60a81c146ec25599a3e1dabb8610a8 \
5 file://json/LICENSE;md5=9d4de43111d33570c8fe49b4cb0e01af" 5 file://json/LICENSE;md5=9d4de43111d33570c8fe49b4cb0e01af"
6 6
7SRC_URI += "file://d71f96a6523875c9694fcdf468c9f458323d07f2.patch" 7SRC_URI[sha256sum] = "0b4e8069eb12aedfa881333004bccaec24ecef5a8a6a4b6df142b2cc9599d196"
8
9SRC_URI[sha256sum] = "d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4"
10 8
11inherit pypi python_hatchling 9inherit pypi python_hatchling
12 10
diff --git a/meta/recipes-devtools/python/python3-maturin-crates.inc b/meta/recipes-devtools/python/python3-maturin-crates.inc
index 2f196f5657..5c939a09a8 100644
--- a/meta/recipes-devtools/python/python3-maturin-crates.inc
+++ b/meta/recipes-devtools/python/python3-maturin-crates.inc
@@ -34,7 +34,7 @@ SRC_URI += " \
34 crate://crates.io/cargo-options/0.7.4 \ 34 crate://crates.io/cargo-options/0.7.4 \
35 crate://crates.io/cargo-platform/0.1.8 \ 35 crate://crates.io/cargo-platform/0.1.8 \
36 crate://crates.io/cargo-xwin/0.18.4 \ 36 crate://crates.io/cargo-xwin/0.18.4 \
37 crate://crates.io/cargo-zigbuild/0.19.7 \ 37 crate://crates.io/cargo-zigbuild/0.20.0 \
38 crate://crates.io/cargo_metadata/0.19.0 \ 38 crate://crates.io/cargo_metadata/0.19.0 \
39 crate://crates.io/cbindgen/0.28.0 \ 39 crate://crates.io/cbindgen/0.28.0 \
40 crate://crates.io/cc/1.2.16 \ 40 crate://crates.io/cc/1.2.16 \
@@ -60,7 +60,7 @@ SRC_URI += " \
60 crate://crates.io/crc/3.2.1 \ 60 crate://crates.io/crc/3.2.1 \
61 crate://crates.io/crc-catalog/2.4.0 \ 61 crate://crates.io/crc-catalog/2.4.0 \
62 crate://crates.io/crc32fast/1.4.2 \ 62 crate://crates.io/crc32fast/1.4.2 \
63 crate://crates.io/crossbeam-channel/0.5.13 \ 63 crate://crates.io/crossbeam-channel/0.5.15 \
64 crate://crates.io/crossbeam-deque/0.8.5 \ 64 crate://crates.io/crossbeam-deque/0.8.5 \
65 crate://crates.io/crossbeam-epoch/0.9.18 \ 65 crate://crates.io/crossbeam-epoch/0.9.18 \
66 crate://crates.io/crossbeam-utils/0.8.20 \ 66 crate://crates.io/crossbeam-utils/0.8.20 \
@@ -169,10 +169,10 @@ SRC_URI += " \
169 crate://crates.io/num-conv/0.1.0 \ 169 crate://crates.io/num-conv/0.1.0 \
170 crate://crates.io/number_prefix/0.4.0 \ 170 crate://crates.io/number_prefix/0.4.0 \
171 crate://crates.io/once_cell/1.20.2 \ 171 crate://crates.io/once_cell/1.20.2 \
172 crate://crates.io/openssl/0.10.70 \ 172 crate://crates.io/openssl/0.10.72 \
173 crate://crates.io/openssl-macros/0.1.1 \ 173 crate://crates.io/openssl-macros/0.1.1 \
174 crate://crates.io/openssl-probe/0.1.5 \ 174 crate://crates.io/openssl-probe/0.1.5 \
175 crate://crates.io/openssl-sys/0.9.105 \ 175 crate://crates.io/openssl-sys/0.9.107 \
176 crate://crates.io/option-ext/0.2.0 \ 176 crate://crates.io/option-ext/0.2.0 \
177 crate://crates.io/os_pipe/1.2.0 \ 177 crate://crates.io/os_pipe/1.2.0 \
178 crate://crates.io/overload/0.1.1 \ 178 crate://crates.io/overload/0.1.1 \
@@ -362,7 +362,7 @@ SRC_URI += " \
362 crate://crates.io/zeroize/1.8.1 \ 362 crate://crates.io/zeroize/1.8.1 \
363 crate://crates.io/zerovec/0.10.4 \ 363 crate://crates.io/zerovec/0.10.4 \
364 crate://crates.io/zerovec-derive/0.10.3 \ 364 crate://crates.io/zerovec-derive/0.10.3 \
365 crate://crates.io/zip/2.2.3 \ 365 crate://crates.io/zip/2.3.0 \
366 crate://crates.io/zopfli/0.8.1 \ 366 crate://crates.io/zopfli/0.8.1 \
367" 367"
368 368
@@ -398,7 +398,7 @@ SRC_URI[cargo-config2-0.1.26.sha256sum] = "d83ce0be8bd1479e5de6202def660e6c7e27e
398SRC_URI[cargo-options-0.7.4.sha256sum] = "f3540247c0a37a76eb324acc238dc617786ea22c43b95da560c82a8f2714321f" 398SRC_URI[cargo-options-0.7.4.sha256sum] = "f3540247c0a37a76eb324acc238dc617786ea22c43b95da560c82a8f2714321f"
399SRC_URI[cargo-platform-0.1.8.sha256sum] = "24b1f0365a6c6bb4020cd05806fd0d33c44d38046b8bd7f0e40814b9763cabfc" 399SRC_URI[cargo-platform-0.1.8.sha256sum] = "24b1f0365a6c6bb4020cd05806fd0d33c44d38046b8bd7f0e40814b9763cabfc"
400SRC_URI[cargo-xwin-0.18.4.sha256sum] = "60f1954e4ffa0f4c47b3df5e6e9508706d8dcaa56152cd672dcee02930ba0326" 400SRC_URI[cargo-xwin-0.18.4.sha256sum] = "60f1954e4ffa0f4c47b3df5e6e9508706d8dcaa56152cd672dcee02930ba0326"
401SRC_URI[cargo-zigbuild-0.19.7.sha256sum] = "04cc649328f39bbf1ef92ef753406e1785ff1074941c398e5214b6c74d318a9e" 401SRC_URI[cargo-zigbuild-0.20.0.sha256sum] = "3f6e9e856390d5b0a859acaeda16528f8a61c964bdb894c3216c254908f1c2ea"
402SRC_URI[cargo_metadata-0.19.0.sha256sum] = "afc309ed89476c8957c50fb818f56fe894db857866c3e163335faa91dc34eb85" 402SRC_URI[cargo_metadata-0.19.0.sha256sum] = "afc309ed89476c8957c50fb818f56fe894db857866c3e163335faa91dc34eb85"
403SRC_URI[cbindgen-0.28.0.sha256sum] = "eadd868a2ce9ca38de7eeafdcec9c7065ef89b42b32f0839278d55f35c54d1ff" 403SRC_URI[cbindgen-0.28.0.sha256sum] = "eadd868a2ce9ca38de7eeafdcec9c7065ef89b42b32f0839278d55f35c54d1ff"
404SRC_URI[cc-1.2.16.sha256sum] = "be714c154be609ec7f5dad223a33bf1482fff90472de28f7362806e6d4832b8c" 404SRC_URI[cc-1.2.16.sha256sum] = "be714c154be609ec7f5dad223a33bf1482fff90472de28f7362806e6d4832b8c"
@@ -424,7 +424,7 @@ SRC_URI[cpufeatures-0.2.12.sha256sum] = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c
424SRC_URI[crc-3.2.1.sha256sum] = "69e6e4d7b33a94f0991c26729976b10ebde1d34c3ee82408fb536164fa10d636" 424SRC_URI[crc-3.2.1.sha256sum] = "69e6e4d7b33a94f0991c26729976b10ebde1d34c3ee82408fb536164fa10d636"
425SRC_URI[crc-catalog-2.4.0.sha256sum] = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" 425SRC_URI[crc-catalog-2.4.0.sha256sum] = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5"
426SRC_URI[crc32fast-1.4.2.sha256sum] = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" 426SRC_URI[crc32fast-1.4.2.sha256sum] = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3"
427SRC_URI[crossbeam-channel-0.5.13.sha256sum] = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" 427SRC_URI[crossbeam-channel-0.5.15.sha256sum] = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2"
428SRC_URI[crossbeam-deque-0.8.5.sha256sum] = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" 428SRC_URI[crossbeam-deque-0.8.5.sha256sum] = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d"
429SRC_URI[crossbeam-epoch-0.9.18.sha256sum] = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" 429SRC_URI[crossbeam-epoch-0.9.18.sha256sum] = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
430SRC_URI[crossbeam-utils-0.8.20.sha256sum] = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" 430SRC_URI[crossbeam-utils-0.8.20.sha256sum] = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80"
@@ -533,10 +533,10 @@ SRC_URI[nu-ansi-term-0.46.0.sha256sum] = "77a8165726e8236064dbb45459242600304b42
533SRC_URI[num-conv-0.1.0.sha256sum] = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" 533SRC_URI[num-conv-0.1.0.sha256sum] = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9"
534SRC_URI[number_prefix-0.4.0.sha256sum] = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" 534SRC_URI[number_prefix-0.4.0.sha256sum] = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3"
535SRC_URI[once_cell-1.20.2.sha256sum] = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" 535SRC_URI[once_cell-1.20.2.sha256sum] = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775"
536SRC_URI[openssl-0.10.70.sha256sum] = "61cfb4e166a8bb8c9b55c500bc2308550148ece889be90f609377e58140f42c6" 536SRC_URI[openssl-0.10.72.sha256sum] = "fedfea7d58a1f73118430a55da6a286e7b044961736ce96a16a17068ea25e5da"
537SRC_URI[openssl-macros-0.1.1.sha256sum] = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" 537SRC_URI[openssl-macros-0.1.1.sha256sum] = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
538SRC_URI[openssl-probe-0.1.5.sha256sum] = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" 538SRC_URI[openssl-probe-0.1.5.sha256sum] = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
539SRC_URI[openssl-sys-0.9.105.sha256sum] = "8b22d5b84be05a8d6947c7cb71f7c849aa0f112acd4bf51c2a7c1c988ac0a9dc" 539SRC_URI[openssl-sys-0.9.107.sha256sum] = "8288979acd84749c744a9014b4382d42b8f7b2592847b5afb2ed29e5d16ede07"
540SRC_URI[option-ext-0.2.0.sha256sum] = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" 540SRC_URI[option-ext-0.2.0.sha256sum] = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
541SRC_URI[os_pipe-1.2.0.sha256sum] = "29d73ba8daf8fac13b0501d1abeddcfe21ba7401ada61a819144b6c2a4f32209" 541SRC_URI[os_pipe-1.2.0.sha256sum] = "29d73ba8daf8fac13b0501d1abeddcfe21ba7401ada61a819144b6c2a4f32209"
542SRC_URI[overload-0.1.1.sha256sum] = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" 542SRC_URI[overload-0.1.1.sha256sum] = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
@@ -726,5 +726,5 @@ SRC_URI[zerofrom-derive-0.1.5.sha256sum] = "595eed982f7d355beb85837f651fa22e90b3
726SRC_URI[zeroize-1.8.1.sha256sum] = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" 726SRC_URI[zeroize-1.8.1.sha256sum] = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde"
727SRC_URI[zerovec-0.10.4.sha256sum] = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" 727SRC_URI[zerovec-0.10.4.sha256sum] = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079"
728SRC_URI[zerovec-derive-0.10.3.sha256sum] = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" 728SRC_URI[zerovec-derive-0.10.3.sha256sum] = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6"
729SRC_URI[zip-2.2.3.sha256sum] = "b280484c454e74e5fff658bbf7df8fdbe7a07c6b2de4a53def232c15ef138f3a" 729SRC_URI[zip-2.3.0.sha256sum] = "84e9a772a54b54236b9b744aaaf8d7be01b4d6e99725523cb82cb32d1c81b1d7"
730SRC_URI[zopfli-0.8.1.sha256sum] = "e5019f391bac5cf252e93bbcc53d039ffd62c7bfb7c150414d61369afe57e946" 730SRC_URI[zopfli-0.8.1.sha256sum] = "e5019f391bac5cf252e93bbcc53d039ffd62c7bfb7c150414d61369afe57e946"
diff --git a/meta/recipes-devtools/python/python3-maturin_1.8.3.bb b/meta/recipes-devtools/python/python3-maturin_1.8.6.bb
index 08975e177f..ab509331c3 100644
--- a/meta/recipes-devtools/python/python3-maturin_1.8.3.bb
+++ b/meta/recipes-devtools/python/python3-maturin_1.8.6.bb
@@ -5,8 +5,9 @@ LICENSE = "MIT | Apache-2.0"
5LIC_FILES_CHKSUM = "file://license-apache;md5=1836efb2eb779966696f473ee8540542 \ 5LIC_FILES_CHKSUM = "file://license-apache;md5=1836efb2eb779966696f473ee8540542 \
6 file://license-mit;md5=85fd3b67069cff784d98ebfc7d5c0797" 6 file://license-mit;md5=85fd3b67069cff784d98ebfc7d5c0797"
7 7
8# This is needed until Cargo.lock has libc-0.2.172+
8SRC_URI += "file://0001-Define-more-ioctl-codes-on-riscv32gc-unknown-linux-g.patch;patchdir=${CARGO_VENDORING_DIRECTORY}/libc-0.2.167" 9SRC_URI += "file://0001-Define-more-ioctl-codes-on-riscv32gc-unknown-linux-g.patch;patchdir=${CARGO_VENDORING_DIRECTORY}/libc-0.2.167"
9SRC_URI[sha256sum] = "304762f86fd53a8031b1bf006d12572a2aa0a5235485031113195cc0152e1e12" 10SRC_URI[sha256sum] = "0e0dc2e0bfaa2e1bd238e0236cf8a2b7e2250ccaa29c1aa8d0e61fa664b0289d"
10 11
11S = "${WORKDIR}/maturin-${PV}" 12S = "${WORKDIR}/maturin-${PV}"
12 13
diff --git a/meta/recipes-devtools/python/python3-pdm_2.24.1.bb b/meta/recipes-devtools/python/python3-pdm_2.24.2.bb
index 3f251c7f0f..d24e03d650 100644
--- a/meta/recipes-devtools/python/python3-pdm_2.24.1.bb
+++ b/meta/recipes-devtools/python/python3-pdm_2.24.2.bb
@@ -4,7 +4,7 @@ LICENSE = "MIT"
4SECTION = "devel/python" 4SECTION = "devel/python"
5LIC_FILES_CHKSUM = "file://LICENSE;md5=2eb31a2cc1a758c34b499f287dd04ef2" 5LIC_FILES_CHKSUM = "file://LICENSE;md5=2eb31a2cc1a758c34b499f287dd04ef2"
6 6
7SRC_URI[sha256sum] = "fc8adf011caa4ee2b0f25dabf890152aa4153cc21599ea67fe0c14e533dcd6d9" 7SRC_URI[sha256sum] = "ce0d5e9005fe26238b8ba5cf0e37ac00acab2fb90f904bf0219a5e8445849dfb"
8 8
9inherit pypi python_setuptools_build_meta 9inherit pypi python_setuptools_build_meta
10 10
diff --git a/meta/recipes-devtools/python/python3-pycryptodome_3.22.0.bb b/meta/recipes-devtools/python/python3-pycryptodome_3.22.0.bb
deleted file mode 100644
index c65b2a71fc..0000000000
--- a/meta/recipes-devtools/python/python3-pycryptodome_3.22.0.bb
+++ /dev/null
@@ -1,5 +0,0 @@
1require python-pycryptodome.inc
2inherit python_setuptools_build_meta
3
4SRC_URI[sha256sum] = "fd7ab568b3ad7b77c908d7c3f7e167ec5a8f035c64ff74f10d47a4edd043d723"
5
diff --git a/meta/recipes-devtools/python/python3-pycryptodome_3.23.0.bb b/meta/recipes-devtools/python/python3-pycryptodome_3.23.0.bb
new file mode 100644
index 0000000000..2528162ff8
--- /dev/null
+++ b/meta/recipes-devtools/python/python3-pycryptodome_3.23.0.bb
@@ -0,0 +1,5 @@
1require python-pycryptodome.inc
2inherit python_setuptools_build_meta
3
4SRC_URI[sha256sum] = "447700a657182d60338bab09fdb27518f8856aecd80ae4c6bdddb67ff5da44ef"
5
diff --git a/meta/recipes-devtools/python/python3-pycryptodomex_3.22.0.bb b/meta/recipes-devtools/python/python3-pycryptodomex_3.23.0.bb
index 5cc37d81c2..43dba3faa3 100644
--- a/meta/recipes-devtools/python/python3-pycryptodomex_3.22.0.bb
+++ b/meta/recipes-devtools/python/python3-pycryptodomex_3.23.0.bb
@@ -1,7 +1,7 @@
1require python-pycryptodome.inc 1require python-pycryptodome.inc
2inherit python_setuptools_build_meta 2inherit python_setuptools_build_meta
3 3
4SRC_URI[sha256sum] = "a1da61bacc22f93a91cbe690e3eb2022a03ab4123690ab16c46abb693a9df63d" 4SRC_URI[sha256sum] = "71909758f010c82bc99b0abf4ea12012c98962fbf0583c2164f8b84533c2e4da"
5 5
6FILES:${PN}-tests = " \ 6FILES:${PN}-tests = " \
7 ${PYTHON_SITEPACKAGES_DIR}/Cryptodome/SelfTest/ \ 7 ${PYTHON_SITEPACKAGES_DIR}/Cryptodome/SelfTest/ \
diff --git a/meta/recipes-devtools/python/python3-ruamel-yaml_0.18.10.bb b/meta/recipes-devtools/python/python3-ruamel-yaml_0.18.12.bb
index 02b04e3c0c..3b136b3b58 100644
--- a/meta/recipes-devtools/python/python3-ruamel-yaml_0.18.10.bb
+++ b/meta/recipes-devtools/python/python3-ruamel-yaml_0.18.12.bb
@@ -9,7 +9,7 @@ UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}"
9 9
10inherit pypi python_setuptools_build_meta 10inherit pypi python_setuptools_build_meta
11 11
12SRC_URI[sha256sum] = "20c86ab29ac2153f80a428e1254a8adf686d3383df04490514ca3b79a362db58" 12SRC_URI[sha256sum] = "5a38fd5ce39d223bebb9e3a6779e86b9427a03fb0bf9f270060f8b149cffe5e2"
13 13
14RDEPENDS:${PN} += "\ 14RDEPENDS:${PN} += "\
15 python3-shell \ 15 python3-shell \
diff --git a/meta/recipes-devtools/python/python3-setuptools/0001-_distutils-sysconfig.py-make-it-possible-to-substite.patch b/meta/recipes-devtools/python/python3-setuptools/0001-_distutils-sysconfig.py-make-it-possible-to-substite.patch
index 8ccffeef1d..39153883b0 100644
--- a/meta/recipes-devtools/python/python3-setuptools/0001-_distutils-sysconfig.py-make-it-possible-to-substite.patch
+++ b/meta/recipes-devtools/python/python3-setuptools/0001-_distutils-sysconfig.py-make-it-possible-to-substite.patch
@@ -1,4 +1,4 @@
1From c3d2c40e10f24724ab2e3d5f236823f3076c7aec Mon Sep 17 00:00:00 2001 1From e2eab8c254f16c461de25123f6859b8a18db5cd8 Mon Sep 17 00:00:00 2001
2From: Alexander Kanavin <alex@linutronix.de> 2From: Alexander Kanavin <alex@linutronix.de>
3Date: Wed, 11 May 2022 21:41:14 +0200 3Date: Wed, 11 May 2022 21:41:14 +0200
4Subject: [PATCH] _distutils/sysconfig.py: make it possible to substite the 4Subject: [PATCH] _distutils/sysconfig.py: make it possible to substite the
@@ -20,7 +20,7 @@ Signed-off-by: Alexander Kanavin <alex@linutronix.de>
20 1 file changed, 10 insertions(+), 2 deletions(-) 20 1 file changed, 10 insertions(+), 2 deletions(-)
21 21
22diff --git a/setuptools/_distutils/sysconfig.py b/setuptools/_distutils/sysconfig.py 22diff --git a/setuptools/_distutils/sysconfig.py b/setuptools/_distutils/sysconfig.py
23index e5facae..0932f6f 100644 23index 7ddc869..01a06af 100644
24--- a/setuptools/_distutils/sysconfig.py 24--- a/setuptools/_distutils/sysconfig.py
25+++ b/setuptools/_distutils/sysconfig.py 25+++ b/setuptools/_distutils/sysconfig.py
26@@ -134,6 +134,8 @@ def get_python_inc(plat_specific: bool = False, prefix: str | None = None) -> st 26@@ -134,6 +134,8 @@ def get_python_inc(plat_specific: bool = False, prefix: str | None = None) -> st
@@ -32,7 +32,7 @@ index e5facae..0932f6f 100644
32 resolved_prefix = prefix if prefix is not None else default_prefix 32 resolved_prefix = prefix if prefix is not None else default_prefix
33 # MinGW imitates posix like layout, but os.name != posix 33 # MinGW imitates posix like layout, but os.name != posix
34 os_name = "posix" if is_mingw() else os.name 34 os_name = "posix" if is_mingw() else os.name
35@@ -256,7 +258,13 @@ def get_python_lib( 35@@ -246,7 +248,13 @@ def get_python_lib(
36 36
37 early_prefix = prefix 37 early_prefix = prefix
38 38
@@ -47,7 +47,7 @@ index e5facae..0932f6f 100644
47 if standard_lib: 47 if standard_lib:
48 prefix = plat_specific and BASE_EXEC_PREFIX or BASE_PREFIX 48 prefix = plat_specific and BASE_EXEC_PREFIX or BASE_PREFIX
49 else: 49 else:
50@@ -271,7 +279,7 @@ def get_python_lib( 50@@ -261,7 +269,7 @@ def get_python_lib(
51 # Pure Python 51 # Pure Python
52 libdir = "lib" 52 libdir = "lib"
53 implementation = 'pypy' if IS_PYPY else 'python' 53 implementation = 'pypy' if IS_PYPY else 'python'
diff --git a/meta/recipes-devtools/python/python3-setuptools_80.8.0.bb b/meta/recipes-devtools/python/python3-setuptools_80.9.0.bb
index 327eff5700..533d8ce3d4 100644
--- a/meta/recipes-devtools/python/python3-setuptools_80.8.0.bb
+++ b/meta/recipes-devtools/python/python3-setuptools_80.9.0.bb
@@ -11,7 +11,7 @@ CVE_PRODUCT = "python3-setuptools python:setuptools"
11SRC_URI += " \ 11SRC_URI += " \
12 file://0001-_distutils-sysconfig.py-make-it-possible-to-substite.patch" 12 file://0001-_distutils-sysconfig.py-make-it-possible-to-substite.patch"
13 13
14SRC_URI[sha256sum] = "49f7af965996f26d43c8ae34539c8d99c5042fbff34302ea151eaa9c207cd257" 14SRC_URI[sha256sum] = "f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c"
15 15
16DEPENDS += "python3" 16DEPENDS += "python3"
17 17
diff --git a/meta/recipes-devtools/python/python3-trove-classifiers_2025.3.19.19.bb b/meta/recipes-devtools/python/python3-trove-classifiers_2025.5.9.12.bb
index 39fb997e88..68b09537bc 100644
--- a/meta/recipes-devtools/python/python3-trove-classifiers_2025.3.19.19.bb
+++ b/meta/recipes-devtools/python/python3-trove-classifiers_2025.5.9.12.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "https://github.com/pypa/trove-classifiers"
3LICENSE = "Apache-2.0" 3LICENSE = "Apache-2.0"
4LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327" 4LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327"
5 5
6SRC_URI[sha256sum] = "98e9d396fe908d5f43b7454fa4c43d17cd0fdadf046f45fb38a5e3af8d959ecd" 6SRC_URI[sha256sum] = "7ca7c8a7a76e2cd314468c677c69d12cc2357711fcab4a60f87994c1589e5cb5"
7 7
8PYPI_PACKAGE = "trove_classifiers" 8PYPI_PACKAGE = "trove_classifiers"
9UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}" 9UPSTREAM_CHECK_PYPI_PACKAGE = "${PYPI_PACKAGE}"
diff --git a/meta/recipes-devtools/python/python3-uritools_4.0.3.bb b/meta/recipes-devtools/python/python3-uritools_5.0.0.bb
index 4210407e00..35a8f2a0d9 100644
--- a/meta/recipes-devtools/python/python3-uritools_4.0.3.bb
+++ b/meta/recipes-devtools/python/python3-uritools_5.0.0.bb
@@ -2,9 +2,9 @@ SUMMARY = "URI parsing, classification and composition"
2HOMEPAGE = "https://github.com/tkem/uritools/" 2HOMEPAGE = "https://github.com/tkem/uritools/"
3 3
4LICENSE = "MIT" 4LICENSE = "MIT"
5LIC_FILES_CHKSUM = "file://LICENSE;md5=539275e657c6b7af026bb908356f7541" 5LIC_FILES_CHKSUM = "file://LICENSE;md5=e21bbe53b2730bfe1911cf381b81821e"
6 6
7SRC_URI[sha256sum] = "ee06a182a9c849464ce9d5fa917539aacc8edd2a4924d1b7aabeeecabcae3bc2" 7SRC_URI[sha256sum] = "68180cad154062bd5b5d9ffcdd464f8de6934414b25462ae807b00b8df9345de"
8 8
9inherit pypi python_setuptools_build_meta ptest-python-pytest 9inherit pypi python_setuptools_build_meta ptest-python-pytest
10 10
diff --git a/meta/recipes-devtools/qemu/qemu/run-ptest b/meta/recipes-devtools/qemu/qemu/run-ptest
index f9a4e8fb2b..1157b48855 100644
--- a/meta/recipes-devtools/qemu/qemu/run-ptest
+++ b/meta/recipes-devtools/qemu/qemu/run-ptest
@@ -9,5 +9,10 @@ export SRC_PATH=$ptestdir
9cd $ptestdir/tests 9cd $ptestdir/tests
10tests=$(find . -name "test-*" ! -name "*.p") 10tests=$(find . -name "test-*" ! -name "*.p")
11for f in $tests; do 11for f in $tests; do
12 # Test hangs intermittently on qemurisc64 on autobuilder
13 if [ "$f" = "./unit/test-nested-aio-poll" -a `uname -m` = "riscv64" ]; then
14 continue
15 fi
16 echo "Running $f"
12 $f | sed '/^ok/ s/ok/PASS:/g' 17 $f | sed '/^ok/ s/ok/PASS:/g'
13done 18done
diff --git a/meta/recipes-devtools/quilt/quilt-native_0.68.bb b/meta/recipes-devtools/quilt/quilt-native_0.69.bb
index 22374425fa..22374425fa 100644
--- a/meta/recipes-devtools/quilt/quilt-native_0.68.bb
+++ b/meta/recipes-devtools/quilt/quilt-native_0.69.bb
diff --git a/meta/recipes-devtools/quilt/quilt.inc b/meta/recipes-devtools/quilt/quilt.inc
index 4bae5c6c19..59d13237e2 100644
--- a/meta/recipes-devtools/quilt/quilt.inc
+++ b/meta/recipes-devtools/quilt/quilt.inc
@@ -11,11 +11,12 @@ SRC_URI = "${SAVANNAH_GNU_MIRROR}/quilt/quilt-${PV}.tar.gz \
11 file://run-ptest \ 11 file://run-ptest \
12 file://test.sh \ 12 file://test.sh \
13 file://0001-tests-Allow-different-output-from-mv.patch \ 13 file://0001-tests-Allow-different-output-from-mv.patch \
14 file://0001-contrib-spec-filters-obs-usr-bin-sh-bin-sh.patch \
14" 15"
15 16
16SRC_URI:append:class-target = " file://gnu_patch_test_fix_target.patch" 17SRC_URI:append:class-target = " file://gnu_patch_test_fix_target.patch"
17 18
18SRC_URI[sha256sum] = "fe8c09de03c106e85b3737c8f03ade147c956b79ed7af485a1c8a3858db38426" 19SRC_URI[sha256sum] = "555ddffde22da3c86d1caf5a9c1fb8a152ac2b84730437bd39cc08849c9f4852"
19 20
20inherit autotools-brokensep ptest 21inherit autotools-brokensep ptest
21 22
diff --git a/meta/recipes-devtools/quilt/quilt/0001-contrib-spec-filters-obs-usr-bin-sh-bin-sh.patch b/meta/recipes-devtools/quilt/quilt/0001-contrib-spec-filters-obs-usr-bin-sh-bin-sh.patch
new file mode 100644
index 0000000000..219deab0d6
--- /dev/null
+++ b/meta/recipes-devtools/quilt/quilt/0001-contrib-spec-filters-obs-usr-bin-sh-bin-sh.patch
@@ -0,0 +1,28 @@
1From 0e00d22182c4cce3b242dd8f4166d3df238b3a0b Mon Sep 17 00:00:00 2001
2From: Robert Yang <liezhi.yang@windriver.com>
3Date: Wed, 4 Jun 2025 00:21:40 -0700
4Subject: [PATCH] contrib/spec-filters/obs: /usr/bin/sh -> /bin/sh
5
6The /bin/sh is more common than /usr/bin/sh, the later one doesn't exist on
7distributions such as Ubuntu 22.04.
8
9Upstream-Status: Submitted [https://lists.nongnu.org/archive/html/quilt-dev/2025-06/msg00002.html]
10
11Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
12---
13 contrib/spec-filters/obs | 2 +-
14 1 file changed, 1 insertion(+), 1 deletion(-)
15
16diff --git a/contrib/spec-filters/obs b/contrib/spec-filters/obs
17index 2f5b169..b675230 100755
18--- a/contrib/spec-filters/obs
19+++ b/contrib/spec-filters/obs
20@@ -1,4 +1,4 @@
21-#!/usr/bin/sh
22+#!/bin/sh
23 # Basic spec file filter for OBS packages
24 # https://build.opensuse.org/
25
26--
272.49.0
28
diff --git a/meta/recipes-devtools/quilt/quilt_0.68.bb b/meta/recipes-devtools/quilt/quilt_0.69.bb
index bf9e3c720f..bf9e3c720f 100644
--- a/meta/recipes-devtools/quilt/quilt_0.68.bb
+++ b/meta/recipes-devtools/quilt/quilt_0.69.bb
diff --git a/meta/recipes-devtools/repo/repo_2.54.bb b/meta/recipes-devtools/repo/repo_2.55.bb
index 07ee583172..5fea49abb3 100644
--- a/meta/recipes-devtools/repo/repo_2.54.bb
+++ b/meta/recipes-devtools/repo/repo_2.55.bb
@@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57"
11 11
12SRC_URI = "git://gerrit.googlesource.com/git-repo.git;protocol=https;branch=main;tag=v${PV} \ 12SRC_URI = "git://gerrit.googlesource.com/git-repo.git;protocol=https;branch=main;tag=v${PV} \
13 " 13 "
14SRCREV = "97dc5c1bd9527c2abe2183b16a4b7ef037dc34a7" 14SRCREV = "08815ad3eb245872700201e03c47cb504d1dc3f9"
15 15
16MIRRORS += "git://gerrit.googlesource.com/git-repo.git git://github.com/GerritCodeReview/git-repo.git" 16MIRRORS += "git://gerrit.googlesource.com/git-repo.git git://github.com/GerritCodeReview/git-repo.git"
17 17
diff --git a/meta/recipes-devtools/ruby/ruby/0002-Obey-LDFLAGS-for-the-link-of-libruby.patch b/meta/recipes-devtools/ruby/ruby/0002-Obey-LDFLAGS-for-the-link-of-libruby.patch
index bb67df0f40..84fe9aee3d 100644
--- a/meta/recipes-devtools/ruby/ruby/0002-Obey-LDFLAGS-for-the-link-of-libruby.patch
+++ b/meta/recipes-devtools/ruby/ruby/0002-Obey-LDFLAGS-for-the-link-of-libruby.patch
@@ -1,4 +1,4 @@
1From 7e2337d8b0daf264785cb06d1d6c7d61e428a11b Mon Sep 17 00:00:00 2001 1From 2625f6c155105d352d6a1ff3a722e7896431ff91 Mon Sep 17 00:00:00 2001
2From: Christopher Larson <chris_larson@mentor.com> 2From: Christopher Larson <chris_larson@mentor.com>
3Date: Thu, 5 May 2016 10:59:07 -0700 3Date: Thu, 5 May 2016 10:59:07 -0700
4Subject: [PATCH] Obey LDFLAGS for the link of libruby 4Subject: [PATCH] Obey LDFLAGS for the link of libruby
@@ -10,10 +10,10 @@ Upstream-Status: Pending
10 1 file changed, 1 insertion(+), 1 deletion(-) 10 1 file changed, 1 insertion(+), 1 deletion(-)
11 11
12diff --git a/template/Makefile.in b/template/Makefile.in 12diff --git a/template/Makefile.in b/template/Makefile.in
13index 05432cd..41a05bb 100644 13index 8f996b8..c708b64 100644
14--- a/template/Makefile.in 14--- a/template/Makefile.in
15+++ b/template/Makefile.in 15+++ b/template/Makefile.in
16@@ -119,7 +119,7 @@ ENABLE_SHARED = @ENABLE_SHARED@ 16@@ -120,7 +120,7 @@ ENABLE_SHARED = @ENABLE_SHARED@
17 LDSHARED = @LIBRUBY_LDSHARED@ 17 LDSHARED = @LIBRUBY_LDSHARED@
18 DLDSHARED = @DLDSHARED@ 18 DLDSHARED = @DLDSHARED@
19 XDLDFLAGS = @DLDFLAGS@ 19 XDLDFLAGS = @DLDFLAGS@
diff --git a/meta/recipes-devtools/ruby/ruby/0005-Mark-Gemspec-reproducible-change-fixing-784225-too.patch b/meta/recipes-devtools/ruby/ruby/0005-Mark-Gemspec-reproducible-change-fixing-784225-too.patch
index eda45dd862..190eb7d728 100644
--- a/meta/recipes-devtools/ruby/ruby/0005-Mark-Gemspec-reproducible-change-fixing-784225-too.patch
+++ b/meta/recipes-devtools/ruby/ruby/0005-Mark-Gemspec-reproducible-change-fixing-784225-too.patch
@@ -1,4 +1,4 @@
1From ff25f6dddcfbbb7b0464485bb5132458866ab51a Mon Sep 17 00:00:00 2001 1From 97051be9cb9317d2c4d61a82d6d953809e962f13 Mon Sep 17 00:00:00 2001
2From: Lucas Kanashiro <kanashiro@debian.org> 2From: Lucas Kanashiro <kanashiro@debian.org>
3Date: Fri, 1 Nov 2019 15:25:17 -0300 3Date: Fri, 1 Nov 2019 15:25:17 -0300
4Subject: [PATCH] Make gemspecs reproducible 4Subject: [PATCH] Make gemspecs reproducible
@@ -12,10 +12,10 @@ Upstream-Status: Backport [debian]
12 1 file changed, 3 insertions(+), 1 deletion(-) 12 1 file changed, 3 insertions(+), 1 deletion(-)
13 13
14diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb 14diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb
15index 8f353ae..095125f 100644 15index 0b905a7..a102e3c 100644
16--- a/lib/rubygems/specification.rb 16--- a/lib/rubygems/specification.rb
17+++ b/lib/rubygems/specification.rb 17+++ b/lib/rubygems/specification.rb
18@@ -1711,7 +1711,9 @@ class Gem::Specification < Gem::BasicSpecification 18@@ -1709,7 +1709,9 @@ class Gem::Specification < Gem::BasicSpecification
19 raise(Gem::InvalidSpecificationException, 19 raise(Gem::InvalidSpecificationException,
20 "invalid date format in specification: #{date.inspect}") 20 "invalid date format in specification: #{date.inspect}")
21 end 21 end
diff --git a/meta/recipes-devtools/ruby/ruby_3.4.3.bb b/meta/recipes-devtools/ruby/ruby_3.4.4.bb
index 45047b8859..39e86fdd28 100644
--- a/meta/recipes-devtools/ruby/ruby_3.4.3.bb
+++ b/meta/recipes-devtools/ruby/ruby_3.4.4.bb
@@ -48,7 +48,7 @@ do_configure:prepend() {
48 48
49DEPENDS:append:libc-musl = " libucontext" 49DEPENDS:append:libc-musl = " libucontext"
50 50
51SRC_URI[sha256sum] = "55a4cd1dcbe5ca27cf65e89a935a482c2bb2284832939266551c0ec68b437f46" 51SRC_URI[sha256sum] = "a0597bfdf312e010efd1effaa8d7f1d7833146fdc17950caa8158ffa3dcbfa85"
52 52
53PACKAGECONFIG ??= "" 53PACKAGECONFIG ??= ""
54PACKAGECONFIG += "${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)}" 54PACKAGECONFIG += "${@bb.utils.filter('DISTRO_FEATURES', 'ipv6', d)}"
diff --git a/meta/recipes-devtools/strace/strace/Makefile-ptest.patch b/meta/recipes-devtools/strace/strace/Makefile-ptest.patch
index a78c86f6a1..9520aa8842 100644
--- a/meta/recipes-devtools/strace/strace/Makefile-ptest.patch
+++ b/meta/recipes-devtools/strace/strace/Makefile-ptest.patch
@@ -12,8 +12,9 @@ Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
12 tests/Makefile.am | 20 ++++++++++++++++++++ 12 tests/Makefile.am | 20 ++++++++++++++++++++
13 1 file changed, 20 insertions(+) 13 1 file changed, 20 insertions(+)
14 14
15
15diff --git a/tests/Makefile.am b/tests/Makefile.am 16diff --git a/tests/Makefile.am b/tests/Makefile.am
16index e1254c3..149570d 100644 17index b29471f..b8b66f0 100644
17--- a/tests/Makefile.am 18--- a/tests/Makefile.am
18+++ b/tests/Makefile.am 19+++ b/tests/Makefile.am
19@@ -18,6 +18,7 @@ SIZEOF_LONG = @SIZEOF_LONG@ 20@@ -18,6 +18,7 @@ SIZEOF_LONG = @SIZEOF_LONG@
@@ -21,10 +22,10 @@ index e1254c3..149570d 100644
21 MPERS_CC_FLAGS = 22 MPERS_CC_FLAGS =
22 ARCH_MFLAGS = 23 ARCH_MFLAGS =
23+TEST_SUITE_LOG = test-suite.log 24+TEST_SUITE_LOG = test-suite.log
24 AM_CFLAGS = $(WARN_CFLAGS) 25 AM_CFLAGS = $(WARN_CFLAGS) $(TEST_WARN_CFLAGS)
25 bundled_CPPFLAGS = 26 bundled_CPPFLAGS =
26 if USE_BUNDLED_HEADERS 27 if USE_BUNDLED_HEADERS
27@@ -903,3 +904,22 @@ BUILT_SOURCES = ksysent.h 28@@ -932,3 +933,22 @@ BUILT_SOURCES = ksysent.h
28 CLEANFILES = ksysent.h 29 CLEANFILES = ksysent.h
29 30
30 include ../src/scno.am 31 include ../src/scno.am
diff --git a/meta/recipes-devtools/strace/strace_6.12.bb b/meta/recipes-devtools/strace/strace_6.15.bb
index c16e5dc478..d8ac2a53d0 100644
--- a/meta/recipes-devtools/strace/strace_6.12.bb
+++ b/meta/recipes-devtools/strace/strace_6.15.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "http://strace.io"
3DESCRIPTION = "strace is a diagnostic, debugging and instructional userspace utility for Linux. It is used to monitor and tamper with interactions between processes and the Linux kernel, which include system calls, signal deliveries, and changes of process state." 3DESCRIPTION = "strace is a diagnostic, debugging and instructional userspace utility for Linux. It is used to monitor and tamper with interactions between processes and the Linux kernel, which include system calls, signal deliveries, and changes of process state."
4SECTION = "console/utils" 4SECTION = "console/utils"
5LICENSE = "LGPL-2.1-or-later & GPL-2.0-or-later" 5LICENSE = "LGPL-2.1-or-later & GPL-2.0-or-later"
6LIC_FILES_CHKSUM = "file://COPYING;md5=2433d82e1432a76dc3eadd9002bfe304" 6LIC_FILES_CHKSUM = "file://COPYING;md5=1efaf30bb0084b4a17a6f55f9cbcd25b"
7 7
8SRC_URI = "${GITHUB_BASE_URI}/download/v${PV}/strace-${PV}.tar.xz \ 8SRC_URI = "${GITHUB_BASE_URI}/download/v${PV}/strace-${PV}.tar.xz \
9 file://update-gawk-paths.patch \ 9 file://update-gawk-paths.patch \
@@ -15,7 +15,7 @@ SRC_URI = "${GITHUB_BASE_URI}/download/v${PV}/strace-${PV}.tar.xz \
15 file://0001-configure-Use-autoconf-macro-to-detect-largefile-sup.patch \ 15 file://0001-configure-Use-autoconf-macro-to-detect-largefile-sup.patch \
16 file://0002-tests-Replace-off64_t-with-off_t.patch \ 16 file://0002-tests-Replace-off64_t-with-off_t.patch \
17 " 17 "
18SRC_URI[sha256sum] = "c47da93be45b6055f4dc741d7f20efaf50ca10160a5b100c109b294fd9c0bdfe" 18SRC_URI[sha256sum] = "8552dfab08abc22a0f2048c98fd9541fd4d71b6882507952780dab7c7c512f51"
19 19
20 20
21inherit autotools github-releases ptest 21inherit autotools github-releases ptest
diff --git a/meta/recipes-extended/msmtp/msmtp_1.8.28.bb b/meta/recipes-extended/msmtp/msmtp_1.8.30.bb
index 48c597de24..83ec83f326 100644
--- a/meta/recipes-extended/msmtp/msmtp_1.8.28.bb
+++ b/meta/recipes-extended/msmtp/msmtp_1.8.30.bb
@@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
11UPSTREAM_CHECK_URI = "https://marlam.de/msmtp/download/" 11UPSTREAM_CHECK_URI = "https://marlam.de/msmtp/download/"
12 12
13SRC_URI = "https://marlam.de/${BPN}/releases/${BP}.tar.xz" 13SRC_URI = "https://marlam.de/${BPN}/releases/${BP}.tar.xz"
14SRC_URI[sha256sum] = "3a57f155f54e4860f7dd42138d9bea1af615b99dfab5ab4cd728fc8c09a647a4" 14SRC_URI[sha256sum] = "f826a3c500c4dfeed814685097cead9b2b3dca5a2ec3897967cb9032570fa9ab"
15 15
16inherit gettext autotools update-alternatives pkgconfig 16inherit gettext autotools update-alternatives pkgconfig
17 17
diff --git a/meta/recipes-gnome/libadwaita/libadwaita_1.7.2.bb b/meta/recipes-gnome/libadwaita/libadwaita_1.7.4.bb
index 4dc583ab39..e2bfb0984e 100644
--- a/meta/recipes-gnome/libadwaita/libadwaita_1.7.2.bb
+++ b/meta/recipes-gnome/libadwaita/libadwaita_1.7.4.bb
@@ -11,7 +11,7 @@ DEPENDS = " \
11 11
12inherit gnomebase gobject-introspection gi-docgen vala features_check 12inherit gnomebase gobject-introspection gi-docgen vala features_check
13 13
14SRC_URI[archive.sha256sum] = "28ee2ff589c6debe47af9da7a56e37c97d6849e003918a4b223f690d25f960be" 14SRC_URI[archive.sha256sum] = "a012bef97ac0d726b969b18099f75fc5eee9e92c012af9672b827350d53ae970"
15 15
16ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}" 16ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
17REQUIRED_DISTRO_FEATURES = "opengl" 17REQUIRED_DISTRO_FEATURES = "opengl"
diff --git a/meta/recipes-graphics/harfbuzz/harfbuzz/0001-Use-Os-to-compile-hb-subset-plan-layout.cc.patch b/meta/recipes-graphics/harfbuzz/harfbuzz/0001-Use-Os-to-compile-hb-subset-plan-layout.cc.patch
index 299843797b..38ff58fce5 100644
--- a/meta/recipes-graphics/harfbuzz/harfbuzz/0001-Use-Os-to-compile-hb-subset-plan-layout.cc.patch
+++ b/meta/recipes-graphics/harfbuzz/harfbuzz/0001-Use-Os-to-compile-hb-subset-plan-layout.cc.patch
@@ -1,4 +1,4 @@
1From 8d876ea19579ee6b687668921c17be423cf7d6c2 Mon Sep 17 00:00:00 2001 1From a4325b6f6ddbebf3ecaee8f3825a2f03096adb6d Mon Sep 17 00:00:00 2001
2From: Khem Raj <raj.khem@gmail.com> 2From: Khem Raj <raj.khem@gmail.com>
3Date: Sun, 27 Apr 2025 15:26:09 -0700 3Date: Sun, 27 Apr 2025 15:26:09 -0700
4Subject: [PATCH] Use -Os to compile hb-subset-plan-layout.cc 4Subject: [PATCH] Use -Os to compile hb-subset-plan-layout.cc
@@ -17,10 +17,10 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com>
17 1 file changed, 12 insertions(+), 3 deletions(-) 17 1 file changed, 12 insertions(+), 3 deletions(-)
18 18
19diff --git a/src/meson.build b/src/meson.build 19diff --git a/src/meson.build b/src/meson.build
20index 3d1c00d..fded728 100644 20index cbe5d9e..d7fc764 100644
21--- a/src/meson.build 21--- a/src/meson.build
22+++ b/src/meson.build 22+++ b/src/meson.build
23@@ -393,7 +393,6 @@ hb_subset_sources = files( 23@@ -398,7 +398,6 @@ hb_subset_sources = files(
24 'hb-subset-instancer-solver.hh', 24 'hb-subset-instancer-solver.hh',
25 'hb-subset-instancer-solver.cc', 25 'hb-subset-instancer-solver.cc',
26 'hb-subset-plan.cc', 26 'hb-subset-plan.cc',
@@ -28,7 +28,7 @@ index 3d1c00d..fded728 100644
28 'hb-subset-plan-var.cc', 28 'hb-subset-plan-var.cc',
29 'hb-subset-plan.hh', 29 'hb-subset-plan.hh',
30 'hb-subset-plan-member-list.hh', 30 'hb-subset-plan-member-list.hh',
31@@ -410,6 +409,10 @@ hb_subset_sources = files( 31@@ -415,6 +414,10 @@ hb_subset_sources = files(
32 'hb-subset.hh', 32 'hb-subset.hh',
33 ) 33 )
34 34
@@ -39,7 +39,7 @@ index 3d1c00d..fded728 100644
39 hb_subset_headers = files( 39 hb_subset_headers = files(
40 'hb-subset.h', 40 'hb-subset.h',
41 'hb-subset-serialize.h' 41 'hb-subset-serialize.h'
42@@ -618,6 +621,12 @@ endif 42@@ -629,6 +632,12 @@ endif
43 43
44 darwin_versions = [hb_version_int, '@0@.0.0'.format(hb_version_int)] 44 darwin_versions = [hb_version_int, '@0@.0.0'.format(hb_version_int)]
45 45
@@ -52,7 +52,7 @@ index 3d1c00d..fded728 100644
52 libharfbuzz = library('harfbuzz', hb_sources, 52 libharfbuzz = library('harfbuzz', hb_sources,
53 include_directories: incconfig, 53 include_directories: incconfig,
54 dependencies: harfbuzz_deps, 54 dependencies: harfbuzz_deps,
55@@ -645,7 +654,7 @@ defs_list += [harfbuzz_subset_def] 55@@ -656,7 +665,7 @@ defs_list += [harfbuzz_subset_def]
56 libharfbuzz_subset = library('harfbuzz-subset', hb_subset_sources, 56 libharfbuzz_subset = library('harfbuzz-subset', hb_subset_sources,
57 include_directories: incconfig, 57 include_directories: incconfig,
58 dependencies: [m_dep], 58 dependencies: [m_dep],
@@ -61,7 +61,7 @@ index 3d1c00d..fded728 100644
61 cpp_args: cpp_args + extra_hb_cpp_args, 61 cpp_args: cpp_args + extra_hb_cpp_args,
62 soversion: hb_so_version, 62 soversion: hb_so_version,
63 version: version, 63 version: version,
64@@ -657,7 +666,7 @@ libharfbuzz_subset = library('harfbuzz-subset', hb_subset_sources, 64@@ -668,7 +677,7 @@ libharfbuzz_subset = library('harfbuzz-subset', hb_subset_sources,
65 custom_target('harfbuzz-subset.cc', 65 custom_target('harfbuzz-subset.cc',
66 build_by_default: true, 66 build_by_default: true,
67 output: 'harfbuzz-subset.cc', 67 output: 'harfbuzz-subset.cc',
diff --git a/meta/recipes-graphics/harfbuzz/harfbuzz_11.2.0.bb b/meta/recipes-graphics/harfbuzz/harfbuzz_11.2.1.bb
index db5a04486c..71eada7f28 100644
--- a/meta/recipes-graphics/harfbuzz/harfbuzz_11.2.0.bb
+++ b/meta/recipes-graphics/harfbuzz/harfbuzz_11.2.1.bb
@@ -10,7 +10,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=b98429b8e8e3c2a67cfef01e99e4893d \
10 10
11SRC_URI = "${GITHUB_BASE_URI}/download/${PV}/${BPN}-${PV}.tar.xz" 11SRC_URI = "${GITHUB_BASE_URI}/download/${PV}/${BPN}-${PV}.tar.xz"
12SRC_URI += "file://0001-Use-Os-to-compile-hb-subset-plan-layout.cc.patch" 12SRC_URI += "file://0001-Use-Os-to-compile-hb-subset-plan-layout.cc.patch"
13SRC_URI[sha256sum] = "50f7d0a208367e606dbf6eecc5cfbecc01a47be6ee837ae7aff2787e24b09b45" 13SRC_URI[sha256sum] = "093714c8548a285094685f0bdc999e202d666b59eeb3df2ff921ab68b8336a49"
14 14
15DEPENDS += "glib-2.0-native" 15DEPENDS += "glib-2.0-native"
16 16
diff --git a/meta/recipes-graphics/vulkan/vulkan-samples_git.bb b/meta/recipes-graphics/vulkan/vulkan-samples_git.bb
index 1caff12a5b..844e0e6b68 100644
--- a/meta/recipes-graphics/vulkan/vulkan-samples_git.bb
+++ b/meta/recipes-graphics/vulkan/vulkan-samples_git.bb
@@ -10,7 +10,7 @@ SRC_URI = "gitsm://github.com/KhronosGroup/Vulkan-Samples.git;branch=main;protoc
10 " 10 "
11 11
12UPSTREAM_CHECK_COMMITS = "1" 12UPSTREAM_CHECK_COMMITS = "1"
13SRCREV = "eca122602a5d7a9f63686411dcef1b62feb36a9a" 13SRCREV = "d27205d14d01ea7d33efc8ba2862478612370182"
14 14
15UPSTREAM_CHECK_GITTAGREGEX = "These are not the releases you're looking for" 15UPSTREAM_CHECK_GITTAGREGEX = "These are not the releases you're looking for"
16S = "${WORKDIR}/git" 16S = "${WORKDIR}/git"
diff --git a/meta/recipes-graphics/xorg-lib/libxkbcommon_1.9.2.bb b/meta/recipes-graphics/xorg-lib/libxkbcommon_1.10.0.bb
index 77ee8ce500..e10bbf7af0 100644
--- a/meta/recipes-graphics/xorg-lib/libxkbcommon_1.9.2.bb
+++ b/meta/recipes-graphics/xorg-lib/libxkbcommon_1.10.0.bb
@@ -9,7 +9,7 @@ DEPENDS = "flex-native bison-native"
9 9
10SRC_URI = "git://github.com/xkbcommon/libxkbcommon;protocol=https;branch=master;tag=xkbcommon-${PV}" 10SRC_URI = "git://github.com/xkbcommon/libxkbcommon;protocol=https;branch=master;tag=xkbcommon-${PV}"
11 11
12SRCREV = "dd642359f8d43c09968e34ca7f1eb1121b2dfd70" 12SRCREV = "7888474d0296dcad50c9ba4adfdfdf2be02d35e1"
13S = "${WORKDIR}/git" 13S = "${WORKDIR}/git"
14 14
15inherit meson pkgconfig bash-completion 15inherit meson pkgconfig bash-completion
diff --git a/meta/recipes-kernel/kernel-signing-keys/kernel-signing-keys-native.bb b/meta/recipes-kernel/kernel-signing-keys/kernel-signing-keys-native.bb
new file mode 100644
index 0000000000..704973dffb
--- /dev/null
+++ b/meta/recipes-kernel/kernel-signing-keys/kernel-signing-keys-native.bb
@@ -0,0 +1,75 @@
1# Automatically generate key pairs in UBOOT_SIGN_KEYDIR if they do not exist.
2# The key pair is generated by the kernel-signing-keys-native recipe and is not
3# stored in the sstate cache. This can be beneficial from a security standpoint,
4# as it avoids unintentionally caching and distributing private keys.
5# However, this behavior can lead to non-reproducible builds. For example, if
6# the keys are deleted, they must be manually restored, or you must run:
7# bitbake -c cleanall kernel-signing-keys-native
8# before new key pairs are generated.
9#
10# However, this approach is only suitable for simple or local development use
11# cases. For more advanced or production-grade scenarios, a more robust solution
12# is usually required—such as external signing or re-signing using e.g a HSM.
13
14
15SUMMARY = "Signing keys for the kernel FIT image"
16LICENSE = "MIT"
17LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
18
19require conf/image-fitimage.conf
20
21DEPENDS += "openssl-native"
22
23inherit native
24
25do_fetch[noexec] = "1"
26do_unpack[noexec] = "1"
27do_patch[noexec] = "1"
28do_configure[noexec] = "1"
29do_install[noexec] = "1"
30
31
32do_compile() {
33 if [ "${UBOOT_SIGN_ENABLE}" = "0" ] && [ "${FIT_GENERATE_KEYS}" = "1" ]; then
34 bbwarn "FIT_GENERATE_KEYS is set to 1 even though UBOOT_SIGN_ENABLE is set to 0. The keys will not be generated as they won't be used."
35 fi
36
37 if [ "${UBOOT_SIGN_ENABLE}" = "1" ] && [ "${FIT_GENERATE_KEYS}" = "1" ]; then
38
39 # Generate keys to sign configuration nodes, only if they don't already exist
40 if [ ! -f "${UBOOT_SIGN_KEYDIR}/${UBOOT_SIGN_KEYNAME}".key ] || \
41 [ ! -f "${UBOOT_SIGN_KEYDIR}/${UBOOT_SIGN_KEYNAME}".crt ]; then
42
43 # make directory if it does not already exist
44 mkdir -p "${UBOOT_SIGN_KEYDIR}"
45
46 bbnote "Generating RSA private key for signing fitImage"
47 openssl genrsa ${FIT_KEY_GENRSA_ARGS} -out \
48 "${UBOOT_SIGN_KEYDIR}/${UBOOT_SIGN_KEYNAME}".key \
49 "${FIT_SIGN_NUMBITS}"
50
51 bbnote "Generating certificate for signing fitImage"
52 openssl req ${FIT_KEY_REQ_ARGS} "${FIT_KEY_SIGN_PKCS}" \
53 -key "${UBOOT_SIGN_KEYDIR}/${UBOOT_SIGN_KEYNAME}".key \
54 -out "${UBOOT_SIGN_KEYDIR}/${UBOOT_SIGN_KEYNAME}".crt
55 fi
56
57 # Generate keys to sign image nodes, only if they don't already exist
58 if [ ! -f "${UBOOT_SIGN_KEYDIR}/${UBOOT_SIGN_IMG_KEYNAME}".key ] || \
59 [ ! -f "${UBOOT_SIGN_KEYDIR}/${UBOOT_SIGN_IMG_KEYNAME}".crt ]; then
60
61 # make directory if it does not already exist
62 mkdir -p "${UBOOT_SIGN_KEYDIR}"
63
64 bbnote "Generating RSA private key for signing fitImage"
65 openssl genrsa ${FIT_KEY_GENRSA_ARGS} -out \
66 "${UBOOT_SIGN_KEYDIR}/${UBOOT_SIGN_IMG_KEYNAME}".key \
67 "${FIT_SIGN_NUMBITS}"
68
69 bbnote "Generating certificate for signing fitImage"
70 openssl req ${FIT_KEY_REQ_ARGS} "${FIT_KEY_SIGN_PKCS}" \
71 -key "${UBOOT_SIGN_KEYDIR}/${UBOOT_SIGN_IMG_KEYNAME}".key \
72 -out "${UBOOT_SIGN_KEYDIR}/${UBOOT_SIGN_IMG_KEYNAME}".crt
73 fi
74 fi
75}
diff --git a/meta/recipes-kernel/linux/cve-exclusion_6.12.inc b/meta/recipes-kernel/linux/cve-exclusion_6.12.inc
index d33880eae0..199ea019d5 100644
--- a/meta/recipes-kernel/linux/cve-exclusion_6.12.inc
+++ b/meta/recipes-kernel/linux/cve-exclusion_6.12.inc
@@ -1,11 +1,11 @@
1 1
2# Auto-generated CVE metadata, DO NOT EDIT BY HAND. 2# Auto-generated CVE metadata, DO NOT EDIT BY HAND.
3# Generated at 2025-05-29 10:54:43.823437+00:00 for kernel version 6.12.30 3# Generated at 2025-06-05 16:29:20.725105+00:00 for kernel version 6.12.31
4# From cvelistV5 cve_2025-05-29_1000Z-1-g4f2590b715f 4# From cvelistV5 cve_2025-06-05_1600Z
5 5
6 6
7python check_kernel_cve_status_version() { 7python check_kernel_cve_status_version() {
8 this_version = "6.12.30" 8 this_version = "6.12.31"
9 kernel_version = d.getVar("LINUX_VERSION") 9 kernel_version = d.getVar("LINUX_VERSION")
10 if kernel_version != this_version: 10 if kernel_version != this_version:
11 bb.warn("Kernel CVE status needs updating: generated for %s but kernel is %s" % (this_version, kernel_version)) 11 bb.warn("Kernel CVE status needs updating: generated for %s but kernel is %s" % (this_version, kernel_version))
@@ -5054,8 +5054,6 @@ CVE_STATUS[CVE-2023-53023] = "fixed-version: Fixed from version 6.2"
5054 5054
5055CVE_STATUS[CVE-2023-53024] = "fixed-version: Fixed from version 6.2" 5055CVE_STATUS[CVE-2023-53024] = "fixed-version: Fixed from version 6.2"
5056 5056
5057CVE_STATUS[CVE-2023-53025] = "fixed-version: Fixed from version 6.2"
5058
5059CVE_STATUS[CVE-2023-53026] = "fixed-version: Fixed from version 6.2" 5057CVE_STATUS[CVE-2023-53026] = "fixed-version: Fixed from version 6.2"
5060 5058
5061CVE_STATUS[CVE-2023-53028] = "fixed-version: Fixed from version 6.1.8" 5059CVE_STATUS[CVE-2023-53028] = "fixed-version: Fixed from version 6.1.8"
@@ -12564,8 +12562,6 @@ CVE_STATUS[CVE-2025-37780] = "cpe-stable-backport: Backported in 6.12.25"
12564 12562
12565CVE_STATUS[CVE-2025-37781] = "cpe-stable-backport: Backported in 6.12.25" 12563CVE_STATUS[CVE-2025-37781] = "cpe-stable-backport: Backported in 6.12.25"
12566 12564
12567CVE_STATUS[CVE-2025-37782] = "cpe-stable-backport: Backported in 6.12.25"
12568
12569CVE_STATUS[CVE-2025-37783] = "fixed-version: only affects 6.14 onwards" 12565CVE_STATUS[CVE-2025-37783] = "fixed-version: only affects 6.14 onwards"
12570 12566
12571CVE_STATUS[CVE-2025-37784] = "cpe-stable-backport: Backported in 6.12.25" 12567CVE_STATUS[CVE-2025-37784] = "cpe-stable-backport: Backported in 6.12.25"
@@ -12660,8 +12656,6 @@ CVE_STATUS[CVE-2025-37830] = "cpe-stable-backport: Backported in 6.12.26"
12660 12656
12661CVE_STATUS[CVE-2025-37831] = "cpe-stable-backport: Backported in 6.12.26" 12657CVE_STATUS[CVE-2025-37831] = "cpe-stable-backport: Backported in 6.12.26"
12662 12658
12663CVE_STATUS[CVE-2025-37832] = "cpe-stable-backport: Backported in 6.12.26"
12664
12665CVE_STATUS[CVE-2025-37833] = "cpe-stable-backport: Backported in 6.12.26" 12659CVE_STATUS[CVE-2025-37833] = "cpe-stable-backport: Backported in 6.12.26"
12666 12660
12667CVE_STATUS[CVE-2025-37834] = "cpe-stable-backport: Backported in 6.12.26" 12661CVE_STATUS[CVE-2025-37834] = "cpe-stable-backport: Backported in 6.12.26"
@@ -12978,6 +12972,20 @@ CVE_STATUS[CVE-2025-37991] = "cpe-stable-backport: Backported in 6.12.28"
12978 12972
12979CVE_STATUS[CVE-2025-37992] = "cpe-stable-backport: Backported in 6.12.30" 12973CVE_STATUS[CVE-2025-37992] = "cpe-stable-backport: Backported in 6.12.30"
12980 12974
12975CVE_STATUS[CVE-2025-37993] = "cpe-stable-backport: Backported in 6.12.29"
12976
12977CVE_STATUS[CVE-2025-37994] = "cpe-stable-backport: Backported in 6.12.29"
12978
12979CVE_STATUS[CVE-2025-37995] = "cpe-stable-backport: Backported in 6.12.29"
12980
12981CVE_STATUS[CVE-2025-37996] = "fixed-version: only affects 6.14 onwards"
12982
12983CVE_STATUS[CVE-2025-37997] = "cpe-stable-backport: Backported in 6.12.29"
12984
12985CVE_STATUS[CVE-2025-37998] = "cpe-stable-backport: Backported in 6.12.29"
12986
12987CVE_STATUS[CVE-2025-37999] = "cpe-stable-backport: Backported in 6.12.29"
12988
12981CVE_STATUS[CVE-2025-38049] = "cpe-stable-backport: Backported in 6.12.23" 12989CVE_STATUS[CVE-2025-38049] = "cpe-stable-backport: Backported in 6.12.23"
12982 12990
12983# CVE-2025-38104 needs backporting (fixed from 6.15) 12991# CVE-2025-38104 needs backporting (fixed from 6.15)
diff --git a/meta/recipes-kernel/linux/linux-yocto-fitimage.bb b/meta/recipes-kernel/linux/linux-yocto-fitimage.bb
new file mode 100644
index 0000000000..6ce1960a87
--- /dev/null
+++ b/meta/recipes-kernel/linux/linux-yocto-fitimage.bb
@@ -0,0 +1,13 @@
1SUMMARY = "The Linux kernel as a FIT image (optionally with initramfs)"
2SECTION = "kernel"
3
4# If an initramfs is included in the FIT image more licenses apply.
5# But also the kernel uses more than one license (see Documentation/process/license-rules.rst)
6LICENSE = "GPL-2.0-with-Linux-syscall-note"
7LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/GPL-2.0-with-Linux-syscall-note;md5=0bad96c422c41c3a94009dcfe1bff992"
8
9inherit linux-kernel-base kernel-fit-image
10
11# Set the version of this recipe to the version of the included kernel
12# (without taking the long way around via PV)
13PKGV = "${@get_kernelversion_file("${STAGING_KERNEL_BUILDDIR}")}"
diff --git a/meta/recipes-kernel/linux/linux-yocto-rt_6.12.bb b/meta/recipes-kernel/linux/linux-yocto-rt_6.12.bb
index 24d93645ca..1f61008bd6 100644
--- a/meta/recipes-kernel/linux/linux-yocto-rt_6.12.bb
+++ b/meta/recipes-kernel/linux/linux-yocto-rt_6.12.bb
@@ -14,13 +14,13 @@ python () {
14 raise bb.parse.SkipRecipe("Set PREFERRED_PROVIDER_virtual/kernel to linux-yocto-rt to enable it") 14 raise bb.parse.SkipRecipe("Set PREFERRED_PROVIDER_virtual/kernel to linux-yocto-rt to enable it")
15} 15}
16 16
17SRCREV_machine ?= "3d3d56a846c993611859096016322dccea1317cd" 17SRCREV_machine ?= "4127c6137af28c2c91ec79acee60fe4d4d70db9b"
18SRCREV_meta ?= "60484dda26122958e5f4d8f813424fa637770bf6" 18SRCREV_meta ?= "f2f3b6cbd91743920e2cb55998c53326855b2e9c"
19 19
20SRC_URI = "git://git.yoctoproject.org/linux-yocto.git;branch=${KBRANCH};name=machine;protocol=https \ 20SRC_URI = "git://git.yoctoproject.org/linux-yocto.git;branch=${KBRANCH};name=machine;protocol=https \
21 git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=yocto-6.12;destsuffix=${KMETA};protocol=https" 21 git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=yocto-6.12;destsuffix=${KMETA};protocol=https"
22 22
23LINUX_VERSION ?= "6.12.30" 23LINUX_VERSION ?= "6.12.31"
24 24
25LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46" 25LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46"
26 26
diff --git a/meta/recipes-kernel/linux/linux-yocto-tiny_6.12.bb b/meta/recipes-kernel/linux/linux-yocto-tiny_6.12.bb
index 042adf94d0..d92862a426 100644
--- a/meta/recipes-kernel/linux/linux-yocto-tiny_6.12.bb
+++ b/meta/recipes-kernel/linux/linux-yocto-tiny_6.12.bb
@@ -8,7 +8,7 @@ require recipes-kernel/linux/linux-yocto.inc
8# CVE exclusions 8# CVE exclusions
9include recipes-kernel/linux/cve-exclusion_6.12.inc 9include recipes-kernel/linux/cve-exclusion_6.12.inc
10 10
11LINUX_VERSION ?= "6.12.30" 11LINUX_VERSION ?= "6.12.31"
12LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46" 12LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46"
13 13
14DEPENDS += "${@bb.utils.contains('ARCH', 'x86', 'elfutils-native', '', d)}" 14DEPENDS += "${@bb.utils.contains('ARCH', 'x86', 'elfutils-native', '', d)}"
@@ -17,8 +17,8 @@ DEPENDS += "openssl-native util-linux-native"
17KMETA = "kernel-meta" 17KMETA = "kernel-meta"
18KCONF_BSP_AUDIT_LEVEL = "2" 18KCONF_BSP_AUDIT_LEVEL = "2"
19 19
20SRCREV_machine ?= "0898369ce44f92eba60ae9bf0013bc4338ce840e" 20SRCREV_machine ?= "fee8195f8412ff8f1bfc50ba86cdb8f20de22750"
21SRCREV_meta ?= "60484dda26122958e5f4d8f813424fa637770bf6" 21SRCREV_meta ?= "f2f3b6cbd91743920e2cb55998c53326855b2e9c"
22 22
23PV = "${LINUX_VERSION}+git" 23PV = "${LINUX_VERSION}+git"
24 24
diff --git a/meta/recipes-kernel/linux/linux-yocto_6.12.bb b/meta/recipes-kernel/linux/linux-yocto_6.12.bb
index e282a89983..c5cab3432c 100644
--- a/meta/recipes-kernel/linux/linux-yocto_6.12.bb
+++ b/meta/recipes-kernel/linux/linux-yocto_6.12.bb
@@ -18,25 +18,25 @@ KBRANCH:qemux86.104 ?= "v6.12/standard/base"
18KBRANCH:qemuloongarch64 ?= "v6.12/standard/base" 18KBRANCH:qemuloongarch64 ?= "v6.12/standard/base"
19KBRANCH:qemumips64 ?= "v6.12/standard/mti-malta64" 19KBRANCH:qemumips64 ?= "v6.12/standard/mti-malta64"
20 20
21SRCREV_machine:qemuarm ?= "5c1cc01b780f83de6f9c0bacf45ffa2de68be95c" 21SRCREV_machine:qemuarm ?= "4260a7bd706072e6bec438cdc29f44845d380b21"
22SRCREV_machine:qemuarm64 ?= "0898369ce44f92eba60ae9bf0013bc4338ce840e" 22SRCREV_machine:qemuarm64 ?= "fee8195f8412ff8f1bfc50ba86cdb8f20de22750"
23SRCREV_machine:qemuloongarch64 ?= "0898369ce44f92eba60ae9bf0013bc4338ce840e" 23SRCREV_machine:qemuloongarch64 ?= "fee8195f8412ff8f1bfc50ba86cdb8f20de22750"
24SRCREV_machine:qemumips ?= "87d7d289ec3d56a1bd1d7a7c7cb46af8cf6c0f27" 24SRCREV_machine:qemumips ?= "681fad27d382f2e0eb53d1b46f9d35aa2332248f"
25SRCREV_machine:qemuppc ?= "0898369ce44f92eba60ae9bf0013bc4338ce840e" 25SRCREV_machine:qemuppc ?= "fee8195f8412ff8f1bfc50ba86cdb8f20de22750"
26SRCREV_machine:qemuriscv64 ?= "0898369ce44f92eba60ae9bf0013bc4338ce840e" 26SRCREV_machine:qemuriscv64 ?= "fee8195f8412ff8f1bfc50ba86cdb8f20de22750"
27SRCREV_machine:qemuriscv32 ?= "0898369ce44f92eba60ae9bf0013bc4338ce840e" 27SRCREV_machine:qemuriscv32 ?= "fee8195f8412ff8f1bfc50ba86cdb8f20de22750"
28SRCREV_machine:qemux86 ?= "0898369ce44f92eba60ae9bf0013bc4338ce840e" 28SRCREV_machine:qemux86 ?= "fee8195f8412ff8f1bfc50ba86cdb8f20de22750"
29SRCREV_machine:qemux86-64 ?= "0898369ce44f92eba60ae9bf0013bc4338ce840e" 29SRCREV_machine:qemux86-64 ?= "fee8195f8412ff8f1bfc50ba86cdb8f20de22750"
30SRCREV_machine:qemumips64 ?= "98a85ed93bd5eaefe30c4aa3f7c15549be2bd032" 30SRCREV_machine:qemumips64 ?= "c32033ad8eac09b074c44a42e7d34d398df9d172"
31SRCREV_machine ?= "0898369ce44f92eba60ae9bf0013bc4338ce840e" 31SRCREV_machine ?= "fee8195f8412ff8f1bfc50ba86cdb8f20de22750"
32SRCREV_meta ?= "60484dda26122958e5f4d8f813424fa637770bf6" 32SRCREV_meta ?= "f2f3b6cbd91743920e2cb55998c53326855b2e9c"
33 33
34# set your preferred provider of linux-yocto to 'linux-yocto-upstream', and you'll 34# set your preferred provider of linux-yocto to 'linux-yocto-upstream', and you'll
35# get the <version>/base branch, which is pure upstream -stable, and the same 35# get the <version>/base branch, which is pure upstream -stable, and the same
36# meta SRCREV as the linux-yocto-standard builds. Select your version using the 36# meta SRCREV as the linux-yocto-standard builds. Select your version using the
37# normal PREFERRED_VERSION settings. 37# normal PREFERRED_VERSION settings.
38BBCLASSEXTEND = "devupstream:target" 38BBCLASSEXTEND = "devupstream:target"
39SRCREV_machine:class-devupstream ?= "e0e2f78243385e7188a57fcfceb6a19f723f1dff" 39SRCREV_machine:class-devupstream ?= "df3f6d10f353de274cc7c87f52dba5d26f185393"
40PN:class-devupstream = "linux-yocto-upstream" 40PN:class-devupstream = "linux-yocto-upstream"
41KBRANCH:class-devupstream = "v6.12/base" 41KBRANCH:class-devupstream = "v6.12/base"
42 42
@@ -44,7 +44,7 @@ SRC_URI = "git://git.yoctoproject.org/linux-yocto.git;name=machine;branch=${KBRA
44 git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=yocto-6.12;destsuffix=${KMETA};protocol=https" 44 git://git.yoctoproject.org/yocto-kernel-cache;type=kmeta;name=meta;branch=yocto-6.12;destsuffix=${KMETA};protocol=https"
45 45
46LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46" 46LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46"
47LINUX_VERSION ?= "6.12.30" 47LINUX_VERSION ?= "6.12.31"
48 48
49PV = "${LINUX_VERSION}+git" 49PV = "${LINUX_VERSION}+git"
50 50
diff --git a/meta/recipes-multimedia/gstreamer/gst-devtools_1.26.1.bb b/meta/recipes-multimedia/gstreamer/gst-devtools_1.26.2.bb
index cbad470d26..f898db80e7 100644
--- a/meta/recipes-multimedia/gstreamer/gst-devtools_1.26.1.bb
+++ b/meta/recipes-multimedia/gstreamer/gst-devtools_1.26.2.bb
@@ -12,7 +12,7 @@ SRC_URI = "https://gstreamer.freedesktop.org/src/gst-devtools/gst-devtools-${PV}
12 file://0001-connect-has-a-different-signature-on-musl.patch \ 12 file://0001-connect-has-a-different-signature-on-musl.patch \
13 " 13 "
14 14
15SRC_URI[sha256sum] = "32e15cb9d2dd6a07532f92745b62f1c72c8038b1a10d34b64e91c4557f689632" 15SRC_URI[sha256sum] = "400ff79fe371367deb8ad1adf8b4643d6e558a433bf83136c2dd496fe8210f37"
16 16
17DEPENDS = "json-glib glib-2.0 glib-2.0-native gstreamer1.0 gstreamer1.0-plugins-base" 17DEPENDS = "json-glib glib-2.0 glib-2.0-native gstreamer1.0 gstreamer1.0-plugins-base"
18RRECOMMENDS:${PN} = "git" 18RRECOMMENDS:${PN} = "git"
diff --git a/meta/recipes-multimedia/gstreamer/gst-examples_1.26.1.bb b/meta/recipes-multimedia/gstreamer/gst-examples_1.26.2.bb
index 59c7a4ade1..bc043f81c7 100644
--- a/meta/recipes-multimedia/gstreamer/gst-examples_1.26.1.bb
+++ b/meta/recipes-multimedia/gstreamer/gst-examples_1.26.2.bb
@@ -12,7 +12,7 @@ SRC_URI = "git://gitlab.freedesktop.org/gstreamer/gstreamer.git;protocol=https;b
12 file://gst-player.desktop \ 12 file://gst-player.desktop \
13 " 13 "
14 14
15SRCREV = "7174e955ec066fb8d1fb683cc82713e0615826b6" 15SRCREV = "100c21e1faf68efe7f3830b6e9f856760697ab48"
16 16
17S = "${WORKDIR}/git/subprojects/gst-examples" 17S = "${WORKDIR}/git/subprojects/gst-examples"
18 18
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.26.1.bb b/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.26.2.bb
index 96cf5a6925..88cc0b530d 100644
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.26.1.bb
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.26.2.bb
@@ -12,7 +12,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=69333daa044cb77e486cc36129f7a770 \
12 " 12 "
13 13
14SRC_URI = "https://gstreamer.freedesktop.org/src/gst-libav/gst-libav-${PV}.tar.xz" 14SRC_URI = "https://gstreamer.freedesktop.org/src/gst-libav/gst-libav-${PV}.tar.xz"
15SRC_URI[sha256sum] = "350a20b45b6655b6e10265430bdfbb3c436a96e9611b79caabef8f10abe570ea" 15SRC_URI[sha256sum] = "2eceba9cae4c495bb4ea134c27f010356036f1fa1972db5f54833f5f6c9f8db0"
16 16
17S = "${WORKDIR}/gst-libav-${PV}" 17S = "${WORKDIR}/gst-libav-${PV}"
18 18
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.26.1.bb b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.26.2.bb
index a68e9306a5..e0329cd004 100644
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.26.1.bb
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.26.2.bb
@@ -10,7 +10,7 @@ SRC_URI = "https://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad
10 file://0002-avoid-including-sys-poll.h-directly.patch \ 10 file://0002-avoid-including-sys-poll.h-directly.patch \
11 file://0004-opencv-resolve-missing-opencv-data-dir-in-yocto-buil.patch \ 11 file://0004-opencv-resolve-missing-opencv-data-dir-in-yocto-buil.patch \
12 " 12 "
13SRC_URI[sha256sum] = "9b8415b1bb3726a499578fb39907952981716643f660215fe68628fbd8629197" 13SRC_URI[sha256sum] = "cb116bfc3722c2de53838899006cafdb3c7c0bc69cd769b33c992a8421a9d844"
14 14
15S = "${WORKDIR}/gst-plugins-bad-${PV}" 15S = "${WORKDIR}/gst-plugins-bad-${PV}"
16 16
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.26.1.bb b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.26.2.bb
index c872c3bcfb..dc70356940 100644
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.26.1.bb
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.26.2.bb
@@ -11,7 +11,7 @@ SRC_URI = "https://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-ba
11 file://0003-viv-fb-Make-sure-config.h-is-included.patch \ 11 file://0003-viv-fb-Make-sure-config.h-is-included.patch \
12 file://0002-ssaparse-enhance-SSA-text-lines-parsing.patch \ 12 file://0002-ssaparse-enhance-SSA-text-lines-parsing.patch \
13 " 13 "
14SRC_URI[sha256sum] = "659553636f84dcf388cad5cf6530e02b0b2d3dc450e76199287ba9db6a6c5226" 14SRC_URI[sha256sum] = "f4b9fc0be852fe5f65401d18ae6218e4aea3ff7a3c9f8d265939b9c4704915f7"
15 15
16S = "${WORKDIR}/gst-plugins-base-${PV}" 16S = "${WORKDIR}/gst-plugins-base-${PV}"
17 17
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.26.1.bb b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.26.2.bb
index ea1322a5e3..467ccd9893 100644
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.26.1.bb
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.26.2.bb
@@ -6,7 +6,7 @@ BUGTRACKER = "https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues
6 6
7SRC_URI = "https://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-${PV}.tar.xz" 7SRC_URI = "https://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-${PV}.tar.xz"
8 8
9SRC_URI[sha256sum] = "fcdcb2f77620a599557b2843d1c6c55c2b660f5fc28222b542847d11d9ca982f" 9SRC_URI[sha256sum] = "d864b9aec28c3a80895468c909dd303e5f22f92d6e2b1137f80e2a1454584339"
10 10
11S = "${WORKDIR}/gst-plugins-good-${PV}" 11S = "${WORKDIR}/gst-plugins-good-${PV}"
12 12
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.26.1.bb b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.26.2.bb
index 0d35abf2c6..106fea361c 100644
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.26.1.bb
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.26.2.bb
@@ -15,7 +15,7 @@ SRC_URI = " \
15 https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-${PV}.tar.xz \ 15 https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-${PV}.tar.xz \
16 " 16 "
17 17
18SRC_URI[sha256sum] = "34d9bcec8e88b008839d8de33fb043ae75eb04e466df74066fd66ee487a8ec4f" 18SRC_URI[sha256sum] = "ec2d7556c6b8c2694f9b918ab9c4c6c998fb908c6b6a6ad57441702dad14ce73"
19 19
20S = "${WORKDIR}/gst-plugins-ugly-${PV}" 20S = "${WORKDIR}/gst-plugins-ugly-${PV}"
21 21
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-python_1.26.1.bb b/meta/recipes-multimedia/gstreamer/gstreamer1.0-python_1.26.2.bb
index 6afd286d38..50ff21c1ef 100644
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-python_1.26.1.bb
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-python_1.26.2.bb
@@ -8,7 +8,7 @@ LICENSE = "LGPL-2.1-or-later"
8LIC_FILES_CHKSUM = "file://COPYING;md5=c34deae4e395ca07e725ab0076a5f740" 8LIC_FILES_CHKSUM = "file://COPYING;md5=c34deae4e395ca07e725ab0076a5f740"
9 9
10SRC_URI = "https://gstreamer.freedesktop.org/src/${PNREAL}/${PNREAL}-${PV}.tar.xz" 10SRC_URI = "https://gstreamer.freedesktop.org/src/${PNREAL}/${PNREAL}-${PV}.tar.xz"
11SRC_URI[sha256sum] = "2dce1ecc8a80ce8e0b6f0e0cb3fad3bcd5d65ebe0622ed28eaae97b4559a6a85" 11SRC_URI[sha256sum] = "757ae964c16a542d60708bcb8a67c56c5be83785c0d1c534b9b9366bf676746e"
12 12
13DEPENDS = "gstreamer1.0 gstreamer1.0-plugins-base python3-pygobject gstreamer1.0-plugins-bad" 13DEPENDS = "gstreamer1.0 gstreamer1.0-plugins-base python3-pygobject gstreamer1.0-plugins-bad"
14RDEPENDS:${PN} += "gstreamer1.0 gstreamer1.0-plugins-base python3-pygobject" 14RDEPENDS:${PN} += "gstreamer1.0 gstreamer1.0-plugins-base python3-pygobject"
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server_1.26.1.bb b/meta/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server_1.26.2.bb
index 76f6dac25d..85b5615550 100644
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server_1.26.1.bb
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server_1.26.2.bb
@@ -10,7 +10,7 @@ PNREAL = "gst-rtsp-server"
10 10
11SRC_URI = "https://gstreamer.freedesktop.org/src/${PNREAL}/${PNREAL}-${PV}.tar.xz" 11SRC_URI = "https://gstreamer.freedesktop.org/src/${PNREAL}/${PNREAL}-${PV}.tar.xz"
12 12
13SRC_URI[sha256sum] = "253fdfec78320c2f67486cd3797a0253c06982c3a8d5160f795b4257fadab301" 13SRC_URI[sha256sum] = "f942b2a499ed6d161222868db0e80de45297b4777ff189c6fb890bde698c2dc3"
14 14
15S = "${WORKDIR}/${PNREAL}-${PV}" 15S = "${WORKDIR}/${PNREAL}-${PV}"
16 16
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-vaapi_1.26.1.bb b/meta/recipes-multimedia/gstreamer/gstreamer1.0-vaapi_1.26.2.bb
index e922815162..7079641bc4 100644
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-vaapi_1.26.1.bb
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-vaapi_1.26.2.bb
@@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=4fbd65380cdd255951079008b364516c"
11 11
12SRC_URI = "https://gstreamer.freedesktop.org/src/${REALPN}/${REALPN}-${PV}.tar.xz" 12SRC_URI = "https://gstreamer.freedesktop.org/src/${REALPN}/${REALPN}-${PV}.tar.xz"
13 13
14SRC_URI[sha256sum] = "1fc779690cd8d6c5ef3cd84e5a552f864815ea8d9c269370c8d21e0b6d5337c9" 14SRC_URI[sha256sum] = "0e24194236ed3b7f06f90e90efdf17f3f5ee39132e20081189a6c7690601051a"
15 15
16S = "${WORKDIR}/${REALPN}-${PV}" 16S = "${WORKDIR}/${REALPN}-${PV}"
17DEPENDS = "libva gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad" 17DEPENDS = "libva gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad"
diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0_1.26.1.bb b/meta/recipes-multimedia/gstreamer/gstreamer1.0_1.26.2.bb
index e4579d7342..d288236abc 100644
--- a/meta/recipes-multimedia/gstreamer/gstreamer1.0_1.26.1.bb
+++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0_1.26.2.bb
@@ -22,7 +22,7 @@ SRC_URI = "https://gstreamer.freedesktop.org/src/gstreamer/gstreamer-${PV}.tar.x
22 file://0003-tests-use-a-dictionaries-for-environment.patch \ 22 file://0003-tests-use-a-dictionaries-for-environment.patch \
23 file://0004-tests-add-helper-script-to-run-the-installed_tests.patch \ 23 file://0004-tests-add-helper-script-to-run-the-installed_tests.patch \
24 " 24 "
25SRC_URI[sha256sum] = "30a4c4a5e48345583eb596aa265d0f53c0feb93011d93a6aaa70dd6e3c519dc4" 25SRC_URI[sha256sum] = "f75334a3dff497c240844304a60015145792ecc3b6b213ac19841ccbd6fdf0ad"
26 26
27PACKAGECONFIG ??= "${@bb.utils.contains('PTEST_ENABLED', '1', 'tests', '', d)} \ 27PACKAGECONFIG ??= "${@bb.utils.contains('PTEST_ENABLED', '1', 'tests', '', d)} \
28 check \ 28 check \
diff --git a/meta/recipes-support/apr/apr/0001-Add-option-to-disable-timed-dependant-tests.patch b/meta/recipes-support/apr/apr/0001-Add-option-to-disable-timed-dependant-tests.patch
index b46dc76a86..72a2ab777e 100644
--- a/meta/recipes-support/apr/apr/0001-Add-option-to-disable-timed-dependant-tests.patch
+++ b/meta/recipes-support/apr/apr/0001-Add-option-to-disable-timed-dependant-tests.patch
@@ -1,4 +1,4 @@
1From 225abf37cd0b49960664b59f08e515a4c4ea5ad0 Mon Sep 17 00:00:00 2001 1From dc02ac2f43e47178a9b1f35ef6906d7835dc121b Mon Sep 17 00:00:00 2001
2From: Jeremy Puhlman <jpuhlman@mvista.com> 2From: Jeremy Puhlman <jpuhlman@mvista.com>
3Date: Thu, 26 Mar 2020 18:30:36 +0000 3Date: Thu, 26 Mar 2020 18:30:36 +0000
4Subject: [PATCH] Add option to disable timed dependant tests 4Subject: [PATCH] Add option to disable timed dependant tests
@@ -9,7 +9,6 @@ a timer or other timing related issues.
9 9
10Upstream-Status: Submitted [https://github.com/apache/apr/pull/54] 10Upstream-Status: Submitted [https://github.com/apache/apr/pull/54]
11Signed-off-by: Jeremy Puhlman <jpuhlman@mvista.com> 11Signed-off-by: Jeremy Puhlman <jpuhlman@mvista.com>
12
13--- 12---
14 configure.in | 6 ++++++ 13 configure.in | 6 ++++++
15 include/apr.h.in | 1 + 14 include/apr.h.in | 1 +
@@ -17,10 +16,10 @@ Signed-off-by: Jeremy Puhlman <jpuhlman@mvista.com>
17 3 files changed, 9 insertions(+), 2 deletions(-) 16 3 files changed, 9 insertions(+), 2 deletions(-)
18 17
19diff --git a/configure.in b/configure.in 18diff --git a/configure.in b/configure.in
20index bfd488b..3663220 100644 19index 0ce20ab..3d42953 100644
21--- a/configure.in 20--- a/configure.in
22+++ b/configure.in 21+++ b/configure.in
23@@ -3023,6 +3023,12 @@ AC_ARG_ENABLE(timedlocks, 22@@ -3119,6 +3119,12 @@ AC_ARG_ENABLE(timedlocks,
24 ) 23 )
25 AC_SUBST(apr_has_timedlocks) 24 AC_SUBST(apr_has_timedlocks)
26 25
@@ -34,10 +33,10 @@ index bfd488b..3663220 100644
34 # so getaddrinfo/gai_strerror are not used. 33 # so getaddrinfo/gai_strerror are not used.
35 if test $have_ipv6 = 0; then 34 if test $have_ipv6 = 0; then
36diff --git a/include/apr.h.in b/include/apr.h.in 35diff --git a/include/apr.h.in b/include/apr.h.in
37index ee99def..c46a5f4 100644 36index 637ed38..e7cb9b9 100644
38--- a/include/apr.h.in 37--- a/include/apr.h.in
39+++ b/include/apr.h.in 38+++ b/include/apr.h.in
40@@ -298,6 +298,7 @@ extern "C" { 39@@ -307,6 +307,7 @@ extern "C" {
41 #define APR_HAS_XTHREAD_FILES @apr_has_xthread_files@ 40 #define APR_HAS_XTHREAD_FILES @apr_has_xthread_files@
42 #define APR_HAS_OS_UUID @osuuid@ 41 #define APR_HAS_OS_UUID @osuuid@
43 #define APR_HAS_TIMEDLOCKS @apr_has_timedlocks@ 42 #define APR_HAS_TIMEDLOCKS @apr_has_timedlocks@
diff --git a/meta/recipes-support/apr/apr/0001-configure-Remove-runtime-test-for-mmap-that-can-map-.patch b/meta/recipes-support/apr/apr/0001-configure-Remove-runtime-test-for-mmap-that-can-map-.patch
index 3480deaa4d..7e22270b88 100644
--- a/meta/recipes-support/apr/apr/0001-configure-Remove-runtime-test-for-mmap-that-can-map-.patch
+++ b/meta/recipes-support/apr/apr/0001-configure-Remove-runtime-test-for-mmap-that-can-map-.patch
@@ -1,4 +1,4 @@
1From 316b81c462f065927d7fec56aadd5c8cb94d1cf0 Mon Sep 17 00:00:00 2001 1From 84990901ba642238779c74a003c1f5e572ab8d38 Mon Sep 17 00:00:00 2001
2From: Khem Raj <raj.khem@gmail.com> 2From: Khem Raj <raj.khem@gmail.com>
3Date: Fri, 26 Aug 2022 00:28:08 -0700 3Date: Fri, 26 Aug 2022 00:28:08 -0700
4Subject: [PATCH] configure: Remove runtime test for mmap that can map 4Subject: [PATCH] configure: Remove runtime test for mmap that can map
@@ -10,16 +10,15 @@ mutexes
10 10
11Upstream-Status: Inappropriate [Cross-compile specific] 11Upstream-Status: Inappropriate [Cross-compile specific]
12Signed-off-by: Khem Raj <raj.khem@gmail.com> 12Signed-off-by: Khem Raj <raj.khem@gmail.com>
13
14--- 13---
15 configure.in | 30 ------------------------------ 14 configure.in | 30 ------------------------------
16 1 file changed, 30 deletions(-) 15 1 file changed, 30 deletions(-)
17 16
18diff --git a/configure.in b/configure.in 17diff --git a/configure.in b/configure.in
19index 3663220..dce9789 100644 18index 3d42953..7e43b0f 100644
20--- a/configure.in 19--- a/configure.in
21+++ b/configure.in 20+++ b/configure.in
22@@ -1303,36 +1303,6 @@ AC_CHECK_FUNCS([mmap munmap shm_open shm_unlink shmget shmat shmdt shmctl \ 21@@ -1391,36 +1391,6 @@ AC_CHECK_FUNCS([mmap munmap shm_open shm_unlink shmget shmat shmdt shmctl \
23 APR_CHECK_DEFINE(MAP_ANON, sys/mman.h) 22 APR_CHECK_DEFINE(MAP_ANON, sys/mman.h)
24 AC_CHECK_FILE(/dev/zero) 23 AC_CHECK_FILE(/dev/zero)
25 24
diff --git a/meta/recipes-support/apr/apr/0002-apr-Remove-workdir-path-references-from-installed-ap.patch b/meta/recipes-support/apr/apr/0002-apr-Remove-workdir-path-references-from-installed-ap.patch
index d63423f3a1..2a9cfb0f3d 100644
--- a/meta/recipes-support/apr/apr/0002-apr-Remove-workdir-path-references-from-installed-ap.patch
+++ b/meta/recipes-support/apr/apr/0002-apr-Remove-workdir-path-references-from-installed-ap.patch
@@ -1,4 +1,4 @@
1From 689a8db96a6d1e1cae9cbfb35d05ac82140a6555 Mon Sep 17 00:00:00 2001 1From 5050645e626a8ee91a7f45070ef2d3911e1870d7 Mon Sep 17 00:00:00 2001
2From: Hongxu Jia <hongxu.jia@windriver.com> 2From: Hongxu Jia <hongxu.jia@windriver.com>
3Date: Tue, 30 Jan 2018 09:39:06 +0800 3Date: Tue, 30 Jan 2018 09:39:06 +0800
4Subject: [PATCH] apr: Remove workdir path references from installed apr files 4Subject: [PATCH] apr: Remove workdir path references from installed apr files
@@ -13,16 +13,15 @@ packages at target run time, the workdir path caused confusion.
13Rebase to 1.6.3 13Rebase to 1.6.3
14 14
15Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com> 15Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
16
17--- 16---
18 apr-config.in | 32 ++------------------------------ 17 apr-config.in | 32 ++------------------------------
19 1 file changed, 2 insertions(+), 30 deletions(-) 18 1 file changed, 2 insertions(+), 30 deletions(-)
20 19
21diff --git a/apr-config.in b/apr-config.in 20diff --git a/apr-config.in b/apr-config.in
22index bed47ca..47874e5 100644 21index 626d3b0..42be269 100644
23--- a/apr-config.in 22--- a/apr-config.in
24+++ b/apr-config.in 23+++ b/apr-config.in
25@@ -164,16 +164,7 @@ while test $# -gt 0; do 24@@ -179,16 +179,7 @@ while test $# -gt 0; do
26 flags="$flags $LDFLAGS" 25 flags="$flags $LDFLAGS"
27 ;; 26 ;;
28 --includes) 27 --includes)
@@ -39,7 +38,7 @@ index bed47ca..47874e5 100644
39 ;; 38 ;;
40 --srcdir) 39 --srcdir)
41 echo $APR_SOURCE_DIR 40 echo $APR_SOURCE_DIR
42@@ -197,33 +188,14 @@ while test $# -gt 0; do 41@@ -212,33 +203,14 @@ while test $# -gt 0; do
43 exit 0 42 exit 0
44 ;; 43 ;;
45 --link-ld) 44 --link-ld)
diff --git a/meta/recipes-support/apr/apr/0005-configure.in-fix-LTFLAGS-to-make-it-work-with-ccache.patch b/meta/recipes-support/apr/apr/0005-configure.in-fix-LTFLAGS-to-make-it-work-with-ccache.patch
index 02634e6fde..bd8e7786ba 100644
--- a/meta/recipes-support/apr/apr/0005-configure.in-fix-LTFLAGS-to-make-it-work-with-ccache.patch
+++ b/meta/recipes-support/apr/apr/0005-configure.in-fix-LTFLAGS-to-make-it-work-with-ccache.patch
@@ -1,7 +1,7 @@
1From 2e66cece0c3adff92733332111204ddc1d730a07 Mon Sep 17 00:00:00 2001 1From 2f5db35d6c6b4d40e04591c98d297ef764777aa3 Mon Sep 17 00:00:00 2001
2From: Robert Yang <liezhi.yang@windriver.com> 2From: Robert Yang <liezhi.yang@windriver.com>
3Date: Thu, 19 Nov 2015 18:25:38 -0800 3Date: Thu, 19 Nov 2015 18:25:38 -0800
4Subject: [PATCH 5/7] configure.in: fix LTFLAGS to make it work with ccache 4Subject: [PATCH] configure.in: fix LTFLAGS to make it work with ccache
5 5
6When ccache is enabled, libtool requires --tag=CC when use ccache, 6When ccache is enabled, libtool requires --tag=CC when use ccache,
7otherwise when building apr-util with ccache enabled: 7otherwise when building apr-util with ccache enabled:
@@ -19,10 +19,10 @@ Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
19 1 file changed, 1 insertion(+), 1 deletion(-) 19 1 file changed, 1 insertion(+), 1 deletion(-)
20 20
21diff --git a/configure.in b/configure.in 21diff --git a/configure.in b/configure.in
22index 361120f..3b10422 100644 22index b0457e2..0ce20ab 100644
23--- a/configure.in 23--- a/configure.in
24+++ b/configure.in 24+++ b/configure.in
25@@ -249,7 +249,7 @@ case $host in 25@@ -266,7 +266,7 @@ case $host in
26 ;; 26 ;;
27 *) 27 *)
28 if test "x$LTFLAGS" = "x"; then 28 if test "x$LTFLAGS" = "x"; then
@@ -31,6 +31,3 @@ index 361120f..3b10422 100644
31 fi 31 fi
32 if test "$experimental_libtool" = "yes"; then 32 if test "$experimental_libtool" = "yes"; then
33 # Use a custom-made libtool replacement 33 # Use a custom-made libtool replacement
34--
351.8.3.1
36
diff --git a/meta/recipes-support/apr/apr_1.7.5.bb b/meta/recipes-support/apr/apr_1.7.6.bb
index 83d84bfdb6..13fa5daa3c 100644
--- a/meta/recipes-support/apr/apr_1.7.5.bb
+++ b/meta/recipes-support/apr/apr_1.7.6.bb
@@ -24,7 +24,7 @@ SRC_URI = "${APACHE_MIRROR}/apr/${BPN}-${PV}.tar.bz2 \
24 file://0001-dso-Check-for-NULL-handle-in-apr_dso_sym.patch \ 24 file://0001-dso-Check-for-NULL-handle-in-apr_dso_sym.patch \
25 " 25 "
26 26
27SRC_URI[sha256sum] = "cd0f5d52b9ab1704c72160c5ee3ed5d3d4ca2df4a7f8ab564e3cb352b67232f2" 27SRC_URI[sha256sum] = "49030d92d2575da735791b496dc322f3ce5cff9494779ba8cc28c7f46c5deb32"
28 28
29inherit autotools-brokensep lib_package binconfig multilib_header ptest multilib_script 29inherit autotools-brokensep lib_package binconfig multilib_header ptest multilib_script
30 30
diff --git a/meta/recipes-support/enchant/enchant2_2.8.4.bb b/meta/recipes-support/enchant/enchant2_2.8.6.bb
index a5479a0e7d..66de313d9d 100644
--- a/meta/recipes-support/enchant/enchant2_2.8.4.bb
+++ b/meta/recipes-support/enchant/enchant2_2.8.6.bb
@@ -12,7 +12,7 @@ DEPENDS = "glib-2.0 groff-native"
12inherit autotools pkgconfig github-releases 12inherit autotools pkgconfig github-releases
13 13
14SRC_URI = "${GITHUB_BASE_URI}/download/v${PV}/enchant-${PV}.tar.gz" 14SRC_URI = "${GITHUB_BASE_URI}/download/v${PV}/enchant-${PV}.tar.gz"
15SRC_URI[sha256sum] = "e28f98208df5f99320d6a05cd49f83420bf71e69052debe3b343c9bb15c833ed" 15SRC_URI[sha256sum] = "c4cd0889d8aff8248fc3913de5a83907013962f0e1895030a3836468cd40af5b"
16 16
17GITHUB_BASE_URI = "https://github.com/rrthomas/enchant/releases" 17GITHUB_BASE_URI = "https://github.com/rrthomas/enchant/releases"
18 18
diff --git a/meta/recipes-support/gpgme/gpgme_1.24.2.bb b/meta/recipes-support/gpgme/gpgme_1.24.3.bb
index bc661429e7..64e3c6635a 100644
--- a/meta/recipes-support/gpgme/gpgme_1.24.2.bb
+++ b/meta/recipes-support/gpgme/gpgme_1.24.3.bb
@@ -29,7 +29,7 @@ SRC_URI = "${GNUPG_MIRROR}/gpgme/${BP}.tar.bz2 \
29 file://0001-autogen.sh-remove-unknown-in-version.patch \ 29 file://0001-autogen.sh-remove-unknown-in-version.patch \
30 " 30 "
31 31
32SRC_URI[sha256sum] = "e11b1a0e361777e9e55f48a03d89096e2abf08c63d84b7017cfe1dce06639581" 32SRC_URI[sha256sum] = "bfc17f5bd1b178c8649fdd918956d277080f33df006a2dc40acdecdce68c50dd"
33 33
34PYTHON_DEPS = "${@bb.utils.contains('LANGUAGES', 'python', 'swig-native', '', d)}" 34PYTHON_DEPS = "${@bb.utils.contains('LANGUAGES', 'python', 'swig-native', '', d)}"
35 35
diff --git a/meta/recipes-support/hwdata/hwdata_0.394.bb b/meta/recipes-support/hwdata/hwdata_0.395.bb
index 54edcecc2c..73b846b181 100644
--- a/meta/recipes-support/hwdata/hwdata_0.394.bb
+++ b/meta/recipes-support/hwdata/hwdata_0.395.bb
@@ -8,7 +8,7 @@ LICENSE = "GPL-2.0-or-later | X11"
8LIC_FILES_CHKSUM = "file://LICENSE;md5=1556547711e8246992b999edd9445a57" 8LIC_FILES_CHKSUM = "file://LICENSE;md5=1556547711e8246992b999edd9445a57"
9 9
10SRC_URI = "git://github.com/vcrhonek/${BPN}.git;branch=master;protocol=https;tag=v${PV}" 10SRC_URI = "git://github.com/vcrhonek/${BPN}.git;branch=master;protocol=https;tag=v${PV}"
11SRCREV = "fa1ccf4e4944bdb4110025c5c40e4fee8c8de29b" 11SRCREV = "95c1de6c4a0d40415867b29c0791480fb8ad3cdb"
12 12
13S = "${WORKDIR}/git" 13S = "${WORKDIR}/git"
14 14
diff --git a/meta/recipes-support/libgcrypt/files/0001-tests-Fix-link-errors-for-t-thread-local.patch b/meta/recipes-support/libgcrypt/files/0001-tests-Fix-link-errors-for-t-thread-local.patch
new file mode 100644
index 0000000000..5ebc3831d4
--- /dev/null
+++ b/meta/recipes-support/libgcrypt/files/0001-tests-Fix-link-errors-for-t-thread-local.patch
@@ -0,0 +1,34 @@
1From 746dc1c3837546c1085102e546a83da8d1c773e1 Mon Sep 17 00:00:00 2001
2From: Collin Funk <collin.funk1@gmail.com>
3Date: Thu, 1 May 2025 22:20:58 -0700
4Subject: [PATCH] tests: Fix link errors for t-thread-local.
5
6On platforms where pthread_create is not in libc t-thread-local fails to
7link. Issue found on NetBSD 10.0.
8* tests/Makefile.am (t_thread_local_LDADD): Add $(standard_ldadd),
9$(GPG_ERROR_MT_LIBS), and @LDADD_FOR_TESTS_KLUDGE@.
10(t_thread_local_CFLAGS): Add $(GPG_ERROR_MT_CFLAGS).
11
12--
13
14Upstream-Status: Backport [793eda7b258a562757b51c96044b103b638f1a63]
15GnuPG-bug-id: 7634
16Signed-off-by: Collin Funk <collin.funk1@gmail.com>
17Signed-off-by: Hiago De Franco <hiago.franco@toradex.com>
18---
19 tests/Makefile.am | 2 ++
20 1 file changed, 2 insertions(+)
21
22diff --git a/tests/Makefile.am b/tests/Makefile.am
23index 9a9e1c2c264a..b80f266f97c2 100644
24--- a/tests/Makefile.am
25+++ b/tests/Makefile.am
26@@ -94,6 +94,8 @@ t_secmem_LDADD = $(standard_ldadd) @LDADD_FOR_TESTS_KLUDGE@
27 testapi_LDADD = $(standard_ldadd) @LDADD_FOR_TESTS_KLUDGE@
28 t_lock_LDADD = $(standard_ldadd) $(GPG_ERROR_MT_LIBS) @LDADD_FOR_TESTS_KLUDGE@
29 t_lock_CFLAGS = $(GPG_ERROR_MT_CFLAGS) -lpthread
30+t_thread_local_LDADD = $(standard_ldadd) $(GPG_ERROR_MT_LIBS) @LDADD_FOR_TESTS_KLUDGE@
31+t_thread_local_CFLAGS = $(GPG_ERROR_MT_CFLAGS) -lpthread
32 testdrv_LDADD = $(LDADD_FOR_TESTS_KLUDGE)
33
34 # Build a version of the test driver for the build platform.
diff --git a/meta/recipes-support/libgcrypt/libgcrypt_1.11.1.bb b/meta/recipes-support/libgcrypt/libgcrypt_1.11.1.bb
index e51a20e5bf..5574e8c821 100644
--- a/meta/recipes-support/libgcrypt/libgcrypt_1.11.1.bb
+++ b/meta/recipes-support/libgcrypt/libgcrypt_1.11.1.bb
@@ -21,6 +21,7 @@ UPSTREAM_CHECK_URI = "https://gnupg.org/download/index.html"
21SRC_URI = "${GNUPG_MIRROR}/libgcrypt/libgcrypt-${PV}.tar.bz2 \ 21SRC_URI = "${GNUPG_MIRROR}/libgcrypt/libgcrypt-${PV}.tar.bz2 \
22 file://0001-libgcrypt-fix-m4-file-for-oe-core.patch \ 22 file://0001-libgcrypt-fix-m4-file-for-oe-core.patch \
23 file://0004-tests-Makefile.am-fix-undefined-reference-to-pthread.patch \ 23 file://0004-tests-Makefile.am-fix-undefined-reference-to-pthread.patch \
24 file://0001-tests-Fix-link-errors-for-t-thread-local.patch \
24 file://no-native-gpg-error.patch \ 25 file://no-native-gpg-error.patch \
25 file://no-bench-slope.patch \ 26 file://no-bench-slope.patch \
26 file://run-ptest \ 27 file://run-ptest \
diff --git a/meta/recipes-support/libunwind/libunwind/0003-Fixed-miscompilation-of-unw_getcontext-on-ARM.patch b/meta/recipes-support/libunwind/libunwind/0003-Fixed-miscompilation-of-unw_getcontext-on-ARM.patch
deleted file mode 100644
index 19bdd858f7..0000000000
--- a/meta/recipes-support/libunwind/libunwind/0003-Fixed-miscompilation-of-unw_getcontext-on-ARM.patch
+++ /dev/null
@@ -1,27 +0,0 @@
1From e5216c3fb1fa8d60a18c68e4749a3ff902f6678b Mon Sep 17 00:00:00 2001
2From: Ian Zborovsky <ian@veego.io>
3Date: Mon, 6 May 2024 02:01:19 +0300
4Subject: [PATCH 3/4] Fixed miscompilation of unw_getcontext() on ARM
5
6Upstream-Status: Backport
7Signed-off-by: Ross Burton <ross.burton@arm.com>
8---
9 include/libunwind-arm.h | 2 +-
10 1 file changed, 1 insertion(+), 1 deletion(-)
11
12diff --git a/include/libunwind-arm.h b/include/libunwind-arm.h
13index 6cfa577d..6643a185 100644
14--- a/include/libunwind-arm.h
15+++ b/include/libunwind-arm.h
16@@ -288,7 +288,7 @@ unw_tdep_context_t;
17 "mov r0, #0\n\t" \
18 "stmia %[base]!, {r0-r15}\n\t" \
19 VSTMIA \
20- : [r0] "=r" (r0) : [base] "r" (unw_base) : "memory"); \
21+ : [r0] "=r" (r0), [base] "+r" (unw_base) : : "memory"); \
22 (int)r0; })
23 #else /* __thumb__ */
24 #define unw_tdep_getcontext(uc) ({ \
25--
262.34.1
27
diff --git a/meta/recipes-support/libunwind/libunwind/0004-Rework-inline-aarch64-as-for-setcontext.patch b/meta/recipes-support/libunwind/libunwind/0004-Rework-inline-aarch64-as-for-setcontext.patch
deleted file mode 100644
index 005a077028..0000000000
--- a/meta/recipes-support/libunwind/libunwind/0004-Rework-inline-aarch64-as-for-setcontext.patch
+++ /dev/null
@@ -1,163 +0,0 @@
1From a832070f3665d29a8a06652c15f94d144c24ac69 Mon Sep 17 00:00:00 2001
2From: Stephen Webb <swebb@blackberry.com>
3Date: Mon, 22 Apr 2024 15:56:54 -0400
4Subject: [PATCH 4/5] Rework inline aarch64 as for setcontext
5
6Modern GC and clang were barfing on the inline asm constraints for the
7aarch64-linux setcontext() replacement. Reformulated the asm code to
8reduce the required constraints.
9
10Upstream-Status: Backport
11Signed-off-by: Ross Burton <ross.burton@arm.com>
12---
13 src/aarch64/Gos-linux.c | 115 +++++++++++++++++++++-------------------
14 1 file changed, 61 insertions(+), 54 deletions(-)
15
16diff --git a/src/aarch64/Gos-linux.c b/src/aarch64/Gos-linux.c
17index 7cd8c879..1e494962 100644
18--- a/src/aarch64/Gos-linux.c
19+++ b/src/aarch64/Gos-linux.c
20@@ -2,6 +2,7 @@
21 Copyright (C) 2008 CodeSourcery
22 Copyright (C) 2011-2013 Linaro Limited
23 Copyright (C) 2012 Tommi Rantala <tt.rantala@gmail.com>
24+ Copyright 2024 Stephen M. Webb <swebb@blackberry.com>
25
26 This file is part of libunwind.
27
28@@ -28,6 +29,28 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
29
30 #ifndef UNW_REMOTE_ONLY
31
32+/* Magic constants generated from gen-offsets.c */
33+#define SC_R0_OFF "8"
34+#define SC_R2_OFF "24"
35+#define SC_R18_OFF "152"
36+#define SC_R20_OFF "168"
37+#define SC_R22_OFF "184"
38+#define SC_R24_OFF "200"
39+#define SC_R26_OFF "216"
40+#define SC_R28_OFF "232"
41+#define SC_R30_OFF "248"
42+
43+#define FP_R08_OFF "80"
44+#define FP_R09_OFF "88"
45+#define FP_R10_OFF "96"
46+#define FP_R11_OFF "104"
47+#define FP_R12_OFF "112"
48+#define FP_R13_OFF "120"
49+#define FP_R14_OFF "128"
50+#define FP_R15_OFF "136"
51+
52+#define SC_SP_OFF "0x100"
53+
54 HIDDEN int
55 aarch64_local_resume (unw_addr_space_t as, unw_cursor_t *cursor, void *arg)
56 {
57@@ -36,65 +59,49 @@ aarch64_local_resume (unw_addr_space_t as, unw_cursor_t *cursor, void *arg)
58
59 if (c->sigcontext_format == AARCH64_SCF_NONE)
60 {
61+
62+ /*
63+ * This is effectively the old POSIX setcontext().
64+ *
65+ * This inline asm is broken up to use local scratch registers for the
66+ * uc_mcontext.regs and FPCTX base addresses because newer versions of GCC
67+ * and clang barf on too many constraints (gh-702) when the C array
68+ * elements are used directly.
69+ *
70+ * Clobbers aren't required for the inline asm because they just convince
71+ * the compiler to save those registers and they never get restored
72+ * becauise the asm ends with a plain ol' ret.
73+ */
74+ register void* uc_mcontext __asm__ ("x5") = (void*) &uc->uc_mcontext;
75+ register void* fpctx __asm__ ("x4") = (void*) GET_FPCTX(uc);
76+
77 /* Since there are no signals involved here we restore EH and non scratch
78 registers only. */
79 __asm__ __volatile__ (
80- "ldr x0, %[x0]\n\t"
81- "ldr x1, %[x1]\n\t"
82- "ldr x2, %[x2]\n\t"
83- "ldr x3, %[x3]\n\t"
84- "ldr x19, %[x19]\n\t"
85- "ldr x20, %[x20]\n\t"
86- "ldr x21, %[x21]\n\t"
87- "ldr x22, %[x22]\n\t"
88- "ldr x23, %[x23]\n\t"
89- "ldr x24, %[x24]\n\t"
90- "ldr x25, %[x25]\n\t"
91- "ldr x26, %[x26]\n\t"
92- "ldr x27, %[x27]\n\t"
93- "ldr x28, %[x28]\n\t"
94- "ldr x29, %[x29]\n\t"
95- "ldr x30, %[x30]\n\t"
96- "ldr d8, %[d8]\n\t"
97- "ldr d9, %[d9]\n\t"
98- "ldr d10, %[d10]\n\t"
99- "ldr d11, %[d11]\n\t"
100- "ldr d12, %[d12]\n\t"
101- "ldr d13, %[d13]\n\t"
102- "ldr d14, %[d14]\n\t"
103- "ldr d15, %[d15]\n\t"
104- "ldr x5, %[sp]\n\t"
105+ "ldp x0, x1, [x5, " SC_R0_OFF "]\n\t"
106+ "ldp x2, x3, [x5, " SC_R2_OFF "]\n\t"
107+ "ldp x18, x19, [x5, " SC_R18_OFF "]\n\t"
108+ "ldp x20, x21, [x5, " SC_R20_OFF "]\n\t"
109+ "ldp x22, x23, [x5, " SC_R22_OFF "]\n\t"
110+ "ldp x24, x25, [x5, " SC_R24_OFF "]\n\t"
111+ "ldp x26, x27, [x5, " SC_R26_OFF "]\n\t"
112+ "ldp x28, x29, [x5, " SC_R28_OFF "]\n\t"
113+ "ldr x30, [x5, " SC_R30_OFF "]\n\t"
114+ "ldr d8, [x4, " FP_R08_OFF "]\n\t"
115+ "ldr d9, [x4, " FP_R09_OFF "]\n\t"
116+ "ldr d10, [x4, " FP_R10_OFF "]\n\t"
117+ "ldr d11, [x4, " FP_R11_OFF "]\n\t"
118+ "ldr d12, [x4, " FP_R12_OFF "]\n\t"
119+ "ldr d13, [x4, " FP_R13_OFF "]\n\t"
120+ "ldr d14, [x4, " FP_R14_OFF "]\n\t"
121+ "ldr d15, [x4, " FP_R15_OFF "]\n\t"
122+ "ldr x5, [x5, " SC_SP_OFF "]\n\t"
123 "mov sp, x5\n\t"
124 "ret\n"
125- :
126- : [x0] "m"(uc->uc_mcontext.regs[0]),
127- [x1] "m"(uc->uc_mcontext.regs[1]),
128- [x2] "m"(uc->uc_mcontext.regs[2]),
129- [x3] "m"(uc->uc_mcontext.regs[3]),
130- [x19] "m"(uc->uc_mcontext.regs[19]),
131- [x20] "m"(uc->uc_mcontext.regs[20]),
132- [x21] "m"(uc->uc_mcontext.regs[21]),
133- [x22] "m"(uc->uc_mcontext.regs[22]),
134- [x23] "m"(uc->uc_mcontext.regs[23]),
135- [x24] "m"(uc->uc_mcontext.regs[24]),
136- [x25] "m"(uc->uc_mcontext.regs[25]),
137- [x26] "m"(uc->uc_mcontext.regs[26]),
138- [x27] "m"(uc->uc_mcontext.regs[27]),
139- [x28] "m"(uc->uc_mcontext.regs[28]),
140- [x29] "m"(uc->uc_mcontext.regs[29]), /* FP */
141- [x30] "m"(uc->uc_mcontext.regs[30]), /* LR */
142- [d8] "m"(GET_FPCTX(uc)->vregs[8]),
143- [d9] "m"(GET_FPCTX(uc)->vregs[9]),
144- [d10] "m"(GET_FPCTX(uc)->vregs[10]),
145- [d11] "m"(GET_FPCTX(uc)->vregs[11]),
146- [d12] "m"(GET_FPCTX(uc)->vregs[12]),
147- [d13] "m"(GET_FPCTX(uc)->vregs[13]),
148- [d14] "m"(GET_FPCTX(uc)->vregs[14]),
149- [d15] "m"(GET_FPCTX(uc)->vregs[15]),
150- [sp] "m"(uc->uc_mcontext.sp)
151- : "x0", "x1", "x2", "x3", "x19", "x20", "x21", "x22", "x23", "x24",
152- "x25", "x26", "x27", "x28", "x29", "x30"
153- );
154+ :
155+ : [uc_mcontext] "r"(uc_mcontext),
156+ [fpctx] "r"(fpctx)
157+ );
158 }
159 else
160 {
161--
1622.34.1
163
diff --git a/meta/recipes-support/libunwind/libunwind/libatomic.patch b/meta/recipes-support/libunwind/libunwind/libatomic.patch
index f39e92f2ee..e783128e2c 100644
--- a/meta/recipes-support/libunwind/libunwind/libatomic.patch
+++ b/meta/recipes-support/libunwind/libunwind/libatomic.patch
@@ -1,4 +1,4 @@
1From d6a0d8ce07c761e51b9dc7c5d16a9b06c3e93560 Mon Sep 17 00:00:00 2001 1From a331e3a63981427724d2d9cfdcb4a456153299b5 Mon Sep 17 00:00:00 2001
2From: Stephen Webb <swebb@blackberry.com> 2From: Stephen Webb <swebb@blackberry.com>
3Date: Mon, 18 Mar 2024 10:22:26 -0400 3Date: Mon, 18 Mar 2024 10:22:26 -0400
4Subject: [PATCH] configure.ac: detect if -latomic is required 4Subject: [PATCH] configure.ac: detect if -latomic is required
@@ -14,10 +14,10 @@ Signed-off-by: Ross Burton <ross.burton@arm.com>
14 1 file changed, 12 insertions(+) 14 1 file changed, 12 insertions(+)
15 15
16diff --git a/configure.ac b/configure.ac 16diff --git a/configure.ac b/configure.ac
17index 758a27d19..d0ef5f3d9 100644 17index eaa0ddc..d5f1d4a 100644
18--- a/configure.ac 18--- a/configure.ac
19+++ b/configure.ac 19+++ b/configure.ac
20@@ -94,6 +94,18 @@ dnl Checks for library functions. 20@@ -93,6 +93,18 @@ dnl Checks for library functions.
21 AC_CHECK_FUNCS(dl_iterate_phdr dl_phdr_removals_counter dlmodinfo getunwind \ 21 AC_CHECK_FUNCS(dl_iterate_phdr dl_phdr_removals_counter dlmodinfo getunwind \
22 ttrace mincore pipe2 sigaltstack execvpe) 22 ttrace mincore pipe2 sigaltstack execvpe)
23 23
diff --git a/meta/recipes-support/libunwind/libunwind/malloc.patch b/meta/recipes-support/libunwind/libunwind/malloc.patch
index 026a56f155..cfcef1ccdc 100644
--- a/meta/recipes-support/libunwind/libunwind/malloc.patch
+++ b/meta/recipes-support/libunwind/libunwind/malloc.patch
@@ -1,4 +1,4 @@
1From b67d508a93bf1ba231c18dce3894cfee25c16e0d Mon Sep 17 00:00:00 2001 1From 8fd3e0c24fdfed64e0642ec0334548f16a2a9390 Mon Sep 17 00:00:00 2001
2From: Stephen Webb <swebb@blackberry.com> 2From: Stephen Webb <swebb@blackberry.com>
3Date: Wed, 12 Feb 2025 12:08:07 -0500 3Date: Wed, 12 Feb 2025 12:08:07 -0500
4Subject: [PATCH] Fix bad prototype for malloc() in test 4Subject: [PATCH] Fix bad prototype for malloc() in test
@@ -23,7 +23,7 @@ Signed-off-by: Ross Burton <ross.burton@arm.com>
23 create mode 100644 tests/unw_test.h 23 create mode 100644 tests/unw_test.h
24 24
25diff --git a/tests/Gtest-nomalloc.c b/tests/Gtest-nomalloc.c 25diff --git a/tests/Gtest-nomalloc.c b/tests/Gtest-nomalloc.c
26index 5b97fc709..e770ff614 100644 26index 5b97fc7..e770ff6 100644
27--- a/tests/Gtest-nomalloc.c 27--- a/tests/Gtest-nomalloc.c
28+++ b/tests/Gtest-nomalloc.c 28+++ b/tests/Gtest-nomalloc.c
29@@ -1,78 +1,92 @@ 29@@ -1,78 +1,92 @@
@@ -188,10 +188,10 @@ index 5b97fc709..e770ff614 100644
188+ exit (UNW_TEST_EXIT_PASS); 188+ exit (UNW_TEST_EXIT_PASS);
189 } 189 }
190diff --git a/tests/Makefile.am b/tests/Makefile.am 190diff --git a/tests/Makefile.am b/tests/Makefile.am
191index adc34ac63..60f3f3adc 100644 191index e2b07bc..844105a 100644
192--- a/tests/Makefile.am 192--- a/tests/Makefile.am
193+++ b/tests/Makefile.am 193+++ b/tests/Makefile.am
194@@ -214,7 +214,7 @@ endif 194@@ -200,7 +200,7 @@ endif
195 195
196 noinst_PROGRAMS = $(noinst_PROGRAMS_common) $(noinst_PROGRAMS_cdep) \ 196 noinst_PROGRAMS = $(noinst_PROGRAMS_common) $(noinst_PROGRAMS_cdep) \
197 $(noinst_PROGRAMS_arch) 197 $(noinst_PROGRAMS_arch)
@@ -202,7 +202,7 @@ index adc34ac63..60f3f3adc 100644
202 -e 's,[@]XFAIL_TESTS[@],$(XFAIL_TESTS),g' \ 202 -e 's,[@]XFAIL_TESTS[@],$(XFAIL_TESTS),g' \
203diff --git a/tests/unw_test.h b/tests/unw_test.h 203diff --git a/tests/unw_test.h b/tests/unw_test.h
204new file mode 100644 204new file mode 100644
205index 000000000..9ae86dce1 205index 0000000..9ae86dc
206--- /dev/null 206--- /dev/null
207+++ b/tests/unw_test.h 207+++ b/tests/unw_test.h
208@@ -0,0 +1,47 @@ 208@@ -0,0 +1,47 @@
diff --git a/meta/recipes-support/libunwind/libunwind_1.8.1.bb b/meta/recipes-support/libunwind/libunwind_1.8.2.bb
index 10714ea247..6f7168b5df 100644
--- a/meta/recipes-support/libunwind/libunwind_1.8.1.bb
+++ b/meta/recipes-support/libunwind/libunwind_1.8.2.bb
@@ -10,14 +10,12 @@ SRC_URI = "${GITHUB_BASE_URI}/download/v${PV}/${BP}.tar.gz \
10 file://mips-byte-order.patch \ 10 file://mips-byte-order.patch \
11 file://0001-tests-Garm64-test-sve-signal-check-that-SVE-is-prese.patch \ 11 file://0001-tests-Garm64-test-sve-signal-check-that-SVE-is-prese.patch \
12 file://0002-coredump-use-glibc-or-musl-register-names-as-appropr.patch \ 12 file://0002-coredump-use-glibc-or-musl-register-names-as-appropr.patch \
13 file://0003-Fixed-miscompilation-of-unw_getcontext-on-ARM.patch \
14 file://0004-Rework-inline-aarch64-as-for-setcontext.patch \
15 file://0005-Handle-musl-on-PPC32.patch \ 13 file://0005-Handle-musl-on-PPC32.patch \
16 file://libatomic.patch \ 14 file://libatomic.patch \
17 file://malloc.patch \ 15 file://malloc.patch \
18 " 16 "
19 17
20SRC_URI[sha256sum] = "ddf0e32dd5fafe5283198d37e4bf9decf7ba1770b6e7e006c33e6df79e6a6157" 18SRC_URI[sha256sum] = "7f262f1a1224f437ede0f96a6932b582c8f5421ff207c04e3d9504dfa04c8b82"
21 19
22inherit autotools multilib_header github-releases 20inherit autotools multilib_header github-releases
23 21
diff --git a/meta/recipes-support/liburcu/liburcu_0.15.2.bb b/meta/recipes-support/liburcu/liburcu_0.15.3.bb
index 93d6a6551f..fb4e457719 100644
--- a/meta/recipes-support/liburcu/liburcu_0.15.2.bb
+++ b/meta/recipes-support/liburcu/liburcu_0.15.3.bb
@@ -14,7 +14,7 @@ LIC_FILES_CHKSUM = "file://LICENSE.md;md5=c2a92498b6e88e276f986877995425b8 \
14 14
15SRC_URI = "http://lttng.org/files/urcu/userspace-rcu-${PV}.tar.bz2" 15SRC_URI = "http://lttng.org/files/urcu/userspace-rcu-${PV}.tar.bz2"
16 16
17SRC_URI[sha256sum] = "59f36f2b8bda1b7620a7eced2634f26c549444818a8313025a3bb09c0766a61d" 17SRC_URI[sha256sum] = "26687ec84e3e114759454c884a08abeaf79dec09b041895ddf4c45ec150acb6d"
18 18
19S = "${WORKDIR}/userspace-rcu-${PV}" 19S = "${WORKDIR}/userspace-rcu-${PV}"
20inherit autotools multilib_header 20inherit autotools multilib_header
diff --git a/meta/recipes-support/libusb/libusb1_1.0.28.bb b/meta/recipes-support/libusb/libusb1_1.0.29.bb
index 51287499b7..bae5e2c09f 100644
--- a/meta/recipes-support/libusb/libusb1_1.0.28.bb
+++ b/meta/recipes-support/libusb/libusb1_1.0.29.bb
@@ -19,7 +19,7 @@ SRC_URI = "${GITHUB_BASE_URI}/download/v${PV}/libusb-${PV}.tar.bz2 \
19GITHUB_BASE_URI = "https://github.com/libusb/libusb/releases" 19GITHUB_BASE_URI = "https://github.com/libusb/libusb/releases"
20UPSTREAM_CHECK_REGEX = "releases/tag/v?(?P<pver>\d+(\.\d+)+)$" 20UPSTREAM_CHECK_REGEX = "releases/tag/v?(?P<pver>\d+(\.\d+)+)$"
21 21
22SRC_URI[sha256sum] = "966bb0d231f94a474eaae2e67da5ec844d3527a1f386456394ff432580634b29" 22SRC_URI[sha256sum] = "5977fc950f8d1395ccea9bd48c06b3f808fd3c2c961b44b0c2e6e29fc3a70a85"
23 23
24S = "${WORKDIR}/libusb-${PV}" 24S = "${WORKDIR}/libusb-${PV}"
25 25
diff --git a/meta/recipes-support/taglib/taglib_2.0.2.bb b/meta/recipes-support/taglib/taglib_2.1.bb
index 254119268c..a337af74d0 100644
--- a/meta/recipes-support/taglib/taglib_2.0.2.bb
+++ b/meta/recipes-support/taglib/taglib_2.1.bb
@@ -11,7 +11,7 @@ DEPENDS = "zlib utfcpp"
11 11
12SRC_URI = "http://taglib.github.io/releases/${BP}.tar.gz" 12SRC_URI = "http://taglib.github.io/releases/${BP}.tar.gz"
13 13
14SRC_URI[sha256sum] = "0de288d7fe34ba133199fd8512f19cc1100196826eafcb67a33b224ec3a59737" 14SRC_URI[sha256sum] = "95b788b39eaebab41f7e6d1c1d05ceee01a5d1225e4b6d11ed8976e96ba90b0c"
15 15
16UPSTREAM_CHECK_URI = "https://taglib.org/" 16UPSTREAM_CHECK_URI = "https://taglib.org/"
17UPSTREAM_CHECK_REGEX = "taglib-(?P<pver>\d+(\.\d+)+)\.tar" 17UPSTREAM_CHECK_REGEX = "taglib-(?P<pver>\d+(\.\d+)+)\.tar"
diff --git a/scripts/lib/recipetool/create.py b/scripts/lib/recipetool/create.py
index ea2ef5be63..94d52d6077 100644
--- a/scripts/lib/recipetool/create.py
+++ b/scripts/lib/recipetool/create.py
@@ -1250,7 +1250,7 @@ def match_licenses(licfiles, srctree, d):
1250 license = 'Unknown' 1250 license = 'Unknown'
1251 logger.info("Please add the following line for '%s' to a 'lib/recipetool/licenses.csv' " \ 1251 logger.info("Please add the following line for '%s' to a 'lib/recipetool/licenses.csv' " \
1252 "and replace `Unknown` with the license:\n" \ 1252 "and replace `Unknown` with the license:\n" \
1253 "%s,Unknown" % (os.path.relpath(licfile, srctree), md5value)) 1253 "%s,Unknown" % (os.path.relpath(licfile, srctree + "/.."), md5value))
1254 if license: 1254 if license:
1255 licenses.append((license, os.path.relpath(licfile, srctree), md5value)) 1255 licenses.append((license, os.path.relpath(licfile, srctree), md5value))
1256 1256
diff --git a/scripts/lib/scriptutils.py b/scripts/lib/scriptutils.py
index 81f0b01fa5..32e749dbb1 100644
--- a/scripts/lib/scriptutils.py
+++ b/scripts/lib/scriptutils.py
@@ -182,7 +182,10 @@ def fetch_url(tinfoil, srcuri, srcrev, destdir, logger, preserve_tmp=False, mirr
182 f.write('UNPACKDIR = "%s"\n' % destdir) 182 f.write('UNPACKDIR = "%s"\n' % destdir)
183 183
184 # Set S out of the way so it doesn't get created under the workdir 184 # Set S out of the way so it doesn't get created under the workdir
185 f.write('S = "%s"\n' % os.path.join(tmpdir, 'emptysrc')) 185 s_dir = os.path.join(tmpdir, 'emptysrc')
186 bb.utils.mkdirhier(s_dir)
187 f.write('S = "%s"\n' % s_dir)
188
186 if not mirrors: 189 if not mirrors:
187 # We do not need PREMIRRORS since we are almost certainly 190 # We do not need PREMIRRORS since we are almost certainly
188 # fetching new source rather than something that has already 191 # fetching new source rather than something that has already