Changes in tools/toolchain.sh [285589b:12735849] in mainline


Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • tools/toolchain.sh

    r285589b r12735849  
    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       
     
    292314}
    293315
     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}."
     326}
     327
    294328prepare() {
    295329        show_dependencies
     
    303337        download_fetch "${BINUTILS_SOURCE}" "${BINUTILS}" "33adb18c3048d057ac58d07a3f1adb38"
    304338        download_fetch "${GCC_SOURCE}" "${GCC}" "3b2386c114cd74185aa3754b58a79304"
    305         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
    306388}
    307389
    308390build_target() {
    309391        PLATFORM="$1"
    310         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
    311399       
    312400        WORKDIR="${BASEDIR}/${PLATFORM}"
     
    319407                CROSS_PREFIX="/usr/local/cross"
    320408        fi
    321        
    322         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
    323418       
    324419        echo ">>> Downloading tarballs"
     
    328423       
    329424        echo ">>> Removing previous content"
    330         cleanup_dir "${PREFIX}"
     425        $REAL_INSTALL && cleanup_dir "${PREFIX}"
    331426        cleanup_dir "${WORKDIR}"
    332427       
    333         create_dir "${PREFIX}" "destination directory"
     428        $REAL_INSTALL && create_dir "${PREFIX}" "destination directory"
    334429        create_dir "${OBJDIR}" "GCC object directory"
    335430       
     
    344439        unpack_tarball "${BASEDIR}/${GDB}" "GDB"
    345440       
     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       
    346452        echo ">>> Processing binutils (${PLATFORM})"
    347453        cd "${BINUTILSDIR}"
     
    349455       
    350456        change_title "binutils: configure (${PLATFORM})"
    351         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
    352461        check_error $? "Error configuring binutils."
    353462       
    354463        change_title "binutils: make (${PLATFORM})"
    355         make all install
    356         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       
    357475       
    358476        echo ">>> Processing GCC (${PLATFORM})"
     
    361479       
    362480        change_title "GCC: configure (${PLATFORM})"
    363         "${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
    364488        check_error $? "Error configuring GCC."
    365489       
    366490        change_title "GCC: make (${PLATFORM})"
    367         PATH="${PATH}:${PREFIX}/bin" make all-gcc install-gcc
    368         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       
    369502       
    370503        echo ">>> Processing GDB (${PLATFORM})"
     
    373506       
    374507        change_title "GDB: configure (${PLATFORM})"
    375         ./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}-"
    376511        check_error $? "Error configuring GDB."
    377512       
    378513        change_title "GDB: make (${PLATFORM})"
    379         make all install
    380         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       
    381525       
    382526        cd "${BASEDIR}"
     
    389533        echo ">>> Cross-compiler for ${TARGET} installed."
    390534}
     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
    391551
    392552if [ "$#" -lt "1" ]; then
     
    395555
    396556case "$1" in
    397         "amd64")
     557        amd64|arm32|ia32|ia64|mips32|mips32eb|mips64|ppc32|ppc64|sparc64)
    398558                prepare
    399                 build_target "amd64" "amd64-linux-gnu"
    400                 ;;
    401         "arm32")
    402                 prepare
    403                 build_target "arm32" "arm-linux-gnueabi"
    404                 ;;
    405         "ia32")
    406                 prepare
    407                 build_target "ia32" "i686-pc-linux-gnu"
    408                 ;;
    409         "ia64")
    410                 prepare
    411                 build_target "ia64" "ia64-pc-linux-gnu"
    412                 ;;
    413         "mips32")
    414                 prepare
    415                 build_target "mips32" "mipsel-linux-gnu"
    416                 ;;
    417         "mips32eb")
    418                 prepare
    419                 build_target "mips32eb" "mips-linux-gnu"
    420                 ;;
    421         "mips64")
    422                 prepare
    423                 build_target "mips64" "mips64el-linux-gnu"
    424                 ;;
    425         "ppc32")
    426                 prepare
    427                 build_target "ppc32" "ppc-linux-gnu"
    428                 ;;
    429         "ppc64")
    430                 prepare
    431                 build_target "ppc64" "ppc64-linux-gnu"
    432                 ;;
    433         "sparc64")
    434                 prepare
    435                 build_target "sparc64" "sparc64-linux-gnu"
     559                build_target "$1"
    436560                ;;
    437561        "all")
    438562                prepare
    439                 build_target "amd64" "amd64-linux-gnu"
    440                 build_target "arm32" "arm-linux-gnueabi"
    441                 build_target "ia32" "i686-pc-linux-gnu"
    442                 build_target "ia64" "ia64-pc-linux-gnu"
    443                 build_target "mips32" "mipsel-linux-gnu"
    444                 build_target "mips32eb" "mips-linux-gnu"
    445                 build_target "mips64" "mips64el-linux-gnu"
    446                 build_target "ppc32" "ppc-linux-gnu"
    447                 build_target "ppc64" "ppc64-linux-gnu"
    448                 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"
    449573                ;;
    450574        "parallel")
    451575                prepare
    452                 build_target "amd64" "amd64-linux-gnu" &
    453                 build_target "arm32" "arm-linux-gnueabi" &
    454                 build_target "ia32" "i686-pc-linux-gnu" &
    455                 build_target "ia64" "ia64-pc-linux-gnu" &
    456                 build_target "mips32" "mipsel-linux-gnu" &
    457                 build_target "mips32eb" "mips-linux-gnu" &
    458                 build_target "mips64" "mips64el-linux-gnu" &
    459                 build_target "ppc32" "ppc-linux-gnu" &
    460                 build_target "ppc64" "ppc64-linux-gnu" &
    461                 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" &
    462586                wait
    463587                ;;
    464588        "2-way")
    465589                prepare
    466                 build_target "amd64" "amd64-linux-gnu" &
    467                 build_target "arm32" "arm-linux-gnueabi" &
     590                build_target "amd64" &
     591                build_target "arm32" &
    468592                wait
    469593               
    470                 build_target "ia32" "i686-pc-linux-gnu" &
    471                 build_target "ia64" "ia64-pc-linux-gnu" &
     594                build_target "ia32" &
     595                build_target "ia64" &
    472596                wait
    473597               
    474                 build_target "mips32" "mipsel-linux-gnu" &
    475                 build_target "mips32eb" "mips-linux-gnu" &
     598                build_target "mips32" &
     599                build_target "mips32eb" &
    476600                wait
    477601               
    478                 build_target "mips64" "mips64el-linux-gnu" &
    479                 build_target "ppc32" "ppc-linux-gnu" &
     602                build_target "mips64" &
     603                build_target "ppc32" &
    480604                wait
    481605               
    482                 build_target "ppc64" "ppc64-linux-gnu" &
    483                 build_target "sparc64" "sparc64-linux-gnu" &
     606                build_target "ppc64" &
     607                build_target "sparc64" &
    484608                wait
    485609                ;;
Note: See TracChangeset for help on using the changeset viewer.