From c0e1272d1526484f1921f3dd14ca042798d530d9 Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Tue, 25 Jan 2011 00:34:09 +0000 Subject: gcc/libc: Change bootstrap to use an intermediate sysroot and hence no longer overwrite files Based upon patches from Dexuan Cui Signed-off-by: Richard Purdie --- meta/classes/siteconfig.bbclass | 4 +++- meta/conf/bitbake.conf | 1 + meta/recipes-core/eglibc/eglibc-initial.inc | 7 +++++++ meta/recipes-core/eglibc/eglibc.inc | 15 +++++++++++++++ meta/recipes-core/glibc/glibc-initial.inc | 7 +++++++ meta/recipes-core/glibc/glibc.inc | 15 +++++++++++++++ meta/recipes-devtools/gcc/gcc-cross-intermediate.inc | 6 +++--- 7 files changed, 51 insertions(+), 4 deletions(-) (limited to 'meta') diff --git a/meta/classes/siteconfig.bbclass b/meta/classes/siteconfig.bbclass index e7cc9ae0da..5edc0d6a0b 100644 --- a/meta/classes/siteconfig.bbclass +++ b/meta/classes/siteconfig.bbclass @@ -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 diff --git a/meta/conf/bitbake.conf b/meta/conf/bitbake.conf index 19ec1a7ce7..1c6c7e5f12 100644 --- a/meta/conf/bitbake.conf +++ b/meta/conf/bitbake.conf @@ -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. diff --git a/meta/recipes-core/eglibc/eglibc-initial.inc b/meta/recipes-core/eglibc/eglibc-initial.inc index cb50e89226..ce85d99096 100644 --- a/meta/recipes-core/eglibc/eglibc-initial.inc +++ b/meta/recipes-core/eglibc/eglibc-initial.inc @@ -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}" diff --git a/meta/recipes-core/eglibc/eglibc.inc b/meta/recipes-core/eglibc/eglibc.inc index 63c313ca48..8314cb1548 100644 --- a/meta/recipes-core/eglibc/eglibc.inc +++ b/meta/recipes-core/eglibc/eglibc.inc @@ -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 diff --git a/meta/recipes-core/glibc/glibc-initial.inc b/meta/recipes-core/glibc/glibc-initial.inc index 99aa05fab7..3745955f60 100644 --- a/meta/recipes-core/glibc/glibc-initial.inc +++ b/meta/recipes-core/glibc/glibc-initial.inc @@ -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}" diff --git a/meta/recipes-core/glibc/glibc.inc b/meta/recipes-core/glibc/glibc.inc index cdfa06de90..127ae231d7 100644 --- a/meta/recipes-core/glibc/glibc.inc +++ b/meta/recipes-core/glibc/glibc.inc @@ -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 ?= "" diff --git a/meta/recipes-devtools/gcc/gcc-cross-intermediate.inc b/meta/recipes-devtools/gcc/gcc-cross-intermediate.inc index 12fdb70ae8..01571a3202 100644 --- a/meta/recipes-devtools/gcc/gcc-cross-intermediate.inc +++ b/meta/recipes-devtools/gcc/gcc-cross-intermediate.inc @@ -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 -- cgit v1.2.3-54-g00ecf