# HG changeset patch # User "Yann E. MORIN" # Date 1217176537 0 # Node ID d26d8cc7c460d87e72a213e6d6623b1413d47e0f # Parent e8c68d0d1a0c14e82309f07ce755fdd355b55394 Fix building x86_64 on x86_64 (and hopefully all other *64 archs on the same *64): - symlink all lib64/ dirs to the corresponding lib/ dir Also, prevent gcc from installing some of its target libs outside of the sys-root, in the first place. Thanks to Laurent DUFRECHOU for reporting the bug and testing the fix. /trunk/scripts/build/cc_gcc.sh | 26 0 26 0 -------------------------- /trunk/scripts/crosstool.sh | 14 14 0 0 ++++++++++++++ 2 files changed, 14 insertions(+), 26 deletions(-) diff -r e8c68d0d1a0c -r d26d8cc7c460 scripts/build/cc_gcc.sh --- a/scripts/build/cc_gcc.sh Sun Jul 27 14:25:19 2008 +0000 +++ b/scripts/build/cc_gcc.sh Sun Jul 27 16:35:37 2008 +0000 @@ -281,26 +281,6 @@ CT_DoExecLog ALL make ${PARALLELMFLAGS} all-build-libiberty fi - # Idea from : - # Fix lib/lib64 confusion for GCC 3.3.3 on PowerPC64 and x86_64. - # GCC 3.4.0 and up don't suffer from this confusion, and don't need this - # kludge. - # FIXME: we should patch gcc's source rather than uglify crosstool.sh. - # FIXME: is this needed for gcc-3.3.[56]? - case "${CT_CC_FILE}" in - gcc-3.3.[34]) - case "${CT_TARGET}" in - powerpc64-unknown-linux-gnu|x86_64-unknown-linux-gnu) - for d in $(find "${CT_SYSROOT_DIR}" -name lib -type d -empty); do - if [ -d $(dirname "${d}")/lib64 ] ; then - rm -rf "${d}" - ln -s $(dirname "${d}")/lib64 "${d}" - fi - done ;; - *) ;; - esac ;; - esac - CT_DoLog EXTRA "Building final compiler" CT_DoExecLog ALL make ${PARALLELMFLAGS} all @@ -311,11 +291,5 @@ # to call the C compiler with the same, somewhat canonical name. ln -sv "${CT_PREFIX_DIR}/bin/${CT_TARGET}"-{g,}cc 2>&1 |CT_DoLog ALL - # gcc installs stuff in prefix/target/lib, when it would make better sense - # to install that into sysroot/usr/lib - CT_DoLog EXTRA "Moving improperly installed gcc libs to sysroot" - ( cd "${CT_PREFIX_DIR}/${CT_TARGET}/lib"; tar cf - . ) | ( cd "${CT_SYSROOT_DIR}/usr/lib"; tar xfv - ) |CT_DoLog ALL - rm -rf "${CT_PREFIX_DIR}/${CT_TARGET}/lib" - CT_EndStep } diff -r e8c68d0d1a0c -r d26d8cc7c460 scripts/crosstool.sh --- a/scripts/crosstool.sh Sun Jul 27 14:25:19 2008 +0000 +++ b/scripts/crosstool.sh Sun Jul 27 16:35:37 2008 +0000 @@ -350,6 +350,20 @@ mkdir -p "${CT_SYSROOT_DIR}/lib" mkdir -p "${CT_SYSROOT_DIR}/usr/lib" + # Prevent gcc from installing its libraries outside of the sys-root + ln -sf "sys-root/lib" "${CT_PREFIX_DIR}/${CT_TARGET}/lib" + + # Now, in case we're 64 bits, just have lib64/ be a symlink to lib/ + # so as to have all libraries in the same directory (we can do that + # because we are *not* multilib). + case "${CT_TARGET}" in + powerpc64*|ppc64*|x86_64*) + ln -sf "lib" "${CT_SYSROOT_DIR}/lib64" + ln -sf "lib" "${CT_SYSROOT_DIR}/usr/lib64" + ln -sf "sys-root/lib" "${CT_PREFIX_DIR}/${CT_TARGET}/lib64" + ;; + esac + # Canadian-cross are really picky on the way they are built. Tweak the values. CT_UNIQ_BUILD=$(echo "${CT_BUILD}" |sed -r -e 's/-/-build_/') if [ "${CT_CANADIAN}" = "y" ]; then