* [PATCH 0/1] cross-canadian/libgcc: fix aarch64's multilib SDK @ 2015-11-04 13:58 Robert Yang 2015-11-04 13:58 ` [PATCH 1/1] " Robert Yang 0 siblings, 1 reply; 7+ messages in thread From: Robert Yang @ 2015-11-04 13:58 UTC (permalink / raw) To: openembedded-core 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(-) -- 1.7.9.5 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 1/1] cross-canadian/libgcc: fix aarch64's multilib SDK 2015-11-04 13:58 [PATCH 0/1] cross-canadian/libgcc: fix aarch64's multilib SDK Robert Yang @ 2015-11-04 13:58 ` Robert Yang 2015-11-05 1:48 ` Robert Yang 2015-11-09 16:27 ` Burton, Ross 0 siblings, 2 replies; 7+ messages in thread From: Robert Yang @ 2015-11-04 13:58 UTC (permalink / raw) To: openembedded-core 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] Signed-off-by: Robert Yang <liezhi.yang@windriver.com> --- 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(-) diff --git a/meta/classes/cross-canadian.bbclass b/meta/classes/cross-canadian.bbclass index ea17f09..bf016de 100644 --- a/meta/classes/cross-canadian.bbclass +++ b/meta/classes/cross-canadian.bbclass @@ -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 diff --git a/meta/recipes-devtools/gcc/libgcc-common.inc b/meta/recipes-devtools/gcc/libgcc-common.inc index b09ea65..71e09d8 100644 --- a/meta/recipes-devtools/gcc/libgcc-common.inc +++ b/meta/recipes-devtools/gcc/libgcc-common.inc @@ -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) } diff --git a/meta/recipes-devtools/gcc/libgcc.inc b/meta/recipes-devtools/gcc/libgcc.inc index 95fa3f4..94cde2e 100644 --- a/meta/recipes-devtools/gcc/libgcc.inc +++ b/meta/recipes-devtools/gcc/libgcc.inc @@ -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}* \ " -- 1.7.9.5 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 1/1] cross-canadian/libgcc: fix aarch64's multilib SDK 2015-11-04 13:58 ` [PATCH 1/1] " Robert Yang @ 2015-11-05 1:48 ` Robert Yang 2015-11-09 16:27 ` Burton, Ross 1 sibling, 0 replies; 7+ messages in thread From: Robert Yang @ 2015-11-05 1:48 UTC (permalink / raw) To: openembedded-core On 11/04/2015 09:58 PM, Robert Yang wrote: > 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] > > Signed-off-by: Robert Yang <liezhi.yang@windriver.com> > --- > 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(-) > > diff --git a/meta/classes/cross-canadian.bbclass b/meta/classes/cross-canadian.bbclass > index ea17f09..bf016de 100644 > --- a/meta/classes/cross-canadian.bbclass > +++ b/meta/classes/cross-canadian.bbclass > @@ -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 > diff --git a/meta/recipes-devtools/gcc/libgcc-common.inc b/meta/recipes-devtools/gcc/libgcc-common.inc > index b09ea65..71e09d8 100644 > --- a/meta/recipes-devtools/gcc/libgcc-common.inc > +++ b/meta/recipes-devtools/gcc/libgcc-common.inc > @@ -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) > } > diff --git a/meta/recipes-devtools/gcc/libgcc.inc b/meta/recipes-devtools/gcc/libgcc.inc > index 95fa3f4..94cde2e 100644 > --- a/meta/recipes-devtools/gcc/libgcc.inc > +++ b/meta/recipes-devtools/gcc/libgcc.inc > @@ -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 > ${libdir}/${TARGET_SYS}/${BINV}* \ > " > > ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 1/1] cross-canadian/libgcc: fix aarch64's multilib SDK 2015-11-04 13:58 ` [PATCH 1/1] " Robert Yang 2015-11-05 1:48 ` Robert Yang @ 2015-11-09 16:27 ` Burton, Ross 2015-11-10 1:41 ` Robert Yang 2015-11-13 9:24 ` Robert Yang 1 sibling, 2 replies; 7+ messages in thread From: Burton, Ross @ 2015-11-09 16:27 UTC (permalink / raw) To: Robert Yang; +Cc: OE-core [-- Attachment #1: Type: text/plain, Size: 1110 bytes --] On 4 November 2015 at 13:58, Robert Yang <liezhi.yang@windriver.com> wrote: > 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] > 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. https://autobuilder.yoctoproject.org/main/builders/nightly-oe-selftest/builds/242/steps/Running%20oe-selftest/logs/stdio Ross [-- Attachment #2: Type: text/html, Size: 1943 bytes --] ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 1/1] cross-canadian/libgcc: fix aarch64's multilib SDK 2015-11-09 16:27 ` Burton, Ross @ 2015-11-10 1:41 ` Robert Yang 2015-11-13 9:24 ` Robert Yang 1 sibling, 0 replies; 7+ messages in thread From: Robert Yang @ 2015-11-10 1:41 UTC (permalink / raw) To: Burton, Ross; +Cc: OE-core On 11/10/2015 12:27 AM, Burton, Ross wrote: > > On 4 November 2015 at 13:58, Robert Yang <liezhi.yang@windriver.com > <mailto:liezhi.yang@windriver.com>> wrote: > > 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] > > > 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 > > https://autobuilder.yoctoproject.org/main/builders/nightly-oe-selftest/builds/242/steps/Running%20oe-selftest/logs/stdio > > Ross ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 1/1] cross-canadian/libgcc: fix aarch64's multilib SDK 2015-11-09 16:27 ` Burton, Ross 2015-11-10 1:41 ` Robert Yang @ 2015-11-13 9:24 ` Robert Yang 2016-01-04 2:28 ` ChenQi 1 sibling, 1 reply; 7+ messages in thread From: Robert Yang @ 2015-11-13 9:24 UTC (permalink / raw) To: Burton, Ross; +Cc: OE-core On 11/10/2015 12:27 AM, Burton, Ross wrote: > > On 4 November 2015 at 13:58, Robert Yang <liezhi.yang@windriver.com > <mailto:liezhi.yang@windriver.com>> wrote: > > 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] > > > 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 > > https://autobuilder.yoctoproject.org/main/builders/nightly-oe-selftest/builds/242/steps/Running%20oe-selftest/logs/stdio > > Ross ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 1/1] cross-canadian/libgcc: fix aarch64's multilib SDK 2015-11-13 9:24 ` Robert Yang @ 2016-01-04 2:28 ` ChenQi 0 siblings, 0 replies; 7+ messages in thread From: ChenQi @ 2016-01-04 2:28 UTC (permalink / raw) To: Robert Yang, Burton, Ross; +Cc: OE-core On 11/13/2015 05:24 PM, Robert Yang wrote: > > > On 11/10/2015 12:27 AM, Burton, Ross wrote: >> >> On 4 November 2015 at 13:58, Robert Yang <liezhi.yang@windriver.com >> <mailto:liezhi.yang@windriver.com>> wrote: >> >> 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] >> >> >> 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 > Ping ... >> >> https://autobuilder.yoctoproject.org/main/builders/nightly-oe-selftest/builds/242/steps/Running%20oe-selftest/logs/stdio >> >> >> Ross ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2016-01-04 2:29 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2015-11-04 13:58 [PATCH 0/1] cross-canadian/libgcc: fix aarch64's multilib SDK Robert Yang 2015-11-04 13:58 ` [PATCH 1/1] " Robert Yang 2015-11-05 1:48 ` Robert Yang 2015-11-09 16:27 ` Burton, Ross 2015-11-10 1:41 ` Robert Yang 2015-11-13 9:24 ` Robert Yang 2016-01-04 2:28 ` ChenQi
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox