gcc/libc: Change bootstrap to use an intermediate sysroot and hence no longer overwrite files
Based upon patches from Dexuan Cui <dexuan.cui@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
23cb814b27
commit
c0e1272d15
|
@ -10,13 +10,15 @@ python siteconfig_do_siteconfig () {
|
|||
sstate_install(shared_state, d)
|
||||
}
|
||||
|
||||
EXTRASITECONFIG ?= ""
|
||||
|
||||
siteconfig_do_siteconfig_gencache () {
|
||||
mkdir -p ${WORKDIR}/site_config
|
||||
gen-site-config ${FILE_DIRNAME}/site_config \
|
||||
>${WORKDIR}/site_config/configure.ac
|
||||
cd ${WORKDIR}/site_config
|
||||
autoconf
|
||||
CONFIG_SITE="" ./configure ${CONFIGUREOPTS} --cache-file ${PN}_cache
|
||||
CONFIG_SITE="" ${EXTRASITECONFIG} ./configure ${CONFIGUREOPTS} --cache-file ${PN}_cache
|
||||
sed -n -e "/ac_cv_c_bigendian/p" -e "/ac_cv_sizeof_/p" \
|
||||
-e "/ac_cv_type_/p" -e "/ac_cv_header_/p" -e "/ac_cv_func_/p" \
|
||||
< ${PN}_cache > ${PN}_config
|
||||
|
|
|
@ -293,6 +293,7 @@ STAGING_PYDIR = "${STAGING_DIR}/lib/python2.4"
|
|||
# This should really be MULTIMACH_TARGET_SYS but that breaks "all" and machine
|
||||
# specific packages - hack around it for now.
|
||||
STAGING_DIR_TARGET = "${STAGING_DIR}/${BASEPKG_TARGET_SYS}"
|
||||
STAGING_DIR_TCBOOTSTRAP = "${STAGING_DIR_TARGET}-tcbootstrap"
|
||||
|
||||
# Setting DEPLOY_DIR outside of TMPDIR is helpful, when you are using
|
||||
# packaged staging and/or multimachine.
|
||||
|
|
|
@ -45,8 +45,15 @@ do_install () {
|
|||
install -m 644 csu/crt[1in].o ${D}${libdir}
|
||||
${CC} -nostdlib -nostartfiles -shared -x c /dev/null \
|
||||
-o ${D}${libdir}/libc.so
|
||||
|
||||
# add links to linux-libc-headers: gcc-{cross,crossdk}-intermediate need this.
|
||||
for t in linux asm asm-generic; do
|
||||
ln -s ${STAGING_DIR_TARGET}${includedir}/$t ${D}${includedir}/
|
||||
done
|
||||
}
|
||||
|
||||
do_siteconfig () {
|
||||
:
|
||||
}
|
||||
|
||||
do_populate_sysroot[sstate-outputdirs] = "${STAGING_DIR_TCBOOTSTRAP}"
|
||||
|
|
|
@ -4,6 +4,21 @@ STAGINGCC = "gcc-cross-intermediate"
|
|||
STAGINGCC_virtclass-nativesdk = "gcc-crosssdk-intermediate"
|
||||
PATH_prepend = "${STAGING_BINDIR_TOOLCHAIN}.${STAGINGCC}:"
|
||||
|
||||
TOOLCHAIN_OPTIONS = " --sysroot=${STAGING_DIR_TCBOOTSTRAP}"
|
||||
|
||||
# siteconfig.bbclass runs configure which needs a working compiler
|
||||
# For the compiler to work we need a working libc yet libc isn't
|
||||
# in the sysroots directory at this point. This means the libc.so
|
||||
# linker script won't work as the --sysroot setting isn't correct.
|
||||
# Here we create a hacked up libc linker script and pass in the right
|
||||
# flags to let configure work. Ugly.
|
||||
EXTRASITECONFIG = "CFLAGS='${CFLAGS} -Wl,-L${WORKDIR}/site_config_libc -L${WORKDIR}/site_config_libc -L${SYSROOT_DESTDIR}${libdir} -L${SYSROOT_DESTDIR}${base_libdir} -Wl,-L${SYSROOT_DESTDIR}${libdir} -Wl,-L${SYSROOT_DESTDIR}${base_libdir}'"
|
||||
siteconfig_do_siteconfig_gencache_prepend = " \
|
||||
mkdir -p ${WORKDIR}/site_config_libc; \
|
||||
cp ${SYSROOT_DESTDIR}${libdir}/libc.so ${WORKDIR}/site_config_libc; \
|
||||
sed -i -e 's# ${base_libdir}# ${SYSROOT_DESTDIR}${base_libdir}#g' -e 's# ${libdir}# ${SYSROOT_DESTDIR}${libdir}#g' ${WORKDIR}/site_config_libc/libc.so; \
|
||||
"
|
||||
|
||||
# nptl needs unwind support in gcc, which can't be built without glibc.
|
||||
DEPENDS = "virtual/${TARGET_PREFIX}gcc-intermediate linux-libc-headers"
|
||||
#this leads to circular deps, so lets not add it yet
|
||||
|
|
|
@ -53,8 +53,15 @@ do_install () {
|
|||
install -m 644 csu/crt[1in].o ${D}${libdir}
|
||||
${CC} -nostdlib -nostartfiles -shared -x c /dev/null \
|
||||
-o ${D}${libdir}/libc.so
|
||||
|
||||
# add links to linux-libc-headers: gcc-{cross,crossdk}-intermediate need this.
|
||||
for t in linux asm asm-generic; do
|
||||
ln -s ${STAGING_DIR_TARGET}${includedir}/$t ${D}${includedir}/
|
||||
done
|
||||
}
|
||||
|
||||
do_siteconfig () {
|
||||
:
|
||||
}
|
||||
|
||||
do_populate_sysroot[sstate-outputdirs] = "${STAGING_DIR_TCBOOTSTRAP}"
|
||||
|
|
|
@ -21,6 +21,21 @@ STAGINGCC = "gcc-cross-intermediate"
|
|||
STAGINGCC_virtclass-nativesdk = "gcc-crosssdk-intermediate"
|
||||
PATH_prepend = "${STAGING_BINDIR_TOOLCHAIN}.${STAGINGCC}:"
|
||||
|
||||
TOOLCHAIN_OPTIONS = " --sysroot=${STAGING_DIR_TCBOOTSTRAP}"
|
||||
|
||||
# siteconfig.bbclass runs configure which needs a working compiler
|
||||
# For the compiler to work we need a working libc yet libc isn't
|
||||
# in the sysroots directory at this point. This means the libc.so
|
||||
# linker script won't work as the --sysroot setting isn't correct.
|
||||
# Here we create a hacked up libc linker script and pass in the right
|
||||
# flags to let configure work. Ugly.
|
||||
EXTRASITECONFIG = "CFLAGS='${CFLAGS} -Wl,-L${WORKDIR}/site_config_libc -L${WORKDIR}/site_config_libc -L${SYSROOT_DESTDIR}${libdir} -L${SYSROOT_DESTDIR}${base_libdir} -Wl,-L${SYSROOT_DESTDIR}${libdir} -Wl,-L${SYSROOT_DESTDIR}${base_libdir}'"
|
||||
siteconfig_do_siteconfig_gencache_prepend = " \
|
||||
mkdir -p ${WORKDIR}/site_config_libc; \
|
||||
cp ${SYSROOT_DESTDIR}${libdir}/libc.so ${WORKDIR}/site_config_libc; \
|
||||
sed -i -e 's# ${base_libdir}# ${SYSROOT_DESTDIR}${base_libdir}#g' -e 's# ${libdir}# ${SYSROOT_DESTDIR}${libdir}#g' ${WORKDIR}/site_config_libc/libc.so; \
|
||||
"
|
||||
|
||||
inherit autotools
|
||||
|
||||
GLIBC_EXTRA_OECONF ?= ""
|
||||
|
|
|
@ -14,13 +14,13 @@ EXTRA_OECONF = "--with-local-prefix=${STAGING_DIR_TARGET}${target_prefix} \
|
|||
--enable-languages=c \
|
||||
${OPTSPACE} \
|
||||
--program-prefix=${TARGET_PREFIX} \
|
||||
--with-sysroot=${STAGING_DIR_TARGET} \
|
||||
--with-build-sysroot=${STAGING_DIR_TARGET} \
|
||||
--with-sysroot=${STAGING_DIR_TCBOOTSTRAP} \
|
||||
--with-build-sysroot=${STAGING_DIR_TCBOOTSTRAP} \
|
||||
${EXTRA_OECONF_INTERMEDIATE} \
|
||||
${@get_gcc_fpu_setting(bb, d)}"
|
||||
|
||||
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_TARGET}/${target_base_libdir}"
|
||||
do_populate_sysroot[sstate-outputdirs] = "${STAGING_DIR_HOST} ${STAGING_DIR_TCBOOTSTRAP}/${target_base_libdir}"
|
||||
|
||||
do_compile () {
|
||||
oe_runmake
|
||||
|
|
Loading…
Reference in New Issue