Changeset 0773396 in mainline for tools/toolchain.sh


Ignore:
Timestamp:
2013-12-25T13:05:25Z (10 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
bc54126c
Parents:
f4a47e52 (diff), 6946f23 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

merge mainline changes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • tools/toolchain.sh

    rf4a47e52 r0773396  
    3636        GCC_GMP_VERSION_NUM(__GNU_MP_VERSION, __GNU_MP_VERSION_MINOR, __GNU_MP_VERSION_PATCHLEVEL)
    3737
    38 #if GCC_GMP_VERSION < GCC_GMP_VERSION_NUM(4,3,2)
     38#if GCC_GMP_VERSION < GCC_GMP_VERSION_NUM(4, 3, 2)
    3939        choke me
    4040#endif
     
    5555BINUTILS_VERSION="2.23.1"
    5656BINUTILS_RELEASE=""
     57BINUTILS_PATCHES="toolchain-binutils-2.23.1.patch"
    5758GCC_VERSION="4.8.1"
    58 GDB_VERSION="7.6"
     59GCC_PATCHES="toolchain-gcc-4.8.1-targets.patch toolchain-gcc-4.8.1-headers.patch"
     60GDB_VERSION="7.6.1"
     61GDB_PATCHES="toolchain-gdb-7.6.1.patch"
    5962
    6063BASEDIR="`pwd`"
     64SRCDIR="$(readlink -f $(dirname "$0"))"
    6165BINUTILS="binutils-${BINUTILS_VERSION}${BINUTILS_RELEASE}.tar.bz2"
    6266GCC="gcc-${GCC_VERSION}.tar.bz2"
    6367GDB="gdb-${GDB_VERSION}.tar.bz2"
     68
     69REAL_INSTALL=true
     70USE_HELENOS_TARGET=false
     71INSTALL_DIR="${BASEDIR}/PKG"
    6472
    6573#
     
    135143        echo
    136144        echo "Syntax:"
    137         echo " $0 <platform>"
     145        echo " $0 [--no-install] [--helenos-target] <platform>"
    138146        echo
    139147        echo "Possible target platforms are:"
     
    152160        echo " 2-way      same as 'all', but 2-way parallel"
    153161        echo
    154         echo "The toolchain will be installed to the directory specified by"
    155         echo "the CROSS_PREFIX environment variable. If the variable is not"
    156         echo "defined, /usr/local/cross will be used by default."
     162        echo "The toolchain is installed into directory specified by the"
     163        echo "CROSS_PREFIX environment variable. If the variable is not"
     164        echo "defined, /usr/local/cross/ is used as default."
     165        echo
     166        echo "If --no-install is present, the toolchain still uses the"
     167        echo "CROSS_PREFIX as the target directory but the installation"
     168        echo "copies the files into PKG/ subdirectory without affecting"
     169        echo "the actual root file system. That is only useful if you do"
     170        echo "not want to run the script under the super user."
     171        echo
     172        echo "The --helenos-target will build HelenOS-specific toolchain"
     173        echo "(i.e. it will use *-helenos-* triplet instead of *-linux-*)."
     174        echo "This toolchain is installed into /usr/local/cross-helenos by"
     175        echo "default. The settings can be changed by setting environment"
     176        echo "variable CROSS_HELENOS_PREFIX."
     177        echo "Using the HelenOS-specific toolchain is still an experimental"
     178        echo "feature that is not fully supported."
    157179        echo
    158180       
     
    254276}
    255277
     278check_dirs() {
     279        OUTSIDE="$1"
     280        BASE="$2"
     281        ORIGINAL="`pwd`"
     282       
     283        cd "${OUTSIDE}"
     284        check_error $? "Unable to change directory to ${OUTSIDE}."
     285        ABS_OUTSIDE="`pwd`"
     286       
     287        cd "${BASE}"
     288        check_error $? "Unable to change directory to ${BASE}."
     289        ABS_BASE="`pwd`"
     290       
     291        cd "${ORIGINAL}"
     292        check_error $? "Unable to change directory to ${ORIGINAL}."
     293       
     294        BASE_LEN="${#ABS_BASE}"
     295        OUTSIDE_TRIM="${ABS_OUTSIDE:0:${BASE_LEN}}"
     296       
     297        if [ "${OUTSIDE_TRIM}" == "${ABS_BASE}" ] ; then
     298                echo
     299                echo "CROSS_PREFIX cannot reside within the working directory."
     300               
     301                exit 5
     302        fi
     303}
     304
    256305unpack_tarball() {
    257306        FILE="$1"
     
    263312        tar -xjf "${FILE}"
    264313        check_error $? "Error unpacking ${DESC}."
     314}
     315
     316patch_sources() {
     317        PATCH_FILE="$1"
     318        PATCH_STRIP="$2"
     319        DESC="$3"
     320       
     321        change_title "Patching ${DESC}"
     322        echo " >>> Patching ${DESC} with ${PATCH_FILE}"
     323       
     324        patch -t "-p${PATCH_STRIP}" <"$PATCH_FILE"
     325        check_error $? "Error patching ${DESC}."
    265326}
    266327
     
    276337        download_fetch "${BINUTILS_SOURCE}" "${BINUTILS}" "33adb18c3048d057ac58d07a3f1adb38"
    277338        download_fetch "${GCC_SOURCE}" "${GCC}" "3b2386c114cd74185aa3754b58a79304"
    278         download_fetch "${GDB_SOURCE}" "${GDB}" "fda57170e4d11cdde74259ca575412a8"
     339        download_fetch "${GDB_SOURCE}" "${GDB}" "fbc4dab4181e6e9937075b43a4ce2732"
     340}
     341
     342set_target_from_platform() {
     343        case "$1" in
     344                "amd64")
     345                        LINUX_TARGET="amd64-linux-gnu"
     346                        HELENOS_TARGET="amd64-helenos"
     347                        ;;
     348                "arm32")
     349                        LINUX_TARGET="arm-linux-gnueabi"
     350                        HELENOS_TARGET="arm-helenos-gnueabi"
     351                        ;;
     352                "ia32")
     353                        LINUX_TARGET="i686-pc-linux-gnu"
     354                        HELENOS_TARGET="i686-pc-helenos"
     355                        ;;
     356                "ia64")
     357                        LINUX_TARGET="ia64-pc-linux-gnu"
     358                        HELENOS_TARGET="ia64-pc-helenos"
     359                        ;;
     360                "mips32")
     361                        LINUX_TARGET="mipsel-linux-gnu"
     362                        HELENOS_TARGET="mipsel-helenos"
     363                        ;;
     364                "mips32eb")
     365                        LINUX_TARGET="mips-linux-gnu"
     366                        HELENOS_TARGET="mips-helenos"
     367                        ;;
     368                "mips64")
     369                        LINUX_TARGET="mips64el-linux-gnu"
     370                        HELENOS_TARGET="mips64el-helenos"
     371                        ;;
     372                "ppc32")
     373                        LINUX_TARGET="ppc-linux-gnu"
     374                        HELENOS_TARGET="ppc-helenos"
     375                        ;;
     376                "ppc64")
     377                        LINUX_TARGET="ppc64-linux-gnu"
     378                        HELENOS_TARGET="ppc64-helenos"
     379                        ;;
     380                "sparc64")
     381                        LINUX_TARGET="sparc64-linux-gnu"
     382                        HELENOS_TARGET="sparc64-helenos"
     383                        ;;
     384                *)
     385                        check_error 1 "No target known for $1."
     386                        ;;
     387        esac
    279388}
    280389
    281390build_target() {
    282391        PLATFORM="$1"
    283         TARGET="$2"
     392        # This sets the *_TARGET variables
     393        set_target_from_platform "$PLATFORM"
     394        if $USE_HELENOS_TARGET; then
     395                TARGET="$HELENOS_TARGET"
     396        else
     397                TARGET="$LINUX_TARGET"
     398        fi
    284399       
    285400        WORKDIR="${BASEDIR}/${PLATFORM}"
     
    292407                CROSS_PREFIX="/usr/local/cross"
    293408        fi
    294        
    295         PREFIX="${CROSS_PREFIX}/${PLATFORM}"
     409        if [ -z "${CROSS_HELENOS_PREFIX}" ] ; then
     410                CROSS_HELENOS_PREFIX="/usr/local/cross-helenos"
     411        fi
     412       
     413        if $USE_HELENOS_TARGET; then
     414                PREFIX="${CROSS_HELENOS_PREFIX}/${PLATFORM}"
     415        else
     416                PREFIX="${CROSS_PREFIX}/${PLATFORM}"
     417        fi
    296418       
    297419        echo ">>> Downloading tarballs"
     
    301423       
    302424        echo ">>> Removing previous content"
    303         cleanup_dir "${PREFIX}"
     425        $REAL_INSTALL && cleanup_dir "${PREFIX}"
    304426        cleanup_dir "${WORKDIR}"
    305427       
    306         create_dir "${PREFIX}" "destination directory"
     428        $REAL_INSTALL && create_dir "${PREFIX}" "destination directory"
    307429        create_dir "${OBJDIR}" "GCC object directory"
     430       
     431        check_dirs "${PREFIX}" "${WORKDIR}"
    308432       
    309433        echo ">>> Unpacking tarballs"
     
    315439        unpack_tarball "${BASEDIR}/${GDB}" "GDB"
    316440       
     441        echo ">>> Applying patches"
     442        for p in $BINUTILS_PATCHES; do
     443                patch_sources "${SRCDIR}/${p}" 0 "binutils"
     444        done
     445        for p in $GCC_PATCHES; do
     446                patch_sources "${SRCDIR}/${p}" 0 "GCC"
     447        done
     448        for p in $GDB_PATCHES; do
     449                patch_sources "${SRCDIR}/${p}" 0 "GDB"
     450        done
     451       
    317452        echo ">>> Processing binutils (${PLATFORM})"
    318453        cd "${BINUTILSDIR}"
     
    320455       
    321456        change_title "binutils: configure (${PLATFORM})"
    322         CFLAGS=-Wno-error ./configure "--target=${TARGET}" "--prefix=${PREFIX}" "--program-prefix=${TARGET}-" --disable-nls --disable-werror
     457        CFLAGS=-Wno-error ./configure \
     458                "--target=${TARGET}" \
     459                "--prefix=${PREFIX}" "--program-prefix=${TARGET}-" \
     460                --disable-nls --disable-werror
    323461        check_error $? "Error configuring binutils."
    324462       
    325463        change_title "binutils: make (${PLATFORM})"
    326         make all install
    327         check_error $? "Error compiling/installing binutils."
     464        make all
     465        check_error $? "Error compiling binutils."
     466       
     467        change_title "binutils: install (${PLATFORM})"
     468        if $REAL_INSTALL; then
     469                make install
     470        else
     471                make install "DESTDIR=${INSTALL_DIR}"
     472        fi
     473        check_error $? "Error installing binutils."
     474       
    328475       
    329476        echo ">>> Processing GCC (${PLATFORM})"
     
    332479       
    333480        change_title "GCC: configure (${PLATFORM})"
    334         "${GCCDIR}/configure" "--target=${TARGET}" "--prefix=${PREFIX}" "--program-prefix=${TARGET}-" --with-gnu-as --with-gnu-ld --disable-nls --disable-threads --enable-languages=c,objc,c++,obj-c++ --disable-multilib --disable-libgcj --without-headers --disable-shared --enable-lto --disable-werror
     481        PATH="$PATH:${INSTALL_DIR}/${PREFIX}/bin" "${GCCDIR}/configure" \
     482                "--target=${TARGET}" \
     483                "--prefix=${PREFIX}" "--program-prefix=${TARGET}-" \
     484                --with-gnu-as --with-gnu-ld --disable-nls --disable-threads \
     485                --enable-languages=c,objc,c++,obj-c++ \
     486                --disable-multilib --disable-libgcj --without-headers \
     487                --disable-shared --enable-lto --disable-werror
    335488        check_error $? "Error configuring GCC."
    336489       
    337490        change_title "GCC: make (${PLATFORM})"
    338         PATH="${PATH}:${PREFIX}/bin" make all-gcc install-gcc
    339         check_error $? "Error compiling/installing GCC."
     491        PATH="${PATH}:${PREFIX}/bin:${INSTALL_DIR}/${PREFIX}/bin" make all-gcc
     492        check_error $? "Error compiling GCC."
     493       
     494        change_title "GCC: install (${PLATFORM})"
     495        if $REAL_INSTALL; then
     496                PATH="${PATH}:${PREFIX}/bin" make install-gcc
     497        else
     498                PATH="${PATH}:${INSTALL_DIR}/${PREFIX}/bin" make install-gcc "DESTDIR=${INSTALL_DIR}"
     499        fi
     500        check_error $? "Error installing GCC."
     501       
    340502       
    341503        echo ">>> Processing GDB (${PLATFORM})"
     
    344506       
    345507        change_title "GDB: configure (${PLATFORM})"
    346         ./configure "--target=${TARGET}" "--prefix=${PREFIX}" "--program-prefix=${TARGET}-"
     508        PATH="$PATH:${INSTALL_DIR}/${PREFIX}/bin" ./configure \
     509                "--target=${TARGET}" \
     510                "--prefix=${PREFIX}" "--program-prefix=${TARGET}-"
    347511        check_error $? "Error configuring GDB."
    348512       
    349513        change_title "GDB: make (${PLATFORM})"
    350         make all install
    351         check_error $? "Error compiling/installing GDB."
     514        PATH="${PATH}:${PREFIX}/bin:${INSTALL_DIR}/${PREFIX}/bin" make all
     515        check_error $? "Error compiling GDB."
     516       
     517        change_title "GDB: make (${PLATFORM})"
     518        if $REAL_INSTALL; then
     519                PATH="${PATH}:${PREFIX}/bin" make install
     520        else
     521                PATH="${PATH}:${INSTALL_DIR}/${PREFIX}/bin" make install "DESTDIR=${INSTALL_DIR}"
     522        fi
     523        check_error $? "Error installing GDB."
     524       
    352525       
    353526        cd "${BASEDIR}"
     
    360533        echo ">>> Cross-compiler for ${TARGET} installed."
    361534}
     535
     536while [ "$#" -gt 1 ]; do
     537        case "$1" in
     538                --no-install)
     539                        REAL_INSTALL=false
     540                        shift
     541                        ;;
     542                --helenos-target)
     543                        USE_HELENOS_TARGET=true
     544                        shift
     545                        ;;
     546                *)
     547                        show_usage
     548                        ;;
     549        esac
     550done
    362551
    363552if [ "$#" -lt "1" ]; then
     
    366555
    367556case "$1" in
    368         "amd64")
     557        amd64|arm32|ia32|ia64|mips32|mips32eb|mips64|ppc32|ppc64|sparc64)
    369558                prepare
    370                 build_target "amd64" "amd64-linux-gnu"
    371                 ;;
    372         "arm32")
    373                 prepare
    374                 build_target "arm32" "arm-linux-gnueabi"
    375                 ;;
    376         "ia32")
    377                 prepare
    378                 build_target "ia32" "i686-pc-linux-gnu"
    379                 ;;
    380         "ia64")
    381                 prepare
    382                 build_target "ia64" "ia64-pc-linux-gnu"
    383                 ;;
    384         "mips32")
    385                 prepare
    386                 build_target "mips32" "mipsel-linux-gnu"
    387                 ;;
    388         "mips32eb")
    389                 prepare
    390                 build_target "mips32eb" "mips-linux-gnu"
    391                 ;;
    392         "mips64")
    393                 prepare
    394                 build_target "mips64" "mips64el-linux-gnu"
    395                 ;;
    396         "ppc32")
    397                 prepare
    398                 build_target "ppc32" "ppc-linux-gnu"
    399                 ;;
    400         "ppc64")
    401                 prepare
    402                 build_target "ppc64" "ppc64-linux-gnu"
    403                 ;;
    404         "sparc64")
    405                 prepare
    406                 build_target "sparc64" "sparc64-linux-gnu"
     559                build_target "$1"
    407560                ;;
    408561        "all")
    409562                prepare
    410                 build_target "amd64" "amd64-linux-gnu"
    411                 build_target "arm32" "arm-linux-gnueabi"
    412                 build_target "ia32" "i686-pc-linux-gnu"
    413                 build_target "ia64" "ia64-pc-linux-gnu"
    414                 build_target "mips32" "mipsel-linux-gnu"
    415                 build_target "mips32eb" "mips-linux-gnu"
    416                 build_target "mips64" "mips64el-linux-gnu"
    417                 build_target "ppc32" "ppc-linux-gnu"
    418                 build_target "ppc64" "ppc64-linux-gnu"
    419                 build_target "sparc64" "sparc64-linux-gnu"
     563                build_target "amd64"
     564                build_target "arm32"
     565                build_target "ia32"
     566                build_target "ia64"
     567                build_target "mips32"
     568                build_target "mips32eb"
     569                build_target "mips64"
     570                build_target "ppc32"
     571                build_target "ppc64"
     572                build_target "sparc64"
    420573                ;;
    421574        "parallel")
    422575                prepare
    423                 build_target "amd64" "amd64-linux-gnu" &
    424                 build_target "arm32" "arm-linux-gnueabi" &
    425                 build_target "ia32" "i686-pc-linux-gnu" &
    426                 build_target "ia64" "ia64-pc-linux-gnu" &
    427                 build_target "mips32" "mipsel-linux-gnu" &
    428                 build_target "mips32eb" "mips-linux-gnu" &
    429                 build_target "mips64" "mips64el-linux-gnu" &
    430                 build_target "ppc32" "ppc-linux-gnu" &
    431                 build_target "ppc64" "ppc64-linux-gnu" &
    432                 build_target "sparc64" "sparc64-linux-gnu" &
     576                build_target "amd64" &
     577                build_target "arm32" &
     578                build_target "ia32" &
     579                build_target "ia64" &
     580                build_target "mips32" &
     581                build_target "mips32eb" &
     582                build_target "mips64" &
     583                build_target "ppc32" &
     584                build_target "ppc64" &
     585                build_target "sparc64" &
    433586                wait
    434587                ;;
    435588        "2-way")
    436589                prepare
    437                 build_target "amd64" "amd64-linux-gnu" &
    438                 build_target "arm32" "arm-linux-gnueabi" &
     590                build_target "amd64" &
     591                build_target "arm32" &
    439592                wait
    440593               
    441                 build_target "ia32" "i686-pc-linux-gnu" &
    442                 build_target "ia64" "ia64-pc-linux-gnu" &
     594                build_target "ia32" &
     595                build_target "ia64" &
    443596                wait
    444597               
    445                 build_target "mips32" "mipsel-linux-gnu" &
    446                 build_target "mips32eb" "mips-linux-gnu" &
     598                build_target "mips32" &
     599                build_target "mips32eb" &
    447600                wait
    448601               
    449                 build_target "mips64" "mips64el-linux-gnu" &
    450                 build_target "ppc32" "ppc-linux-gnu" &
     602                build_target "mips64" &
     603                build_target "ppc32" &
    451604                wait
    452605               
    453                 build_target "ppc64" "ppc64-linux-gnu" &
    454                 build_target "sparc64" "sparc64-linux-gnu" &
     606                build_target "ppc64" &
     607                build_target "sparc64" &
    455608                wait
    456609                ;;
Note: See TracChangeset for help on using the changeset viewer.