diff --git a/classes/external-toolchain.bbclass b/classes/external-toolchain.bbclass index 0ff818c..78eeb3a 100644 --- a/classes/external-toolchain.bbclass +++ b/classes/external-toolchain.bbclass @@ -23,6 +23,7 @@ LICENSE = "CLOSED" LIC_FILES_CHKSUM = "${COMMON_LIC_CHKSUM}" EXTERNAL_TOOLCHAIN_SYSROOT ?= "${@external_run(d, 'gcc', *(TARGET_CC_ARCH.split() + ['-print-sysroot'])).rstrip()}" +EXTERNAL_TOOLCHAIN_LIBROOT ?= "${@external_run(d, 'gcc', *(TARGET_CC_ARCH.split() + ['-print-file-name=crtbegin.o'])).rstrip().replace('/crtbegin.o', '')}" EXTERNAL_INSTALL_SOURCE_PATHS = "\ ${EXTERNAL_TOOLCHAIN_SYSROOT} \ @@ -163,7 +164,11 @@ def expand_paths(pathnames, mirrors): expanded_paths = [pathname] for search, replace in mirrors: - new_pathname = re.sub(search, replace, pathname, count=1) + try: + new_pathname = re.sub(search, replace, pathname, count=1) + except re.error as exc: + bb.warn("Invalid pattern for `%s`" % search) + continue if new_pathname != pathname: expanded_paths.append(new_pathname) diff --git a/core/recipes-devtools/gcc/gcc_%.bbappend b/core/recipes-devtools/gcc/gcc_%.bbappend new file mode 100644 index 0000000..0df59d8 --- /dev/null +++ b/core/recipes-devtools/gcc/gcc_%.bbappend @@ -0,0 +1,10 @@ +# FIXME: resolve gcc version mismatch issues with ${libdir}/gcc/*/ +# filesystem paths +python () { + if d.getVar('TCMODE', True).startswith('external-sourcery'): + # unwind.h will come from libgcc-external, we don't want to try to pull it + # from the cross area of the sysroot + inst = d.getVar('do_install', False).splitlines() + inst = filter(lambda l: not ('unwind.h' in l and '${STAGING_LIBDIR_NATIVE}' in l), inst) + d.setVar('do_install', '\n'.join(inst)) +} diff --git a/recipes-external/gcc/gcc-runtime-external.bb b/recipes-external/gcc/gcc-runtime-external.bb index f3f496e..ac962ce 100644 --- a/recipes-external/gcc/gcc-runtime-external.bb +++ b/recipes-external/gcc/gcc-runtime-external.bb @@ -54,9 +54,15 @@ PACKAGES =+ "\ SUMMARY_libitm = "The Transactional Memory runtime library" SUMMARY_libitm-dev = "${SUMMARY_libitm} - development files" +external_libroot = "${@os.path.realpath('${EXTERNAL_TOOLCHAIN_LIBROOT}').replace(os.path.realpath('${EXTERNAL_TOOLCHAIN}') + '/', '/')}" +FILES_MIRRORS =. "\ + ${libdir}/gcc/${TARGET_SYS}/${GCC_VERSION}/|${external_libroot}/\n \ + ${includedir}/c\+\+/${GCC_VERSION}/${TARGET_SYS}/|${includedir}/c++/${GCC_VERSION}/${EXTERNAL_TARGET_SYS}/\n \ +" + FILES_libstdc++ = "${libdir}/libstdc++${SOLIBS}" FILES_libstdc++-dev = "${libdir}/libstdc++${SOLIBSDEV} \ - ${includedir}/c++/${GCC_VERSION}" + ${includedir}/c++/${GCC_VERSION}/${TARGET_SYS}" FILES_libstdc++-staticdev = "${libdir}/libstdc++.a \ ${libdir}/libsupc++.a" FILES_libatomic = "${libdir}/libatomic${SOLIBS}" @@ -84,14 +90,16 @@ FILES_libmudflap = "${libdir}/libmudflap${SOLIBS}" FILES_libmudflap-dev = "${libdir}/libmudflap${SOLIBSDEV}" FILES_libmudflap-staticdev = "${libdir}/libmudflap.a" FILES_libquadmath = "${libdir}/libquadmath${SOLIBS}" -FILES_libquadmath-dev = "${libdir}/libquadmath${SOLIBSDEV}" +FILES_libquadmath-dev = "${libdir}/libquadmath${SOLIBSDEV} \ + ${libdir}/gcc/${TARGET_SYS}/${GCC_VERSION}/include/quadmath*" FILES_libquadmath-staticdev = "${libdir}/libquadmath.a" FILES_libssp = "${libdir}/libssp${SOLIBS}" FILES_libssp-dev = "${libdir}/libssp${SOLIBSDEV} \ - ${libdir}/gcc/*/*/include/ssp" + ${libdir}/gcc/${TARGET_SYS}/${GCC_VERSION}/include/ssp" FILES_libssp-staticdev = "${libdir}/libssp.a" FILES_libgomp = "${libdir}/libgomp${SOLIBS}" -FILES_libgomp-dev = "${libdir}/libgomp${SOLIBSDEV}" +FILES_libgomp-dev = "${libdir}/libgomp${SOLIBSDEV} \ + ${libdir}/gcc/${TARGET_SYS}/${GCC_VERSION}/include/omp.h" FILES_libgomp-staticdev = "${libdir}/libgomp.a" FILES_libitm = "${libdir}/libitm${SOLIBS}" FILES_libitm-dev = "${libdir}/libitm${SOLIBSDEV}" diff --git a/recipes-external/gcc/libgcc-external.bb b/recipes-external/gcc/libgcc-external.bb index 91a1984..1c01ae1 100644 --- a/recipes-external/gcc/libgcc-external.bb +++ b/recipes-external/gcc/libgcc-external.bb @@ -8,20 +8,25 @@ inherit external-toolchain PACKAGES =+ "libgcov-dev" +external_libroot = "${@os.path.realpath('${EXTERNAL_TOOLCHAIN_LIBROOT}').replace(os.path.realpath('${EXTERNAL_TOOLCHAIN}') + '/', '/')}" +FILES_MIRRORS =. "${libdir}/gcc/${TARGET_SYS}/${GCC_VERSION}/|${external_libroot}/\n" + FILES_${PN} = "${base_libdir}/libgcc_s.so.*" FILES_${PN}-dev = "${base_libdir}/libgcc_s.so \ - ${libdir}/gcc/${EXTERNAL_TARGET_SYS}/${GCC_VERSION}/crtbegin.o \ - ${libdir}/gcc/${EXTERNAL_TARGET_SYS}/${GCC_VERSION}/crtbeginS.o \ - ${libdir}/gcc/${EXTERNAL_TARGET_SYS}/${GCC_VERSION}/crtbeginT.o \ - ${libdir}/gcc/${EXTERNAL_TARGET_SYS}/${GCC_VERSION}/crtend.o \ - ${libdir}/gcc/${EXTERNAL_TARGET_SYS}/${GCC_VERSION}/crtendS.o \ - ${libdir}/gcc/${EXTERNAL_TARGET_SYS}/${GCC_VERSION}/crtfastmath.o \ - ${libdir}/gcc/${EXTERNAL_TARGET_SYS}/${GCC_VERSION}/crtprec*.o \ - ${libdir}/gcc/${EXTERNAL_TARGET_SYS}/${GCC_VERSION}/libgcc.a \ - ${libdir}/gcc/${EXTERNAL_TARGET_SYS}/${GCC_VERSION}/libgcc_eh.a" + ${libdir}/gcc/${TARGET_SYS}/${GCC_VERSION}/crtbegin.o \ + ${libdir}/gcc/${TARGET_SYS}/${GCC_VERSION}/crtbeginS.o \ + ${libdir}/gcc/${TARGET_SYS}/${GCC_VERSION}/crtbeginT.o \ + ${libdir}/gcc/${TARGET_SYS}/${GCC_VERSION}/crtend.o \ + ${libdir}/gcc/${TARGET_SYS}/${GCC_VERSION}/crtendS.o \ + ${libdir}/gcc/${TARGET_SYS}/${GCC_VERSION}/crtfastmath.o \ + ${libdir}/gcc/${TARGET_SYS}/${GCC_VERSION}/crtprec*.o \ + ${libdir}/gcc/${TARGET_SYS}/${GCC_VERSION}/libgcc.a \ + ${libdir}/gcc/${TARGET_SYS}/${GCC_VERSION}/libgcc_eh.a \ + ${libdir}/gcc/${TARGET_SYS}/${GCC_VERSION}/include/unwind.h \ + " INSANE_SKIP_${PN}-dev += "staticdev" FILES_${PN}-dbg += "${base_libdir}/.debug/libgcc_s.so.*.debug" -FILES_libgcov-dev = "${libdir}/gcc/${EXTERNAL_TARGET_SYS}/${GCC_VERSION}/libgcov.a" +FILES_libgcov-dev = "${libdir}/gcc/${TARGET_SYS}/${GCC_VERSION}/libgcov.a" INSANE_SKIP_libgcov-dev += "staticdev"