[meta-xilinx] [YOCTO RFC] external-xilinx-toolchain: Split to recipes

Manjukumar Matha manjukumar.harthikote-matha at xilinx.com
Tue Apr 12 16:41:49 PDT 2016


Signed-off-by: Manjukumar Matha <manjukumar.harthikote-matha at xilinx.com>
---
 conf/distro/include/tcmode-external-xilinx.inc     |  74 ++++----
 conf/distro/include/xilinx-versions.inc            |  44 +++--
 recipes-core/meta/binutils-cross-xilinx.bb         |  24 +++
 recipes-core/meta/external-xilinx-toolchain.bb     | 173 -------------------
 .../meta/external-xilinx-toolchain/SUPPORTED       |   0
 recipes-core/meta/gcc-cross-xilinx.bb              |  30 ++++
 recipes-core/meta/gcc-runtime-xilinx.bb            | 111 ++++++++++++
 recipes-core/meta/gcc-sanitizers-xilinx.bb         |  73 ++++++++
 recipes-core/meta/glibc-xilinx.bb                  | 189 +++++++++++++++++++++
 recipes-core/meta/glibc-xilinx/SUPPORTED           |   0
 recipes-core/meta/glibc-xilinx/nscd.conf           |  88 ++++++++++
 recipes-core/meta/glibc-xilinx/nscd.init           | 116 +++++++++++++
 recipes-core/meta/glibc-xilinx/nscd.service        |  19 +++
 recipes-core/meta/libgcc-xilinx.bb                 |  57 +++++++
 recipes-core/meta/linux-libc-headers-xilinx.bb     |  51 ++++++
 recipes-core/meta/xilinx-toolchain.inc             |   7 +
 16 files changed, 827 insertions(+), 229 deletions(-)
 create mode 100644 recipes-core/meta/binutils-cross-xilinx.bb
 delete mode 100644 recipes-core/meta/external-xilinx-toolchain.bb
 delete mode 100644 recipes-core/meta/external-xilinx-toolchain/SUPPORTED
 create mode 100644 recipes-core/meta/gcc-cross-xilinx.bb
 create mode 100644 recipes-core/meta/gcc-runtime-xilinx.bb
 create mode 100644 recipes-core/meta/gcc-sanitizers-xilinx.bb
 create mode 100644 recipes-core/meta/glibc-xilinx.bb
 create mode 100644 recipes-core/meta/glibc-xilinx/SUPPORTED
 create mode 100755 recipes-core/meta/glibc-xilinx/nscd.conf
 create mode 100755 recipes-core/meta/glibc-xilinx/nscd.init
 create mode 100644 recipes-core/meta/glibc-xilinx/nscd.service
 create mode 100644 recipes-core/meta/libgcc-xilinx.bb
 create mode 100644 recipes-core/meta/linux-libc-headers-xilinx.bb
 create mode 100644 recipes-core/meta/xilinx-toolchain.inc

diff --git a/conf/distro/include/tcmode-external-xilinx.inc b/conf/distro/include/tcmode-external-xilinx.inc
index b2824ac..ce19d96 100644
--- a/conf/distro/include/tcmode-external-xilinx.inc
+++ b/conf/distro/include/tcmode-external-xilinx.inc
@@ -5,31 +5,37 @@
 TOOLCHAIN_PATH_ADD = "${EXTERNAL_TOOLCHAIN}/bin:"
 PATH =. "${TOOLCHAIN_PATH_ADD}"
 
-CSL_TARGET_SYS_armv7a ?= "arm-xilinx-linux-gnueabi"
-CSL_TARGET_SYS_microblazeel ?= "microblazeel-xilinx-linux-gnu"
-CSL_TARGET_SYS = "${TARGET_SYS}"
-
-TARGET_PREFIX = "${CSL_TARGET_SYS}-"
-
-PREFERRED_PROVIDER_linux-libc-headers = "external-xilinx-toolchain"
-PREFERRED_PROVIDER_linux-libc-headers-dev = "external-xilinx-toolchain"
-PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc = "external-xilinx-toolchain"
-PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc-initial = "external-xilinx-toolchain"
-PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc-intermediate = "external-xilinx-toolchain"
-PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}g++ = "external-xilinx-toolchain"
-PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}binutils = "external-xilinx-toolchain"
-PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}libc-for-gcc = "external-xilinx-toolchain"
-PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}libc-initial = "external-xilinx-toolchain"
-PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}compilerlibs = "external-xilinx-toolchain"
-PREFERRED_PROVIDER_libgcc = "external-xilinx-toolchain"
-PREFERRED_PROVIDER_glibc = "external-xilinx-toolchain"
-PREFERRED_PROVIDER_virtual/libc = "external-xilinx-toolchain"
-PREFERRED_PROVIDER_virtual/libintl = "external-xilinx-toolchain"
-PREFERRED_PROVIDER_virtual/libiconv = "external-xilinx-toolchain"
-PREFERRED_PROVIDER_glibc-thread-db = "external-xilinx-toolchain"
-PREFERRED_PROVIDER_virtual/linux-libc-headers = "external-xilinx-toolchain"
-PREFERRED_PROVIDER_virtual/linux-libc-headers-dev = "external-xilinx-toolchain"
-PREFERRED_PROVIDER_gdbserver ??= "external-xilinx-toolchain"
+XILINX_TARGET_SYS_aarch64 ?= "aarch64-linux-gnu"
+XILINX_TARGET_SYS_armv7a ?= "arm-linux-gnueabihf"
+XILINX_TARGET_SYS_microblazeel ?= "microblazeel-xilinx-linux-gnu"
+XILINX_TARGET_SYS = "${TARGET_SYS}"
+
+TARGET_PREFIX = "${XILINX_TARGET_SYS}-"
+
+PREFERRED_PROVIDER_linux-libc-headers = "linux-libc-headers-xilinx"
+PREFERRED_PROVIDER_linux-libc-headers-dev = "linux-libc-headers-xilinx"
+PREFERRED_PROVIDER_virtual/linux-libc-headers = "linux-libc-headers-xilinx"
+PREFERRED_PROVIDER_libgcc = "libgcc-xilinx"
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}compilerlibs = "gcc-runtime-xilinx"
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}binutils = "binutils-cross-xilinx-${TARGET_ARCH}"
+
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc = "gcc-cross-xilinx-${TARGET_ARCH}"
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc-initial = "gcc-cross-xilinx-${TARGET_ARCH}"
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}gcc-intermediate = "gcc-cross-xilinx-${TARGET_ARCH}"
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}g++ = "gcc-cross-xilinx-${TARGET_ARCH}"
+
+PREFERRED_PROVIDER_gcc-sanitizers ?= "gcc-sanitizers-xilinx"
+
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}libc-for-gcc = "glibc-xilinx"
+PREFERRED_PROVIDER_virtual/${TARGET_PREFIX}libc-initial = "glibc-xilinx"
+PREFERRED_PROVIDER_glibc = "glibc-xilinx"
+PREFERRED_PROVIDER_virtual/libc = "glibc-xilinx"
+PREFERRED_PROVIDER_virtual/libintl = "glibc-xilinx"
+PREFERRED_PROVIDER_virtual/libiconv = "glibc-xilinx"
+PREFERRED_PROVIDER_glibc-thread-db = "glibc-xilinx"
+
+WARN_QA_remove = "ldflags textrel"
+ERROR_QA_remove = "ldflags textrel"
 
 # No need to re-compile the locale files
 GLIBC_INTERNAL_USE_BINARY_LOCALE = "precompiled"
@@ -39,13 +45,17 @@ TOOLCHAIN_OPTIONS = " --sysroot=${STAGING_DIR_HOST}"
 # Fix up default hash, enforce it in for CC_ARCH for packages that ignore LDFLAGS.
 TARGET_CC_ARCH_append = " ${TARGET_LINK_HASH_STYLE}"
 
-# Default sysroot is inside the Xilinx ARM v7-A toolchain in the '<CSL_TARGET_SYS>/libc' (no debug-root)
-EXTERNAL_TOOLCHAIN_SYSROOT_armv7a ??= "${EXTERNAL_TOOLCHAIN}/${CSL_TARGET_SYS}/libc"
+# Default sysroot is inside the Xilinx ARM v7-A toolchain in the '<XILINX_TARGET_SYS>/libc' (no debug-root)
+EXTERNAL_TOOLCHAIN_SYSROOT_armv7a ??= "${EXTERNAL_TOOLCHAIN}/${XILINX_TARGET_SYS}/libc"
 EXTERNAL_TOOLCHAIN_DBGROOT_armv7a ??= ""
 
-# Default sysroot is inside the Xilinx MicroBlaze toolchain in the '<CSL_TARGET_SYS>/sys-root'
-EXTERNAL_TOOLCHAIN_SYSROOT_microblazeel ??= "${EXTERNAL_TOOLCHAIN}/${CSL_TARGET_SYS}/sys-root"
-EXTERNAL_TOOLCHAIN_DBGROOT_microblazeel ??= "${EXTERNAL_TOOLCHAIN}/${CSL_TARGET_SYS}/debug-root"
+# Default sysroot is inside the Xilinx ARM v8-A toolchain in the '<XILINX_TARGET_SYS>/libc' (no debug-root)
+EXTERNAL_TOOLCHAIN_SYSROOT_aarch64 ??= "${EXTERNAL_TOOLCHAIN}/${XILINX_TARGET_SYS}/libc"
+EXTERNAL_TOOLCHAIN_DBGROOT_aarch64 ??= "${EXTERNAL_TOOLCHAIN}/${XILINX_TARGET_SYS}/debug-root"
+
+# Default sysroot is inside the Xilinx MicroBlaze toolchain in the '<XILINX_TARGET_SYS>/sys-root'
+EXTERNAL_TOOLCHAIN_SYSROOT_microblazeel ??= "${EXTERNAL_TOOLCHAIN}/${XILINX_TARGET_SYS}/sys-root"
+EXTERNAL_TOOLCHAIN_DBGROOT_microblazeel ??= "${EXTERNAL_TOOLCHAIN}/${XILINX_TARGET_SYS}/debug-root"
 
 addhandler toolchain_setup
 toolchain_setup[eventmask] = "bb.event.BuildStarted"
@@ -58,7 +68,7 @@ python toolchain_setup () {
 
     tarprefix = d.expand('${TARGET_PREFIX}')
     files = []
-    if tarprefix == "arm-xilinx-linux-gnueabi-":
+    if (tarprefix == "arm-linux-gnueabihf-") or (tarprefix == "arm-xilinx-linux-gnueabi-"):
         files.append((tarprefix + "ld", tarprefix + "ld.bfd"))
 
     if len(files) > 0:
@@ -76,6 +86,8 @@ python toolchain_setup () {
                 bb.fatal("Unable to populate toolchain binary symlink for %s: %s" % (f[0], f[1]))
 }
 
+XILINX_VER_MAIN ?= "2000.0"
+
 require conf/distro/include/xilinx-versions.inc
 
 # Setup suitable toolchain flags
diff --git a/conf/distro/include/xilinx-versions.inc b/conf/distro/include/xilinx-versions.inc
index 4e44f07..ae7290e 100644
--- a/conf/distro/include/xilinx-versions.inc
+++ b/conf/distro/include/xilinx-versions.inc
@@ -1,4 +1,4 @@
-def csl_run(d, cmd, *args):
+def xlnx_run(d, cmd, *args):
 	import bb.process
 	import subprocess
 
@@ -13,9 +13,9 @@ def csl_run(d, cmd, *args):
 
 	return bb.process.run(args, cwd=topdir, stderr=subprocess.PIPE)
 
-def csl_get_version(d):
+def xlnx_get_version(d):
 	try:
-		stdout, stderr = csl_run(d, 'gcc', '-v')
+		stdout, stderr = xlnx_run(d, 'gcc', '-v')
 	except bb.process.CmdError as exc:
 		bb.error('Failed to obtain CodeSourcery toolchain version: %s' % exc)
 		bb.error('Make sure that MACHINE is set correctly in your local.conf and the toolchain supports %s.' % d.getVar("TARGET_ARCH", True))
@@ -27,21 +27,16 @@ def csl_get_version(d):
 				return lines[i]
 		return 'UNKNOWN'
 
-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)
+def xlnx_get_gcc_version(d):
+	version = xlnx_get_version(d)
 	if version != 'UNKNOWN':
 		return version.split()[2]
 	else:
 		return version
 
-def xilinx_get_libc_version(d):
+def xlnx_get_libc_version(d):
+	import fnmatch
+
 	syspath = d.expand('${EXTERNAL_TOOLCHAIN_SYSROOT}')
 	if not syspath:
 		return 'UNKNOWN'
@@ -51,12 +46,12 @@ def xilinx_get_libc_version(d):
 		libpath = syspath + '/sgxx-glibc/lib/'
 
 	if os.path.exists(libpath):
-		for file in os.listdir(libpath):
-			if file.find('libc-') == 0:
-				return file[5:-3]
+		for root,dirs,files in os.walk(libpath):
+			for filename in fnmatch.filter(files,'libc-*.so'):
+				return filename[5:-3]
 	return 'UNKNOWN'
 
-def xilinx_get_kernel_version(d):
+def xlnx_get_kernel_version(d):
 	syspath = d.expand('${EXTERNAL_TOOLCHAIN_SYSROOT}')
 	if not syspath:
 		return 'UNKNOWN'
@@ -82,9 +77,9 @@ def xilinx_get_kernel_version(d):
 			return str(maj)+'.'+str(min)+'.'+str(ver)
 	return 'UNKNOWN'
 
-def csl_get_gdb_version(d):
+def xlnx_get_gdb_version(d):
 	try:
-		stdout, stderr = csl_run(d, 'gdb', '-v')
+		stdout, stderr = xlnx_run(d, 'gdb', '-v')
 	except bb.process.CmdError:
 		return 'UNKNOWN'
 	else:
@@ -96,15 +91,14 @@ python xilinx_version_handler () {
     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', xilinx_get_libc_version(ld))
-    d.setVar('CSL_VER_KERNEL', xilinx_get_kernel_version(ld))
-    d.setVar('CSL_VER_GDB', csl_get_gdb_version(ld))
+    d.setVar('XILINX_VER_GCC', xlnx_get_gcc_version(ld))
+    d.setVar('XILINX_VER_LIBC', xlnx_get_libc_version(ld))
+    d.setVar('XILINX_VER_KERNEL', xlnx_get_kernel_version(ld))
+    d.setVar('XILINX_VER_GDB', xlnx_get_gdb_version(ld))
 }
 addhandler xilinx_version_handler
 xilinx_version_handler[eventmask] = "bb.event.ConfigParsed"
 
 # Ensure that any variable which includes the --sysroot (CC, CXX, etc) also
 # depends on the toolchain version
-TOOLCHAIN_OPTIONS[vardeps] += "CSL_VER_MAIN CSL_VER_GCC"
+TOOLCHAIN_OPTIONS[vardeps] += "XILINX_VER_MAIN XILINX_VER_GCC"
diff --git a/recipes-core/meta/binutils-cross-xilinx.bb b/recipes-core/meta/binutils-cross-xilinx.bb
new file mode 100644
index 0000000..4fc4609
--- /dev/null
+++ b/recipes-core/meta/binutils-cross-xilinx.bb
@@ -0,0 +1,24 @@
+SUMMARY = "External Xilinx toolchain"
+include xilinx-toolchain.inc
+
+PN .= "-${TARGET_ARCH}"
+BPN = "binutils"
+
+PV = "${XILINX_VER_MAIN}"
+PKGV = "${XILINX_VER_GCC}"
+
+PR =  "r1"
+
+LICENSE = "GPL-3.0"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/GPL-3.0;md5=c79ff39f19dfec6d293b95dea7b07891"
+
+PROVIDES = "virtual/${TARGET_PREFIX}binutils"
+
+FILES_${PN}-dbg=""
+FILES_${PN}-dev=""
+
+ALLOW_EMPTY_${PN}-dev = "0"
+ALLOW_EMPTY_${PN}-dbg = "0"
+
+INHIBIT_AUTOTOOLS_DEPS = "1"
+INHIBIT_DEFAULT_DEPS = "1"
diff --git a/recipes-core/meta/external-xilinx-toolchain.bb b/recipes-core/meta/external-xilinx-toolchain.bb
deleted file mode 100644
index 2274eea..0000000
--- a/recipes-core/meta/external-xilinx-toolchain.bb
+++ /dev/null
@@ -1,173 +0,0 @@
-require recipes-core/glibc/glibc-package.inc
-
-INHIBIT_DEFAULT_DEPS = "1"
-
-# License applies to this recipe code, not the toolchain itself
-SUMMARY = "External Xilinx toolchain"
-LICENSE = "MIT"
-LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
-
-DEPENDS += "${@base_conditional('PREFERRED_PROVIDER_linux-libc-headers', PN, '', 'linux-libc-headers', d)}"
-PROVIDES += "\
-	linux-libc-headers \
-	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}libc-initial \
-	virtual/${TARGET_PREFIX}compilerlibs \
-	virtual/libc \
-	virtual/libintl \
-	virtual/libiconv \
-	virtual/linux-libc-headers \
-	glibc-thread-db \
-	libgcc \
-	glibc \
-	"
-
-PV = "${CSL_VER_MAIN}"
-PR = "r1"
-
-SRC_URI = "file://SUPPORTED"
-
-do_install() {
-	# Use optimized files if available
-	sysroot="${EXTERNAL_TOOLCHAIN_SYSROOT}"
-	dbgroot="${EXTERNAL_TOOLCHAIN_DBGROOT}"
-
-	cp -a $sysroot${base_libdir}/. ${D}${base_libdir}
-	cp -a $sysroot/sbin/. ${D}${base_sbindir}
-	
-	install -d ${D}/usr
-	for usr_element in bin libexec sbin share ${base_libdir}; do
-		# Copy files from both the sysroot and the debugroot if they exist
-		if [ ! -z "$sysroot" -a -e $sysroot/usr/$usr_element ]; then
-			cp -a $sysroot/usr/$usr_element ${D}/usr/
-		fi
-		if [ ! -z "$dbgroot" -a -e $dbgroot/usr/$usr_element ]; then
-			cp -a $dbgroot/usr/$usr_element ${D}/usr/
-		fi
-	done
-
-	# Copy Include files
-	cp -a $sysroot/usr/include/. ${D}${includedir}
-
-	# strip out any multi-lib files (they are not supported)
-	for element in bs m ldscripts; do
-		if [ -e ${D}${libdir}/$element ]; then
-			rm -rf ${D}${libdir}/$element
-		fi
-		if [ -e ${D}${base_libdir}/$element ]; then
-			rm -rf ${D}${base_libdir}/$element
-		fi
-	done
-
-	# Clean up the image (remove files and directories that are not packaged)
-	## ${D}${sysconfdir}
-	for i in ${D}/usr/share/zoneinfo ${D}/usr/lib/bin ${D}/usr/libexec ; do
-		if [ -e $i ]; then
-			rm -rf $i
-		fi
-	done
-
-	# Move some of the libs in /lib to /usr/lib
-	for i in libstdc++ libssp libatomic; do
-		if [ -e ${D}${base_libdir}/$i.so ]; then
-			mv ${D}${base_libdir}/$i.* ${D}${libdir}/
-		fi
-	done
-
-	sed -i -e 's/__packed/__attribute__ ((packed))/' ${D}${includedir}/mtd/ubi-user.h
-	sed -i -e "s# ${base_libdir}# ../..${base_libdir}#g" -e "s# ${libdir}# .#g" ${D}${libdir}/libc.so
-	sed -i -e "s# ${base_libdir}# ../..${base_libdir}#g" -e "s# ${libdir}# .#g" ${D}${libdir}/libpthread.so
-}
-
-PACKAGES =+ " \
-		libgcc libgcc-dev \
-		libssp libssp-dev libssp-staticdev \
-		libatomic libatomic-dev libatomic-staticdev \
-		libstdc++ libstdc++-dev libstdc++-staticdev \
-		linux-libc-headers linux-libc-headers-dev \
-		gdbserver gdbserver-dbg \
-		"
-
-RDEPENDS_ldd += "bash"
-RDEPENDS_tzcode += "bash"
-
-# This test should be fixed to ignore .a files in .debug dirs
-INSANE_SKIP_${PN}-dbg = "staticdev"
-
-# We don't care about GNU_HASH in prebuilt binaries
-INSANE_SKIP_${PN}-utils += "ldflags"
-INSANE_SKIP_${PN}-dev += "ldflags"
-INSANE_SKIP_libstdc++ += "ldflags"
-INSANE_SKIP_libgcc += "ldflags"
-INSANE_SKIP_libssp += "ldflags"
-INSANE_SKIP_libatomic += "ldflags"
-INSANE_SKIP_gdbserver += "ldflags"
-
-PKG_${PN} = "glibc"
-PKG_${PN}-dev = "glibc-dev"
-PKG_${PN}-staticdev = "glibc-staticdev"
-PKG_${PN}-doc = "glibc-doc"
-PKG_${PN}-dbg = "glibc-dbg"
-PKG_${PN}-pic = "glibc-pic"
-PKG_${PN}-utils = "glibc-utils"
-PKG_${PN}-gconv = "glibc-gconv"
-PKG_${PN}-extra-nss = "glibc-extra-nss"
-PKG_${PN}-thread-db = "glibc-thread-db"
-PKG_${PN}-pcprofile = "glibc-pcprofile"
-
-PKGV = "${CSL_VER_LIBC}"
-PKGV_libssp = "${CSL_VER_GCC}"
-PKGV_libssp-dev = "${CSL_VER_GCC}"
-PKGV_libssp-staticdev = "${CSL_VER_GCC}"
-PKGV_libatomic = "${CSL_VER_GCC}"
-PKGV_libatomic-dev = "${CSL_VER_GCC}"
-PKGV_libatomic-staticdev = "${CSL_VER_GCC}"
-PKGV_libgcc = "${CSL_VER_GCC}"
-PKGV_libgcc-dev = "${CSL_VER_GCC}"
-PKGV_libstdc++ = "${CSL_VER_GCC}"
-PKGV_libstdc++-dev = "${CSL_VER_GCC}"
-PKGV_libstdc++-staticdev = "${CSL_VER_GCC}"
-PKGV_linux-libc-headers = "${CSL_VER_KERNEL}"
-PKGV_linux-libc-headers-dev = "${CSL_VER_KERNEL}"
-PKGV_gdbserver = "${CSL_VER_GDB}"
-PKGV_gdbserver-dbg = "${CSL_VER_GDB}"
-
-FILES_libssp = "${libdir}/libssp.so.*"
-FILES_libssp-dev = "${libdir}/libssp.so ${libdir}/libssp_nonshared.a ${libdir}/libssp_nonshared.la"
-FILES_libssp-staticdev = "${libdir}/libssp.a ${libdir}/libssp.la"
-FILES_libatomic = "${libdir}/libatomic.so.*"
-FILES_libatomic-dev = "${libdir}/libatomic.so"
-FILES_libatomic-staticdev = "${libdir}/libatomic.a ${libdir}/libatomic.la"
-FILES_libgcc = "${base_libdir}/libgcc_s.so.1"
-FILES_libgcc-dev = "${base_libdir}/libgcc_s.so"
-FILES_libstdc++ = "${libdir}/libstdc++.so.*"
-FILES_libstdc++-dev = " \
-	${includedir}/c++/${PV} \
-	${libdir}/libstdc++.so \
-	${libdir}/libstdc++.la \
-	${libdir}/libsupc++.la \
-	"
-FILES_libstdc++-staticdev = "${libdir}/libstdc++.a ${libdir}/libsupc++.a"
-FILES_linux-libc-headers = " \
-	${includedir}/asm* \
-	${includedir}/linux \
-	${includedir}/mtd \
-	${includedir}/rdma \
-	${includedir}/scsi \
-	${includedir}/sound \
-	${includedir}/video \
-	"
-FILES_gdbserver = "${bindir}/gdbserver"
-FILES_gdbserver-dbg = "${bindir}/.debug/gdbserver"
-
-CSL_VER_MAIN ??= ""
-
-python () {
-    if not d.getVar("CSL_VER_MAIN", True):
-        raise bb.parse.SkipPackage("External toolchain not configured (CSL_VER_MAIN not set).")
-}
diff --git a/recipes-core/meta/external-xilinx-toolchain/SUPPORTED b/recipes-core/meta/external-xilinx-toolchain/SUPPORTED
deleted file mode 100644
index e69de29..0000000
diff --git a/recipes-core/meta/gcc-cross-xilinx.bb b/recipes-core/meta/gcc-cross-xilinx.bb
new file mode 100644
index 0000000..b3c465f
--- /dev/null
+++ b/recipes-core/meta/gcc-cross-xilinx.bb
@@ -0,0 +1,30 @@
+SUMMARY = "External Xilinx toolchain"
+include xilinx-toolchain.inc
+
+PN .= "-${TARGET_ARCH}"
+
+PV = "${XILINX_VER_MAIN}"
+PKGV = "${XILINX_VER_GCC}"
+
+PR = "r1"
+
+LICENSE = "GPL-3.0-with-GCC-exception & GPL-3.0"
+LIC_FILES_CHKSUM = "\
+	file://${COMMON_LICENSE_DIR}/GPL-3.0-with-GCC-exception;md5=aef5f35c9272f508be848cd99e0151df \
+	file://${COMMON_LICENSE_DIR}/GPL-3.0;md5=c79ff39f19dfec6d293b95dea7b07891 \
+	"
+
+DEPENDS = "virtual/${TARGET_PREFIX}binutils"
+
+PROVIDES = "\
+	virtual/${TARGET_PREFIX}gcc-initial \
+	virtual/${TARGET_PREFIX}gcc-intermediate \
+	virtual/${TARGET_PREFIX}gcc \
+	virtual/${TARGET_PREFIX}g++ \
+	"
+
+ALLOW_EMPTY_${PN}-dev = "0"
+ALLOW_EMPTY_${PN}-dbg = "0"
+
+INHIBIT_AUTOTOOLS_DEPS = "1"
+INHIBIT_DEFAULT_DEPS = "1"
diff --git a/recipes-core/meta/gcc-runtime-xilinx.bb b/recipes-core/meta/gcc-runtime-xilinx.bb
new file mode 100644
index 0000000..900a15a
--- /dev/null
+++ b/recipes-core/meta/gcc-runtime-xilinx.bb
@@ -0,0 +1,111 @@
+SUMMARY = "External Xilinx toolchain"
+include xilinx-toolchain.inc
+
+PV = "${XILINX_VER_MAIN}"
+PKGV = "${XILINX_VER_GCC}"
+
+PR = "r1"
+
+LICENSE = "GPL-3.0-with-GCC-exception & GPL-3.0"
+LICENSE_gcc-runtime-dbg = "GPL-3.0-with-GCC-exception & GPL-3.0"
+LICENSE_libstdc++ = "GPL-3.0-with-GCC-exception"
+LICENSE_libstdc++-precompile-dev = "GPL-3.0-with-GCC-exception"
+LICENSE_libstdc++-dev = "GPL-3.0-with-GCC-exception"
+LICENSE_libstdc++-staticdev = "GPL-3.0-with-GCC-exception"
+LICENSE_libssp = "GPL-3.0-with-GCC-exception"
+LICENSE_libssp-dev = "GPL-3.0-with-GCC-exception"
+LICENSE_libssp-staticdev = "GPL-3.0-with-GCC-exception"
+LICENSE_libatomic = "GPL-3.0-with-GCC-exception"
+LICENSE_libatomic-dev = "GPL-3.0-with-GCC-exception"
+LICENSE_libatomic-staticdev = "GPL-3.0-with-GCC-exception"
+LIC_FILES_CHKSUM = "\
+	file://${COMMON_LICENSE_DIR}/GPL-3.0-with-GCC-exception;md5=aef5f35c9272f508be848cd99e0151df \
+	file://${COMMON_LICENSE_DIR}/GPL-3.0;md5=c79ff39f19dfec6d293b95dea7b07891 \
+	"
+
+DEPENDS = "virtual/${TARGET_PREFIX}gcc virtual/${TARGET_PREFIX}g++ libgcc"
+PROVIDES = "virtual/${TARGET_PREFIX}compilerlibs"
+
+INHIBIT_DEFAULT_DEPS = "1"
+
+PACKAGES = "\
+	gcc-runtime-dbg \
+	libstdc++ \
+	libstdc++-dev \
+	libstdc++-staticdev \
+	libssp \
+	libssp-dev \
+	libssp-staticdev \
+	libatomic \
+	libatomic-dev \
+	libatomic-staticdev \
+"
+
+# The base package doesn't exist, so we clear the recommends.
+RRECOMMENDS_gcc-runtime-dbg = ""
+
+FILES_gcc-runtime-dbg = "${libdir}/.debug/"
+
+FILES_libstdc++ = "${libdir}/libstdc++.so.*"
+FILES_libstdc++-dev = "\
+	${includedir}/c++/ \
+	${libdir}/libstdc++.so \
+	${libdir}/libstdc++.la \
+	${libdir}/libsupc++.la \
+"
+FILES_libstdc++-staticdev = "\
+	${libdir}/libstdc++.a \
+	${libdir}/libsupc++.a \
+"
+
+FILES_libssp = "${libdir}/libssp.so.*"
+FILES_libssp-dev = "\
+	${libdir}/libssp*.so \
+	${libdir}/libssp*_nonshared.a \
+	${libdir}/libssp*.la \
+	${libdir}/gcc/${XILINX_TARGET_SYS}/${XILINX_VER_GCC}/include/ssp \
+"
+FILES_libssp-staticdev = "${libdir}/libssp*.a"
+
+FILES_libatomic = "${libdir}/libatomic.so.*"
+FILES_libatomic-dev = "\
+	${libdir}/libatomic.so \
+	${libdir}/libatomic.la \
+"
+FILES_libatomic-staticdev = "${libdir}/libatomic.a"
+
+INSANE_SKIP_${PN}-dev = "ldflags"
+INSANE_SKIP_libstdc++ = "ldflags"
+INSANE_SKIP_libstdc++-dev = "ldflags"
+INSANE_SKIP_libssp = "ldflags"
+INSANE_SKIP_libatomic = "ldflags"
+INSANE_SKIP_libatomic-dev = "ldflags"
+
+do_install() {
+	root="${EXTERNAL_TOOLCHAIN}"
+	sysroot="${EXTERNAL_TOOLCHAIN_SYSROOT}"
+
+	install -d ${D}/${libdir} \
+		${D}/${includedir} \
+		${D}/${libdir}/gcc/${XILINX_TARGET_SYS}/${XILINX_VER_GCC}/include/ssp
+
+	find $root \( -path "*/${XILINX_TARGET_SYS}/*/libstdc++.*" \
+		-o -path "*/${XILINX_TARGET_SYS}/*/libatomic.*" \
+		-o -path "*/${XILINX_TARGET_SYS}/*/libssp*" \
+		-o -path "*/${XILINX_TARGET_SYS}/*/libsupc++.a" \) \
+		-exec cp -a {} ${D}/usr/lib \;
+
+	cp -a ${sysroot}/../include/. ${D}/${includedir}
+
+	find $root -path "*/${XILINX_TARGET_SYS}/*/include/ssp/*" \
+	-exec cp -a {} ${D}/usr/lib/gcc/${XILINX_TARGET_SYS}/${XILINX_VER_GCC}/include/ssp \;
+
+	# Move some of the libs in /lib to /usr/lib
+	for i in libstdc++ libssp libatomic; do
+		if [ -e ${D}${base_libdir}/$i.so ]; then
+			mv ${D}${base_libdir}/$i.* ${D}${libdir}/
+		fi
+	done
+}
+
+do_package[depends] = "virtual/${MLPREFIX}libc:do_packagedata"
diff --git a/recipes-core/meta/gcc-sanitizers-xilinx.bb b/recipes-core/meta/gcc-sanitizers-xilinx.bb
new file mode 100644
index 0000000..021a43b
--- /dev/null
+++ b/recipes-core/meta/gcc-sanitizers-xilinx.bb
@@ -0,0 +1,73 @@
+SUMMARY = "External Xilinx toolchain"
+include xilinx-toolchain.inc
+
+PV = "${XILINX_VER_MAIN}"
+PKGV = "${XILINX_VER_GCC}"
+
+PR = "r1"
+
+LICENSE = "NCSA | MIT"
+LIC_FILES_CHKSUM = "\
+	file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420 \
+	file://${COMMON_LICENSE_DIR}/NCSA;md5=1b5fdec70ee13ad8a91667f16c1959d7 \
+	"
+
+INHIBIT_DEFAULT_DEPS = "1"
+
+DEPENDS = "gcc-runtime"
+
+PROVIDES = "virtual/${TARGET_PREFIX}gcc-sanitizers gcc-sanitizers"
+
+PACKAGES = "\
+	libasan \
+	libasan-dev \
+	libasan-dbg \
+	libasan-staticdev \
+	libubsan \
+	libubsan-dev \
+	libubsan-dbg \
+	libubsan-staticdev \
+"
+
+RDEPENDS_libasan = "libstdc++"
+RDEPENDS_libubsan = "libstdc++"
+RDEPENDS_libasan-dev = "${PN}"
+RDEPENDS_libubsan-dev = "${PN}"
+RRECOMMENDS_${PN} = "libasan libubsan"
+
+FILES_${PN} = ""
+FILES_${PN}-dev = ""
+FILES_${PN}-staticdev = ""
+
+FILES_libasan = "${libdir}/libasan.so.*"
+FILES_libasan-dbg = "${libdir}/.debug/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-dbg = "${libdir}/.debug/libubsan.so.*"
+FILES_libubsan-dev = "\
+	${libdir}/libubsan.so \
+	${libdir}/libubsan.la \
+"
+FILES_libubsan-staticdev = "${libdir}/libubsan.a"
+
+INSANE_SKIP_libasan = "build-deps ldflags"
+INSANE_SKIP_libasan-dev = "build-deps ldflags"
+INSANE_SKIP_libubsan = "build-deps ldflags"
+INSANE_SKIP_libubsan-dev = "build-deps ldflags"
+
+do_install() {
+	root="${EXTERNAL_TOOLCHAIN}"
+
+	install -d ${D}/${libdir}
+
+	find $root \( -path "*/${XILINX_TARGET_SYS}/*/libasan.*" \
+	-o -path "*/${XILINX_TARGET_SYS}/*/libasan_preinit.o" \
+	-o -path "*/${XILINX_TARGET_SYS}/*/libusan*" \) \
+	-exec cp -a {} ${D}/${libdir} \;
+}
diff --git a/recipes-core/meta/glibc-xilinx.bb b/recipes-core/meta/glibc-xilinx.bb
new file mode 100644
index 0000000..2dd1516
--- /dev/null
+++ b/recipes-core/meta/glibc-xilinx.bb
@@ -0,0 +1,189 @@
+require recipes-core/glibc/glibc-package.inc
+SUMMARY = "External Xilinx toolchain"
+include xilinx-toolchain.inc
+
+PV = "${XILINX_VER_MAIN}"
+PKGV = "${XILINX_VER_LIBC}"
+
+PR = "r1"
+
+LICENSE = "GPLv2 & LGPL-2.1"
+LIC_FILES_CHKSUM = " \
+	file://${COREBASE}/meta/COPYING.GPLv2;md5=751419260aa954499f7abaabaa882bbe \
+	file://${COMMON_LICENSE_DIR}/LGPL-2.1;md5=1a6d268fd218675ffea8be556788b780 \
+	"
+
+INHIBIT_DEFAULT_DEPS = "1"
+DEPENDS = "virtual/${TARGET_PREFIX}binutils linux-libc-headers"
+
+PROVIDES += "\
+	glibc \
+	virtual/${TARGET_PREFIX}libc-for-gcc \
+	virtual/${TARGET_PREFIX}libc-initial \
+	virtual/libc \
+	virtual/libintl \
+	virtual/libiconv \
+	glibc-thread-db \
+	"
+S = "${WORKDIR}"
+
+SRC_URI = " \
+	file://SUPPORTED \
+	file://nscd.init \
+	file://nscd.conf \
+	file://nscd.service \
+	"
+
+RDEPENDS_ldd += "bash"
+RDEPENDS_tzcode += "bash"
+
+# This test should be fixed to ignore .a files in .debug dirs
+INSANE_SKIP_${PN}-dbg = "staticdev"
+INSANE_SKIP_${PN} += "build-deps"
+# We don't care about GNU_HASH in prebuilt binaries
+INSANE_SKIP_${PN}-utils += "build-deps ldflags"
+INSANE_SKIP_${PN}-dev += "ldflags"
+
+PKG_${PN} = "glibc"
+RPROVIDES_${PN} += "${TCLIBC} glibc"
+PKG_${PN}-dbg = "glibc-dbg"
+RPROVIDES_${PN}-dbg += "${TCLIBC}-dbg glibc-dbg"
+PKG_${PN}-dev = "glibc-dev"
+RPROVIDES_${PN}-dev += "${TCLIBC}-dev glibc-dev"
+PKG_${PN}-doc = "glibc-doc"
+RPROVIDES_${PN}-doc += "${TCLIBC}-doc glibc-doc"
+PKG_${PN}-extra-nss = "glibc-extra-nss"
+RPROVIDES_${PN}-extra-nss += "${TCLIBC}-extra-nss glibc-extra-nss"
+PKG_${PN}-gconv = "glibc-gconv"
+RPROVIDES_${PN}-gconv += "${TCLIBC}-gconv glibc-gconv"
+PKG_${PN}-mtrace = "glibc-mtrace"
+RPROVIDES_${PN}-mtrace += "${TCLIBC}-mtrace glibc-mtrace"
+PKG_${PN}-pcprofile = "glibc-pcprofile"
+RPROVIDES_${PN}-pcprofile += "${TCLIBC}-pcprofile glibc-pcprofile"
+PKG_${PN}-pic = "glibc-pic"
+RPROVIDES_${PN}-pic += "${TCLIBC}-pic glibc-pic"
+PKG_${PN}-staticdev = "glibc-staticdev"
+RPROVIDES_${PN}-staticdev += "${TCLIBC}-staticdev glibc-staticdev"
+PKG_${PN}-thread-db = "glibc-thread-db"
+RPROVIDES_${PN}-thread-db += "${TCLIBC}-thread-db glibc-thread-db"
+PKG_${PN}-utils = "glibc-utils"
+RPROVIDES_${PN}-utils += "${TCLIBC}-utils glibc-utils"
+
+FILES_${PN} += " /lib/${XILINX_TARGET_SYS} /usr/lib/${XILINX_TARGET_SYS}"
+
+do_install() {
+	# Use optimized files if available
+	sysroot="${EXTERNAL_TOOLCHAIN_SYSROOT}"
+	root="${EXTERNAL_TOOLCHAIN}"
+
+	install -d ${D}/lib
+	set -f
+	for ele in ${libc_baselibs} ${FILES_libsegfault} \
+		${FILES_libcidn} ${FILES_libmemusage} \
+		${FILES_glibc-extra-nss} ${FILES_glibc-thread-db} \
+		${FILES_${PN}-pcprofile} ; do
+		ele=$(echo $ele |  sed -e "s%^/lib.*/%%")
+		find $root -name "$ele" -exec cp -a {} ${D}/lib \;
+	done
+	set +f
+
+	find $root -path "*/${XILINX_TARGET_SYS}/*/ld*.so*" -exec cp -a {} ${D}/lib \;
+
+	cp -a $sysroot/sbin/. ${D}${base_sbindir}
+
+	install -d ${D}/usr
+	for usr_element in bin libexec sbin share ${base_libdir}; do
+		if [ ! -z "$sysroot" -a -e $sysroot/usr/$usr_element ]; then
+			cp -a $sysroot/usr/$usr_element ${D}/usr/
+		fi
+	done
+
+	if [ "${XILINX_TARGET_SYS}" == "aarch64-linux-gnu" ] ||  \
+	   [ "${XILINX_TARGET_SYS}" == "arm-linux-gnueabihf" ]; then
+
+		if [ -d ${D}/usr/lib/arm-linux-gnueabi ]; then
+			rm -rf ${D}/usr/lib/arm-linux-gnueabi
+	        fi
+                if [ -h ${D}/lib/ld-linux.so.3 ]; then
+                        rm ${D}/lib/ld-linux.so.3
+                fi
+
+		linker_name="${@base_contains("TUNE_FEATURES", "aarch64", "ld-linux-aarch64.so.1", "ld-linux-armhf.so.3",d)}"
+		file=$(basename $(readlink -m ${D}/lib/${linker_name}))
+		rm ${D}/lib/$linker_name
+		ln -s ./$file ${D}/lib/$linker_name
+
+		mv ${D}/usr/lib/${XILINX_TARGET_SYS}/* ${D}/usr/lib
+		rm -r ${D}/usr/lib/${XILINX_TARGET_SYS}
+		for link in $(find ${D}/usr/lib -type l); do
+			file=$(basename $(readlink -m ${link}))
+			rm $link
+			ln -s ../../lib/$file $link
+		done
+		ln -s . ${D}/usr/lib/${XILINX_TARGET_SYS}
+		ln -s . ${D}/lib/${XILINX_TARGET_SYS}
+		rm ${D}/usr/lib/*.map
+		rm -r ${D}/usr/lib/libc_pic
+	fi
+
+	find ${D}/usr/ \( -path "*/usr/lib/libstdc++*" \
+		-o -path "*/usr/lib/libasan*" \
+		-o -path "*/usr/lib/libubsan*" \
+		-o -path "*/usr/lib/libatomic*" \) \
+		-exec rm {} \;
+
+	cp -a $sysroot/usr/include/. ${D}${includedir}
+
+	for d in xen asm asm-generic linux mtd rdma scsi sound video bits drm; do
+		rm -rf "${D}${includedir}/$d"
+	done
+	mkdir -p ${D}${includedir}/bits
+	cp -a $sysroot/usr/include/bits/syscall.h ${D}${includedir}/bits/syscall.h
+
+	# strip out any multi-lib files (they are not supported)
+	for element in bs m ldscripts; do
+		if [ -e ${D}${libdir}/$element ]; then
+			rm -rf ${D}${libdir}/$element
+		fi
+		if [ -e ${D}${base_libdir}/$element ]; then
+			rm -rf ${D}${base_libdir}/$element
+		fi
+	done
+
+	if [ "${XILINX_TARGET_SYS}" == "arm-xilinx-linux-gnueabi" ]; then
+		if [ -e ${D}${libdir}/locale ]; then
+			rm -rf ${D}${libdir}/locale
+		fi
+	fi
+
+	# Clean up the image (remove files and directories that are not packaged)
+	for i in ${D}/usr/share/zoneinfo ${D}/usr/lib/bin ${D}/usr/libexec ; do
+		if [ -e $i ]; then
+			rm -rf $i
+		fi
+	done
+
+	if [ -f ${D}${libdir}/libc.so ];then
+		sed -i -e "s# ${base_libdir}# ../..${base_libdir}#g" \
+			-e "s#/${XILINX_TARGET_SYS}##g" \
+			-e "s# ${libdir}# .#g" ${D}${libdir}/libc.so
+	fi
+	if [ -f ${D}${libdir}/libpthread.so ];then
+		sed -i -e "s# ${base_libdir}# ../..${base_libdir}#g" \
+			-e "s#/${XILINX_TARGET_SYS}##g" \
+			-e "s# ${libdir}# .#g" ${D}${libdir}/libpthread.so
+	fi
+
+	find  ${D}/usr/lib  -name "*crt*.o" -exec chmod -x {} \;
+	find  ${D}/usr/lib  -name "*.a" -exec chmod -x {} \;
+
+	install -d ${S}/nscd
+	install -m 0755 ${WORKDIR}/nscd.conf ${S}/nscd/nscd.conf
+	install -m 0755 ${WORKDIR}/nscd.init ${S}/nscd/nscd.init
+	install -m 0755 ${WORKDIR}/nscd.service ${S}/nscd/nscd.service
+}
+
+do_package[depends] += "${MLPREFIX}libgcc:do_packagedata"
+do_package_write_ipk[depends] += "${MLPREFIX}libgcc:do_packagedata"
+do_package_write_deb[depends] += "${MLPREFIX}libgcc:do_packagedata"
+do_package_write_rpm[depends] += "${MLPREFIX}libgcc:do_packagedata"
diff --git a/recipes-core/meta/glibc-xilinx/SUPPORTED b/recipes-core/meta/glibc-xilinx/SUPPORTED
new file mode 100644
index 0000000..e69de29
diff --git a/recipes-core/meta/glibc-xilinx/nscd.conf b/recipes-core/meta/glibc-xilinx/nscd.conf
new file mode 100755
index 0000000..39b8759
--- /dev/null
+++ b/recipes-core/meta/glibc-xilinx/nscd.conf
@@ -0,0 +1,88 @@
+#
+# /etc/nscd.conf
+#
+# An example Name Service Cache config file.  This file is needed by nscd.
+#
+# Legal entries are:
+#
+#	logfile			<file>
+#	debug-level		<level>
+#	threads			<initial #threads to use>
+#	max-threads		<maximum #threads to use>
+#	server-user             <user to run server as instead of root>
+#		server-user is ignored if nscd is started with -S parameters
+#       stat-user               <user who is allowed to request statistics>
+#	reload-count		unlimited|<number>
+#	paranoia		<yes|no>
+#	restart-interval	<time in seconds>
+#
+#       enable-cache		<service> <yes|no>
+#	positive-time-to-live	<service> <time in seconds>
+#	negative-time-to-live   <service> <time in seconds>
+#       suggested-size		<service> <prime number>
+#	check-files		<service> <yes|no>
+#	persistent		<service> <yes|no>
+#	shared			<service> <yes|no>
+#	max-db-size		<service> <number bytes>
+#	auto-propagate		<service> <yes|no>
+#
+# Currently supported cache names (services): passwd, group, hosts, services
+#
+
+
+#	logfile			/var/log/nscd.log
+#	threads			4
+#	max-threads		32
+#	server-user		nobody
+#	stat-user		somebody
+	debug-level		0
+#	reload-count		5
+	paranoia		no
+#	restart-interval	3600
+
+	enable-cache		passwd		yes
+	positive-time-to-live	passwd		600
+	negative-time-to-live	passwd		20
+	suggested-size		passwd		211
+	check-files		passwd		yes
+	persistent		passwd		yes
+	shared			passwd		yes
+	max-db-size		passwd		33554432
+	auto-propagate		passwd		yes
+
+	enable-cache		group		yes
+	positive-time-to-live	group		3600
+	negative-time-to-live	group		60
+	suggested-size		group		211
+	check-files		group		yes
+	persistent		group		yes
+	shared			group		yes
+	max-db-size		group		33554432
+	auto-propagate		group		yes
+
+	enable-cache		hosts		yes
+	positive-time-to-live	hosts		3600
+	negative-time-to-live	hosts		20
+	suggested-size		hosts		211
+	check-files		hosts		yes
+	persistent		hosts		yes
+	shared			hosts		yes
+	max-db-size		hosts		33554432
+
+	enable-cache		services	yes
+	positive-time-to-live	services	28800
+	negative-time-to-live	services	20
+	suggested-size		services	211
+	check-files		services	yes
+	persistent		services	yes
+	shared			services	yes
+	max-db-size		services	33554432
+
+	enable-cache		netgroup	yes
+	positive-time-to-live	netgroup	28800
+	negative-time-to-live	netgroup	20
+	suggested-size		netgroup	211
+	check-files		netgroup	yes
+	persistent		netgroup	yes
+	shared			netgroup	yes
+	max-db-size		netgroup	33554432
diff --git a/recipes-core/meta/glibc-xilinx/nscd.init b/recipes-core/meta/glibc-xilinx/nscd.init
new file mode 100755
index 0000000..65ef7e0
--- /dev/null
+++ b/recipes-core/meta/glibc-xilinx/nscd.init
@@ -0,0 +1,116 @@
+#!/bin/sh
+#
+# nscd:		Starts the Name Switch Cache Daemon
+#
+# chkconfig: - 30 74
+# description:  This is a start-stop-daemon --start --exec which handles passwd and group lookups \
+#		for running programs and cache the results for the next \
+#		query.  You should start this start-stop-daemon --start --exec if you use \
+#		slow naming services like NIS, NIS+, LDAP, or hesiod.
+# processname: /usr/sbin/nscd
+# config: /etc/nscd.conf
+#
+### BEGIN INIT INFO
+# Provides: nscd
+# Required-Start: $syslog
+# Default-Stop: 0 1 6
+# Short-Description: Starts the Name Switch Cache Daemon
+# Description:  This is a start-stop-daemon --start --exec which handles passwd and group lookups \
+#		for running programs and cache the results for the next \
+#		query.  You should start this start-stop-daemon --start --exec if you use \
+#		slow naming services like NIS, NIS+, LDAP, or hesiod.
+### END INIT INFO
+
+# Sanity checks.
+[ -f /etc/nscd.conf ] || exit 0
+[ -x /usr/sbin/nscd ] || exit 0
+
+# Source function library.
+. /etc/init.d/functions
+
+# nscd does not run on any kernel lower than 2.2.0 because of threading
+# problems, so we require that in first place.
+case $(uname -r) in
+    2.[2-9].*)
+	# this is okay
+	;;
+    [3-9]*)
+	# these are of course also okay
+	;;
+    *)
+	#this is not
+	exit 1
+	;;
+esac
+
+RETVAL=0
+prog=nscd
+
+start () {
+    [ -d /var/run/nscd ] || mkdir /var/run/nscd
+    [ -d /var/db/nscd ] || mkdir /var/db/nscd
+    echo -n "Starting $prog: "
+    start-stop-daemon --start --exec /usr/sbin/nscd
+    RETVAL=$?
+    echo
+    [ $RETVAL -eq 0 ] && touch /var/lock/subsys/nscd
+    return $RETVAL
+}
+
+stop () {
+    echo -n "Stopping $prog: "
+    /usr/sbin/nscd -K
+    RETVAL=$?
+    if [ $RETVAL -eq 0 ]; then
+       	rm -f /var/lock/subsys/nscd
+	# nscd won't be able to remove these if it is running as
+	# a non-privileged user
+	rm -f /var/run/nscd/nscd.pid
+	rm -f /var/run/nscd/socket
+	success "$prog shutdown"
+    else
+	failure "$prog shutdown"
+    fi
+    echo
+    return $RETVAL
+}
+
+restart() {
+    stop
+    start
+}
+
+# See how we were called.
+case "$1" in
+    start)
+	start
+	RETVAL=$?
+	;;
+    stop)
+	stop
+	RETVAL=$?
+	;;
+    status)
+	status nscd
+	RETVAL=$?
+	;;
+    restart)
+	restart
+	RETVAL=$?
+	;;
+    try-restart | condrestart)
+	[ -e /var/lock/subsys/nscd ] && restart
+	RETVAL=$?
+	;;
+    force-reload | reload)
+	echo -n "Reloading $prog: "
+	killproc /usr/sbin/nscd -HUP
+	RETVAL=$?
+	echo
+	;;
+    *)
+	echo "Usage: $0 {start|stop|status|restart|reload|condrestart}"
+	RETVAL=1
+	;;
+esac
+exit $RETVAL
diff --git a/recipes-core/meta/glibc-xilinx/nscd.service b/recipes-core/meta/glibc-xilinx/nscd.service
new file mode 100644
index 0000000..ab38e8f
--- /dev/null
+++ b/recipes-core/meta/glibc-xilinx/nscd.service
@@ -0,0 +1,19 @@
+# systemd service file for nscd
+
+[Unit]
+Description=Name Service Cache Daemon
+
+[Service]
+Type=forking
+ExecStart=/usr/sbin/nscd
+ExecStop=/usr/sbin/nscd --shutdown
+ExecReload=/usr/sbin/nscd -i passwd
+ExecReload=/usr/sbin/nscd -i group
+ExecReload=/usr/sbin/nscd -i hosts
+ExecReload=/usr/sbin/nscd -i services
+ExecReload=/usr/sbin/nscd -i netgroup
+Restart=always
+PIDFile=/run/nscd/nscd.pid
+
+[Install]
+WantedBy=multi-user.target
diff --git a/recipes-core/meta/libgcc-xilinx.bb b/recipes-core/meta/libgcc-xilinx.bb
new file mode 100644
index 0000000..1f1d65a
--- /dev/null
+++ b/recipes-core/meta/libgcc-xilinx.bb
@@ -0,0 +1,57 @@
+SUMMARY = "External Xilinx toolchain"
+include xilinx-toolchain.inc
+
+PV = "${XILINX_VER_MAIN}"
+PKGV = "${XILINX_VER_GCC}"
+
+PR = "r1"
+
+LICENSE = "GPL-3.0-with-GCC-exception"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/GPL-3.0-with-GCC-exception;md5=aef5f35c9272f508be848cd99e0151df"
+LICENSE_libgcov-dev = "GPL-3.0"
+LIC_FILES_CHKSUM_libgcov-dev = "file://${COMMON_LICENSE_DIR}/GPL-3.0;md5=c79ff39f19dfec6d293b95dea7b07891"
+
+DEPENDS = "virtual/${TARGET_PREFIX}gcc virtual/${TARGET_PREFIX}g++ virtual/${TARGET_PREFIX}binutils"
+PROVIDES = "libgcc"
+
+INHIBIT_DEFAULT_DEPS = "1"
+
+PACKAGES = "libgcc libgcc-dev libgcc-dbg libgcov-dev"
+
+RDEPENDS_libgcc += "${TCLIBC} glibc-xilinx"
+INSANE_SKIP_libgcc += "build-deps ldflags"
+INSANE_SKIP_libgcc-dev += "builds-deps staticdev"
+INSANE_SKIP_${MLPREFIX}libgcov-dev += "build-deps staticdev"
+
+FILES_libgcc = "${base_libdir}/libgcc*.so.*"
+
+FILES_libgcc-dev = "${base_libdir}/libgcc*.so \
+		   ${libdir}/${TARGET_SYS}/${BINV}* \
+                   ${libdir}/${XILINX_TARGET_SYS}/${XILINX_VER_GCC}/*crt* \
+		   ${libdir}/${XILINX_TARGET_SYS}/${XILINX_VER_GCC}/libgcc.a \
+		   ${libdir}/${XILINX_TARGET_SYS}/${XILINX_VER_GCC}/libgcc_eh.a \
+                   "
+FILES_libgcc-dbg = "${base_libdir}/.debug/ ${libdir}/${XILINX_TARGET_SYS}/${XILINX_VER_GCC}/.debug/"
+
+FILES_libgcov-dev = "${libdir}/${XILINX_TARGET_SYS}/${XILINX_VER_GCC}/libgcov.a"
+
+do_install() {
+	root="${EXTERNAL_TOOLCHAIN}"
+
+	install -d ${D}/${base_libdir} \
+		 ${D}/${libdir}/${XILINX_TARGET_SYS}/${XILINX_VER_GCC}
+
+	find $root -path "*/${XILINX_TARGET_SYS}/*/*libgcc*.so*" -exec cp -a {} ${D}/${base_libdir} \;
+
+	cp -a ${root}/lib/gcc/${XILINX_TARGET_SYS}/${XILINX_VER_GCC}/*crt*  \
+	   ${D}/${libdir}/${XILINX_TARGET_SYS}/${XILINX_VER_GCC}
+
+	cp -a ${root}/lib/gcc/${XILINX_TARGET_SYS}/${XILINX_VER_GCC}/libgcc*  \
+	   ${D}/${libdir}/${XILINX_TARGET_SYS}/${XILINX_VER_GCC}
+
+	cp -a ${root}/lib/gcc/${XILINX_TARGET_SYS}/${XILINX_VER_GCC}/libgcov.a  \
+	   ${D}/${libdir}/${XILINX_TARGET_SYS}/${XILINX_VER_GCC}
+
+	find  ${D}/${libdir}/${XILINX_TARGET_SYS}/${XILINX_VER_GCC}  -name "*crt*.o" -exec chmod -x {} \;
+	find  ${D}/${libdir}/${XILINX_TARGET_SYS}/${XILINX_VER_GCC}  -name "libg*.a" -exec chmod -x {} \;
+}
diff --git a/recipes-core/meta/linux-libc-headers-xilinx.bb b/recipes-core/meta/linux-libc-headers-xilinx.bb
new file mode 100644
index 0000000..ced2a06
--- /dev/null
+++ b/recipes-core/meta/linux-libc-headers-xilinx.bb
@@ -0,0 +1,51 @@
+SUMMARY = "External Xilinx toolchain"
+include xilinx-toolchain.inc
+
+PV = "${XILINX_VER_MAIN}"
+PKGV = "${XILINX_VER_KERNEL}"
+
+PR = "r1"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.GPLv2;md5=751419260aa954499f7abaabaa882bbe"
+
+PROVIDES = "\
+	linux-libc-headers \
+	virtual/linux-libc-headers \
+	"
+
+PACKAGES = "\
+	linux-libc-headers-dev \
+	linux-libc-headers-dbg \
+"
+
+FILES_linux-libc-headers-dev = " \
+	${includedir}/asm* \
+	${includedir}/asm-generic \
+	${includedir}/linux \
+	${includedir}/mtd \
+	${includedir}/rdma \
+	${includedir}/scsi \
+	${includedir}/sound \
+	${includedir}/video \
+	${includedir}/bits \
+	${includedir}/drm \
+"
+
+EXTERNALPN = "linux-libc-headers"
+RRECOMMENDS_${EXTERNALPN}-dbg = "${EXTERNALPN}-dev (= ${EXTENDPKGV})"
+ALLOW_EMPTY_${EXTERNALPN}-dbg = "1"
+
+INHIBIT_DEFAULT_DEPS = "1"
+BBCLASSEXTEND = ""
+
+do_install() {
+	sysroot="${EXTERNAL_TOOLCHAIN_SYSROOT}"
+	install -d ${D}${includedir}
+	for d in asm asm-generic linux mtd rdma scsi sound video bits drm; do
+		cp -a $sysroot/usr/include/$d ${D}${includedir}/$d
+	done
+	rm ${D}${includedir}/bits/syscall.h
+	find ${D}${includedir} -name ..install.cmd | xargs rm -f
+}
+
diff --git a/recipes-core/meta/xilinx-toolchain.inc b/recipes-core/meta/xilinx-toolchain.inc
new file mode 100644
index 0000000..f234fae
--- /dev/null
+++ b/recipes-core/meta/xilinx-toolchain.inc
@@ -0,0 +1,7 @@
+XILINX_VER_MAIN ??= ""
+
+python () {
+	if not d.getVar("XILINX_VER_MAIN", True):
+		raise bb.parse.SkipPackage("External toolchain not configured (XILINX_VER_MAIN not set).")
+}
+
-- 
2.1.4




More information about the meta-xilinx mailing list