diff options
author | Khem Raj <raj.khem@gmail.com> | 2016-05-11 10:35:45 -0700 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2016-06-29 19:34:45 +0100 |
commit | 610c48be139b046860a234baccf13d1e6fafe2b4 (patch) | |
tree | 2be91ee225d959100cc1ee3c820adf883bc54686 | |
parent | 0f4dfb6ce041e8ba4bc67de956512cfb6ac225c9 (diff) | |
download | openembedded-core-610c48be139b046860a234baccf13d1e6fafe2b4.tar.gz openembedded-core-610c48be139b046860a234baccf13d1e6fafe2b4.tar.bz2 openembedded-core-610c48be139b046860a234baccf13d1e6fafe2b4.zip |
gcc-runtime, libgcc: Symlink c++ header and startup files in target_triplet for SDK use
We build SDKs such that gcc-cross-candian is built for only one
target *-*-linux and then use -muclibc or -mmusl to let it compile
code for other libc variants. This works fine when libc = glibc
however it does not work for c++ programs when libc != glibc since
there are c++ headers installed under ${includedir}/c++/${BINV}/${TARGET_SYS}
which is fine when gcc-runtime and gcc-cross-candian uses same --target options
gxx includedir searches in right triplet, but it fails with musl/uclibc
since gcc will look for glibc based triplet but gcc-runtime will install
them under musl/uclibc triplet.
This patch symlinks the musl/uclibc triplet to glibc triplet when libc != glibc
This fixes SDKs for musl/uclibc
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Signed-off-by: Armin Kuster <akuster@mvista.com>
-rw-r--r-- | meta/classes/cross-canadian.bbclass | 1 | ||||
-rw-r--r-- | meta/recipes-devtools/gcc/gcc-runtime.inc | 12 | ||||
-rw-r--r-- | meta/recipes-devtools/gcc/libgcc.inc | 12 |
3 files changed, 25 insertions, 0 deletions
diff --git a/meta/classes/cross-canadian.bbclass b/meta/classes/cross-canadian.bbclass index e07b1bdb6c..d35451dbf2 100644 --- a/meta/classes/cross-canadian.bbclass +++ b/meta/classes/cross-canadian.bbclass @@ -68,6 +68,7 @@ python () { elif tarch == "mips64": d.appendVar("CANADIANEXTRAOS", " linux-gnun32 linux-uclibcn32 linux-musln32") if tarch == "arm" or tarch == "armeb": + d.appendVar("CANADIANEXTRAOS", " linux-musleabi linux-uclibceabi") d.setVar("TARGET_OS", "linux-gnueabi") else: d.setVar("TARGET_OS", "linux") diff --git a/meta/recipes-devtools/gcc/gcc-runtime.inc b/meta/recipes-devtools/gcc/gcc-runtime.inc index 8639c1c49e..99f50f8066 100644 --- a/meta/recipes-devtools/gcc/gcc-runtime.inc +++ b/meta/recipes-devtools/gcc/gcc-runtime.inc @@ -73,9 +73,21 @@ do_install () { if [ "${TARGET_VENDOR_MULTILIB_ORIGINAL}" != "" -a "${TARGET_VENDOR}" != "${TARGET_VENDOR_MULTILIB_ORIGINAL}" ]; then ln -s ${TARGET_SYS} ${D}${includedir}/c++/${BINV}/${TARGET_ARCH}${TARGET_VENDOR_MULTILIB_ORIGINAL}-${TARGET_OS} fi + +} + +do_install_append_class-target () { if [ "${TARGET_OS}" = "linux-gnuspe" ]; then ln -s ${TARGET_SYS} ${D}${includedir}/c++/${BINV}/${TARGET_ARCH}${TARGET_VENDOR}-linux fi + if [ "${TCLIBC}" != "glibc" ]; then + case "${TARGET_OS}" in + "linux-musl" | "linux-uclibc" | "linux-*spe") extra_target_os="linux";; + "linux-musleabi" | "linux-uclibceabi") extra_target_os="linux-gnueabi";; + *) extra_target_os="linux";; + esac + ln -s ${TARGET_SYS} ${D}${includedir}/c++/${BINV}/${TARGET_ARCH}${TARGET_VENDOR}-$extra_target_os + fi chown -R root:root ${D} } diff --git a/meta/recipes-devtools/gcc/libgcc.inc b/meta/recipes-devtools/gcc/libgcc.inc index 68377869ca..4770394c42 100644 --- a/meta/recipes-devtools/gcc/libgcc.inc +++ b/meta/recipes-devtools/gcc/libgcc.inc @@ -2,6 +2,17 @@ require libgcc-common.inc DEPENDS = "virtual/${TARGET_PREFIX}gcc virtual/${TARGET_PREFIX}g++" +do_install_append_class-target () { + if [ "${TCLIBC}" != "glibc" ]; then + case "${TARGET_OS}" in + "linux-musl" | "linux-uclibc" | "linux-*spe") extra_target_os="linux";; + "linux-musleabi" | "linux-uclibceabi") extra_target_os="linux-gnueabi";; + *) extra_target_os="linux";; + esac + ln -s ${TARGET_SYS} ${D}${libdir}/${TARGET_ARCH}${TARGET_VENDOR}-$extra_target_os + fi +} + PACKAGES = "\ ${PN} \ ${PN}-dev \ @@ -19,6 +30,7 @@ FILES_${PN}-dev = "\ ${base_libdir}/libgcc*.so \ ${@base_conditional('BASETARGET_SYS', '${TARGET_SYS}', '', '${libdir}/${BASETARGET_SYS}', d)} \ ${libdir}/${TARGET_SYS}/${BINV}* \ + ${libdir}/${TARGET_ARCH}${TARGET_VENDOR}* \ " LIBGCCBUILDTREENAME = "gcc-build-internal-" |