scripts/build/cc_gcc.sh
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Tue May 01 16:49:15 2007 +0000 (2007-05-01)
changeset 56 07a6a48962b7
parent 48 d19bdc2c5fff
child 63 89b41dbffe8d
permissions -rw-r--r--
Merge patches sent by Robert P. J. Day <rpjday@mindspring.com>.
Warning: the buildroot folks purposedly removed the skip-comment patch but didn't really said why. Keeping it for the sake of having it in svn just in case (removing it will be easier thant not having it at all).
yann@1
     1
# This file adds the function to build the final gcc C compiler
yann@1
     2
# Copyright 2007 Yann E. MORIN
yann@1
     3
# Licensed under the GPL v2. See COPYING in the root of this package
yann@1
     4
yann@1
     5
do_cc() {
yann@48
     6
    CT_DoStep INFO "Installing final compiler"
yann@1
     7
yann@1
     8
    mkdir -p "${CT_BUILD_DIR}/build-cc"
yann@1
     9
    cd "${CT_BUILD_DIR}/build-cc"
yann@1
    10
yann@50
    11
    CT_DoLog EXTRA "Configuring final compiler"
yann@1
    12
yann@1
    13
    # Enable selected languages
yann@1
    14
    lang_opt="c"
yann@1
    15
    [ "${CT_CC_LANG_CXX}" = "y"      ] && lang_opt="${lang_opt},c++"
yann@1
    16
    [ "${CT_CC_LANG_FORTRAN}" = "y"  ] && lang_opt="${lang_opt},fortran"
yann@1
    17
    [ "${CT_CC_LANG_ADA}" = "y"      ] && lang_opt="${lang_opt},ada"
yann@1
    18
    [ "${CT_CC_LANG_JAVA}" = "y"     ] && lang_opt="${lang_opt},java"
yann@1
    19
    [ "${CT_CC_LANG_OBJC}" = "y"     ] && lang_opt="${lang_opt},objc"
yann@1
    20
    [ "${CT_CC_LANG_OBJCXX}" = "y"   ] && lang_opt="${lang_opt},obj-c++"
yann@1
    21
    CT_Test "Building Fortran language is not yet supported. Will try..." "${CT_CC_LANG_FORTRAN}" = "y"
yann@1
    22
    CT_Test "Building ADA language is not yet supported. Will try..." "${CT_CC_LANG_ADA}" = "y"
yann@1
    23
    CT_Test "Building Java language is not yet supported. Will try..." "${CT_CC_LANG_JAVA}" = "y"
yann@1
    24
    CT_Test "Building Objective-C language is not yet supported. Will try..." "${CT_CC_LANG_OBJC}" = "y"
yann@1
    25
    CT_Test "Building Objective-C++ language is not yet supported. Will try..." "${CT_CC_LANG_OBJCXX}" = "y"
yann@1
    26
    CT_Test "Building ${CT_CC_LANG_OTHERS} language(s) is not yet supported. Will try..." -n "${CT_CC_LANG_OTHERS}"
yann@48
    27
    lang_opt=`echo "${lang_opt},${CT_CC_LANG_OTHERS}" |sed -r -e 's/,+/,/g; s/,*$//;'`
yann@1
    28
yann@1
    29
    extra_config="--enable-languages=${lang_opt}"
yann@1
    30
    [ "${CT_ARCH_FLOAT_SW}" = "y" ] && extra_config="${extra_config} --with-float=soft"
yann@1
    31
    [ "${CT_SHARED_LIBS}" = "y" ] || extra_config="${extra_config} --disable-shared"
yann@45
    32
    [ -n "${CT_ARCH_ABI}" ]  && extra_config="${extra_config} --with-abi=${CT_ARCH_ABI}"
yann@1
    33
    [ -n "${CT_ARCH_CPU}" ]  && extra_config="${extra_config} --with-cpu=${CT_ARCH_CPU}"
yann@1
    34
    [ -n "${CT_ARCH_TUNE}" ] && extra_config="${extra_config} --with-tune=${CT_ARCH_TUNE}"
yann@1
    35
    [ -n "${CT_ARCH_ARCH}" ] && extra_config="${extra_config} --with-arch=${CT_ARCH_ARCH}"
yann@1
    36
    [ -n "${CT_ARCH_FPU}" ] && extra_config="${extra_config} --with-fpu=${CT_ARCH_FPU}"
yann@1
    37
    if [ "${CT_TARGET_MULTILIB}" = "y" ]; then
yann@1
    38
       extra_config="${extra_config} --enable-multilib"
yann@1
    39
    else
yann@1
    40
       extra_config="${extra_config} --disable-multilib"
yann@1
    41
    fi
yann@20
    42
    [ "${CT_CC_CXA_ATEXIT}" == "y" ] && extra_config="${extra_config} --enable-__cxa_atexit"
yann@1
    43
yann@1
    44
    CT_DoLog DEBUG "Extra config passed: \"${extra_config}\""
yann@1
    45
yann@1
    46
    # --enable-symvers=gnu really only needed for sh4 to work around a
yann@1
    47
    # detection problem only matters for gcc-3.2.x and later, I think.
yann@1
    48
    # --disable-nls to work around crash bug on ppc405, but also because
yann@1
    49
    # embedded systems don't really need message catalogs...
yann@1
    50
    CFLAGS="${CT_CFLAGS_FOR_HOST}"                  \
yann@1
    51
    "${CT_SRC_DIR}/${CT_CC_FILE}/configure"     \
yann@1
    52
        ${CT_CANADIAN_OPT}                      \
yann@1
    53
        --target=${CT_TARGET} --host=${CT_HOST} \
yann@1
    54
        --prefix="${CT_PREFIX_DIR}"             \
yann@1
    55
        ${CC_SYSROOT_ARG}                       \
yann@1
    56
        ${extra_config}                         \
yann@1
    57
        --with-local-prefix="${CT_SYSROOT_DIR}" \
yann@1
    58
        --disable-nls                           \
yann@1
    59
        --enable-threads=posix                  \
yann@1
    60
        --enable-symvers=gnu                    \
yann@1
    61
        --enable-c99                            \
yann@1
    62
        --enable-long-long                      \
yann@1
    63
        ${CT_CC_EXTRA_CONFIG}                   2>&1 |CT_DoLog DEBUG
yann@1
    64
yann@1
    65
    if [ ! "${CT_CANADIAN}" = "y" ]; then
yann@1
    66
        CT_DoLog EXTRA "Building libiberty"
yann@1
    67
        make ${PARALLELMFLAGS} all-build-libiberty 2>&1 |CT_DoLog DEBUG
yann@1
    68
    fi
yann@1
    69
yann@1
    70
yann@1
    71
    # Idea from <cort.dougan at gmail.com>:
yann@1
    72
    # Fix lib/lib64 confusion for GCC 3.3.3 on PowerPC64 and x86_64.
yann@1
    73
    # GCC 3.4.0 and up don't suffer from this confusion, and don't need this
yann@1
    74
    # kludge.
yann@1
    75
    # FIXME: we should patch gcc's source rather than uglify crosstool.sh.
yann@1
    76
    # FIXME: is this needed for gcc-3.3.[56]?
yann@1
    77
    case "${CT_CC_FILE}" in
yann@1
    78
      gcc-3.3.[34])
yann@1
    79
        case "${CT_TARGET}" in
yann@1
    80
          powerpc64-unknown-linux-gnu|x86_64-unknown-linux-gnu)
yann@1
    81
            for d in `find "${CT_SYSROOT_DIR}" -name lib -type d -empty`; do
yann@1
    82
              if [ -d `dirname "${d}"`/lib64 ] ; then
yann@1
    83
                rm -rf "${d}"
yann@1
    84
                ln -s `dirname "${d}"`/lib64 "${d}"
yann@1
    85
              fi
yann@1
    86
            done ;;
yann@1
    87
          *) ;;
yann@1
    88
        esac ;;
yann@1
    89
    esac
yann@1
    90
yann@50
    91
    CT_DoLog EXTRA "Building final compiler"
yann@1
    92
    make ${PARALLELMFLAGS} all 2>&1 |CT_DoLog DEBUG
yann@1
    93
yann@50
    94
    CT_DoLog EXTRA "Installing final compiler"
yann@1
    95
    make install 2>&1 |CT_DoLog DEBUG
yann@1
    96
yann@1
    97
    # FIXME: shouldn't people who want this just --disable-multilib in final gcc
yann@1
    98
    # and be done with it?
yann@1
    99
    # This code should probably be deleted, it was written long ago and hasn't
yann@1
   100
    # been tested in ages.
yann@1
   101
    # kludge: If the chip does not have a floating point unit
yann@1
   102
    # (i.e. if GLIBC_EXTRA_CONFIG contains --without-fp),
yann@1
   103
    # and there are shared libraries in /lib/nof, copy them to /lib
yann@1
   104
    # so they get used by default.
yann@1
   105
    # FIXME: only rs6000/powerpc seem to use nof.  See MULTILIB_DIRNAMES
yann@1
   106
    # in $GCC_DIR/gcc/config/$TARGET/* to see what your arch calls it.
yann@1
   107
    #case "${CT_LIBC_EXTRA_CONFIG}" in
yann@1
   108
    #    *--without-fp*)
yann@1
   109
    #        if test -d "${CT_SYSROOT_DIR}/lib/nof"; then
yann@1
   110
    #            cp -af "${CT_SYSROOT_DIR}/lib/nof/"*.so* "${CT_SYSROOT_DIR}/lib" || true
yann@1
   111
    #        fi
yann@1
   112
    #    ;;
yann@1
   113
    #esac
yann@1
   114
yann@1
   115
    CT_EndStep
yann@1
   116
}