cross-canadian/libgcc: fix aarch64's multilib SDK
cover cross-canadian/libgcc: fix aarch64's multilib SDK
The following changes since commit e44ed8c18e395b9c055aefee113b90708e8a8a2f:
build-appliance-image: Update to jethro head revision (2015-11-03 14:02:57 +0000)
are available in the git repository at:
git://git.openembedded.org/openembedded-core-contrib rbt/aarch64_lib32
http://cgit.openembedded.org/cgit.cgi/openembedded-core-contrib/log/?h=rbt/aarch64_lib32
Robert Yang (1):
cross-canadian/libgcc: fix aarch64's multilib SDK
meta/classes/cross-canadian.bbclass | 3 +++ meta/recipes-devtools/gcc/libgcc-common.inc | 24 +++++++++++++++++------- meta/recipes-devtools/gcc/libgcc.inc | 2 +- 3 files changed, 21 insertions(+), 8 deletions(-)
Signature · 1 line
1.7.9.5
PATCH 1/1 cross-canadian/libgcc: fix aarch64's multilib SDK
The arm toolchain has a "-gnueabi" suffix, but aarch64 doesn't, this makes multilib sdk doesn't work, for example:
MACHINE = qemuarm64
require conf/multilib.conf
MULTILIBS = "multilib:lib32" DEFAULTTUNE_virtclass-multilib-lib32 = "armv7at-neon"
$ bitbake core-image-minimal -cpopulate_sdk
Then extract SDK, the environment-setup-armv7a-vfp-neon-pokymllib32-linux-gnueabi doesn't work since:
* The CC is arm-pokymllib32-linux-gnueabi-gcc
which doesn't exist, the patch for cross-canadian.bbclass fixes problem.
* Need aarch64-poky-linux/usr/lib/arm-poky-linux-linux-gnueabi which doesn't exist, the patch for libgcc-common.inc fixes the problem.
[YOCTO #8616]
--- meta/classes/cross-canadian.bbclass | 3 +++ meta/recipes-devtools/gcc/libgcc-common.inc | 24 +++++++++++++++++------- meta/recipes-devtools/gcc/libgcc.inc | 2 +- 3 files changed, 21 insertions(+), 8 deletions(-)
meta/classes/cross-canadian.bbclass +3 -0
@@ -18,6 +18,7 @@ PACKAGE_ARCH = "${SDK_ARCH}-${SDKPKGSUFFIX}" CANADIANEXTRAOS = "linux-uclibc linux-musl" CANADIANEXTRAVENDOR = "" MODIFYTOS ??= "1" +GNUEABI_SUFFIX = "" python () { archs = d.getVar('PACKAGE_ARCHS', True).split() sdkarchs = []
@@ -69,6 +70,7 @@ python () { d.appendVar("CANADIANEXTRAOS", " linux-gnun32 linux-uclibcn32 linux-musln32") if tarch == "arm" or tarch == "armeb": d.setVar("TARGET_OS", "linux-gnueabi") + d.setVar("GNUEABI_SUFFIX", "-gnueabi") else: d.setVar("TARGET_OS", "linux")
@@ -167,6 +169,7 @@ SHLIBSWORKDIR = "${PKGDATA_DIR}/nativesdk-shlibs2" cross_canadian_bindirlinks () { for i in linux ${CANADIANEXTRAOS} do + i="$i${GNUEABI_SUFFIX}" for v in ${CANADIANEXTRAVENDOR} do d=${D}${bindir}/../${TARGET_ARCH}$v-$i
meta/recipes-devtools/gcc/libgcc-common.inc +17 -7
@@ -134,11 +134,21 @@ BASETARGET_SYS = "${TARGET_ARCH}${ORIG_TARGET_VENDOROS}" addtask extra_symlinks after do_multilib_install before do_package do_populate_sysroot fakeroot python do_extra_symlinks() { - targetsys = d.getVar('BASETARGET_SYS', True) - - if targetsys != d.getVar('TARGET_SYS', True): - dest = d.getVar('D', True) + d.getVar('libdir', True) + '/' + targetsys - src = d.getVar('TARGET_SYS', True) - if not os.path.lexists(dest) and os.path.lexists(d.getVar('D', True) + d.getVar('libdir', True)): - os.symlink(src, dest) + base_targetsys = d.getVar('BASETARGET_SYS', True) + targetsys = d.getVar('TARGET_SYS', True) + + if base_targetsys != targetsys: + dest = d.getVar('D', True) + d.getVar('libdir', True) + '/' + base_targetsys + dest_list = [dest] + # For multilib like aarch64 + arm, need 2 symlinks: + # 1) BASETARGET_SYS as usual + # 2) BASETARGET_SYS + "-gnueabi" for multilib + libce = d.getVar('LIBCEXTENSION', True) + abie = d.getVar('ABIEXTENSION', True) + if abie and libce and targetsys.endswith(libce + abie): + dest_list.append(dest + libce + abie) + src = targetsys + for dir in dest_list: + if not os.path.lexists(dir) and os.path.lexists(d.getVar('D', True) + d.getVar('libdir', True)): + os.symlink(src, dir) }
meta/recipes-devtools/gcc/libgcc.inc +1 -1
@@ -17,7 +17,7 @@ LICENSE_${PN}-dbg = "GPL-3.0-with-GCC-exception" FILES_${PN}-dev = "\ ${base_libdir}/libgcc*.so \ - ${@base_conditional('BASETARGET_SYS', '${TARGET_SYS}', '', '${libdir}/${BASETARGET_SYS}', d)} \ + ${@base_conditional('BASETARGET_SYS', '${TARGET_SYS}', '', '${libdir}/${BASETARGET_SYS}', d)}* \ ${libdir}/${TARGET_SYS}/${BINV}* \ "
Signature · 1 line
1.7.9.5
Quoted 95 lines · Robert Yang
The arm toolchain has a "-gnueabi" suffix, but aarch64 doesn't, this makes multilib sdk doesn't work, for example:
MACHINE = qemuarm64
requireconf/multilib.conf
MULTILIBS = "multilib:lib32" DEFAULTTUNE_virtclass-multilib-lib32 = "armv7at-neon"$ bitbake core-image-minimal -cpopulate_sdkThen extract SDK, the environment-setup-armv7a-vfp-neon-pokymllib32-linux-gnueabi doesn't work since:
* The CC is arm-pokymllib32-linux-gnueabi-gcc
which doesn't exist, the patch for cross-canadian.bbclass fixes problem.
* Need aarch64-poky-linux/usr/lib/arm-poky-linux-linux-gnueabi which doesn't exist, the patch for libgcc-common.inc fixes the problem.[YOCTO #8616]
Signed-off-by Robert Yang <[email protected]>--- meta/classes/cross-canadian.bbclass | 3 +++ meta/recipes-devtools/gcc/libgcc-common.inc | 24 +++++++++++++++++------- meta/recipes-devtools/gcc/libgcc.inc | 2 +- 3 files changed, 21 insertions(+), 8 deletions(-)meta/classes/cross-canadian.bbclass +3
-0@@ -18,6 +18,7 @@ PACKAGE_ARCH = "${SDK_ARCH}-${SDKPKGSUFFIX}" CANADIANEXTRAOS = "linux-uclibc linux-musl" CANADIANEXTRAVENDOR = "" MODIFYTOS ??= "1" +GNUEABI_SUFFIX = "" python () { archs = d.getVar('PACKAGE_ARCHS', True).split() sdkarchs = []@@ -69,6 +70,7 @@ python () { d.appendVar("CANADIANEXTRAOS", " linux-gnun32 linux-uclibcn32 linux-musln32") if tarch == "arm" or tarch == "armeb": d.setVar("TARGET_OS", "linux-gnueabi") + d.setVar("GNUEABI_SUFFIX", "-gnueabi") else: d.setVar("TARGET_OS", "linux")@@ -167,6 +169,7 @@ SHLIBSWORKDIR = "${PKGDATA_DIR}/nativesdk-shlibs2" cross_canadian_bindirlinks () { for i in linux ${CANADIANEXTRAOS} do + i="$i${GNUEABI_SUFFIX}" for v in ${CANADIANEXTRAVENDOR} do d=${D}${bindir}/../${TARGET_ARCH}$v-$imeta/recipes-devtools/gcc/libgcc-common.inc +17
-7@@ -134,11 +134,21 @@ BASETARGET_SYS = "${TARGET_ARCH}${ORIG_TARGET_VENDOROS}" addtask extra_symlinks after do_multilib_install before do_package do_populate_sysroot fakeroot python do_extra_symlinks() { - targetsys = d.getVar('BASETARGET_SYS', True) - - if targetsys != d.getVar('TARGET_SYS', True): - dest = d.getVar('D', True) + d.getVar('libdir', True) + '/' + targetsys - src = d.getVar('TARGET_SYS', True) - if not os.path.lexists(dest) and os.path.lexists(d.getVar('D', True) + d.getVar('libdir', True)): - os.symlink(src, dest) + base_targetsys = d.getVar('BASETARGET_SYS', True) + targetsys = d.getVar('TARGET_SYS', True) + + if base_targetsys != targetsys: + dest = d.getVar('D', True) + d.getVar('libdir', True) + '/' + base_targetsys + dest_list = [dest] + # For multilib like aarch64 + arm, need 2 symlinks: + # 1) BASETARGET_SYS as usual + # 2) BASETARGET_SYS + "-gnueabi" for multilib + libce = d.getVar('LIBCEXTENSION', True) + abie = d.getVar('ABIEXTENSION', True) + if abie and libce and targetsys.endswith(libce + abie): + dest_list.append(dest + libce + abie) + src = targetsys + for dir in dest_list: + if not os.path.lexists(dir) and os.path.lexists(d.getVar('D', True) + d.getVar('libdir', True)): + os.symlink(src, dir) }meta/recipes-devtools/gcc/libgcc.inc +0
-0
meta/recipes-devtools/gcc/libgcc.inc LICENSE_${PN}-dbg = "GPL-3.0-with-GCC-exception" · line 20
Quoted 5 lines
meta/recipes-devtools/gcc/libgcc.inc +1
-1@@ -17,7 +17,7 @@ LICENSE_${PN}-dbg = "GPL-3.0-with-GCC-exception" FILES_${PN}-dev = "\ ${base_libdir}/libgcc*.so \ - ${@base_conditional('BASETARGET_SYS', '${TARGET_SYS}', '', '${libdir}/${BASETARGET_SYS}', d)} \ + ${@base_conditional('BASETARGET_SYS', '${TARGET_SYS}', '', '${libdir}/${BASETARGET_SYS}', d)}* \
The "*" should be after ${libdir}/${BASETARGET_SYS} rather than in the end, I updated it in the repo.
// Robert
Quoted 4 lines
meta/recipes-devtools/gcc/libgcc.inc +0
-0${libdir}/${TARGET_SYS}/${BINV}* \ "
Quoted 20 lines · Robert Yang
The arm toolchain has a "-gnueabi" suffix, but aarch64 doesn't, this makes multilib sdk doesn't work, for example:
MACHINE = qemuarm64
requireconf/multilib.conf
MULTILIBS = "multilib:lib32" DEFAULTTUNE_virtclass-multilib-lib32 = "armv7at-neon"$ bitbake core-image-minimal -cpopulate_sdkThen extract SDK, the environment-setup-armv7a-vfp-neon-pokymllib32-linux-gnueabi doesn't work since:
* The CC is arm-pokymllib32-linux-gnueabi-gcc
which doesn't exist, the patch for cross-canadian.bbclass fixes problem.
* Need aarch64-poky-linux/usr/lib/arm-poky-linux-linux-gnueabi which doesn't exist, the patch for libgcc-common.inc fixes the problem.
Quoted 2 lines
[YOCTO #8616]
This breaks the allarch sstate sanity test on the autobuilder which verifies that allarch recipes don't have different hashes for a no-op change to the machine.
Ross
Quoted 24 lines · Ross
On 4 November 2015 at 13:58, Robert Yang <[email protected] <mailto:[email protected]>> wrote:
The arm toolchain has a "-gnueabi" suffix, but aarch64 doesn't, this makes multilib sdk doesn't work, for example:
MACHINE = qemuarm64
requireconf/multilib.conf
MULTILIBS = "multilib:lib32" DEFAULTTUNE_virtclass-multilib-lib32 = "armv7at-neon"$ bitbake core-image-minimal -cpopulate_sdk
Then extract SDK, the environment-setup-armv7a-vfp-neon-pokymllib32-linux-gnueabi doesn't work since:
* The CC is arm-pokymllib32-linux-gnueabi-gcc
which doesn't exist, the patch for cross-canadian.bbclass fixes problem.
* Need aarch64-poky-linux/usr/lib/arm-poky-linux-linux-gnueabi which doesn't exist, the patch for libgcc-common.inc fixes the problem.
Quoted 5 lines
[YOCTO #8616]
This breaks the allarch sstate sanity test on the autobuilder which verifies that allarch recipes don't have different hashes for a no-op change to the machine.
Sorry, I will check and update it.
// Robert
Quoted 24 lines · Ross
On 4 November 2015 at 13:58, Robert Yang <[email protected] <mailto:[email protected]>> wrote:
The arm toolchain has a "-gnueabi" suffix, but aarch64 doesn't, this makes multilib sdk doesn't work, for example:
MACHINE = qemuarm64
requireconf/multilib.conf
MULTILIBS = "multilib:lib32" DEFAULTTUNE_virtclass-multilib-lib32 = "armv7at-neon"$ bitbake core-image-minimal -cpopulate_sdk
Then extract SDK, the environment-setup-armv7a-vfp-neon-pokymllib32-linux-gnueabi doesn't work since:
* The CC is arm-pokymllib32-linux-gnueabi-gcc
which doesn't exist, the patch for cross-canadian.bbclass fixes problem.
* Need aarch64-poky-linux/usr/lib/arm-poky-linux-linux-gnueabi which doesn't exist, the patch for libgcc-common.inc fixes the problem.
Quoted 5 lines
[YOCTO #8616]
This breaks the allarch sstate sanity test on the autobuilder which verifies that allarch recipes don't have different hashes for a no-op change to the machine.
Hi Ross,
After more investigations, the different between:
MACHINE=qemux86 bitbake -Snone meta-toolchain
MACHINE=qemuarm bitbake -Snone meta-toolchain
is do_extra_symlinks' checksum, there is an ABIEXTENSION for nativesdk-libgcc-initial when qemuarm (eabi), and no "eabi" when qemux86.
But as the commit said, the "eabi" is a must for qemuarm since its compiler arm-pokymllib32-linux-gnueabi-gcc contains eabi, otherwise it doesn't work.
Maybe let the test case don't compare between qemuarm and qemux86 since arm is special ? Or do you have any other suggestions, please ?
// Robert
Quoted 43 lines · Robert Yang
Quoted 24 lines · Ross
On 4 November 2015 at 13:58, Robert Yang <[email protected] <mailto:[email protected]>> wrote:
The arm toolchain has a "-gnueabi" suffix, but aarch64 doesn't, this makes multilib sdk doesn't work, for example:
MACHINE = qemuarm64
requireconf/multilib.conf
MULTILIBS = "multilib:lib32" DEFAULTTUNE_virtclass-multilib-lib32 = "armv7at-neon"$ bitbake core-image-minimal -cpopulate_sdk
Then extract SDK, the environment-setup-armv7a-vfp-neon-pokymllib32-linux-gnueabi doesn't work since:
* The CC is arm-pokymllib32-linux-gnueabi-gcc
which doesn't exist, the patch for cross-canadian.bbclass fixes problem.
* Need aarch64-poky-linux/usr/lib/arm-poky-linux-linux-gnueabi which doesn't exist, the patch for libgcc-common.inc fixes the problem.Quoted 5 lines
[YOCTO #8616]
This breaks the allarch sstate sanity test on the autobuilder which verifies that allarch recipes don't have different hashes for a no-op change to the machine.
Hi Ross,
After more investigations, the different between:
MACHINE=qemux86 bitbake -Snone meta-toolchain
MACHINE=qemuarm bitbake -Snone meta-toolchainis
do_extra_symlinks' checksum, there is an ABIEXTENSION for nativesdk-libgcc-initial when qemuarm (eabi), and no "eabi" when qemux86.
Quoted 9 lines
But as the commit said, the "eabi" is a must for qemuarm since its compiler arm-pokymllib32-linux-gnueabi-gcc contains eabi, otherwise it doesn't work.
Maybe let the test case don't compare between qemuarm and qemux86 since arm is special ? Or do you have any other suggestions, please ?
// Robert
Ping ...