Configuring gcc with --enable-target-optspace (which causes gcc to append "-g -Os" to the default CFLAGS_FOR_TARGET and so force libgcc etc target libraries to always be optimised for size) dates back to the very first commit in oe-core git in 2005 (for gcc 3.4.3). Configuring gcc with --enable-target-optspace is not done widely elsewhere (it's not used for Ubuntu or Fedora host gcc, the Linaro binary toolchain or in Buildroot since early 2015). Sometime around gcc 4.5.x it caused problems for powerpc and so was disabled for that architecture: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43810 This patch removes --enable-target-optspace completely (ie powerpc is no longer a special case) and allows optimisation of libgcc etc to be controlled directly by the flags present in TARGET_CFLAGS. (From OE-Core rev: 686b266506a1a56fb68ab0f00d658787dd7fe4ce) Signed-off-by: Andre McCurdy <armccurdy@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
101 lines
3.8 KiB
PHP
101 lines
3.8 KiB
PHP
DEPENDS = "virtual/${TARGET_PREFIX}binutils ${NATIVEDEPS}"
|
|
PROVIDES = "virtual/${TARGET_PREFIX}gcc-initial"
|
|
PACKAGES = ""
|
|
|
|
INHIBIT_AUTOTOOLS_DEPS = "1"
|
|
INHIBIT_DEFAULT_DEPS = "1"
|
|
|
|
# We still need gnu-config-native
|
|
DEPENDS_prepend = "gnu-config-native autoconf-native "
|
|
|
|
PN = "gcc-cross-initial-${TARGET_ARCH}"
|
|
|
|
CROSS_TARGET_SYS_DIR_append = ".${PN}"
|
|
|
|
# This is intended to be a -very- basic config
|
|
# sysroot is needed in case we use libc-initial
|
|
EXTRA_OECONF = "\
|
|
--with-newlib \
|
|
--without-headers \
|
|
--disable-shared \
|
|
--disable-threads \
|
|
--disable-multilib \
|
|
--disable-__cxa_atexit \
|
|
--enable-languages=c \
|
|
--program-prefix=${TARGET_PREFIX} \
|
|
--with-sysroot=/not/exist \
|
|
--with-build-sysroot=${GCCCROSS_BUILDSYSROOT} \
|
|
${EXTRA_OECONF_INITIAL} \
|
|
${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-gold', '--with-ld=${STAGING_BINDIR_TOOLCHAIN}/${TARGET_PREFIX}ld.bfd', '', d)} \
|
|
${EXTRA_OECONF_GCC_FLOAT} \
|
|
${@get_gcc_ppc_plt_settings(bb, d)} \
|
|
"
|
|
|
|
EXTRA_OECONF += "--with-native-system-header-dir=${SYSTEMHEADERS}"
|
|
|
|
GCCCROSS_BUILDSYSROOT = "${B}/tmpsysroot"
|
|
|
|
do_configure_prepend () {
|
|
sysr=${GCCCROSS_BUILDSYSROOT}${target_includedir}
|
|
mkdir -p $sysr
|
|
for t in linux asm asm-generic; do
|
|
rm -f $sysr/$t
|
|
ln -s ${STAGING_DIR_TARGET}${target_includedir}/$t $sysr/
|
|
done
|
|
}
|
|
|
|
do_compile () {
|
|
oe_runmake all-gcc configure-target-libgcc
|
|
}
|
|
do_install () {
|
|
( cd ${B}/${TARGET_SYS}/libgcc; oe_runmake 'DESTDIR=${D}' install-unwind_h )
|
|
oe_runmake 'DESTDIR=${D}' install-gcc
|
|
|
|
# We don't really need this (here shares/ contains man/, info/, locale/).
|
|
rm -rf ${D}${datadir}/
|
|
|
|
# We use libiberty from binutils
|
|
find ${D}${exec_prefix}/lib -name libiberty.a | xargs rm -f
|
|
find ${D}${exec_prefix}/lib -name libiberty.h | xargs rm -f
|
|
|
|
# Insert symlinks into libexec so when tools without a prefix are searched for, the correct ones are
|
|
# found. These need to be relative paths so they work in different locations.
|
|
dest=${D}${libexecdir}/gcc/${TARGET_SYS}/${BINV}/
|
|
install -d $dest
|
|
useld=${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-gold', '.bfd', '', d)}
|
|
ln -sf ${BINRELPATH}/${TARGET_PREFIX}ld${useld} ${dest}ld
|
|
for t in ar as nm objcopy objdump ranlib strip g77 gcc cpp gfortran; do
|
|
ln -sf ${BINRELPATH}/${TARGET_PREFIX}$t $dest$t
|
|
done
|
|
# fixed limits.h infact includes the so called real limits.h
|
|
# which should come from libc but when we build libc-initial
|
|
# then bunch of configure tests include fixed limits.h which in turn
|
|
# includes real limits.h but this real limits.h is not staged yet
|
|
# so we overwirte the generated include-fixed/limits.h for gcc-cross-initial
|
|
# to get rid references to real limits.h
|
|
cp gcc/include-fixed/limits.h ${D}${gcclibdir}/${TARGET_SYS}/${BINV}/include/limits.h
|
|
|
|
# gcc-runtime installs libgcc into a special location in staging since it breaks doing a standalone build
|
|
case ${PN} in
|
|
*gcc-cross-initial-${TARGET_ARCH}|*gcc-crosssdk-initial-${TARGET_ARCH})
|
|
dest=${D}/${includedir}/gcc-build-internal-initial-${TARGET_SYS}
|
|
hardlinkdir . $dest
|
|
;;
|
|
esac
|
|
}
|
|
#
|
|
# Override the default sysroot staging copy since this won't look like a target system
|
|
#
|
|
sysroot_stage_all() {
|
|
sysroot_stage_dir ${D} ${SYSROOT_DESTDIR}
|
|
install -d ${SYSROOT_DESTDIR}${STAGING_DIR_TARGET}${target_base_libdir}/
|
|
install -d ${SYSROOT_DESTDIR}${STAGING_DIR_TARGET}${target_libdir}/
|
|
mv ${SYSROOT_DESTDIR}${target_base_libdir}/* ${SYSROOT_DESTDIR}${STAGING_DIR_TARGET}${target_base_libdir}/ || true
|
|
mv ${SYSROOT_DESTDIR}${target_libdir}/* ${SYSROOT_DESTDIR}${STAGING_DIR_TARGET}${target_libdir}/ || true
|
|
}
|
|
|
|
do_populate_sysroot[sstate-inputdirs] = "${SYSROOT_DESTDIR}/${STAGING_DIR_HOST}/ ${SYSROOT_DESTDIR}/${STAGING_DIR_TARGET}/${target_base_libdir}/"
|
|
do_populate_sysroot[sstate-outputdirs] = "${STAGING_DIR_HOST}/ ${STAGING_DIR_TCBOOTSTRAP}/${target_base_libdir}/"
|
|
|
|
inherit nopackages
|