diff options
Diffstat (limited to 'recipes/meta')
-rw-r--r-- | recipes/meta/external-toolchain-csl.bb | 235 |
1 files changed, 235 insertions, 0 deletions
diff --git a/recipes/meta/external-toolchain-csl.bb b/recipes/meta/external-toolchain-csl.bb new file mode 100644 index 0000000000..051b83281b --- /dev/null +++ b/recipes/meta/external-toolchain-csl.bb @@ -0,0 +1,235 @@ +PR = "r1" + +INHIBIT_DEFAULT_DEPS = "1" + +INSANE_SKIP_libgcc = True +INSANE_SKIP_libstdc++ = True +INSANE_SKIP_nscd = True +INSANE_SKIP_glibc-utils = True + +PROVIDES = "\ + 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/libc \ + virtual/libintl \ + virtual/libiconv \ + glibc-thread-db \ + linux-libc-headers \ +" + +# virtual/linux-libc-headers \ + +RPROVIDES = "glibc-utils libsegfault glibc-thread-db" +RPROVIDES_glibc-dev += "libc-dev" + +LEAD_SONAME = "libc.so.6" + +PACKAGES = "\ + libgcc \ + libgcc-dev \ + libstdc++ \ + libstdc++-dev \ + linux-libc-headers \ + glibc-dbg \ + glibc \ + catchsegv \ + sln \ + nscd \ + ldd \ + localedef \ + glibc-utils \ + glibc-dev \ + libsegfault \ + glibc-extra-nss \ + glibc-thread-db \ + glibc-pcprofile \ +" + +FILES_glibc = "\ + ${sysconfdir} \ + ${libexecdir}/* \ + ${datadir}/zoneinfo \ + /lib/libc* \ + /lib/libm* \ + /lib/ld* \ + /lib/libpthread* \ + /lib/libresolv* \ + /lib/librt* \ + /lib/libutil* \ + /lib/libnsl* \ + /lib/libnss_files* \ + /lib/libnss_compat* \ + /lib/libnss_dns* \ + /lib/libdl* \ + /lib/libanl* \ + /lib/libBrokenLocale* \ + /sbin/ldconfig \ +" + +FILES_glibc-dev = "\ + ${includedir} \ + ${libdir}/*.o \ + ${bindir}/rpcgen \ + ${libdir}/*.so \ + ${libdir}/*.a \ +" + +FILES_glibc-dbg += " ${libdir}/gconv/.debug ${libexecdir}/*/.debug ${base_libdir}/.debug ${libdir}/.debug" +FILES_glibc-utils = "${bindir}/* ${sbindir}/*" +FILES_glibc-extra-nss = "/lib/libnss*" +FILES_glibc-gconv = "${libdir}/gconv/*" +FILES_glibc-pcprofile = "/lib/libpcprofile.so" +FILES_glibc-thread-db = "/lib/libthread_db*" + +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++/* \ + ${libdir}/libstdc++.so \ + ${libdir}/libstdc++.la \ + ${libdir}/libstdc++.a \ + ${libdir}/libsupc++.la \ + ${libdir}/libsupc++.a \ +" + +FILES_linux-libc-headers = "\ + ${includedir}/asm* \ + ${includedir}/linux \ + ${includedir}/mtd \ + ${includedir}/rdma \ + ${includedir}/scsi \ + ${includedir}/sound \ + ${includedir}/video \ +" + +FILES_libsegfault = "/lib/libSegFault*" +FILES_catchsegv = "${bindir}/catchsegv" +RDEPENDS_catchsegv = "libsegfault" + +FILES_ldd = "${bindir}/ldd" +FILES_nscd = "${sbindir}/nscd*" +FILES_sln = "${base_sbindir}/sln" +FILES_localedef = "${bindir}/localedef" + +DESCRIPTION_glibc-utils = "glibc: misc utilities like iconf, local, gencat, tzselect, rpcinfo, ..." +DESCRIPTION_glibc-extra-nss = "glibc: nis, nisplus and hesiod search services" +DESCRIPTION_ldd = "glibc: print shared library dependencies" +DESCRIPTION_nscd = "glibc: name service cache daemon for passwd, group, and hosts" +DESCRIPTION_sln = "glibc: create symbolic links between files" +DESCRIPTION_localedef = "glibc: compile locale definition files" + +def csl_get_main_version(d): + import subprocess,bb + return subprocess.Popen([bb.data.getVar('TOOLCHAIN_PATH', d, 1)+'/bin/'+bb.data.getVar('TARGET_PREFIX', d, 1)+'gcc', '-v'], stderr=subprocess.PIPE).communicate()[1].splitlines()[-1].split()[-1].rstrip(')') + +def csl_get_gcc_version(d): + import subprocess,bb + return subprocess.Popen([bb.data.getVar('TOOLCHAIN_PATH', d, 1)+'/bin/'+bb.data.getVar('TARGET_PREFIX', d, 1)+'gcc', '-v'], stderr=subprocess.PIPE).communicate()[1].splitlines()[-1].split()[2] + +def csl_get_libc_version(d): + import os,bb + for file in os.listdir(bb.data.getVar('TOOLCHAIN_SYSPATH', d, 1)+'/libc/lib/'): + if file.find('libc-') == 0: + return file[5:-3] + return None + +def csl_get_kernel_version(d): + import os,bb + f = open(bb.data.getVar('TOOLCHAIN_SYSPATH', d, 1)+'/libc/usr/include/linux/version.h', 'r') + 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 None + +CSL_VER_MAIN := "${@csl_get_main_version(d)}" +CSL_VER_GCC := "${@csl_get_gcc_version(d)}" +CSL_VER_LIBC := "${@csl_get_libc_version(d)}" +CSL_VER_KERNEL := "${@csl_get_kernel_version(d)}" + +PV = ${CSL_VER_MAIN} +PV_libgcc = ${CSL_VER_GCC} +PV_libgcc-dev = ${CSL_VER_GCC} +PV_libstdc++ = ${CSL_VER_GCC} +PV_libstdc++-dev = ${CSL_VER_GCC} +PV_libc = ${CSL_VER_LIBC} +PV_glibc = ${CSL_VER_LIBC} +PV_glibc-dev = ${CSL_VER_LIBC} +PV_glibc-dbg = ${CSL_VER_LIBC} +PV_glibc-utils = ${CSL_VER_LIBC} +PV_glibc-extra-nss = ${CSL_VER_LIBC} +PV_glibc-thread-db = ${CSL_VER_LIBC} +PV_glibc-pcprofile = ${CSL_VER_LIBC} +PV_catchsegv = ${CSL_VER_LIBC} +PV_sln = ${CSL_VER_LIBC} +PV_nscd = ${CSL_VER_LIBC} +PV_ldd = ${CSL_VER_LIBC} +PV_localedef = ${CSL_VER_LIBC} +PV_libsegfault = ${CSL_VER_LIBC} +PV_linux-libc-headers = ${CSL_VER_KERNEL} + +do_unpack() { + : +} + +do_install() { + install -d ${D}${sysconfdir} + install -d ${D}${bindir} + install -d ${D}${sbindir} + install -d ${D}${base_bindir} + install -d ${D}${libdir} + install -d ${D}${base_libdir} + install -d ${D}${base_sbindir} + install -d ${D}${datadir} + + cp -a ${TOOLCHAIN_PATH}/${TARGET_SYS}/libc/lib/* ${D}${base_libdir} + cp -a ${TOOLCHAIN_PATH}/${TARGET_SYS}/libc/etc/* ${D}${sysconfdir} + cp -a ${TOOLCHAIN_PATH}/${TARGET_SYS}/libc/sbin/* ${D}${base_sbindir} + cp -a ${TOOLCHAIN_PATH}/${TARGET_SYS}/libc/usr/* ${D}/usr + cp -a ${TOOLCHAIN_PATH}/${TARGET_SYS}/include/* ${D}/usr/include + rm -rf ${D}${datadir}/locale + rm -rf ${D}${datadir}/i18n + rm -rf ${D}${libdir}/locale + rm -rf ${D}${libdir}/gconv + rm -rf ${D}${bindir}/gdbserver + rm -rf ${D}${sysconfdir}/rpc + rm -rf ${D}${datadir}/zoneinfo +} + +do_stage() { + install -d ${STAGING_INCDIR} + install -d ${STAGING_LIBDIR} + install -d ${STAGING_DIR_TARGET}${base_libdir} + + cp -a ${TOOLCHAIN_PATH}/${TARGET_SYS}/libc/usr/include/* ${STAGING_INCDIR} + cp -a ${TOOLCHAIN_PATH}/${TARGET_SYS}/include/* ${STAGING_INCDIR} + cp -a ${TOOLCHAIN_PATH}/${TARGET_SYS}/libc/usr/lib/* ${STAGING_LIBDIR} + cp -a ${TOOLCHAIN_PATH}/${TARGET_SYS}/libc/lib/* ${STAGING_DIR_TARGET}${base_libdir} + + sed -e "s# /lib# ../../lib#g" -e "s# /usr/lib# .#g" ${STAGING_LIBDIR}/libc.so > ${STAGING_LIBDIR}/temp + mv ${STAGING_LIBDIR}/temp ${STAGING_LIBDIR}/libc.so + + sed -e "s# /lib# ../../lib#" -e "s# /usr/lib# .#g" ${STAGING_LIBDIR}/libpthread.so > ${STAGING_LIBDIR}/temp + mv ${STAGING_LIBDIR}/temp ${STAGING_LIBDIR}/libpthread.so +} + +python populate_packages_prepend () { + if bb.data.getVar('DEBIAN_NAMES', d, 1): + bb.data.setVar('PKG_glibc', 'libc6', d) + bb.data.setVar('PKG_glibc-dev', 'libc6-dev', d) + bb.data.setVar('PKG_libgcc', 'libgcc1', d) + bb.data.setVar('PKG_libgcc-dev', 'libgcc1-dev', d) +} |