Skip to contentSkip to conversation

external-csl-toolchain fixes and improvements

PATCH Applied Christopher Larson 5 participants 20 messages Jan 27, 2012 – Feb 3, 2012

lore
Share & tools
lore
#0 lore raw

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
#1 lore raw

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
index 8cd5fec..440218f 100644
@@ -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
#2 lore raw

PATCH 2/10 eglibc-package.inc: don't include debug files in -pic

In reply to Christopher Larson

From: 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
index e5a9b9d..870b95d 100644
@@ -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
#3 lore raw

Re: [PATCH 02/10] eglibc-package.inc: don't include debug files in -pic

Quoted 12 lines · Christopher Larson

From: 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
index e5a9b9d..870b95d 100644

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 -0
 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 · 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
#4 lore raw

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]>

---
 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
index e5a9b9d..870b95d 100644
@@ -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
#5 lore raw

PATCH 3/10 binutils: fixes for build with an external csl toolchain

In reply to Christopher Larson

From: 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
index 6130ab4..e343242 100644
@@ -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
#6 lore raw

Re: [PATCH 03/10] binutils: fixes for build with an external csl toolchain

Quoted 12 lines · Christopher Larson

From: 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
index 6130ab4..e343242 100644

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
#7 lore raw

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]>

---
 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
index 6130ab4..e343242 100644
@@ -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
#8 lore raw

PATCH 4/10 external-csl-toolchain: fix critical PATH manipulation bug

In reply to Christopher Larson

From: 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
index 93615b9..1586365 100644
@@ -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
#9 lore raw

PATCH 5/10 external-csl-toolchain: fixes for metadata changes

In reply to Christopher Larson

From: 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
index 440218f..4acf91a 100644
@@ -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
index 1586365..31055dc 100644
@@ -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
index a874c8b..b5a3607 100644
@@ -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
#10 lore raw

PATCH 6/10 external-csl-toolchain: avoid the hardcoded version/prefix

In reply to Christopher Larson

From: 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
similarity index 51%
rename from meta/conf/distro/include/tcmode-external-csl2008q3.inc
rename to meta/conf/distro/include/tcmode-external-csl.inc
index 31055dc..0af3a45 100644
@@ -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
similarity index 67%
rename from meta/recipes-core/meta/external-csl-toolchain_2008q3-72.bb
rename to meta/recipes-core/meta/external-csl-toolchain.bb
index b5a3607..f1e5332 100644
@@ -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
#11 lore raw

PATCH 7/10 external-csl-toolchain: support mips/ppc/arm

In reply to Christopher Larson

From: 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
index 0af3a45..1d82ca1 100644
@@ -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
index f1e5332..37ea271 100644
@@ -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
#12 lore raw

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 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 +0 -0
index 0af3a45..1d82ca1 100644
@@ -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
index f1e5332..37ea271 100644
@@ -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
#13 lore raw

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
#14 lore raw

PATCH 8/10 external-csl-toolchain: support ia32

In reply to Christopher Larson

From: 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
index 1d82ca1..0135590 100644
@@ -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
index 37ea271..a866e3e 100644
@@ -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
#15 lore raw

PATCH 9/10 external-csl-toolchain: leverage eglibc's packaging for more granular output

In reply to Christopher Larson

From: 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
index a866e3e..8cf73da 100644
@@ -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
#16 lore raw

PATCH 10/10 external-csl-toolchain: extract version info from the toolchain

In reply to Christopher Larson

From: 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
new file mode 100644
index 0000000..22e8394
@@ -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
index 0135590..1ff808d 100644
@@ -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
index 8cf73da..c9f35c4 100644
@@ -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
#17 lore raw
In reply to Christopher Larson
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-core external-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

#18 lore raw
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.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.

Thanks for reporting that. I've merged the patch you refer to above.

Cheers,

Richard

#19 lore raw
In reply to Christopher Larson
Quoted 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-core external-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