external-csl-toolchain fixes and improvements
cover external-csl-toolchain fixes and improvements
From: Christopher Larson <[email protected]>
- Fixes the external-csl-toolchain and corresponding tcmode to be compatible with current metadata (e.g. uses current providers), and ensures it works again
- Kills the arch and version specific bits, making it work fine with a number of different versions of the CodeSourcery arm, mips, ppc, and ia32 toolchains
- Makes the packaging match up with the packaging of the internal toolchain by leveraging the eglibc packaging .inc and ensuring our other packages are named correctly
- Extracts versioning information for both the recipe and emitted packages from the external toolchain at ConfigParsed time. This code is not pretty, largely kept as is from the Mentor internal external toolchain, but it does work. A future commit or commits will clean that up.
I've tested with with the fall 2010, spring 2011, and fall 2011 releases, for the qemux86, qemuarm, qemumips, and qemuppc machines. I used buildhistory to compare the packages and image content between internal and external, ensuring that they match up with almost no differences.
The following changes since commit fba0459da7f274ae284d36b7fdbf2f9d10a52610:
distro_tracking_fields: fix the typos in the field of maintainer. (2012-01-27 09:52:00 +0000)
are available in the git repository at:
git://github.com/kergoth/oe-core external-toolchain
Christopher Larson (10):
libc-package: fix typo in LOCALETREESRC default value eglibc-package.inc: don't include debug files in -pic
binutils: fixes for build with an external csl toolchain
external-csl-toolchain: fix critical PATH manipulation bug
external-csl-toolchain: fixes for metadata changes
external-csl-toolchain: avoid the hardcoded version/prefix
external-csl-toolchain: support mips/ppc/arm
external-csl-toolchain: support ia32
external-csl-toolchain: leverage eglibc's packaging for more granular output
external-csl-toolchain: extract version info from the toolchain
meta/classes/libc-package.bbclass | 6 +- meta/conf/distro/include/csl-versions.inc | 105 +++++++++++++++ meta/conf/distro/include/tcmode-external-csl.inc | 112 ++++++++++++++++ .../distro/include/tcmode-external-csl2008q3.inc | 28 ---- meta/recipes-core/eglibc/eglibc-package.inc | 2 +- meta/recipes-core/meta/external-csl-toolchain.bb | 140 ++++++++++++++++++++ .../meta/external-csl-toolchain_2008q3-72.bb | 64 --------- meta/recipes-devtools/binutils/binutils.inc | 5 +- 8 files changed, 365 insertions(+), 97 deletions(-) create mode 100644 meta/conf/distro/include/csl-versions.inc create mode 100644 meta/conf/distro/include/tcmode-external-csl.inc delete mode 100644 meta/conf/distro/include/tcmode-external-csl2008q3.inc create mode 100644 meta/recipes-core/meta/external-csl-toolchain.bb delete mode 100644 meta/recipes-core/meta/external-csl-toolchain_2008q3-72.bb
Christopher Larson (10):
libc-package: fix typo in LOCALETREESRC default value eglibc-package.inc: don't include debug files in -pic
binutils: fixes for build with an external csl toolchain
external-csl-toolchain: fix critical PATH manipulation bug
external-csl-toolchain: fixes for metadata changes
external-csl-toolchain: avoid the hardcoded version/prefix
external-csl-toolchain: support mips/ppc/arm
external-csl-toolchain: support ia32
external-csl-toolchain: leverage eglibc's packaging for more granular
output
external-csl-toolchain: extract version info from the toolchain
meta/classes/libc-package.bbclass | 6 +- meta/conf/distro/include/csl-versions.inc | 105 +++++++++++++++ meta/conf/distro/include/tcmode-external-csl.inc | 112 ++++++++++++++++ .../distro/include/tcmode-external-csl2008q3.inc | 28 ---- meta/recipes-core/eglibc/eglibc-package.inc | 2 +- meta/recipes-core/meta/external-csl-toolchain.bb | 140 ++++++++++++++++++++ .../meta/external-csl-toolchain_2008q3-72.bb | 64 --------- meta/recipes-devtools/binutils/binutils.inc | 5 +- 8 files changed, 365 insertions(+), 97 deletions(-) create mode 100644 meta/conf/distro/include/csl-versions.inc create mode 100644 meta/conf/distro/include/tcmode-external-csl.inc delete mode 100644 meta/conf/distro/include/tcmode-external-csl2008q3.inc create mode 100644 meta/recipes-core/meta/external-csl-toolchain.bb delete mode 100644 meta/recipes-core/meta/external-csl-toolchain_2008q3-72.bb
Signature · 1 line
1.7.8.rc4
PATCH 1/10 libc-package: fix typo in LOCALETREESRC default value
From: Christopher Larson <[email protected]>
--- meta/classes/libc-package.bbclass | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
meta/classes/libc-package.bbclass +1 -1
@@ -80,7 +80,7 @@ rm -rf ${TMP_LOCALE} TMP_LOCALE="/tmp/locale${libdir}/locale" -LOCALETREESRC ?= "{PKGD}" +LOCALETREESRC ?= "${PKGD}" do_prep_locale_tree() { treedir=${WORKDIR}/locale-tree
Signature · 1 line
1.7.8.rc4
PATCH 2/10 eglibc-package.inc: don't include debug files in -pic
In reply to Christopher LarsonFrom: Christopher Larson <[email protected]>
--- meta/recipes-core/eglibc/eglibc-package.inc | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
meta/recipes-core/eglibc/eglibc-package.inc +1 -1
@@ -42,7 +42,7 @@ FILES_libcidn${PKGSUFFIX} = "${base_libdir}/libcidn-*.so ${base_libdir}/libcidn. FILES_libmemusage${PKGSUFFIX} = "${base_libdir}/libmemusage.so" FILES_eglibc-extra-nss${PKGSUFFIX} = "${base_libdir}/libnss_*-*.so ${base_libdir}/libnss_*.so.*" FILES_sln${PKGSUFFIX} = "/sbin/sln" -FILES_${PN}-pic = "${libdir}/*_pic.a ${libdir}/*_pic.map ${libdir}/libc_pic/" +FILES_${PN}-pic = "${libdir}/*_pic.a ${libdir}/*_pic.map ${libdir}/libc_pic/*.o" FILES_libsotruss${PKGSUFFIX} = "${libdir}/audit/sotruss-lib.so" FILES_${PN}-dev_append += "${bindir}/rpcgen ${libdir}/*_nonshared.a \ ${base_libdir}/*_nonshared.a ${base_libdir}/*.o ${datadir}/aclocal"
Signature · 1 line
1.7.8.rc4
Re: [PATCH 02/10] eglibc-package.inc: don't include debug files in -pic
Quoted 12 lines · Christopher Larson
From: Christopher Larson <[email protected]>
Signed-off-by Christopher Larson <[email protected]>--- meta/recipes-core/eglibc/eglibc-package.inc | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)meta/recipes-core/eglibc/eglibc-package.inc +0
-0
meta/recipes-core/eglibc/eglibc-package.inc FILES_libcidn${PKGSUFFIX} = "${base_libdir}/libcidn-*.so ${base_libdir}/libcidn. · line 45
Quoted 5 lines
meta/recipes-core/eglibc/eglibc-package.inc +1
-1@@ -42,7 +42,7 @@ FILES_libcidn${PKGSUFFIX} = "${base_libdir}/libcidn-*.so ${base_libdir}/libcidn. FILES_libmemusage${PKGSUFFIX} = "${base_libdir}/libmemusage.so" FILES_eglibc-extra-nss${PKGSUFFIX} = "${base_libdir}/libnss_*-*.so ${base_libdir}/libnss_*.so.*" FILES_sln${PKGSUFFIX} = "/sbin/sln" -FILES_${PN}-pic = "${libdir}/*_pic.a ${libdir}/*_pic.map ${libdir}/libc_pic/" +FILES_${PN}-pic = "${libdir}/*_pic.a ${libdir}/*_pic.map ${libdir}/libc_pic/*.o"
are there just .o in there which are left ? not *.os ?
Quoted 11 lines
meta/recipes-core/eglibc/eglibc-package.inc +0
-0FILES_libsotruss${PKGSUFFIX} = "${libdir}/audit/sotruss-lib.so" FILES_${PN}-dev_append += "${bindir}/rpcgen ${libdir}/*_nonshared.a \ ${base_libdir}/*_nonshared.a ${base_libdir}/*.o ${datadir}/aclocal"Signature · 7 lines
1.7.8.rc4 _______________________________________________ Openembedded-core mailing list [email protected] http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core
Signature · 1 line
-Khem
Re: [PATCH 02/10] eglibc-package.inc: don't include debug files in -pic
Quoted 8 lines · Khem Raj
Quoted 7 lines · Christopher Larson
From: Christopher Larson <[email protected]>
Signed-off-by Christopher Larson <[email protected]>---
meta/recipes-core/eglibc/eglibc-package.inc | 2 +-1 files changed, 1 insertions(+), 1 deletions(-)
Quoted 12 lines
meta/recipes-core/eglibc/eglibc-package.inc FILES_libcidn${PKGSUFFIX} = "${base_libdir}/libcidn-*.so ${base_libdir}/libcidn. · line 45
Quoted 10 lines
meta/recipes-core/eglibc/eglibc-package.inc +0
-0@@ -42,7 +42,7 @@ FILES_libcidn${PKGSUFFIX} = "${base_libdir}/libcidn-*.so ${base_libdir}/libcidn.FILES_libmemusage${PKGSUFFIX} = "${base_libdir}/libmemusage.so" FILES_eglibc-extra-nss${PKGSUFFIX} = "${base_libdir}/libnss_*-*.so ${base_libdir}/libnss_*.so.*" FILES_sln${PKGSUFFIX} = "
/sbin/sln"meta/recipes-core/eglibc/eglibc-package.inc +1
-1-FILES_${PN}-pic = "${libdir}/*_pic.a ${libdir}/*_pic.map ${libdir}/libc_pic/" +FILES_${PN}-pic = "${libdir}/*_pic.a ${libdir}/*_pic.map ${libdir}/libc_pic/*.o"are there just .o in there which are left ? not *.os ?
I don't see any .os in libc_pic in either the packages from the eglibc recipe from oe-core or the external csl toolchain.
Signature · 1 line
Christopher Larson
PATCH 3/10 binutils: fixes for build with an external csl toolchain
In reply to Christopher LarsonFrom: Christopher Larson <[email protected]>
--- meta/recipes-devtools/binutils/binutils.inc | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-)
meta/recipes-devtools/binutils/binutils.inc +3 -2
@@ -51,6 +51,7 @@ B = "${S}/build.${HOST_SYS}.${TARGET_SYS}" EXTRA_OECONF = "--program-prefix=${TARGET_PREFIX} \ --enable-install-libbfd \ --enable-shared \ + --disable-werror \ ${@base_contains('DISTRO_FEATURES', 'multiarch', '--enable-64-bit-bfd', '', d)}" EXTRA_OECONF_virtclass-native = "--enable-target=all --enable-64-bit-bfd --enable-install-libbfd"
@@ -113,11 +114,11 @@ do_install () { cd ${D}${bindir} # Symlinks for ease of running these on the native target - for p in ${TARGET_SYS}-* ; do + for p in ${TARGET_PREFIX}* ; do ln -sf $p `echo $p | sed -e s,${TARGET_PREFIX},,` done - rm ${D}${bindir}/ar ${D}${bindir}/strings + rm -f ${D}${bindir}/ar ${D}${bindir}/strings oe_multilib_header bfd.h }
Signature · 1 line
1.7.8.rc4
Re: [PATCH 03/10] binutils: fixes for build with an external csl toolchain
Quoted 12 lines · Christopher Larson
From: Christopher Larson <[email protected]>
Signed-off-by Christopher Larson <[email protected]>--- meta/recipes-devtools/binutils/binutils.inc | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-)meta/recipes-devtools/binutils/binutils.inc +0
-0
meta/recipes-devtools/binutils/binutils.inc B = "${S}/build.${HOST_SYS}.${TARGET_SYS}" · line 54
Quoted 4 lines
meta/recipes-devtools/binutils/binutils.inc +1
-0@@ -51,6 +51,7 @@ B = "${S}/build.${HOST_SYS}.${TARGET_SYS}" EXTRA_OECONF = "--program-prefix=${TARGET_PREFIX} \ --enable-install-libbfd \ --enable-shared \ + --disable-werror \
I specifically wanted to avoid this option but I guess we have to have it to support wide versions of gcc.
Quoted 25 lines
meta/recipes-devtools/binutils/binutils.inc +2
-2${@base_contains('DISTRO_FEATURES', 'multiarch', '--enable-64-bit-bfd', '', d)}" EXTRA_OECONF_virtclass-native = "--enable-target=all --enable-64-bit-bfd --enable-install-libbfd"@@ -113,11 +114,11 @@ do_install () { cd ${D}${bindir} # Symlinks for ease of running these on the native target - for p in ${TARGET_SYS}-* ; do + for p in ${TARGET_PREFIX}* ; do ln -sf $p `echo $p | sed -e s,${TARGET_PREFIX},,` done - rm ${D}${bindir}/ar ${D}${bindir}/strings + rm -f ${D}${bindir}/ar ${D}${bindir}/strings oe_multilib_header bfd.h }Signature · 7 lines
1.7.8.rc4 _______________________________________________ Openembedded-core mailing list [email protected] http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core
Signature · 1 line
-Khem
Re: [PATCH 03/10] binutils: fixes for build with an external csl toolchain
Quoted 8 lines · Khem Raj
Quoted 7 lines · Christopher Larson
From: Christopher Larson <[email protected]>
Signed-off-by Christopher Larson <[email protected]>---
meta/recipes-devtools/binutils/binutils.inc | 5 +++--1 files changed, 3 insertions(+), 2 deletions(-)
Quoted 12 lines
meta/recipes-devtools/binutils/binutils.inc B = "${S}/build.${HOST_SYS}.${TARGET_SYS}" · line 54
Quoted 9 lines
meta/recipes-devtools/binutils/binutils.inc +1
-0@@ -51,6 +51,7 @@ B = "${S}/build.${HOST_SYS}.${TARGET_SYS}" EXTRA_OECONF = "--program-prefix=${TARGET_PREFIX} \ --enable-install-libbfd \ --enable-shared \ + --disable-werror \I specifically wanted to avoid this option but I guess we have to have it to support wide versions of gcc.
Yeah, it'd be nice if it wasn't needed, but sadly it is for some.
Signature · 1 line
Christopher Larson
PATCH 4/10 external-csl-toolchain: fix critical PATH manipulation bug
In reply to Christopher LarsonFrom: Christopher Larson <[email protected]>
--- .../distro/include/tcmode-external-csl2008q3.inc | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
meta/conf/distro/include/tcmode-external-csl2008q3.inc +1 -1
@@ -6,7 +6,7 @@ TARGET_VENDOR = "-none" EXTERNAL_TOOLCHAIN = "/usr/local/csl/arm-2008q3" -PATH =. ":${EXTERNAL_TOOLCHAIN}/bin:" +PATH =. "${EXTERNAL_TOOLCHAIN}/bin:" PREFERRED_PROVIDER_linux-libc-headers = "external-csl-toolchain" PREFERRED_PROVIDER_virtual/arm-none-linux-gnueabi-gcc = "external-csl-toolchain"
Signature · 1 line
1.7.8.rc4
PATCH 5/10 external-csl-toolchain: fixes for metadata changes
In reply to Christopher LarsonFrom: Christopher Larson <[email protected]>
These allow the recipe to build again:
- add compilerlibs, g++, libgcc to the provides
- add linux-libc-headers-dev to the packages
- in libc-package, only sed the ldd.bash.in file if it exists, as the external toolchain is using that class as well
- shift the inherit location of the libc classes, as they were overriding the recipe's do_install
- use ?= for EXTERNAL_TOOLCHAIN, so the user can set it
--- meta/classes/libc-package.bbclass | 4 +++- .../distro/include/tcmode-external-csl2008q3.inc | 7 ++++++- .../meta/external-csl-toolchain_2008q3-72.bb | 16 +++++++++------- 3 files changed, 18 insertions(+), 9 deletions(-)
meta/classes/libc-package.bbclass +3 -1
@@ -40,7 +40,9 @@ python __anonymous () { OVERRIDES_append = ":${TARGET_ARCH}-${TARGET_OS}" do_configure_prepend() { - sed -e "s#@BASH@#/bin/sh#" -i ${S}/elf/ldd.bash.in + if [ -e ${S}/elf/ldd.bash.in ]; then + sed -e "s#@BASH@#/bin/sh#" -i ${S}/elf/ldd.bash.in + fi }
meta/conf/distro/include/tcmode-external-csl2008q3.inc +6 -1
@@ -4,22 +4,27 @@ TARGET_VENDOR = "-none" -EXTERNAL_TOOLCHAIN = "/usr/local/csl/arm-2008q3" +EXTERNAL_TOOLCHAIN ?= "/usr/local/csl/arm-2008q3" PATH =. "${EXTERNAL_TOOLCHAIN}/bin:" PREFERRED_PROVIDER_linux-libc-headers = "external-csl-toolchain" +PREFERRED_PROVIDER_linux-libc-headers-dev = "external-csl-toolchain" PREFERRED_PROVIDER_virtual/arm-none-linux-gnueabi-gcc = "external-csl-toolchain" PREFERRED_PROVIDER_virtual/arm-none-linux-gnueabi-gcc-initial = "external-csl-toolchain" PREFERRED_PROVIDER_virtual/arm-none-linux-gnueabi-gcc-intermediate = "external-csl-toolchain" +PREFERRED_PROVIDER_virtual/arm-none-linux-gnueabi-g++ = "external-csl-toolchain" PREFERRED_PROVIDER_virtual/arm-none-linux-gnueabi-binutils = "external-csl-toolchain" PREFERRED_PROVIDER_virtual/arm-none-linux-gnueabi-libc-for-gcc = "external-csl-toolchain" +PREFERRED_PROVIDER_virtual/arm-none-linux-gnueabi-compilerlibs = "external-csl-toolchain" +PREFERRED_PROVIDER_libgcc = "external-csl-toolchain" PREFERRED_PROVIDER_virtual/libc = "external-csl-toolchain" PREFERRED_PROVIDER_virtual/libintl = "external-csl-toolchain" PREFERRED_PROVIDER_virtual/libiconv = "external-csl-toolchain" PREFERRED_PROVIDER_glibc-thread-db = "external-csl-toolchain" PREFERRED_PROVIDER_virtual/linux-libc-headers = "external-csl-toolchain" + PREFERRED_VERSION_external-csl-toolchain = "2008q3-72" TARGET_CPPFLAGS_prepend = " -isystem${EXTERNAL_TOOLCHAIN}/${TARGET_SYS}/include "
meta/recipes-core/meta/external-csl-toolchain_2008q3-72.bb +9 -7
@@ -1,7 +1,12 @@ +inherit libc-common +inherit libc-package + INHIBIT_DEFAULT_DEPS = "1" # License applies to this recipe code, not the toolchain itself LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;md5=3f40d7994397109285ec7b81fdeb3b58 \ + file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420" PROVIDES = "\ linux-libc-headers \
@@ -11,21 +16,22 @@ PROVIDES = "\ virtual/arm-none-linux-gnueabi-gcc-intermediate \ virtual/arm-none-linux-gnueabi-binutils \ virtual/arm-none-linux-gnueabi-libc-for-gcc \ + virtual/arm-none-linux-gnueabi-compilerlibs \ virtual/libc \ virtual/libintl \ virtual/libiconv \ glibc-thread-db \ + libgcc \ virtual/linux-libc-headers " RPROVIDES = "glibc-utils libsegfault glibc-thread-db" PACKAGES_DYNAMIC = "glibc-gconv-*" -PR = "r1" +PR = "r2" #SRC_URI = "http://www.codesourcery.com/public/gnu_toolchain/arm-none-linux-gnueabi/arm-${PV}-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2" SRC_URI = "file://SUPPORTED" do_install() { - echo "EXTERNAL_TOOLCHAIN is ${EXTERNAL_TOOLCHAIN}" install -d ${D}${sysconfdir} ${D}${bindir} ${D}${sbindir} ${D}${base_bindir} ${D}${libdir} install -d ${D}${base_libdir} ${D}${base_sbindir} ${D}${datadir}
@@ -40,10 +46,7 @@ do_install() { GLIBC_INTERNAL_USE_BINARY_LOCALE ?= "compile" -inherit libc-common -inherit libc-package - -PACKAGES += "libgcc libgcc-dev libstdc++ libstdc++-dev linux-libc-headers" +PACKAGES += "libgcc libgcc-dev libstdc++ libstdc++-dev linux-libc-headers linux-libc-headers-dev" FILES_libgcc = "${base_libdir}/libgcc_s.so.1" FILES_libgcc-dev = "${base_libdir}/libgcc_s.so" FILES_libstdc++ = "${libdir}/libstdc++.so.*"
@@ -61,4 +64,3 @@ FILES_linux-libc-headers = "${includedir}/asm* \ ${includedir}/sound \ ${includedir}/video \ " -
Signature · 1 line
1.7.8.rc4
PATCH 6/10 external-csl-toolchain: avoid the hardcoded version/prefix
In reply to Christopher LarsonFrom: Christopher Larson <[email protected]>
---
...ernal-csl2008q3.inc => tcmode-external-csl.inc} | 21 +++++++----------
...hain_2008q3-72.bb => external-csl-toolchain.bb} | 24 ++++++++++----------
2 files changed, 21 insertions(+), 24 deletions(-)
rename meta/conf/distro/include/{tcmode-external-csl2008q3.inc => tcmode-external-csl.inc} (51%)
rename meta/recipes-core/meta/{external-csl-toolchain_2008q3-72.bb => external-csl-toolchain.bb} (67%)meta/conf/distro/include/tcmode-external-csl.inc renamed from meta/conf/distro/include/tcmode-external-csl2008q3.inc +9 -12
@@ -1,22 +1,22 @@ # -# Configuration to use external CSL 2008q3-72 toolchain (ARM EABI) +# Configuration to use external CSL toolchain # TARGET_VENDOR = "-none" -EXTERNAL_TOOLCHAIN ?= "/usr/local/csl/arm-2008q3" +EXTERNAL_TOOLCHAIN ?= "/usr/local/csl/${TARGET_ARCH}" PATH =. "${EXTERNAL_TOOLCHAIN}/bin:" PREFERRED_PROVIDER_linux-libc-headers = "external-csl-toolchain" PREFERRED_PROVIDER_linux-libc-headers-dev = "external-csl-toolchain" -PREFERRED_PROVIDER_virtual/arm-none-linux-gnueabi-gcc = "external-csl-toolchain" -PREFERRED_PROVIDER_virtual/arm-none-linux-gnueabi-gcc-initial = "external-csl-toolchain" -PREFERRED_PROVIDER_virtual/arm-none-linux-gnueabi-gcc-intermediate = "external-csl-toolchain" -PREFERRED_PROVIDER_virtual/arm-none-linux-gnueabi-g++ = "external-csl-toolchain" -PREFERRED_PROVIDER_virtual/arm-none-linux-gnueabi-binutils = "external-csl-toolchain" -PREFERRED_PROVIDER_virtual/arm-none-linux-gnueabi-libc-for-gcc = "external-csl-toolchain" -PREFERRED_PROVIDER_virtual/arm-none-linux-gnueabi-compilerlibs = "external-csl-toolchain" +PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc = "external-csl-toolchain" +PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc-initial = "external-csl-toolchain" +PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc-intermediate = "external-csl-toolchain" +PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}g++ = "external-csl-toolchain" +PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}binutils = "external-csl-toolchain" +PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}libc-for-gcc = "external-csl-toolchain" +PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}compilerlibs = "external-csl-toolchain" PREFERRED_PROVIDER_libgcc = "external-csl-toolchain" PREFERRED_PROVIDER_virtual/libc = "external-csl-toolchain" PREFERRED_PROVIDER_virtual/libintl = "external-csl-toolchain"
@@ -24,9 +24,6 @@ PREFERRED_PROVIDER_virtual/libiconv = "external-csl-toolchain" PREFERRED_PROVIDER_glibc-thread-db = "external-csl-toolchain" PREFERRED_PROVIDER_virtual/linux-libc-headers = "external-csl-toolchain" - -PREFERRED_VERSION_external-csl-toolchain = "2008q3-72" - TARGET_CPPFLAGS_prepend = " -isystem${EXTERNAL_TOOLCHAIN}/${TARGET_SYS}/include " TARGET_LDFLAGS_prepend = " -L${EXTERNAL_TOOLCHAIN}/${TARGET_SYS}/lib -Wl,-rpath-link,${EXTERNAL_TOOLCHAIN}/${TARGET_SYS}/lib "
meta/recipes-core/meta/external-csl-toolchain.bb renamed from meta/recipes-core/meta/external-csl-toolchain_2008q3-72.bb +12 -12
@@ -10,13 +10,13 @@ LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;md5=3f40d7994397109285ec7b81fdeb3 PROVIDES = "\ linux-libc-headers \ - virtual/arm-none-linux-gnueabi-gcc \ - virtual/arm-none-linux-gnueabi-g++ \ - virtual/arm-none-linux-gnueabi-gcc-initial \ - virtual/arm-none-linux-gnueabi-gcc-intermediate \ - virtual/arm-none-linux-gnueabi-binutils \ - virtual/arm-none-linux-gnueabi-libc-for-gcc \ - virtual/arm-none-linux-gnueabi-compilerlibs \ + virtual/${TARGET_PREFIX}gcc \ + virtual/${TARGET_PREFIX}g++ \ + virtual/${TARGET_PREFIX}gcc-initial \ + virtual/${TARGET_PREFIX}gcc-intermediate \ + virtual/${TARGET_PREFIX}binutils \ + virtual/${TARGET_PREFIX}libc-for-gcc \ + virtual/${TARGET_PREFIX}compilerlibs \ virtual/libc \ virtual/libintl \ virtual/libiconv \
@@ -27,7 +27,7 @@ RPROVIDES = "glibc-utils libsegfault glibc-thread-db" PACKAGES_DYNAMIC = "glibc-gconv-*" PR = "r2" -#SRC_URI = "http://www.codesourcery.com/public/gnu_toolchain/arm-none-linux-gnueabi/arm-${PV}-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2" +#SRC_URI = "http://www.codesourcery.com/public/gnu_toolchain/${TARGET_SYS}/arm-${PV}-${TARGET_PREFIX}i686-pc-linux-gnu.tar.bz2" SRC_URI = "file://SUPPORTED"
@@ -35,10 +35,10 @@ do_install() { install -d ${D}${sysconfdir} ${D}${bindir} ${D}${sbindir} ${D}${base_bindir} ${D}${libdir} install -d ${D}${base_libdir} ${D}${base_sbindir} ${D}${datadir} - cp -a ${EXTERNAL_TOOLCHAIN}/arm-none-linux-gnueabi/libc/lib/* ${D}${base_libdir} - cp -a ${EXTERNAL_TOOLCHAIN}/arm-none-linux-gnueabi/libc/etc/* ${D}${sysconfdir} - cp -a ${EXTERNAL_TOOLCHAIN}/arm-none-linux-gnueabi/libc/sbin/* ${D}${base_sbindir} - cp -a ${EXTERNAL_TOOLCHAIN}/arm-none-linux-gnueabi/libc/usr/* ${D}/usr + cp -a ${EXTERNAL_TOOLCHAIN}/${TARGET_SYS}/libc/lib/* ${D}${base_libdir} + cp -a ${EXTERNAL_TOOLCHAIN}/${TARGET_SYS}/libc/etc/* ${D}${sysconfdir} + cp -a ${EXTERNAL_TOOLCHAIN}/${TARGET_SYS}/libc/sbin/* ${D}${base_sbindir} + cp -a ${EXTERNAL_TOOLCHAIN}/${TARGET_SYS}/libc/usr/* ${D}/usr sed -i -e "s# /lib# ../../lib#g" -e "s# /usr/lib# .#g" ${D}${libdir}/libc.so sed -i -e "s# /lib# ../../lib#g" -e "s# /usr/lib# .#g" ${D}${libdir}/libpthread.so
Signature · 1 line
1.7.8.rc4
PATCH 7/10 external-csl-toolchain: support mips/ppc/arm
In reply to Christopher LarsonFrom: Christopher Larson <[email protected]>
- Rather than adjusting TARGET_VENDOR, which results in our TARGET_SYS matching the external toolchain, override TARGET_PREFIX to match external, and leave TARGET_SYS alone
- Grab the optimized files out of the toolchain if available
- Create a symlink in sysroot to ensure the sysroot layout matches toolchain expectations (optimized files in a subdir)
--- meta/conf/distro/include/tcmode-external-csl.inc | 27 +++++++++++++++++- meta/recipes-core/meta/external-csl-toolchain.bb | 32 +++++++++++++++++----- 2 files changed, 50 insertions(+), 9 deletions(-)
meta/conf/distro/include/tcmode-external-csl.inc +25 -2
@@ -2,12 +2,20 @@ # Configuration to use external CSL toolchain # -TARGET_VENDOR = "-none" - EXTERNAL_TOOLCHAIN ?= "/usr/local/csl/${TARGET_ARCH}" PATH =. "${EXTERNAL_TOOLCHAIN}/bin:" +CSL_TARGET_SYS_powerpc = "powerpc-linux-gnu" +CSL_TARGET_SYS_powerpc64 = "powerpc-linux-gnu" +CSL_TARGET_SYS_arm = "arm-none-linux-gnueabi" +CSL_TARGET_SYS_mips = "mips-linux-gnu" +CSL_TARGET_SYS_mipsel = "mips-linux-gnu" +CSL_TARGET_SYS_mips64 = "mips-linux-gnu" +CSL_TARGET_SYS = "${TARGET_SYS}" + +TARGET_PREFIX = "${CSL_TARGET_SYS}-" + PREFERRED_PROVIDER_linux-libc-headers = "external-csl-toolchain" PREFERRED_PROVIDER_linux-libc-headers-dev = "external-csl-toolchain" PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc = "external-csl-toolchain"
@@ -28,3 +36,18 @@ TARGET_CPPFLAGS_prepend = " -isystem${EXTERNAL_TOOLCHAIN}/${TARGET_SYS}/include TARGET_LDFLAGS_prepend = " -L${EXTERNAL_TOOLCHAIN}/${TARGET_SYS}/lib -Wl,-rpath-link,${EXTERNAL_TOOLCHAIN}/${TARGET_SYS}/lib " TOOLCHAIN_OPTIONS = " --sysroot=${STAGING_DIR_HOST}" + +# Translate to CodeSourcery's names for their optimized files in the toolchain +def csl_target_core(d): + coredata = { + 'armv7a-vfp-neon': 'armv7-a-neon', + 'mips': 'mips32', + 'mipsel': 'el', + 'ppce500': 'te500v1', + 'ppce500mc': 'te500mc', + 'ppce500v2': 'te500v2', + 'ppce600': 'te600' + } + return coredata.get(d.getVar('TUNE_PKGARCH', True), '') + +CSL_TARGET_CORE = "${@csl_target_core(d)}"
meta/recipes-core/meta/external-csl-toolchain.bb +25 -7
@@ -25,25 +25,43 @@ PROVIDES = "\ virtual/linux-libc-headers " RPROVIDES = "glibc-utils libsegfault glibc-thread-db" PACKAGES_DYNAMIC = "glibc-gconv-*" -PR = "r2" +PR = "r3" -#SRC_URI = "http://www.codesourcery.com/public/gnu_toolchain/${TARGET_SYS}/arm-${PV}-${TARGET_PREFIX}i686-pc-linux-gnu.tar.bz2" +#SRC_URI = "http://www.codesourcery.com/public/gnu_toolchain/${CSL_TARGET_SYS}/arm-${PV}-${TARGET_PREFIX}i686-pc-linux-gnu.tar.bz2" SRC_URI = "file://SUPPORTED" do_install() { install -d ${D}${sysconfdir} ${D}${bindir} ${D}${sbindir} ${D}${base_bindir} ${D}${libdir} - install -d ${D}${base_libdir} ${D}${base_sbindir} ${D}${datadir} + install -d ${D}${base_libdir} ${D}${base_sbindir} ${D}${datadir} ${D}/usr - cp -a ${EXTERNAL_TOOLCHAIN}/${TARGET_SYS}/libc/lib/* ${D}${base_libdir} - cp -a ${EXTERNAL_TOOLCHAIN}/${TARGET_SYS}/libc/etc/* ${D}${sysconfdir} - cp -a ${EXTERNAL_TOOLCHAIN}/${TARGET_SYS}/libc/sbin/* ${D}${base_sbindir} - cp -a ${EXTERNAL_TOOLCHAIN}/${TARGET_SYS}/libc/usr/* ${D}/usr + if [ -d ${EXTERNAL_TOOLCHAIN}/${CSL_TARGET_SYS}/libc/${CSL_TARGET_CORE} ]; then + cp -a ${EXTERNAL_TOOLCHAIN}/${CSL_TARGET_SYS}/libc/${CSL_TARGET_CORE}/lib/. ${D}${base_libdir} + cp -a ${EXTERNAL_TOOLCHAIN}/${CSL_TARGET_SYS}/libc/${CSL_TARGET_CORE}/etc/. ${D}${sysconfdir} + cp -a ${EXTERNAL_TOOLCHAIN}/${CSL_TARGET_SYS}/libc/${CSL_TARGET_CORE}/sbin/. ${D}${base_sbindir} + if [ ! -e ${EXTERNAL_TOOLCHAIN}/${CSL_TARGET_SYS}/libc/${CSL_TARGET_CORE}/usr/include ]; then + cp -a ${EXTERNAL_TOOLCHAIN}/${CSL_TARGET_SYS}/libc/usr/include ${D}/usr/ + fi + cp -a ${EXTERNAL_TOOLCHAIN}/${CSL_TARGET_SYS}/libc/${CSL_TARGET_CORE}/usr/. ${D}/usr/ + else + cp -a ${EXTERNAL_TOOLCHAIN}/${CSL_TARGET_SYS}/libc/lib/. ${D}${base_libdir} + cp -a ${EXTERNAL_TOOLCHAIN}/${CSL_TARGET_SYS}/libc/etc/. ${D}${sysconfdir} + cp -a ${EXTERNAL_TOOLCHAIN}/${CSL_TARGET_SYS}/libc/sbin/. ${D}${base_sbindir} + cp -a ${EXTERNAL_TOOLCHAIN}/${CSL_TARGET_SYS}/libc/usr/. ${D}/usr/ + fi sed -i -e "s# /lib# ../../lib#g" -e "s# /usr/lib# .#g" ${D}${libdir}/libc.so sed -i -e "s# /lib# ../../lib#g" -e "s# /usr/lib# .#g" ${D}${libdir}/libpthread.so } +SYSROOT_PREPROCESS_FUNCS += "external_toolchain_sysroot_adjust" +external_toolchain_sysroot_adjust() { + if [ -n "${CSL_TARGET_CORE}" ]; then + rm -f ${SYSROOT_DESTDIR}/${CSL_TARGET_CORE} + ln -s . ${SYSROOT_DESTDIR}/${CSL_TARGET_CORE} + fi +} + GLIBC_INTERNAL_USE_BINARY_LOCALE ?= "compile" PACKAGES += "libgcc libgcc-dev libstdc++ libstdc++-dev linux-libc-headers linux-libc-headers-dev"
Signature · 1 line
1.7.8.rc4
Re: [PATCH 07/10] external-csl-toolchain: support mips/ppc/arm
Quoted 21 lines · Christopher Larson
From: Christopher Larson <[email protected]>
- Rather than adjusting
TARGET_VENDOR, which results in ourTARGET_SYSmatching the external toolchain, overrideTARGET_PREFIXto match external, and leaveTARGET_SYSalone
- Grab the optimized files out of the toolchain if available
- Create a symlink in sysroot to ensure the sysroot layout matches toolchain expectations (optimized files in a subdir)Signed-off-by Christopher Larson <[email protected]>--- meta/conf/distro/include/tcmode-external-csl.inc | 27 +++++++++++++++++- meta/recipes-core/meta/external-csl-toolchain.bb | 32 +++++++++++++++++----- 2 files changed, 50 insertions(+), 9 deletions(-)meta/conf/distro/include/tcmode-external-csl.inc +0
-0@@ -2,12 +2,20 @@ # Configuration to use external CSL toolchain
meta/conf/distro/include/tcmode-external-csl.inc line 10
Quoted 10 lines
meta/conf/distro/include/tcmode-external-csl.inc +2
-2# -TARGET_VENDOR = "-none" - EXTERNAL_TOOLCHAIN ?= "/usr/local/csl/${TARGET_ARCH}" PATH =. "${EXTERNAL_TOOLCHAIN}/bin:" +CSL_TARGET_SYS_powerpc = "powerpc-linux-gnu" +CSL_TARGET_SYS_powerpc64 = "powerpc-linux-gnu"
hmm is it using powerpc-linux-gnu canonical name to do both ppc32 and ppc64
meta/conf/distro/include/tcmode-external-csl.inc line 14
Quoted 6 lines
meta/conf/distro/include/tcmode-external-csl.inc +4
-0+CSL_TARGET_SYS_arm = "arm-none-linux-gnueabi" +CSL_TARGET_SYS_mips = "mips-linux-gnu" +CSL_TARGET_SYS_mipsel = "mips-linux-gnu" +CSL_TARGET_SYS_mips64 = "mips-linux-gnu"
same as above
Quoted 89 lines
meta/conf/distro/include/tcmode-external-csl.inc +4
-0+CSL_TARGET_SYS = "${TARGET_SYS}" + +TARGET_PREFIX = "${CSL_TARGET_SYS}-" + PREFERRED_PROVIDER_linux-libc-headers = "external-csl-toolchain"PREFERRED_PROVIDER_linux-libc-headers-dev = "external-csl-toolchain" PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc = "external-csl-toolchain"
meta/conf/distro/include/tcmode-external-csl.inc +15
-0@@ -28,3 +36,18 @@ TARGET_CPPFLAGS_prepend = " -isystem${EXTERNAL_TOOLCHAIN}/${TARGET_SYS}/include TARGET_LDFLAGS_prepend = " -L${EXTERNAL_TOOLCHAIN}/${TARGET_SYS}/lib -Wl,-rpath-link,${EXTERNAL_TOOLCHAIN}/${TARGET_SYS}/lib " TOOLCHAIN_OPTIONS = " --sysroot=${STAGING_DIR_HOST}" + +# Translate to CodeSourcery's names for their optimized files in the toolchain +def csl_target_core(d): + coredata = { + 'armv7a-vfp-neon': 'armv7-a-neon', + 'mips': 'mips32', + 'mipsel': 'el', + 'ppce500': 'te500v1', + 'ppce500mc': 'te500mc', + 'ppce500v2': 'te500v2', + 'ppce600': 'te600' + } + return coredata.get(d.getVar('TUNE_PKGARCH', True), '') + +CSL_TARGET_CORE = "${@csl_target_core(d)}"meta/recipes-core/meta/external-csl-toolchain.bb +25
-7@@ -25,25 +25,43 @@ PROVIDES = "\ virtual/linux-libc-headers " RPROVIDES = "glibc-utils libsegfault glibc-thread-db" PACKAGES_DYNAMIC = "glibc-gconv-*" -PR = "r2" +PR = "r3" -#SRC_URI = "http://www.codesourcery.com/public/gnu_toolchain/${TARGET_SYS}/arm-${PV}-${TARGET_PREFIX}i686-pc-linux-gnu.tar.bz2" +#SRC_URI = "http://www.codesourcery.com/public/gnu_toolchain/${CSL_TARGET_SYS}/arm-${PV}-${TARGET_PREFIX}i686-pc-linux-gnu.tar.bz2" SRC_URI = "file://SUPPORTED" do_install() { install -d ${D}${sysconfdir} ${D}${bindir} ${D}${sbindir} ${D}${base_bindir} ${D}${libdir} - install -d ${D}${base_libdir} ${D}${base_sbindir} ${D}${datadir} + install -d ${D}${base_libdir} ${D}${base_sbindir} ${D}${datadir} ${D}/usr - cp -a ${EXTERNAL_TOOLCHAIN}/${TARGET_SYS}/libc/lib/* ${D}${base_libdir} - cp -a ${EXTERNAL_TOOLCHAIN}/${TARGET_SYS}/libc/etc/* ${D}${sysconfdir} - cp -a ${EXTERNAL_TOOLCHAIN}/${TARGET_SYS}/libc/sbin/* ${D}${base_sbindir} - cp -a ${EXTERNAL_TOOLCHAIN}/${TARGET_SYS}/libc/usr/* ${D}/usr + if [ -d ${EXTERNAL_TOOLCHAIN}/${CSL_TARGET_SYS}/libc/${CSL_TARGET_CORE} ]; then + cp -a ${EXTERNAL_TOOLCHAIN}/${CSL_TARGET_SYS}/libc/${CSL_TARGET_CORE}/lib/. ${D}${base_libdir} + cp -a ${EXTERNAL_TOOLCHAIN}/${CSL_TARGET_SYS}/libc/${CSL_TARGET_CORE}/etc/. ${D}${sysconfdir} + cp -a ${EXTERNAL_TOOLCHAIN}/${CSL_TARGET_SYS}/libc/${CSL_TARGET_CORE}/sbin/. ${D}${base_sbindir} + if [ ! -e ${EXTERNAL_TOOLCHAIN}/${CSL_TARGET_SYS}/libc/${CSL_TARGET_CORE}/usr/include ]; then + cp -a ${EXTERNAL_TOOLCHAIN}/${CSL_TARGET_SYS}/libc/usr/include ${D}/usr/ + fi + cp -a ${EXTERNAL_TOOLCHAIN}/${CSL_TARGET_SYS}/libc/${CSL_TARGET_CORE}/usr/. ${D}/usr/ + else + cp -a ${EXTERNAL_TOOLCHAIN}/${CSL_TARGET_SYS}/libc/lib/. ${D}${base_libdir} + cp -a ${EXTERNAL_TOOLCHAIN}/${CSL_TARGET_SYS}/libc/etc/. ${D}${sysconfdir} + cp -a ${EXTERNAL_TOOLCHAIN}/${CSL_TARGET_SYS}/libc/sbin/. ${D}${base_sbindir} + cp -a ${EXTERNAL_TOOLCHAIN}/${CSL_TARGET_SYS}/libc/usr/. ${D}/usr/ + fi sed -i -e "s# /lib# ../../lib#g" -e "s# /usr/lib# .#g" ${D}${libdir}/libc.so sed -i -e "s# /lib# ../../lib#g" -e "s# /usr/lib# .#g" ${D}${libdir}/libpthread.so } +SYSROOT_PREPROCESS_FUNCS += "external_toolchain_sysroot_adjust" +external_toolchain_sysroot_adjust() { + if [ -n "${CSL_TARGET_CORE}" ]; then + rm -f ${SYSROOT_DESTDIR}/${CSL_TARGET_CORE} + ln -s . ${SYSROOT_DESTDIR}/${CSL_TARGET_CORE} + fi +} + GLIBC_INTERNAL_USE_BINARY_LOCALE ?= "compile" PACKAGES += "libgcc libgcc-dev libstdc++ libstdc++-dev linux-libc-headers linux-libc-headers-dev"Signature · 7 lines
1.7.8.rc4 _______________________________________________ Openembedded-core mailing list [email protected] http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-core
Signature · 1 line
-Khem
Re: [PATCH 07/10] external-csl-toolchain: support mips/ppc/arm
Quoted 11 lines · Khem Raj
hmm is it using powerpc-linux-gnu canonical name to do both ppc32 and ppc64
meta/conf/distro/include/tcmode-external-csl.inc line 14
Quoted 6 lines
meta/conf/distro/include/tcmode-external-csl.inc +4
-0+CSL_TARGET_SYS_arm = "arm-none-linux-gnueabi" +CSL_TARGET_SYS_mips = "mips-linux-gnu" +CSL_TARGET_SYS_mipsel = "mips-linux-gnu" +CSL_TARGET_SYS_mips64 = "mips-linux-gnu"same as above
Yeah, from what I can tell it's handled via -m32/-m64, not via the prefix.
Signature · 1 line
Christopher Larson
PATCH 8/10 external-csl-toolchain: support ia32
In reply to Christopher LarsonFrom: Christopher Larson <[email protected]>
Unfortunately, the CSL ia32 toolchain has non-prefixed binaries in its bindir (e.g. gcc, ld). To avoid this messing up our build, we avoid adding this bindir to our PATH, and instead add symlinks to the prefixed binaries to our staging toolchain bindir.
--- meta/conf/distro/include/tcmode-external-csl.inc | 59 +++++++++++++++++++++- meta/recipes-core/meta/external-csl-toolchain.bb | 5 ++ 2 files changed, 63 insertions(+), 1 deletions(-)
meta/conf/distro/include/tcmode-external-csl.inc +58 -1
@@ -4,7 +4,8 @@ EXTERNAL_TOOLCHAIN ?= "/usr/local/csl/${TARGET_ARCH}" -PATH =. "${EXTERNAL_TOOLCHAIN}/bin:" +TOOLCHAIN_PATH_ADD = "${EXTERNAL_TOOLCHAIN}/bin:" +PATH =. "${TOOLCHAIN_PATH_ADD}" CSL_TARGET_SYS_powerpc = "powerpc-linux-gnu" CSL_TARGET_SYS_powerpc64 = "powerpc-linux-gnu"
@@ -12,6 +13,8 @@ CSL_TARGET_SYS_arm = "arm-none-linux-gnueabi" CSL_TARGET_SYS_mips = "mips-linux-gnu" CSL_TARGET_SYS_mipsel = "mips-linux-gnu" CSL_TARGET_SYS_mips64 = "mips-linux-gnu" +CSL_TARGET_SYS_i686 = "i686-pc-linux-gnu" +CSL_TARGET_SYS_i586 = "i686-pc-linux-gnu" CSL_TARGET_SYS = "${TARGET_SYS}" TARGET_PREFIX = "${CSL_TARGET_SYS}-"
@@ -41,6 +44,8 @@ TOOLCHAIN_OPTIONS = " --sysroot=${STAGING_DIR_HOST}" def csl_target_core(d): coredata = { 'armv7a-vfp-neon': 'armv7-a-neon', + 'i586': 'sgxx-glibc', + 'i686': 'sgxx-glibc', 'mips': 'mips32', 'mipsel': 'el', 'ppce500': 'te500v1',
@@ -51,3 +56,55 @@ def csl_target_core(d): return coredata.get(d.getVar('TUNE_PKGARCH', True), '') CSL_TARGET_CORE = "${@csl_target_core(d)}" + +# Unfortunately, the CSL ia32 toolchain has non-prefixed binaries in its +# bindir (e.g. gcc, ld). To avoid this messing up our build, we avoid adding +# this bindir to our PATH, and instead add symlinks to the prefixed binaries +# to our staging toolchain bindir. + +python toolchain_metadata_setup () { + if not isinstance(e, bb.event.ConfigParsed): + return + + d = e.data + + if d.getVar('TUNE_PKGARCH', True) in ('i586', 'i686'): + d.setVar('TOOLCHAIN_PATH_ADD', '') +} +addhandler toolchain_metadata_setup + +python toolchain_setup () { + if not isinstance(e, bb.event.BuildStarted): + return + + d = e.data + + if d.getVar('TUNE_PKGARCH', True) in ('i586', 'i686'): + populate_toolchain_links(d) +} +addhandler toolchain_setup + +def populate_toolchain_links(d): + import errno + import os + from glob import glob + + d = d.createCopy() + d.finalize() + + pattern = bb.data.expand('${EXTERNAL_TOOLCHAIN}/bin/${TARGET_PREFIX}*', d) + files = glob(pattern) + if not files: + bb.fatal("Unable to populate toolchain binary symlinks") + + bindir = d.getVar('STAGING_BINDIR_TOOLCHAIN', True) + bb.mkdirhier(bindir) + for f in files: + base = os.path.basename(f) + newpath = os.path.join(bindir, base) + try: + os.symlink(f, newpath) + except OSError as exc: + if exc.errno == errno.EEXIST: + break + bb.fatal("Unable to populate toolchain binary symlink for %s: %s" % (newpath, exc))
meta/recipes-core/meta/external-csl-toolchain.bb +5 -0
@@ -60,6 +60,11 @@ external_toolchain_sysroot_adjust() { rm -f ${SYSROOT_DESTDIR}/${CSL_TARGET_CORE} ln -s . ${SYSROOT_DESTDIR}/${CSL_TARGET_CORE} fi + + if [ "${TUNE_PKGARCH}" = "i586" ]; then + rm -f ${SYSROOT_DESTDIR}/system32 + ln -s . ${SYSROOT_DESTDIR}/system32 + fi } GLIBC_INTERNAL_USE_BINARY_LOCALE ?= "compile"
Signature · 1 line
1.7.8.rc4
PATCH 9/10 external-csl-toolchain: leverage eglibc's packaging for more granular output
In reply to Christopher LarsonFrom: Christopher Larson <[email protected]>
--- meta/recipes-core/meta/external-csl-toolchain.bb | 43 ++++++++++++++++++---- 1 files changed, 35 insertions(+), 8 deletions(-)
meta/recipes-core/meta/external-csl-toolchain.bb +35 -8
@@ -1,5 +1,4 @@ -inherit libc-common -inherit libc-package +require recipes-core/eglibc/eglibc-package.inc INHIBIT_DEFAULT_DEPS = "1"
@@ -8,7 +7,7 @@ LICENSE = "MIT" LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;md5=3f40d7994397109285ec7b81fdeb3b58 \ file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420" -PROVIDES = "\ +PROVIDES += "\ linux-libc-headers \ virtual/${TARGET_PREFIX}gcc \ virtual/${TARGET_PREFIX}g++ \
@@ -22,9 +21,8 @@ PROVIDES = "\ virtual/libiconv \ glibc-thread-db \ libgcc \ - virtual/linux-libc-headers " -RPROVIDES = "glibc-utils libsegfault glibc-thread-db" -PACKAGES_DYNAMIC = "glibc-gconv-*" + virtual/linux-libc-headers \ +" PR = "r3" #SRC_URI = "http://www.codesourcery.com/public/gnu_toolchain/${CSL_TARGET_SYS}/arm-${PV}-${TARGET_PREFIX}i686-pc-linux-gnu.tar.bz2"
@@ -50,10 +48,25 @@ do_install() { cp -a ${EXTERNAL_TOOLCHAIN}/${CSL_TARGET_SYS}/libc/usr/. ${D}/usr/ fi + if [ -e ${D}${prefix}/info ]; then + mv ${D}${prefix}/info ${D}${infodir} + fi + if [ -e ${D}${prefix}/man ]; then + mv ${D}${prefix}/man ${D}${mandir} + fi + + rm ${D}${sysconfdir}/rpc + rm -r ${D}${datadir}/zoneinfo + rm -r ${D}${libdir}/bin + sed -i -e "s# /lib# ../../lib#g" -e "s# /usr/lib# .#g" ${D}${libdir}/libc.so sed -i -e "s# /lib# ../../lib#g" -e "s# /usr/lib# .#g" ${D}${libdir}/libpthread.so } +do_install_locale_append () { + rm -r ${D}${datadir}/locale ${D}${libdir}/locale +} + SYSROOT_PREPROCESS_FUNCS += "external_toolchain_sysroot_adjust" external_toolchain_sysroot_adjust() { if [ -n "${CSL_TARGET_CORE}" ]; then
@@ -67,9 +80,23 @@ external_toolchain_sysroot_adjust() { fi } -GLIBC_INTERNAL_USE_BINARY_LOCALE ?= "compile" +PACKAGES =+ "libgcc libgcc-dev libstdc++ libstdc++-dev linux-libc-headers linux-libc-headers-dev" + +INSANE_SKIP_libgcc = "1" +INSANE_SKIP_libstdc++ = "1" +INSANE_SKIP_gdbserver = "1" + +PKG_${PN} = "eglibc" +PKG_${PN}-dev = "eglibc-dev" +PKG_${PN}-doc = "eglibc-doc" +PKG_${PN}-dbg = "eglibc-dbg" +PKG_${PN}-pic = "eglibc-pic" +PKG_${PN}-utils = "eglibc-utils" +PKG_${PN}-gconv = "eglibc-gconv" +PKG_${PN}-extra-nss = "eglibc-extra-nss" +PKG_${PN}-thread-db = "eglibc-thread-db" +PKG_${PN}-pcprofile = "eglibc-pcprofile" -PACKAGES += "libgcc libgcc-dev libstdc++ libstdc++-dev linux-libc-headers linux-libc-headers-dev" FILES_libgcc = "${base_libdir}/libgcc_s.so.1" FILES_libgcc-dev = "${base_libdir}/libgcc_s.so" FILES_libstdc++ = "${libdir}/libstdc++.so.*"
Signature · 1 line
1.7.8.rc4
PATCH 10/10 external-csl-toolchain: extract version info from the toolchain
In reply to Christopher LarsonFrom: Christopher Larson <[email protected]>
--- meta/conf/distro/include/csl-versions.inc | 105 ++++++++++++++++++++++ meta/conf/distro/include/tcmode-external-csl.inc | 2 + meta/recipes-core/meta/external-csl-toolchain.bb | 24 +++++ 3 files changed, 131 insertions(+), 0 deletions(-) create mode 100644 meta/conf/distro/include/csl-versions.inc
meta/conf/distro/include/csl-versions.inc new file +105 -0
@@ -0,0 +1,105 @@ +def csl_run(d, cmd, *args): + import bb.process + import subprocess + + topdir = d.getVar('TOPDIR', True) + toolchain_path = d.getVar('EXTERNAL_TOOLCHAIN', True) + if not toolchain_path: + return 'UNKNOWN', 'UNKNOWN' + + target_prefix = d.getVar('TARGET_PREFIX', True) + path = os.path.join(toolchain_path, 'bin', target_prefix + cmd) + args = [path] + list(args) + + return bb.process.run(args, cwd=topdir, stderr=subprocess.PIPE) + +def csl_get_version(d): + try: + stdout, stderr = csl_run(d, 'gcc', '-v') + except bb.process.CmdError as exc: + bb.error('Failed to obtain CodeSourcery toolchain version: %s' % exc) + return 'UNKNOWN' + else: + last_line = stderr.splitlines()[-1] + return last_line + +def csl_get_main_version(d): + version = csl_get_version(d) + if version != 'UNKNOWN': + return version.split()[-1].rstrip(')') + else: + return version + +def csl_get_gcc_version(d): + version = csl_get_version(d) + if version != 'UNKNOWN': + return version.split()[2] + else: + return version + +def csl_get_libc_version(d): + import os,bb + syspath = bb.data.expand('${EXTERNAL_TOOLCHAIN}/${CSL_TARGET_SYS}', d) + if not syspath: + return 'UNKNOWN' + + libpath = syspath + '/libc/lib/' + if not os.path.exists(libpath): + libpath = syspath + '/libc/sgxx-glibc/lib/' + + if os.path.exists(libpath): + for file in os.listdir(libpath): + if file.find('libc-') == 0: + return file[5:-3] + return 'UNKNOWN' + +def csl_get_kernel_version(d): + import os,bb + syspath = bb.data.expand('${EXTERNAL_TOOLCHAIN}/${CSL_TARGET_SYS}', d) + if not syspath: + return 'UNKNOWN' + + vf = syspath + '/libc/usr/include/linux/version.h' + if not os.path.exists(vf): + vf = syspath + '/libc/sgxx-glibc/usr/include/linux/version.h' + + try: + f = open(vf, 'r') + except (OSError, IOError): + return 'UNKNOWN' + + l = f.readlines(); + f.close(); + for s in l: + if s.find('LINUX_VERSION_CODE') > 0: + ver = int(s.split()[2]) + maj = ver / 65536 + ver = ver % 65536 + min = ver / 256 + ver = ver % 256 + return str(maj)+'.'+str(min)+'.'+str(ver) + return 'UNKNOWN' + +def csl_get_gdb_version(d): + try: + stdout, stderr = csl_run(d, 'gdb', '-v') + except CmdError: + return 'UNKNOWN' + else: + first_line = stdout.splitlines()[0] + return first_line.split()[-1] + +python csl_version_handler () { + if not isinstance(e, bb.event.ConfigParsed): + return + d = e.data + ld = d.createCopy() + ld.finalize() + + d.setVar('CSL_VER_MAIN', csl_get_main_version(ld)) + d.setVar('CSL_VER_GCC', csl_get_gcc_version(ld)) + d.setVar('CSL_VER_LIBC', csl_get_libc_version(ld)) + d.setVar('CSL_VER_KERNEL', csl_get_kernel_version(ld)) + d.setVar('CSL_VER_GDB', csl_get_gdb_version(ld)) +} +addhandler csl_version_handler
meta/conf/distro/include/tcmode-external-csl.inc +2 -0
@@ -108,3 +108,5 @@ def populate_toolchain_links(d): if exc.errno == errno.EEXIST: break bb.fatal("Unable to populate toolchain binary symlink for %s: %s" % (newpath, exc)) + +require conf/distro/include/csl-versions.inc
meta/recipes-core/meta/external-csl-toolchain.bb +24 -0
@@ -23,6 +23,7 @@ PROVIDES += "\ libgcc \ virtual/linux-libc-headers \ " +PV = "${CSL_VER_MAIN}" PR = "r3" #SRC_URI = "http://www.codesourcery.com/public/gnu_toolchain/${CSL_TARGET_SYS}/arm-${PV}-${TARGET_PREFIX}i686-pc-linux-gnu.tar.bz2"
@@ -97,6 +98,29 @@ PKG_${PN}-extra-nss = "eglibc-extra-nss" PKG_${PN}-thread-db = "eglibc-thread-db" PKG_${PN}-pcprofile = "eglibc-pcprofile" +PKGV_${PN} = "${CSL_VER_LIBC}" +PKGV_${PN}-dev = "${CSL_VER_LIBC}" +PKGV_${PN}-doc = "${CSL_VER_LIBC}" +PKGV_${PN}-dbg = "${CSL_VER_LIBC}" +PKGV_${PN}-pic = "${CSL_VER_LIBC}" +PKGV_${PN}-utils = "${CSL_VER_LIBC}" +PKGV_${PN}-gconv = "${CSL_VER_LIBC}" +PKGV_${PN}-extra-nss = "${CSL_VER_LIBC}" +PKGV_${PN}-thread-db = "${CSL_VER_LIBC}" +PKGV_${PN}-pcprofile = "${CSL_VER_LIBC}" +PKGV_catchsegv = "${CSL_VER_LIBC}" +PKGV_libsegfault = "${CSL_VER_LIBC}" +PKGV_sln = "${CSL_VER_LIBC}" +PKGV_nscd = "${CSL_VER_LIBC}" +PKGV_ldd = "${CSL_VER_LIBC}" +PKGV_libgcc = "${CSL_VER_GCC}" +PKGV_libgcc-dev = "${CSL_VER_GCC}" +PKGV_libstdc++ = "${CSL_VER_GCC}" +PKGV_libstdc++-dev = "${CSL_VER_GCC}" +PKGV_linux-libc-headers = "${CSL_VER_KERNEL}" +PKGV_linux-libc-headers-dev = "${CSL_VER_KERNEL}" +PKGV_gdbserver = "${CSL_VER_GDBSERVER}" + FILES_libgcc = "${base_libdir}/libgcc_s.so.1" FILES_libgcc-dev = "${base_libdir}/libgcc_s.so" FILES_libstdc++ = "${libdir}/libstdc++.so.*"
Signature · 1 line
1.7.8.rc4
Quoted 19 lines · Christopher Larson
From: Christopher Larson<[email protected]>
- Fixes the external-csl-toolchain and corresponding tcmode to be compatible with current metadata (e.g. uses current providers), and ensures it works again
- Kills the arch and version specific bits, making it work fine with a number of different versions of the CodeSourcery arm, mips, ppc, and ia32 toolchains
- Makes the packaging match up with the packaging of the internal toolchain by leveraging the eglibc packaging .inc and ensuring our other packages are named correctly
- Extracts versioning information for both the recipe and emitted packages from the external toolchain at ConfigParsed time. This code is not pretty, largely kept as is from the Mentor internal external toolchain, but it does work. A future commit or commits will clean that up.I've tested with with the fall 2010, spring 2011, and fall 2011 releases, for the qemux86, qemuarm, qemumips, and qemuppc machines. I used buildhistory to compare the packages and image content between internal and external, ensuring that they match up with almost no differences.
Quoted 6 lines
The following changes since commit
fba0459da7f274ae284d36b7fdbf2f9d10a52610:
distro_tracking_fields: fix the typos in the field of maintainer. (2012-01-27 09:52:00 +0000)are available in the git repository at:
git://github.com/kergoth/oe-coreexternal-toolchain
Hi,
Good work!
I just switched to this branch and configured OE-core to compile for qemuarm using the external CSL 2011.03 toolchain. When attempting to build the sato image bitbake aborts when compiling libproxy_0.4.7.bb. I've changed the cmake.bbclass to have cmake find the binaries of the external toolchain as posted here:
http://lists.linuxtogo.org/pipermail/openembedded-core/2011-December/014432.html
With this patch applied the build of the core-image-sate and qt4e-demo-image finished successfully. Both images are booting fine using QEMU.
Regards,
Ken
Quoted 10 lines · Ken Werner
I just switched to this branch and configured OE-core to compile for qemuarm using the external CSL 2011.03 toolchain. When attempting to build the sato image bitbake aborts when compiling libproxy_0.4.7.bb. I've changed the cmake.bbclass to have cmake find the binaries of the external toolchain as posted here:
http://lists.linuxtogo.org/pipermail/openembedded-core/2011-December/014432.htmlWith this patch applied the build of the core-image-sate and qt4e-demo-image finished successfully. Both images are booting fine using QEMU.
Thanks for reporting that. I've merged the patch you refer to above.
Cheers,
Richard
Richard Purdie
AppliedQuoted 26 lines · Christopher Larson
From: Christopher Larson <[email protected]>
- Fixes the external-csl-toolchain and corresponding tcmode to be compatible with current metadata (e.g. uses current providers), and ensures it works again
- Kills the arch and version specific bits, making it work fine with a number of different versions of the CodeSourcery arm, mips, ppc, and ia32 toolchains
- Makes the packaging match up with the packaging of the internal toolchain by leveraging the eglibc packaging .inc and ensuring our other packages are named correctly
- Extracts versioning information for both the recipe and emitted packages from the external toolchain at ConfigParsed time. This code is not pretty, largely kept as is from the Mentor internal external toolchain, but it does work. A future commit or commits will clean that up.I've tested with with the fall 2010, spring 2011, and fall 2011 releases, for the qemux86, qemuarm, qemumips, and qemuppc machines. I used buildhistory to compare the packages and image content between internal and external, ensuring that they match up with almost no differences.
The following changes since commit
fba0459da7f274ae284d36b7fdbf2f9d10a52610:
distro_tracking_fields: fix the typos in the field of maintainer. (2012-01-27 09:52:00 +0000)are available in the git repository at:
git://github.com/kergoth/oe-coreexternal-toolchain
Quoted 11 lines
Christopher Larson (10):
libc-package: fix typo in LOCALETREESRC default value eglibc-package.inc: don't include debug files in -pic
binutils: fixes for build with an external csl toolchain
external-csl-toolchain: fix critical PATH manipulation bug
external-csl-toolchain: fixes for metadata changes
external-csl-toolchain: avoid the hardcoded version/prefix
external-csl-toolchain: support mips/ppc/arm
external-csl-toolchain: support ia32
external-csl-toolchain: leverage eglibc's packaging for more granular output
external-csl-toolchain: extract version info from the toolchain
Merged to master. Thanks for these, good to see those recipes fulfilling their full potential :)
Cheers,
Richard