diff options
Diffstat (limited to 'meta/recipes-devtools/gcc/gcc-target.inc')
-rw-r--r-- | meta/recipes-devtools/gcc/gcc-target.inc | 105 |
1 files changed, 64 insertions, 41 deletions
diff --git a/meta/recipes-devtools/gcc/gcc-target.inc b/meta/recipes-devtools/gcc/gcc-target.inc index b6e31f5d93..82da5ef82b 100644 --- a/meta/recipes-devtools/gcc/gcc-target.inc +++ b/meta/recipes-devtools/gcc/gcc-target.inc @@ -2,20 +2,25 @@ GCCMULTILIB = "--enable-multilib" require gcc-configure-common.inc EXTRA_OECONF_PATHS = "\ - --with-sysroot=/ \ + --with-gxx-libcxx-include-dir=${target_includedir}/c++/v1 \ --with-build-sysroot=${STAGING_DIR_TARGET} \ - --with-gxx-include-dir=${includedir}/c++/${BINV} \ " -EXTRA_OECONF_append_linuxstdbase = " --enable-clocale=gnu" +EXTRA_OECONF:append:linuxstdbase = " --enable-clocale=gnu" -# ARMv6+ adds atomic instructions that affect the ABI in libraries built -# with TUNE_CCARGS in gcc-runtime. Make the compiler default to a -# compatible architecture. armv6 and armv7a cover the minimum tune -# features used in OE. -EXTRA_OECONF_append_armv6 = " --with-arch=armv6" -EXTRA_OECONF_append_armv7a = " --with-arch=armv7-a" -EXTRA_OECONF_append_armv7ve = " --with-arch=armv7-a" +# Configure gcc running on the target to default to an architecture which will +# be compatible with that of gcc-runtime (which is cross compiled to be target +# specific). For example, for ARM, ARMv6+ adds atomic instructions that may +# affect the ABI in the gcc-runtime libs. Since we can't rely on gcc on the +# target to always be passed -march etc, its built-in default needs to be safe. + +ARMFPARCHEXT ?= "" + +EXTRA_OECONF:append:armv6:class-target = " --with-arch=armv6${ARMFPARCHEXT}" +EXTRA_OECONF:append:armv7a:class-target = " --with-arch=armv7-a${ARMFPARCHEXT}" +EXTRA_OECONF:append:armv7ve:class-target = " --with-arch=armv7ve${ARMFPARCHEXT}" +EXTRA_OECONF:append:arc:class-target = " --with-cpu=${TUNE_PKGARCH}" +EXTRA_OECONF:append:x86-64:class-target = " ${@get_gcc_x86_64_arch_setting(bb, d)}" # libcc1 requres gcc_cv_objdump when cross build, but gcc_cv_objdump is # set in subdir gcc, so subdir libcc1 can't use it, export it here to @@ -36,10 +41,11 @@ PACKAGES = "\ ${PN}-dbg \ " -FILES_${PN} = "\ +FILES:${PN} = "\ ${bindir}/${TARGET_PREFIX}gcc* \ + ${bindir}/${TARGET_PREFIX}lto* \ ${libexecdir}/gcc/${TARGET_SYS}/${BINV}/collect2* \ - ${libexecdir}/gcc/${TARGET_SYS}/${BINV}/cc1plus \ + ${libexecdir}/gcc/${TARGET_SYS}/${BINV}/g++-mapper-server \ ${libexecdir}/gcc/${TARGET_SYS}/${BINV}/lto* \ ${libexecdir}/gcc/${TARGET_SYS}/${BINV}/lib*${SOLIBS} \ ${libexecdir}/gcc/${TARGET_SYS}/${BINV}/liblto*${SOLIBSDEV} \ @@ -48,92 +54,108 @@ FILES_${PN} = "\ ${gcclibdir}/${TARGET_SYS}/${BINV}/lib*${SOLIBS} \ ${gcclibdir}/${TARGET_SYS}/${BINV}/include \ ${gcclibdir}/${TARGET_SYS}/${BINV}/include-fixed \ + ${libdir}/bfd-plugins/*.so \ " -INSANE_SKIP_${PN} += "dev-so" -RRECOMMENDS_${PN} += "\ +INSANE_SKIP:${PN} += "dev-so" +RRECOMMENDS:${PN} += "\ libssp \ libssp-dev \ " -RDEPENDS_${PN} += "cpp" +RDEPENDS:${PN} += "cpp" -FILES_${PN}-dev = "\ +FILES:${PN}-dev = "\ ${gcclibdir}/${TARGET_SYS}/${BINV}/lib*${SOLIBSDEV} \ ${libexecdir}/gcc/${TARGET_SYS}/${BINV}/lib*${SOLIBSDEV} \ ${gcclibdir}/${TARGET_SYS}/${BINV}/plugin/include/ \ ${libexecdir}/gcc/${TARGET_SYS}/${BINV}/plugin/gengtype \ ${gcclibdir}/${TARGET_SYS}/${BINV}/plugin/gtype.state \ " -FILES_${PN}-symlinks = "\ +FILES:${PN}-symlinks = "\ ${bindir}/cc \ ${bindir}/gcc \ ${bindir}/gccbug \ " -FILES_${PN}-plugins = "\ +FILES:${PN}-plugins = "\ ${gcclibdir}/${TARGET_SYS}/${BINV}/plugin \ " -ALLOW_EMPTY_${PN}-plugins = "1" +ALLOW_EMPTY:${PN}-plugins = "1" -FILES_g77 = "\ +FILES:g77 = "\ ${bindir}/${TARGET_PREFIX}g77 \ ${libexecdir}/gcc/${TARGET_SYS}/${BINV}/f771 \ " -FILES_g77-symlinks = "\ +FILES:g77-symlinks = "\ ${bindir}/g77 \ ${bindir}/f77 \ " -RRECOMMENDS_g77 = "\ +RRECOMMENDS:g77 = "\ libg2c \ libg2c-dev \ " -FILES_gfortran = "\ +FILES:gfortran = "\ ${bindir}/${TARGET_PREFIX}gfortran \ ${libexecdir}/gcc/${TARGET_SYS}/${BINV}/f951 \ " -RRECOMMENDS_gfortran = "\ +RRECOMMENDS:gfortran = "\ libquadmath \ libquadmath-dev \ " -FILES_gfortran-symlinks = "\ +FILES:gfortran-symlinks = "\ ${bindir}/gfortran \ ${bindir}/f95" -FILES_cpp = "\ +FILES:cpp = "\ ${bindir}/${TARGET_PREFIX}cpp* \ ${base_libdir}/cpp \ ${libexecdir}/gcc/${TARGET_SYS}/${BINV}/cc1" -FILES_cpp-symlinks = "${bindir}/cpp" +FILES:cpp-symlinks = "${bindir}/cpp" -FILES_gcov = "${bindir}/${TARGET_PREFIX}gcov* \ +FILES:gcov = "${bindir}/${TARGET_PREFIX}gcov* \ ${bindir}/${TARGET_PREFIX}gcov-tool* \ " -FILES_gcov-symlinks = "${bindir}/gcov \ +FILES:gcov-symlinks = "${bindir}/gcov \ ${bindir}/gcov-tool \ " -FILES_g++ = "\ +FILES:g++ = "\ ${bindir}/${TARGET_PREFIX}g++* \ ${libexecdir}/gcc/${TARGET_SYS}/${BINV}/cc1plus \ " -FILES_g++-symlinks = "\ +FILES:g++-symlinks = "\ ${bindir}/c++ \ ${bindir}/g++ \ " -RRECOMMENDS_g++ = "\ +RRECOMMENDS:g++ = "\ libstdc++ \ libstdc++-dev \ libatomic \ libatomic-dev \ " -FILES_${PN}-doc = "\ +FILES:${PN}-doc = "\ ${infodir} \ ${mandir} \ ${gcclibdir}/${TARGET_SYS}/${BINV}/include/README \ " do_compile () { + # Prevent full target sysroot path from being used in configargs.h header, + # as it will be rewritten when used by other sysroots preventing support + # for gcc plugins. Additionally the path is embeddeded into the output + # binary, this prevents building a reproducible binary. + oe_runmake configure-gcc + sed -i 's@${STAGING_DIR_TARGET}@/@g' ${B}/gcc/configargs.h + sed -i 's@${STAGING_DIR_HOST}@/@g' ${B}/gcc/configargs.h + + # Prevent sysroot/workdir paths from being used in checksum-options. + # checksum-options is used to generate a checksum which is embedded into + # the output binary. + oe_runmake TARGET-gcc=checksum-options all-gcc + sed -i 's@${DEBUG_PREFIX_MAP}@@g' ${B}/gcc/checksum-options + sed -i 's@${STAGING_DIR_TARGET}@/@g' ${B}/gcc/checksum-options + oe_runmake all-host } @@ -161,17 +183,17 @@ do_install () { # Cleanup manpages.. rm -rf ${D}${mandir}/man7 + # Don't package details about the build host + rm -f ${D}${libdir}/gcc/${TARGET_SYS}/${BINV}/plugin/include/auto-build.h + rm -f ${D}${libdir}/gcc/${TARGET_SYS}/${BINV}/plugin/include/bconfig.h + cd ${D}${bindir} # We care about g++ not c++ rm -f *c++* # We don't care about the gcc-<version> ones for this - rm -f *gcc-?.?* - - # We use libiberty from binutils - find ${D}${libdir} -name libiberty.a | xargs rm -f - find ${D}${libdir} -name libiberty.h | xargs rm -f + rm -f *gcc-?*.?* # Not sure why we end up with these but we don't want them... rm -f ${TARGET_PREFIX}${TARGET_PREFIX}* @@ -194,11 +216,12 @@ do_install () { ln -sf ${bindir}/${TARGET_PREFIX}cpp ${D}${base_libdir}/cpp ln -sf g++ c++ ln -sf gcc cc - + install -d ${D}${libdir}/bfd-plugins + ln -sf ${libexecdir}/gcc/${TARGET_SYS}/${BINV}/liblto_plugin.so ${D}${libdir}/bfd-plugins/liblto_plugin.so chown -R root:root ${D} } -do_install_append () { +do_install:append () { # # Thefixinc.sh script, run on the gcc's compile phase, looks into sysroot header # files and places the modified files into @@ -234,4 +257,4 @@ do_install_append () { # and builds track file dependencies (e.g. perl and its makedepends code). # For determinism we don't install this ever and rely on the copy from gcc-cross. # [YOCTO #7287] -SYSROOT_DIRS_BLACKLIST += "${libdir}/gcc" +SYSROOT_DIRS_IGNORE += "${libdir}/gcc" |