aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFathi Boudra <fathi.boudra@linaro.org>2019-03-12 13:55:12 +0000
committerLinaro Code Review <review@review.linaro.org>2019-03-12 13:55:12 +0000
commit28fccae422b2e3a170a06fdf2a2da5e9f703fdc1 (patch)
tree26ff3d79eacfd5b4fbd2a8a09aae28d1c245e56b
parentd3ff9d6b8bfa92809de9c058e91758aab74903f1 (diff)
parent6e4218dcd5272d7db4db2d528b716d3b5c59744a (diff)
Merge changes Ifac70d7e,I4dd3ac7a,Iaae68c3f,I853d2b48,I151d39bf, ... into thud
* changes: external-arm-toolchain: sync FILES_* with OE-core external-arm-toolchain: PACKAGES_DYNAMIC = "^locale-base-.*" external-arm-toolchain: also provide virtual/libc-locale external-arm-toolchain: rpcsvc/rquota.* headers are now provided by separate quota package external-arm-toolchain: libnsl was split off of glibc and is a separate package now external-arm-toolchain: libcidn is no longer packaged external-arm-toolchain: libasan/libubsan bump major version number external-arm-toolchain: switch from ${COREBASE}/LICENSE to ${COMMON_LICENSE_DIR}/MIT external-arm-toolchain: fix host contamination QA issue external-arm-toolchain: some packages rdepend on ldd, so allow creating empty package external-arm-toolchain: package c++ headers external-arm-toolchain: libgcc_s.so in base_libdir is not a symlink, but a linker script external-arm-toolchain: package header files into linux-libc-headers-dev external-arm-toolchain: also support 32-bit arm toolchains external-arm-toolchain: add external prebuilt ARM toolchain
-rw-r--r--meta-linaro-toolchain/conf/distro/include/external-arm-toolchain-versions.inc128
-rw-r--r--meta-linaro-toolchain/conf/distro/include/tcmode-external-arm.inc113
-rw-r--r--meta-linaro-toolchain/recipes-devtools/external-arm-toolchain/external-arm-toolchain.bb655
-rw-r--r--meta-linaro-toolchain/recipes-devtools/external-arm-toolchain/files/SUPPORTED1
4 files changed, 897 insertions, 0 deletions
diff --git a/meta-linaro-toolchain/conf/distro/include/external-arm-toolchain-versions.inc b/meta-linaro-toolchain/conf/distro/include/external-arm-toolchain-versions.inc
new file mode 100644
index 00000000..6c3acec5
--- /dev/null
+++ b/meta-linaro-toolchain/conf/distro/include/external-arm-toolchain-versions.inc
@@ -0,0 +1,128 @@
+def eat_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 eat_get_version(d):
+ try:
+ stdout, stderr = eat_run(d, 'gcc', '-v')
+ except bb.process.CmdError as exc:
+ bb.error('Failed to obtain external Arm toolchain version: %s' % exc)
+ return 'UNKNOWN'
+ else:
+ last_line = stderr.splitlines()[-1]
+ return last_line
+
+# Extract the YYYY.MM version
+def eat_get_main_version(d):
+ version = eat_get_version(d)
+ bb.debug(2, 'Trying for parse version info from: %s' % version)
+ if version != 'UNKNOWN':
+ if version.split()[4] == '(GNU':
+ # gcc version 8.2.1 20180802 (GNU Toolchain for the A-profile Architecture 8.2-2018.11 (arm-rel-8.26))
+ return version.split()[10].split('-')[1]
+ bb.error('Failed to parse external Arm toolchain version from: %s' % version)
+ else:
+ return version
+
+# Extract the x.y.z version from 'gcc version 4.9.1'
+def eat_get_gcc_version(d):
+ version = eat_get_version(d)
+ if version != 'UNKNOWN':
+ return version.split()[2]
+ else:
+ return version
+
+def eat_get_libc_version(d):
+ import os,bb
+ syspath = bb.data.expand('${EXTERNAL_TOOLCHAIN}/${EAT_TARGET_SYS}', d)
+ if not syspath:
+ return 'UNKNOWN'
+
+ libpath = syspath + '/libc/' + bb.data.expand('${EAT_LIBDIR}/${EAT_TARGET_SYS}/', d)
+
+ if os.path.exists(libpath):
+ for file in os.listdir(libpath):
+ if file.find('libc-') == 0:
+ return file[5:-3]
+
+ libpath = syspath + '/libc/' + bb.data.expand('${EAT_LIBDIR}/', d)
+
+ if os.path.exists(libpath):
+ for file in os.listdir(libpath):
+ if file.find('libc-') == 0:
+ return file[5:-3]
+
+ libpath = syspath + '/libc/usr/' + bb.data.expand('${EAT_LIBDIR}/${EAT_TARGET_SYS}/', d)
+
+ if os.path.exists(libpath):
+ for file in os.listdir(libpath):
+ if file.find('libc-') == 0:
+ return file[5:-3]
+
+ libpath = syspath + '/libc/usr/' + bb.data.expand('${EAT_LIBDIR}/', d)
+
+ if os.path.exists(libpath):
+ for file in os.listdir(libpath):
+ if file.find('libc-') == 0:
+ return file[5:-3]
+ return 'UNKNOWN'
+
+def eat_get_kernel_version(d):
+ import os,bb
+ syspath = bb.data.expand('${EXTERNAL_TOOLCHAIN}/${EAT_TARGET_SYS}', d)
+ if not syspath:
+ return 'UNKNOWN'
+
+ vf = syspath + '/libc/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 eat_get_gdb_version(d):
+ try:
+ stdout, stderr = eat_run(d, 'gdb', '-v')
+ except bb.process.CmdError:
+ return 'UNKNOWN'
+ else:
+ first_line = stdout.splitlines()[0]
+ return first_line.split()[-1]
+
+python external_arm_toolchain_version_handler () {
+ if not isinstance(e, bb.event.ConfigParsed):
+ return
+ d = e.data
+ ld = d.createCopy()
+ ld.finalize()
+
+ d.setVar('EAT_VER_MAIN', eat_get_main_version(ld))
+ d.setVar('EAT_VER_GCC', eat_get_gcc_version(ld))
+ d.setVar('EAT_VER_LIBC', eat_get_libc_version(ld))
+ d.setVar('EAT_VER_KERNEL', eat_get_kernel_version(ld))
+ d.setVar('EAT_VER_GDB', eat_get_gdb_version(ld))
+}
+addhandler external_arm_toolchain_version_handler
diff --git a/meta-linaro-toolchain/conf/distro/include/tcmode-external-arm.inc b/meta-linaro-toolchain/conf/distro/include/tcmode-external-arm.inc
new file mode 100644
index 00000000..b8dc5285
--- /dev/null
+++ b/meta-linaro-toolchain/conf/distro/include/tcmode-external-arm.inc
@@ -0,0 +1,113 @@
+#
+# Configuration to use an external Arm binary toolchain
+#
+
+EXTERNAL_TOOLCHAIN ?= "/usr/local/arm-binary-toolchain/${TARGET_ARCH}"
+
+TOOLCHAIN_PATH_ADD = "${EXTERNAL_TOOLCHAIN}/bin:"
+PATH =. "${TOOLCHAIN_PATH_ADD}"
+
+ELT_TARGET_SYS_arm ?= "arm-linux-gnueabihf"
+ELT_TARGET_SYS_aarch64 ?= "aarch64-linux-gnu"
+ELT_TARGET_SYS = "${TARGET_SYS}"
+TARGET_PREFIX = "${ELT_TARGET_SYS}-"
+
+EAT_LIBDIR_arm = "lib"
+EAT_LIBDIR_aarch64 = "lib64"
+
+GCCMULTILIB_forcevariable = "--disable-multilib"
+IMAGE_LINGUAS_forcevariable = ""
+
+# Blacklist toolchain recipes as a belt-and-suspenders way to use the external toolchain
+PNBLACKLIST[glibc] = "Using external toolchain"
+PNBLACKLIST[libgcc] = "Using external toolchain"
+PNBLACKLIST[gcc-cross] = "Using external toolchain"
+PNBLACKLIST[gcc-runtime] = "Using external toolchain"
+
+PREFERRED_PROVIDER_linux-libc-headers = "external-arm-toolchain"
+PREFERRED_PROVIDER_linux-libc-headers-dev = "external-arm-toolchain"
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc = "external-arm-toolchain"
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc-initial = "external-arm-toolchain"
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}g++ = "external-arm-toolchain"
+#PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}binutils = "external-arm-toolchain"
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}libc-for-gcc = "external-arm-toolchain"
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}compilerlibs = "external-arm-toolchain"
+PREFERRED_PROVIDER_glibc = "external-arm-toolchain"
+PREFERRED_PROVIDER_libgcc = "external-arm-toolchain"
+PREFERRED_PROVIDER_virtual/libc = "external-arm-toolchain"
+PREFERRED_PROVIDER_virtual/libintl = "external-arm-toolchain"
+PREFERRED_PROVIDER_virtual/libiconv = "external-arm-toolchain"
+PREFERRED_PROVIDER_virtual/crypt = "external-arm-toolchain"
+PREFERRED_PROVIDER_glibc-thread-db = "external-arm-toolchain"
+PREFERRED_PROVIDER_glibc-mtrace = "external-arm-toolchain"
+PREFERRED_PROVIDER_libc-mtrace = "external-arm-toolchain"
+PREFERRED_PROVIDER_virtual/linux-libc-headers = "external-arm-toolchain"
+
+TARGET_CPPFLAGS_prepend = " -isystem${EXTERNAL_TOOLCHAIN}/${ELT_TARGET_SYS}/include "
+TARGET_LDFLAGS_prepend = " -L${EXTERNAL_TOOLCHAIN}/${ELT_TARGET_SYS}/lib -Wl,-rpath-link,${EXTERNAL_TOOLCHAIN}/${ELT_TARGET_SYS}/lib "
+
+TOOLCHAIN_OPTIONS = " --sysroot=${STAGING_DIR_HOST}"
+
+DISTRO_FEATURES_LIBC = "ipv4 ipv6 libc-backtrace libc-big-macros libc-bsd libc-cxx-tests libc-catgets libc-crypt \
+ libc-crypt-ufc libc-db-aliases libc-envz libc-fcvt libc-fmtmsg libc-fstab libc-ftraverse \
+ libc-getlogin libc-idn libc-inet-anl libc-libm libc-libm-big \
+ libc-memusage libc-nis libc-nsswitch libc-rcmd libc-rtld-debug libc-spawn libc-streams libc-sunrpc \
+ libc-utmp libc-utmpx libc-wordexp libc-posix-clang-wchar libc-posix-regexp libc-posix-regexp-glibc \
+ libc-posix-wchar-io"
+
+ENABLE_BINARY_LOCALE_GENERATION = "0"
+GLIBC_INTERNAL_USE_BINARY_LOCALE = "precompiled"
+
+ERROR_QA[type] ?= "list"
+python toolchain_metadata_setup () {
+ import subprocess
+ if not isinstance(e, bb.event.ConfigParsed):
+ return
+
+ d = e.data
+ l = d.createCopy()
+ l.finalize()
+ oe_import(l)
+
+ external_toolchain = l.getVar('EXTERNAL_TOOLCHAIN', True)
+ if not external_toolchain or external_toolchain == 'UNDEFINED':
+ bb.fatal("Error: EXTERNAL_TOOLCHAIN must be set to the path to your arm toolchain")
+
+ if not os.path.exists(external_toolchain):
+ bb.fatal("Error: EXTERNAL_TOOLCHAIN path '%s' does not exist" % external_toolchain)
+
+ # The external toolchain may not have been built with the oe-core preferred
+ # gnu hash setting, so ensure that the corresponding sanity check is not an error.
+ error_qa = oe.data.typed_value('ERROR_QA', l)
+ if 'ldflags' in error_qa:
+ error_qa.remove('ldflags')
+ d.setVar('ERROR_QA', ' '.join(error_qa))
+}
+addhandler toolchain_metadata_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))
+
+require conf/distro/include/external-arm-toolchain-versions.inc
diff --git a/meta-linaro-toolchain/recipes-devtools/external-arm-toolchain/external-arm-toolchain.bb b/meta-linaro-toolchain/recipes-devtools/external-arm-toolchain/external-arm-toolchain.bb
new file mode 100644
index 00000000..a86772bc
--- /dev/null
+++ b/meta-linaro-toolchain/recipes-devtools/external-arm-toolchain/external-arm-toolchain.bb
@@ -0,0 +1,655 @@
+require recipes-core/glibc/glibc-package.inc
+
+INHIBIT_DEFAULT_DEPS = "1"
+INHIBIT_PACKAGE_STRIP = "1"
+INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
+
+ALLOW_EMPTY_ldd = "1"
+
+# License applies to this recipe code, not the toolchain itself
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "\
+ file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302 \
+ file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420 \
+"
+
+PROVIDES += "\
+ linux-libc-headers \
+ virtual/${TARGET_PREFIX}gcc \
+ virtual/${TARGET_PREFIX}g++ \
+ virtual/${TARGET_PREFIX}gcc-initial \
+ virtual/${TARGET_PREFIX}binutils \
+ virtual/${TARGET_PREFIX}libc-for-gcc \
+ virtual/${TARGET_PREFIX}compilerlibs \
+ virtual/libc \
+ virtual/libintl \
+ virtual/libiconv \
+ virtual/crypt \
+ glibc-mtrace \
+ glibc-thread-db \
+ glibc \
+ libc-mtrace \
+ gcc-runtime \
+ libgcc \
+ libg2c \
+ libg2c-dev \
+ libssp \
+ libssp-dev \
+ libssp-staticdev \
+ libgfortran \
+ libgfortran-dev \
+ libgfortran-staticdev \
+ libmudflap \
+ libmudflap-dev \
+ libgomp \
+ libgomp-dev \
+ libgomp-staticdev \
+ libitm \
+ libitm-dev \
+ libitm-staticdev \
+ libquadmath \
+ libquadmath-dev \
+ libquadmath-staticdev \
+ virtual/linux-libc-headers \
+ libgcov-dev \
+ virtual/libc-locale \
+"
+
+PV = "${EAT_VER_MAIN}"
+
+SRC_URI = "file://SUPPORTED"
+
+do_install() {
+ # Add stubs for files OE-core expects
+ install -d ${S}/nscd/
+ touch ${S}/nscd/nscd.init
+ touch ${S}/nscd/nscd.conf
+ touch ${S}/nscd/nscd.service
+ touch ${S}/../makedbs.sh
+
+ install -d ${D}${base_libdir}
+ install -d ${D}${bindir}
+ install -d ${D}${sbindir}
+ install -d ${D}${libdir}
+ install -d ${D}${libexecdir}
+ install -d ${D}${datadir}
+ install -d ${D}${includedir}
+ install -d ${D}/include
+
+ CP_ARGS="-Prf --preserve=mode,timestamps --no-preserve=ownership"
+ cp ${CP_ARGS} -H ${EXTERNAL_TOOLCHAIN}/${EAT_TARGET_SYS}/${EAT_LIBDIR}/* ${D}${base_libdir}
+ if [ -d ${EXTERNAL_TOOLCHAIN}/${EAT_TARGET_SYS}/libc/${EAT_LIBDIR}/${EAT_TARGET_SYS} ]; then
+ cp ${CP_ARGS} -H ${EXTERNAL_TOOLCHAIN}/${EAT_TARGET_SYS}/libc/${EAT_LIBDIR}/${EAT_TARGET_SYS}/* ${D}${base_libdir}
+ else
+ if [ -f ${EXTERNAL_TOOLCHAIN}/${EAT_TARGET_SYS}/libc/${EAT_LIBDIR}/ld-${EAT_VER_LIBC}.so ]; then
+ cp ${CP_ARGS} -H ${EXTERNAL_TOOLCHAIN}/${EAT_TARGET_SYS}/libc/${EAT_LIBDIR}/* ${D}${base_libdir}
+ else
+ cp ${CP_ARGS} -H ${EXTERNAL_TOOLCHAIN}/${EAT_TARGET_SYS}/libc/usr/${EAT_LIBDIR}/*.so* ${D}${base_libdir}
+ fi
+ fi
+ if [ -d ${EXTERNAL_TOOLCHAIN}/${EAT_TARGET_SYS}/libc/usr/${EAT_LIBDIR}/${EAT_TARGET_SYS} ]; then
+ cp ${CP_ARGS} -H ${EXTERNAL_TOOLCHAIN}/${EAT_TARGET_SYS}/libc/usr/${EAT_LIBDIR}/${EAT_TARGET_SYS}/* ${D}${libdir}
+ else
+ cp ${CP_ARGS} -H ${EXTERNAL_TOOLCHAIN}/${EAT_TARGET_SYS}/libc/usr/${EAT_LIBDIR}/* ${D}${libdir}
+ if [ ! -f ${EXTERNAL_TOOLCHAIN}/${EAT_TARGET_SYS}/libc/${EAT_LIBDIR}/ld-${EAT_VER_LIBC}.so ]; then
+ rm -rf ${D}${libdir}/*.so*
+ fi
+ fi
+ cp ${CP_ARGS} -H ${EXTERNAL_TOOLCHAIN}/${EAT_TARGET_SYS}/libc/usr/share/* ${D}${datadir}
+ cp ${CP_ARGS} -H ${EXTERNAL_TOOLCHAIN}/${EAT_TARGET_SYS}/libc/usr/include/* ${D}${includedir}
+ if [ -d ${EXTERNAL_TOOLCHAIN}/${EAT_TARGET_SYS}/libc/usr/include/${EAT_TARGET_SYS} ]; then
+ cp ${CP_ARGS} -H ${EXTERNAL_TOOLCHAIN}/${EAT_TARGET_SYS}/libc/usr/include/${EAT_TARGET_SYS}/* ${D}${includedir}
+ rm -r ${D}${includedir}/${EAT_TARGET_SYS}
+ fi
+
+ cp -a ${EXTERNAL_TOOLCHAIN}/${EAT_TARGET_SYS}/include/* ${D}${includedir}
+ ln -sf ../usr/include/c++ ${D}/include/c++
+
+ # fix up the copied symlinks (they are still pointing to the multiarch directory)
+ linker_name="${@bb.utils.contains("TUNE_FEATURES", "aarch64", "ld-linux-aarch64.so.1", bb.utils.contains("TUNE_FEATURES", "callconvention-hard", "ld-linux-armhf.so.3", "ld-linux.so.3",d), d)}"
+ ln -sf ld-${EAT_VER_LIBC}.so ${D}${base_libdir}/${linker_name}
+ ln -sf ../../lib/librt.so.1 ${D}${libdir}/librt.so
+ ln -sf ../../lib/libgcc_s.so.1 ${D}${libdir}/libgcc_s.so
+ ln -sf ../../lib/libcrypt.so.1 ${D}${libdir}/libcrypt.so
+ ln -sf ../../lib/libresolv.so.2 ${D}${libdir}/libresolv.so
+ ln -sf ../../lib/libnss_dns.so.2 ${D}${libdir}/libnss_dns.so
+ ln -sf ../../lib/libnss_hesiod.so.2 ${D}${libdir}/libnss_hesiod.so
+ ln -sf ../../lib/libutil.so.1 ${D}${libdir}/libutil.so
+ ln -sf ../../lib/libnss_files.so.2 ${D}${libdir}/libnss_files.so
+ ln -sf ../../lib/libnss_compat.so.2 ${D}${libdir}/libnss_compat.so
+ ln -sf ../../lib/libBrokenLocale.so.1 ${D}${libdir}/libBrokenLocale.so
+ ln -sf ../../lib/libthread_db.so.1 ${D}${libdir}/libthread_db.so
+ ln -sf ../../lib/libpthread.so.0 ${D}${libdir}/libpthread.so
+ ln -sf ../../lib/libthread_db.so.1 ${D}${libdir}/libthread_db-1.0.so
+ ln -sf ../../lib/libanl.so.1 ${D}${libdir}/libanl.so
+ ln -sf ../../lib/libdl.so.2 ${D}${libdir}/libdl.so
+ ln -sf ../../lib/libnss_db.so.2 ${D}${libdir}/libnss_db.so
+ ln -sf ../../lib/libnss_dns.so.2 ${D}${libdir}/libnss_dns.so
+ ln -sf ../../lib/libnss_files.so.2 ${D}${libdir}/libnss_files.so
+ ln -sf ../../lib/libnss_compat.so.2 ${D}${libdir}/libnss_compat.so
+ ln -sf ../../lib/libm.so.6 ${D}${libdir}/libm.so
+ ln -sf ../../lib/libatomic.so.1 ${D}${libdir}/libatomic.so
+ ln -sf ../../lib/libgomp.so.1 ${D}${libdir}/libgomp.so
+ ln -sf ../../lib/libitm.so.1 ${D}${libdir}/libitm.so
+ ln -sf ../../lib/libssp.so.0 ${D}${libdir}/libssp.so
+ ln -sf ../../lib/libstdc++.so.6 ${D}${libdir}/libstdc++.so
+ ln -sf ../../lib/libubsan.so.1 ${D}${libdir}/libubsan.so
+ ln -sf ../../lib/libasan.so.5 ${D}${libdir}/libasan.so
+ ln -sf ../../lib/libgfortran.so.5 ${D}${libdir}/libgfortran.so
+
+ # lib?san is duplicated *and* the files are all hardlinks
+ for lib in lsan tsan ; do
+ rm -f ${D}${libdir}/lib${lib}.so.0 ${D}${libdir}/lib${lib}.so ${D}${base_libdir}/lib${lib}*
+ ln -sf lib${lib}.so.0.0.0 ${D}${libdir}/lib${lib}.so.0
+ ln -sf lib${lib}.so.0.0.0 ${D}${libdir}/lib${lib}t.so
+ done
+
+ # remove potential .so duplicates from base_libdir
+ # for all symlinks created above in libdir
+ rm -f ${D}${base_libdir}/librt.so
+ rm -f ${D}${base_libdir}/libcrypt.so
+ rm -f ${D}${base_libdir}/libnss_nis.so
+ rm -f ${D}${base_libdir}/libresolv.so
+ rm -f ${D}${base_libdir}/libnss_dns.so
+ rm -f ${D}${base_libdir}/libnss_hesiod.so
+ rm -f ${D}${base_libdir}/libutil.so
+ rm -f ${D}${base_libdir}/libnss_files.so
+ rm -f ${D}${base_libdir}/libnss_compat.so
+ rm -f ${D}${base_libdir}/libBrokenLocale.so
+ rm -f ${D}${base_libdir}/libthread_db.so
+ rm -f ${D}${base_libdir}/libanl.so
+ rm -f ${D}${base_libdir}/libdl.so
+ rm -f ${D}${base_libdir}/libnss_nisplus.so
+ rm -f ${D}${base_libdir}/libnss_db.so
+ rm -f ${D}${base_libdir}/libm.so
+ rm -f ${D}${base_libdir}/libssp.so
+
+ # Move these completely to ${libdir}
+ for lib in asan atomic gfortran gomp itm sanitizer stdc++ ubsan; do
+ if [ -e ${D}${base_libdir}/lib${lib}.spec ] ; then
+ mv ${D}${base_libdir}/lib${lib}.spec ${D}${libdir}
+ fi
+ if [ -e ${D}${base_libdir}/lib${lib}.a ] ; then
+ mv ${D}${base_libdir}/lib${lib}.a ${D}${libdir}
+ fi
+ rm -f ${D}${base_libdir}/lib${lib}*
+ done
+
+ # Clean up duplicate libs that are both in base_libdir and libdir
+ rm -f ${D}${libdir}/libgcc*
+
+ # Besides ld-${EAT_VER_LIBC}.so, other libs can have duplicates like lib*-${EAT_VER_LIBC}.so
+ # Only remove them if both are regular files and are identical
+ for i in ${D}${base_libdir}/lib*-${EAT_VER_LIBC}.so; do
+ f=$(echo $i | sed 's/-${EAT_VER_LIBC}//')
+ l=$(ls $f.*)
+ if [ $(readlink -f $i ) = $l ]; then
+ echo "$i is a symlink of $l, keep it"
+ elif [ $(readlink -f $l ) = $i ]; then
+ echo "$l is a symlink of $i, keep it"
+ else
+ cmp -s $i $l
+ if [ $? -eq 0 ]; then
+ echo "$i is a duplicate of $l, remove it"
+ rm $i
+ else
+ echo "$i and $l are different files, keep them both"
+ fi
+ fi
+ done
+
+ if [ -d ${D}${base_libdir}/arm-linux-gnueabi ]; then
+ rm -rf ${D}${base_libdir}/arm-linux-gnueabi
+ fi
+
+ if [ -d ${D}${base_libdir}/ldscripts ]; then
+ rm -rf ${D}${base_libdir}/ldscripts
+ fi
+
+ # Provided by libnsl2
+ rm -rf ${D}${includedir}/rpcsvc/yppasswd.*
+ # Provided by quota
+ rm -rf ${D}${includedir}/rpcsvc/rquota.*
+
+ if [ -f ${D}${libdir}/libc.so ];then
+ sed -i -e "s# /${EAT_LIBDIR}/${EAT_TARGET_SYS}# ../../${EAT_LIBDIR}#g" -e "s# /usr/${EAT_LIBDIR}/# /usr/lib/#g" -e "s# /usr/${EAT_LIBDIR}/${EAT_TARGET_SYS}# .#g" -e "s# /${EAT_LIBDIR}/ld-linux# ../../${EAT_LIBDIR}/ld-linux#g" ${D}${libdir}/libc.so
+ sed -i -e "s# /${EAT_LIBDIR}/libc.so.6# /lib/libc.so.6#g" ${D}${libdir}/libc.so
+ # cat kjasdkjasd
+ fi
+
+ if [ -f ${D}${base_libdir}/libc.so ];then
+ sed -i -e "s# /${EAT_LIBDIR}/${EAT_TARGET_SYS}# ../../lib#g" -e "s# /usr/${EAT_LIBDIR}/${EAT_TARGET_SYS}# .#g" "s# /${EAT_LIBDIR}/# /lib/#g" ${D}${base_libdir}/libc.so
+ if [ -f ${D}${base_libdir}/libc.so.6 ]; then
+ sed -i -e "s# /usr/${EAT_LIBDIR}/libc.so.6# /lib/libc.so.6#g" "s# /${EAT_LIBDIR}/libc.so.6# /lib/libc.so.6#g" ${D}${base_libdir}/libc.so.6
+ fi
+ fi
+ if [ -f ${D}${base_libdir}/libpthread.so.0 ]; then
+ sed -i -e "s# /usr/${EAT_LIBDIR}/libpthread.so.0# /lib/libpthread.so.0#g" ${D}${base_libdir}/libpthread.so.0
+ fi
+
+ # Remove if empty
+ rmdir ${D}${bindir} || true
+ rmdir ${D}${sbindir} || true
+}
+
+PACKAGES_DYNAMIC = "^locale-base-.* \
+ ^glibc-gconv-.* ^glibc-charmap-.* ^glibc-localedata-.* ^glibc-binary-localedata-.* \
+ ^${MLPREFIX}glibc-gconv$"
+
+# PACKAGES is split up according to the 'source' recipes/includes in OE-core
+# Stylistic differences are kept to make copy/pasting easier.
+
+# From gcc-runtime.inc
+
+PACKAGES =+ "\
+ libstdc++ \
+ libstdc++-precompile-dev \
+ libstdc++-dev \
+ libstdc++-staticdev \
+ libg2c \
+ libg2c-dev \
+ libssp \
+ libssp-dev \
+ libssp-staticdev \
+ libmudflap \
+ libmudflap-dev \
+ libmudflap-staticdev \
+ libquadmath \
+ libquadmath-dev \
+ libquadmath-staticdev \
+ libgomp \
+ libgomp-dev \
+ libgomp-staticdev \
+ libatomic \
+ libatomic-dev \
+ libatomic-staticdev \
+ libitm \
+ libitm-dev \
+ libitm-staticdev \
+ "
+
+# From gcc-sanitizers.inc
+
+PACKAGES += "gcc-sanitizers gcc-sanitizers-dev"
+PACKAGES += "libasan libubsan liblsan libtsan"
+PACKAGES += "libasan-dev libubsan-dev liblsan-dev libtsan-dev"
+PACKAGES += "libasan-staticdev libubsan-staticdev liblsan-staticdev libtsan-staticdev"
+
+# From libgfortran.inc:
+
+PACKAGES += "\
+ libgfortran \
+ libgfortran-dev \
+ libgfortran-staticdev \
+ "
+
+# libgcc.inc uses ${PN}, so replace that
+
+PACKAGES += "\
+ libgcc \
+ libgcc-dev \
+ libgcc-dbg \
+"
+
+# ... and the leftovers
+
+PACKAGES =+ "\
+ ${PN}-mtrace \
+ libgcov-dev \
+ linux-libc-headers \
+ linux-libc-headers-dev \
+"
+
+INSANE_SKIP_${PN}-dbg = "staticdev"
+INSANE_SKIP_${PN}-utils += "ldflags"
+INSANE_SKIP_libstdc++ += "ldflags"
+INSANE_SKIP_libgfortran += "ldflags"
+INSANE_SKIP_libgcc += "ldflags dev-deps"
+INSANE_SKIP_libgfortran += "ldflags dev-deps"
+INSANE_SKIP_libstdc++ += "ldflags dev-deps"
+INSANE_SKIP_libatomic += "ldflags"
+INSANE_SKIP_libasan += "ldflags"
+INSANE_SKIP_libubsan += "ldflags"
+INSANE_SKIP_libssp += "ldflags"
+INSANE_SKIP_libgomp += "ldflags"
+INSANE_SKIP_libitm += "ldflags"
+INSANE_SKIP_gdbserver += "ldflags"
+
+# OE-core has literally listed 'glibc' in LIBC_DEPENDENCIES :/
+RPROVIDES_${PN} = "glibc"
+# Add runtime provides for the other libc* packages as well
+RPROVIDES_${PN}-dev = "glibc-dev"
+RPROVIDES_${PN}-doc = "glibc-doc"
+RPROVIDES_${PN}-dbg = "glibc-dbg"
+RPROVIDES_${PN}-pic = "glibc-pic"
+RPROVIDES_${PN}-utils = "glibc-utils"
+RPROVIDES_${PN}-mtrace = "glibc-mtrace libc-mtrace"
+
+PKG_${PN} = "glibc"
+PKG_${PN}-dev = "glibc-dev"
+PKG_${PN}-doc = "glibc-doc"
+PKG_${PN}-dbg = "glibc-dbg"
+PKG_${PN}-pic = "glibc-pic"
+PKG_${PN}-utils = "glibc-utils"
+PKG_${PN}-mtrace = "glibc-mtrace"
+PKG_${PN}-gconv = "glibc-gconv"
+PKG_${PN}-extra-nss = "glibc-extra-nss"
+PKG_${PN}-thread-db = "glibc-thread-db"
+PKG_${PN}-pcprofile = "glibc-pcprofile"
+PKG_${PN}-staticdev = "glibc-staticdev"
+
+PKGV_${PN} = "${EAT_VER_LIBC}"
+PKGV_${PN}-dev = "${EAT_VER_LIBC}"
+PKGV_${PN}-doc = "${EAT_VER_LIBC}"
+PKGV_${PN}-dbg = "${EAT_VER_LIBC}"
+PKGV_${PN}-pic = "${EAT_VER_LIBC}"
+PKGV_${PN}-utils = "${EAT_VER_LIBC}"
+PKGV_${PN}-mtrace = "${EAT_VER_LIBC}"
+PKGV_${PN}-gconv = "${EAT_VER_LIBC}"
+PKGV_${PN}-extra-nss = "${EAT_VER_LIBC}"
+PKGV_${PN}-thread-db = "${EAT_VER_LIBC}"
+PKGV_${PN}-pcprofile = "${EAT_VER_LIBC}"
+PKGV_${PN}-staticdev = "${EAT_VER_LIBC}"
+PKGV_catchsegv = "${EAT_VER_LIBC}"
+PKGV_glibc-extra-nss = "${EAT_VER_LIBC}"
+PKGV_glibc-thread-db = "${EAT_VER_LIBC}"
+
+PKGV_libmemusage = "${EAT_VER_LIBC}"
+PKGV_libsegfault = "${EAT_VER_LIBC}"
+PKGV_libsotruss = "${EAT_VER_LIBC}"
+PKGV_sln = "${EAT_VER_LIBC}"
+PKGV_nscd = "${EAT_VER_LIBC}"
+PKGV_ldd = "${EAT_VER_LIBC}"
+
+PKGV_libasan-dev = "${EAT_VER_GCC}"
+PKGV_libasan = "${EAT_VER_GCC}"
+PKGV_libasan-staticdev = "${EAT_VER_GCC}"
+PKGV_libatomic-dev = "${EAT_VER_GCC}"
+PKGV_libatomic = "${EAT_VER_GCC}"
+PKGV_libatomic-staticdev = "${EAT_VER_GCC}"
+PKGV_libg2c-dev = "${EAT_VER_GCC}"
+PKGV_libg2c = "${EAT_VER_GCC}"
+PKGV_libgcc-dev = "${EAT_VER_GCC}"
+PKGV_libgcc = "${EAT_VER_GCC}"
+PKGV_libgfortran-dev = "${EAT_VER_GCC}"
+PKGV_libgfortran = "${EAT_VER_GCC}"
+PKGV_libgfortran-staticdev = "${EAT_VER_GCC}"
+PKGV_libgomp-dev = "${EAT_VER_GCC}"
+PKGV_libgomp = "${EAT_VER_GCC}"
+PKGV_libgomp-staticdev = "${EAT_VER_GCC}"
+PKGV_libitm-dev = "${EAT_VER_GCC}"
+PKGV_libitm = "${EAT_VER_GCC}"
+PKGV_libitm-staticdev = "${EAT_VER_GCC}"
+PKGV_liblsan-dev = "${EAT_VER_GCC}"
+PKGV_liblsan = "${EAT_VER_GCC}"
+PKGV_liblsan-staticdev = "${EAT_VER_GCC}"
+PKGV_libmudflap-dev = "${EAT_VER_GCC}"
+PKGV_libmudflap = "${EAT_VER_GCC}"
+PKGV_libmudflap-staticdev = "${EAT_VER_GCC}"
+PKGV_libquadmath-dev = "${EAT_VER_GCC}"
+PKGV_libquadmath = "${EAT_VER_GCC}"
+PKGV_libquadmath-staticdev = "${EAT_VER_GCC}"
+PKGV_libssp-dev = "${EAT_VER_GCC}"
+PKGV_libssp = "${EAT_VER_GCC}"
+PKGV_libssp-staticdev = "${EAT_VER_GCC}"
+PKGV_libstdc++-dbg = "${EAT_VER_GCC}"
+PKGV_libstdc++-dev = "${EAT_VER_GCC}"
+PKGV_libstdc++ = "${EAT_VER_GCC}"
+PKGV_libstdc++-precompile-dev = "${EAT_VER_GCC}"
+PKGV_libstdc++-staticdev = "${EAT_VER_GCC}"
+PKGV_libtsan-dev = "${EAT_VER_GCC}"
+PKGV_libtsan = "${EAT_VER_GCC}"
+PKGV_libtsan-staticdev = "${EAT_VER_GCC}"
+PKGV_libubsan-dev = "${EAT_VER_GCC}"
+PKGV_libubsan = "${EAT_VER_GCC}"
+PKGV_libubsan-staticdev = "${EAT_VER_GCC}"
+
+PKGV_linux-libc-headers-dev = "${EAT_VER_KERNEL}"
+PKGV_linux-libc-headers = "${EAT_VER_KERNEL}"
+
+PKGV_gdbserver = "${EAT_VER_GDBSERVER}"
+
+ALLOW_EMPTY_${PN}-mtrace = "1"
+FILES_${PN}-mtrace = "${bindir}/mtrace"
+
+FILES_libgcov-dev = "${libdir}/${TARGET_SYS}/${BINV}/libgcov.a"
+
+FILES_libsegfault = "${base_libdir}/libSegFault*"
+
+FILES_catchsegv = "${bindir}/catchsegv"
+RDEPENDS_catchsegv = "libsegfault"
+
+# From libgfortran.inc:
+
+FILES_libgfortran = "${libdir}/libgfortran.so.*"
+FILES_libgfortran-dev = "\
+ ${libdir}/libgfortran*.so \
+ ${libdir}/libgfortran.spec \
+ ${libdir}/libgfortran.la \
+ ${libdir}/gcc/${TARGET_SYS}/${BINV}/libgfortranbegin.* \
+ ${libdir}/gcc/${TARGET_SYS}/${BINV}/libcaf_single* \
+ ${libdir}/gcc/${TARGET_SYS}/${BINV}/finclude/ \
+"
+FILES_libgfortran-staticdev = "${libdir}/libgfortran.a"
+
+
+# From gcc-sanitizers.inc:
+
+FILES_gcc-sanitizers = "${libdir}/libsanitizer.so.*"
+FILES_gcc-sanitizers-dev = "${libdir}/libsanitizer.spec"
+
+FILES_libasan += "${libdir}/libasan.so.*"
+FILES_libasan-dev += "\
+ ${libdir}/libasan_preinit.o \
+ ${libdir}/libasan.so \
+ ${libdir}/libasan.la \
+"
+FILES_libasan-staticdev += "${libdir}/libasan.a"
+
+FILES_libubsan += "${libdir}/libubsan.so.*"
+FILES_libubsan-dev += "\
+ ${libdir}/libubsan.so \
+ ${libdir}/libubsan.la \
+"
+FILES_libubsan-staticdev += "${libdir}/libubsan.a"
+
+FILES_liblsan += "${libdir}/liblsan.so.*"
+FILES_liblsan-dev += "\
+ ${libdir}/liblsan.so \
+ ${libdir}/liblsan.la \
+ ${libdir}/liblsan_preinit.o \
+"
+FILES_liblsan-staticdev += "${libdir}/liblsan.a"
+
+FILES_libtsan += "${libdir}/libtsan.so.*"
+FILES_libtsan-dev += "\
+ ${libdir}/libtsan.so \
+ ${libdir}/libtsan.la \
+ ${libdir}/libtsan_*.o \
+"
+FILES_libtsan-staticdev += "${libdir}/libtsan.a"
+
+# From libgcc.inc:
+
+FILES_libgcc = "\
+ ${base_libdir}/libgcc_s.so.1 \
+ ${base_libdir}/libgcc_s.so \
+"
+
+FILES_libgcc-dev = "\
+ ${base_libdir}/libgcc*.so \
+ ${@oe.utils.conditional('BASETARGET_SYS', '${TARGET_SYS}', '', '${libdir}/${BASETARGET_SYS}', d)} \
+ ${libdir}/${TARGET_SYS}/${BINV}* \
+ ${libdir}/${TARGET_ARCH}${TARGET_VENDOR}* \
+"
+
+FILES_linux-libc-headers = ""
+FILES_linux-libc-headers-dev = "\
+ ${includedir}/asm* \
+ ${includedir}/linux \
+ ${includedir}/mtd \
+ ${includedir}/rdma \
+ ${includedir}/scsi \
+ ${includedir}/sound \
+ ${includedir}/video \
+"
+FILES_${PN} += "\
+ ${libdir}/bin \
+ ${libdir}/locale \
+ ${libdir}/gconv/gconv-modules \
+ ${datadir}/zoneinfo \
+ ${base_libdir}/libcrypt*.so.* \
+ ${base_libdir}/libcrypt-*.so \
+ ${base_libdir}/libc.so.* \
+ ${base_libdir}/libc-*.so \
+ ${base_libdir}/libm.so.* \
+ ${base_libdir}/libmemusage.so \
+ ${base_libdir}/libm-*.so \
+ ${base_libdir}/ld*.so.* \
+ ${base_libdir}/ld-*.so \
+ ${base_libdir}/libpthread*.so.* \
+ ${base_libdir}/libpthread*.so \
+ ${base_libdir}/libpthread-*.so \
+ ${base_libdir}/libresolv*.so.* \
+ ${base_libdir}/libresolv-*.so \
+ ${base_libdir}/librt*.so.* \
+ ${base_libdir}/librt-*.so \
+ ${base_libdir}/libutil*.so.* \
+ ${base_libdir}/libutil-*.so \
+ ${base_libdir}/libnss_files*.so.* \
+ ${base_libdir}/libnss_files-*.so \
+ ${base_libdir}/libnss_compat*.so.* \
+ ${base_libdir}/libnss_compat-*.so \
+ ${base_libdir}/libnss_dns*.so.* \
+ ${base_libdir}/libnss_dns-*.so \
+ ${base_libdir}/libnss_nis*.so.* \
+ ${base_libdir}/libnss_nisplus-*.so \
+ ${base_libdir}/libnss_nisplus*.so.* \
+ ${base_libdir}/libnss_nis-*.so \
+ ${base_libdir}/libnss_hesiod*.so.* \
+ ${base_libdir}/libnss_hesiod-*.so \
+ ${base_libdir}/libdl*.so.* \
+ ${base_libdir}/libdl-*.so \
+ ${base_libdir}/libanl*.so.* \
+ ${base_libdir}/libanl-*.so \
+ ${base_libdir}/libBrokenLocale*.so.* \
+ ${base_libdir}/libBrokenLocale-*.so \
+ ${base_libdir}/libthread_db*.so.* \
+ ${base_libdir}/libthread_db-*.so \
+ ${base_libdir}/libmemusage.so \
+ ${base_libdir}/libSegFault.so \
+ ${base_libdir}/libpcprofile.so \
+ "
+
+FILES_${PN}-dbg += "${base_libdir}/debug"
+
+# From gcc-runtime.inc
+
+FILES_libg2c = "${target_libdir}/libg2c.so.*"
+SUMMARY_libg2c = "Companion runtime library for g77"
+FILES_libg2c-dev = "\
+ ${libdir}/libg2c.so \
+ ${libdir}/libg2c.a \
+ ${libdir}/libfrtbegin.a \
+"
+SUMMARY_libg2c-dev = "Companion runtime library for g77 - development files"
+
+FILES_libstdc++ = "${libdir}/libstdc++.so.*"
+SUMMARY_libstdc++ = "GNU standard C++ library"
+FILES_libstdc++-dev = "\
+ /include/c++ \
+ ${includedir}/c++/ \
+ ${libdir}/libstdc++.so \
+ ${libdir}/libstdc++*.la \
+ ${libdir}/libsupc++.la \
+"
+SUMMARY_libstdc++-dev = "GNU standard C++ library - development files"
+
+FILES_libstdc++-staticdev = "\
+ ${libdir}/libstdc++*.a \
+ ${libdir}/libsupc++.a \
+"
+SUMMARY_libstdc++-staticdev = "GNU standard C++ library - static development files"
+
+FILES_libstdc++-precompile-dev = "${includedir}/c++/${TARGET_SYS}/bits/*.gch"
+SUMMARY_libstdc++-precompile-dev = "GNU standard C++ library - precompiled header files"
+
+FILES_libssp = "${libdir}/libssp.so.*"
+SUMMARY_libssp = "GNU stack smashing protection library"
+FILES_libssp-dev = "\
+ ${libdir}/libssp*.so \
+ ${libdir}/libssp*_nonshared.a \
+ ${libdir}/libssp*.la \
+ ${libdir}/gcc/${TARGET_SYS}/${BINV}/include/ssp \
+"
+SUMMARY_libssp-dev = "GNU stack smashing protection library - development files"
+FILES_libssp-staticdev = "${libdir}/libssp*.a"
+SUMMARY_libssp-staticdev = "GNU stack smashing protection library - static development files"
+
+FILES_libquadmath = "${libdir}/libquadmath*.so.*"
+SUMMARY_libquadmath = "GNU quad-precision math library"
+FILES_libquadmath-dev = "\
+ ${libdir}/gcc/${TARGET_SYS}/${BINV}/include/quadmath* \
+ ${libdir}/libquadmath*.so \
+ ${libdir}/libquadmath.la \
+"
+SUMMARY_libquadmath-dev = "GNU quad-precision math library - development files"
+FILES_libquadmath-staticdev = "${libdir}/libquadmath.a"
+SUMMARY_libquadmath-staticdev = "GNU quad-precision math library - static development files"
+
+# NOTE: mudflap has been removed as of gcc 4.9 and has been superseded by the address sanitiser
+FILES_libmudflap = "${libdir}/libmudflap*.so.*"
+SUMMARY_libmudflap = "Pointer debugging library for gcc"
+FILES_libmudflap-dev = "\
+ ${libdir}/libmudflap*.so \
+ ${libdir}/libmudflap.la \
+"
+SUMMARY_libmudflap-dev = "Pointer debugging library for gcc - development files"
+FILES_libmudflap-staticdev = "${libdir}/libmudflap.a"
+SUMMARY_libmudflap-staticdev = "Pointer debugging library for gcc - static development files"
+
+FILES_libgomp = "${libdir}/libgomp*${SOLIBS}"
+SUMMARY_libgomp = "GNU OpenMP parallel programming library"
+FILES_libgomp-dev = "\
+ ${libdir}/libgomp*${SOLIBSDEV} \
+ ${libdir}/libgomp*.la \
+ ${libdir}/libgomp.spec \
+ ${libdir}/gcc/${TARGET_SYS}/${BINV}/include/omp.h \
+"
+SUMMARY_libgomp-dev = "GNU OpenMP parallel programming library - development files"
+FILES_libgomp-staticdev = "${libdir}/libgomp*.a"
+SUMMARY_libgomp-staticdev = "GNU OpenMP parallel programming library - static development files"
+
+FILES_libatomic = "${libdir}/libatomic.so.*"
+SUMMARY_libatomic = "GNU C++11 atomics support library"
+FILES_libatomic-dev = "\
+ ${libdir}/libatomic.so \
+ ${libdir}/libatomic.la \
+"
+SUMMARY_libatomic-dev = "GNU C++11 atomics support library - development files"
+FILES_libatomic-staticdev = "${libdir}/libatomic.a"
+SUMMARY_libatomic-staticdev = "GNU C++11 atomics support library - static development files"
+
+FILES_libitm = "${libdir}/libitm.so.*"
+SUMMARY_libitm = "GNU transactional memory support library"
+FILES_libitm-dev = "\
+ ${libdir}/libitm.so \
+ ${libdir}/libitm.la \
+ ${libdir}/libitm.spec \
+"
+SUMMARY_libitm-dev = "GNU transactional memory support library - development files"
+FILES_libitm-staticdev = "${libdir}/libitm.a"
+SUMMARY_libitm-staticdev = "GNU transactional memory support library - static development files"
+
+EAT_VER_MAIN ??= ""
+
+
+python () {
+ if not d.getVar("EAT_VER_MAIN", False):
+ raise bb.parse.SkipPackage("External ARM toolchain not configured (EAT_VER_MAIN not set).")
+ import re
+ notglibc = (re.match('.*uclibc$', d.getVar('TARGET_OS', True)) != None) or (re.match('.*musl$', d.getVar('TARGET_OS', True)) != None)
+ if notglibc:
+ raise bb.parse.SkipPackage("incompatible with target %s" %
+ d.getVar('TARGET_OS', True))
+}
diff --git a/meta-linaro-toolchain/recipes-devtools/external-arm-toolchain/files/SUPPORTED b/meta-linaro-toolchain/recipes-devtools/external-arm-toolchain/files/SUPPORTED
new file mode 100644
index 00000000..9615075e
--- /dev/null
+++ b/meta-linaro-toolchain/recipes-devtools/external-arm-toolchain/files/SUPPORTED
@@ -0,0 +1 @@
+POSIX