summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKhem Raj <raj.khem@gmail.com>2016-05-11 10:35:45 -0700
committerRichard Purdie <richard.purdie@linuxfoundation.org>2016-05-13 13:40:53 +0100
commitfcaaabb401fffcda4db9a7d1f927a2a404e4776d (patch)
tree35f71d9d013f3022a7eda56f4733a60535959028
parent8f8aebc59df181071245cfeb6eb4a3efaf65c597 (diff)
downloadopenembedded-core-fcaaabb401fffcda4db9a7d1f927a2a404e4776d.tar.gz
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>
-rw-r--r--meta/classes/cross-canadian.bbclass1
-rw-r--r--meta/recipes-devtools/gcc/gcc-runtime.inc12
-rw-r--r--meta/recipes-devtools/gcc/libgcc.inc12
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-"