mirror of
https://git.yoctoproject.org/poky
synced 2026-04-24 12:32:11 +02:00
The gcc default, bss-plt, will cause errors when using the prelinker. All other distributions that I am aware of are using the the secure-plt. For an explanation of the differences, the gcc docs: Current PowerPC GCC accepts a `-msecure-plt' option that generates code capable of using a newer PLT and GOT layout that has the security advantage of no executable section ever needing to be writable and no writable section ever being executable. PowerPC ld will generate this layout, including stubs to access the PLT, if all input files (including startup and static libraries) were compiled with `-msecure-plt'. `--bss-plt' forces the old BSS PLT (and GOT layout) which can give slightly better performance. The security of the new PLT and ability to run the prelinker outweigh any performance penalty. The secure-plt is enabled by default. The old bss-plt can be enabled by selecting 'bssplt' in the DISTRO_FEATURES. (From OE-Core rev: 70c55aada1101a5c687cdaa79f370fa4530b39d9) Signed-off-by: Mark Hatle <mark.hatle@windriver.com> Signed-off-by: Ross Burton <ross.burton@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
98 lines
3.7 KiB
PHP
98 lines
3.7 KiB
PHP
DEPENDS = "virtual/${TARGET_PREFIX}binutils ${NATIVEDEPS}"
|
|
PROVIDES = "virtual/${TARGET_PREFIX}gcc-initial"
|
|
PACKAGES = ""
|
|
|
|
INHIBIT_AUTOTOOLS_DEPS = "1"
|
|
INHIBIT_DEFAULT_DEPS = "1"
|
|
|
|
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 \
|
|
${OPTSPACE} \
|
|
--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}/"
|
|
|