diff mbox series

[RFC] kernel.bbclass: Set CROSS_COMPILE_COMPAT

Message ID 20240207140125.15974-1-richard@nod.at
State New
Headers show
Series [RFC] kernel.bbclass: Set CROSS_COMPILE_COMPAT | expand

Commit Message

Richard Weinberger Feb. 7, 2024, 2:01 p.m. UTC
To be able to build with CONFIG_COMPAT_VDSO=y on arm64
an arm32 toolchain is needed by the kernel build system.

This patch implements the necessary logic to locate the arm32
toolchain in an arm64 multilib environment.

Signed-off-by: Richard Weinberger <richard@nod.at>
---
Hi!

This is the least ugly version I came up so far,
please tell me what you think.

Thanks,
//richard

P.s: I tested this only on Kirkstone, yet.
---
 meta/classes-recipe/kernel.bbclass | 33 ++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)
diff mbox series

Patch

diff --git a/meta/classes-recipe/kernel.bbclass b/meta/classes-recipe/kernel.bbclass
index a76aaee5bac4..9a0e95bb1925 100644
--- a/meta/classes-recipe/kernel.bbclass
+++ b/meta/classes-recipe/kernel.bbclass
@@ -208,6 +208,39 @@  PACKAGES_DYNAMIC += "^${KERNEL_PACKAGE_NAME}-module-.*"
 PACKAGES_DYNAMIC += "^${KERNEL_PACKAGE_NAME}-image-.*"
 PACKAGES_DYNAMIC += "^${KERNEL_PACKAGE_NAME}-firmware-.*"
 
+def get_arm32_prefix(d):
+    arm_prefix = ''
+
+    if d.getVar('TARGET_ARCH').startswith('aarch64'):
+        pfxs = all_multilib_tune_values(d, 'TARGET_PREFIX').split()
+        for p in pfxs:
+           if p.startswith("arm-"):
+               arm_prefix = p
+
+    return arm_prefix
+
+def arm32_full_prefix(d):
+    pfx = get_arm32_prefix(d)
+    if pfx == '':
+        return ''
+
+    ps = all_multilib_tune_values(d, 'STAGING_BINDIR_TOOLCHAIN').split()
+    for p in ps:
+        if p.endswith(pfx[:-1]):
+            return p + '/' + pfx
+
+    return ''
+
+def arm32_gcc_dep(d):
+    pfx = get_arm32_prefix(d)
+    if pfx != '':
+        return 'virtual/lib32-' + pfx + 'gcc'
+    else:
+        return ''
+
+DEPENDS += "${@arm32_gcc_dep(d)}"
+export CROSS_COMPILE_COMPAT="${@arm32_full_prefix(d)}"
+
 export OS = "${TARGET_OS}"
 export CROSS_COMPILE = "${TARGET_PREFIX}"