cross-canadian/libgcc-common: Fixes for arm multilib
PATCH 1/1 cross-canadian/libgcc-common: Fixes for arm multilib
Arm is unusual in that we force it to "linux-gnueabi" and "linux" doesn't build. This was causing problems for multilib configurations which were assuming "linux" was the default compiler rather than linux-gnueabi.
This change does two things, ensures symlinks are generated for linux-gnueabi and also adapts the libgcc code to account for the difference on arm.
It still needs to immediately expand/save TARGET_VENDOR but we defer deciding what TARGET_OS should be until we know TARGET_ARCH (which the multilib code may change).
[YOCTO #8642]
Note that sanity tests of a 32 bit arm multilib still break due to issues with the kernel headers on a mixed bit system. This looks to be a general headers issue for the platform though and a different type of bug.
meta/classes/cross-canadian.bbclass +0 -0
@@ -80,7 +80,7 @@ python () {
for extraos in d.getVar("BASECANADIANEXTRAOS", True).split():
d.appendVar("CANADIANEXTRAOS", " " + extraos + "n32")
if tarch == "arm" or tarch == "armeb":
- d.appendVar("CANADIANEXTRAOS", " linux-musleabi linux-uclibceabi") + d.appendVar("CANADIANEXTRAOS", " linux-gnueabi linux-musleabi linux-uclibceabi") d.setVar("TARGET_OS", "linux-gnueabi")
else:
d.setVar("TARGET_OS", "linux")
meta/recipes-devtools/gcc/libgcc-common.inc +0 -0
@@ -123,15 +123,18 @@ fakeroot python do_multilib_install() {
os.symlink(src, dest)
}
-def get_original_vendoros(d):
- vendoros = d.expand('${TARGET_VENDOR}-${TARGET_OS}')
+def get_original_os(d):
+ vendoros = d.expand('${TARGET_ARCH}${ORIG_TARGET_VENDOR}-${TARGET_OS}') for suffix in [d.getVar('ABIEXTENSION', True), d.getVar('LIBCEXTENSION', True)]:
if suffix and vendoros.endswith(suffix):
vendoros = vendoros[:-len(suffix)]
+ # Arm must use linux-gnueabi not linux as only the former is accepted by gcc + if vendoros.startswith("arm-") and not vendoros.endswith("-gnueabi"):
+ vendoros = vendoros + "-gnueabi"
return vendoros
-ORIG_TARGET_VENDOROS := "${@get_original_vendoros(d)}"
-BASETARGET_SYS = "${TARGET_ARCH}${ORIG_TARGET_VENDOROS}" +ORIG_TARGET_VENDOR := "${TARGET_VENDOR}"
+BASETARGET_SYS = "${@get_original_os(d)}"
addtask extra_symlinks after do_multilib_install before do_package do_populate_sysroot fakeroot python do_extra_symlinks() {
Seems fine
Quoted 77 lines · Richard Purdie
Arm is unusual in that we force it to "linux-gnueabi" and "linux" doesn't build. This was causing problems for multilib configurations which were assuming
"linux" was the default compiler rather than linux-gnueabi.This change does two things, ensures symlinks are generated for linux-gnueabi
and also adapts the libgcc code to account for the difference on arm.It still needs to immediately expand/save
TARGET_VENDORbut we defer deciding whatTARGET_OSshould be until we knowTARGET_ARCH(which the multilib code may change).[YOCTO #8642]
Note that sanity tests of a 32 bit arm multilib still break due to issues with the kernel headers on a mixed bit system. This looks to be a general headers issue for the platform though and a different type of bug.
Signed-off-by Richard Purdie <[email protected]>meta/classes/cross-canadian.bbclass +1
-1@@ -80,7 +80,7 @@ python () { for extraos in d.getVar("BASECANADIANEXTRAOS", True).split(): d.appendVar("CANADIANEXTRAOS", " " + extraos + "n32") if tarch == "arm" or tarch == "armeb": - d.appendVar("CANADIANEXTRAOS", " linux-musleabi linux-uclibceabi") + d.appendVar("CANADIANEXTRAOS", " linux-gnueabi linux-musleabi linux-uclibceabi") d.setVar("TARGET_OS", "linux-gnueabi")else: d.setVar("TARGET_OS", "linux")meta/recipes-devtools/gcc/libgcc-common.inc +2
-2@@ -123,15 +123,18 @@ fakeroot python do_multilib_install() { os.symlink(src, dest) } -def get_original_vendoros(d): - vendoros = d.expand('${TARGET_VENDOR}-${TARGET_OS}') +def get_original_os(d): + vendoros = d.expand('${TARGET_ARCH}${ORIG_TARGET_VENDOR}-${TARGET_ OS}') for suffix in [d.getVar('ABIEXTENSION', True),
d.getVar('LIBCEXTENSION', True)]:
if suffix andvendoros.endswith(suffix):
vendoros = vendoros[:-len(suffix)]
+ # Arm must use linux-gnueabi not linux as only the former is accepted
by gccmeta/recipes-devtools/gcc/libgcc-common.inc +4
-2+ if vendoros.startswith("arm-") and not vendoros.endswith("-gnueabi"): + vendoros = vendoros + "-gnueabi" return vendoros -ORIG_TARGET_VENDOROS := "${@get_original_vendoros(d)}" -BASETARGET_SYS = "${TARGET_ARCH}${ORIG_TARGET_VENDOROS}" +ORIG_TARGET_VENDOR := "${TARGET_VENDOR}" +BASETARGET_SYS = "${@get_original_os(d)}" addtask extra_symlinks after do_multilib_install before do_package
do_populate_sysroot
fakeroot pythondo_extra_symlinks(){--
_______________________________________________
Openembedded-core mailing list
[email protected]
http://lists.openembedded.org/mailman/listinfo/openembedded-core