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


Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • tools/toolchain.sh

    rb886b60 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:"
     
    148156        echo " ppc64      64-bit PowerPC"
    149157        echo " sparc64    SPARC V9"
    150         echo " sparc32    SPARC V8"
    151158        echo " all        build all targets"
    152159        echo " parallel   same as 'all', but all in parallel"
    153160        echo " 2-way      same as 'all', but 2-way parallel"
    154161        echo
    155         echo "The toolchain will be installed to the directory specified by"
    156         echo "the CROSS_PREFIX environment variable. If the variable is not"
    157         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."
    158179        echo
    159180       
     
    255276}
    256277
     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
    257305unpack_tarball() {
    258306        FILE="$1"
     
    264312        tar -xjf "${FILE}"
    265313        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}."
    266326}
    267327
     
    277337        download_fetch "${BINUTILS_SOURCE}" "${BINUTILS}" "33adb18c3048d057ac58d07a3f1adb38"
    278338        download_fetch "${GCC_SOURCE}" "${GCC}" "3b2386c114cd74185aa3754b58a79304"
    279         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
    280388}
    281389
    282390build_target() {
    283391        PLATFORM="$1"
    284         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
    285399       
    286400        WORKDIR="${BASEDIR}/${PLATFORM}"
     
    293407                CROSS_PREFIX="/usr/local/cross"
    294408        fi
    295        
    296         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
    297418       
    298419        echo ">>> Downloading tarballs"
     
    302423       
    303424        echo ">>> Removing previous content"
    304         cleanup_dir "${PREFIX}"
     425        $REAL_INSTALL && cleanup_dir "${PREFIX}"
    305426        cleanup_dir "${WORKDIR}"
    306427       
    307         create_dir "${PREFIX}" "destination directory"
     428        $REAL_INSTALL && create_dir "${PREFIX}" "destination directory"
    308429        create_dir "${OBJDIR}" "GCC object directory"
     430       
     431        check_dirs "${PREFIX}" "${WORKDIR}"
    309432       
    310433        echo ">>> Unpacking tarballs"
     
    316439        unpack_tarball "${BASEDIR}/${GDB}" "GDB"
    317440       
     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       
    318452        echo ">>> Processing binutils (${PLATFORM})"
    319453        cd "${BINUTILSDIR}"
     
    321455       
    322456        change_title "binutils: configure (${PLATFORM})"
    323         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
    324461        check_error $? "Error configuring binutils."
    325462       
    326463        change_title "binutils: make (${PLATFORM})"
    327         make all install
    328         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       
    329475       
    330476        echo ">>> Processing GCC (${PLATFORM})"
     
    333479       
    334480        change_title "GCC: configure (${PLATFORM})"
    335         "${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
    336488        check_error $? "Error configuring GCC."
    337489       
    338490        change_title "GCC: make (${PLATFORM})"
    339         PATH="${PATH}:${PREFIX}/bin" make all-gcc install-gcc
    340         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       
    341502       
    342503        echo ">>> Processing GDB (${PLATFORM})"
     
    345506       
    346507        change_title "GDB: configure (${PLATFORM})"
    347         ./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}-"
    348511        check_error $? "Error configuring GDB."
    349512       
    350513        change_title "GDB: make (${PLATFORM})"
    351         make all install
    352         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       
    353525       
    354526        cd "${BASEDIR}"
     
    361533        echo ">>> Cross-compiler for ${TARGET} installed."
    362534}
     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
    363551
    364552if [ "$#" -lt "1" ]; then
     
    367555
    368556case "$1" in
    369         "amd64")
     557        amd64|arm32|ia32|ia64|mips32|mips32eb|mips64|ppc32|ppc64|sparc64)
    370558                prepare
    371                 build_target "amd64" "amd64-linux-gnu"
    372                 ;;
    373         "arm32")
    374                 prepare
    375                 build_target "arm32" "arm-linux-gnueabi"
    376                 ;;
    377         "ia32")
    378                 prepare
    379                 build_target "ia32" "i686-pc-linux-gnu"
    380                 ;;
    381         "ia64")
    382                 prepare
    383                 build_target "ia64" "ia64-pc-linux-gnu"
    384                 ;;
    385         "mips32")
    386                 prepare
    387                 build_target "mips32" "mipsel-linux-gnu"
    388                 ;;
    389         "mips32eb")
    390                 prepare
    391                 build_target "mips32eb" "mips-linux-gnu"
    392                 ;;
    393         "mips64")
    394                 prepare
    395                 build_target "mips64" "mips64el-linux-gnu"
    396                 ;;
    397         "ppc32")
    398                 prepare
    399                 build_target "ppc32" "ppc-linux-gnu"
    400                 ;;
    401         "ppc64")
    402                 prepare
    403                 build_target "ppc64" "ppc64-linux-gnu"
    404                 ;;
    405         "sparc64")
    406                 prepare
    407                 build_target "sparc64" "sparc64-linux-gnu"
    408                 ;;
    409         "sparc32")
    410                 prepare
    411                 build_target "sparc32" "sparc-leon3-linux-gnu"
     559                build_target "$1"
    412560                ;;
    413561        "all")
    414562                prepare
    415                 build_target "amd64" "amd64-linux-gnu"
    416                 build_target "arm32" "arm-linux-gnueabi"
    417                 build_target "ia32" "i686-pc-linux-gnu"
    418                 build_target "ia64" "ia64-pc-linux-gnu"
    419                 build_target "mips32" "mipsel-linux-gnu"
    420                 build_target "mips32eb" "mips-linux-gnu"
    421                 build_target "mips64" "mips64el-linux-gnu"
    422                 build_target "ppc32" "ppc-linux-gnu"
    423                 build_target "ppc64" "ppc64-linux-gnu"
    424                 build_target "sparc64" "sparc64-linux-gnu"
    425                 build_target "sparc32" "sparc-leon3-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"
    426573                ;;
    427574        "parallel")
    428575                prepare
    429                 build_target "amd64" "amd64-linux-gnu" &
    430                 build_target "arm32" "arm-linux-gnueabi" &
    431                 build_target "ia32" "i686-pc-linux-gnu" &
    432                 build_target "ia64" "ia64-pc-linux-gnu" &
    433                 build_target "mips32" "mipsel-linux-gnu" &
    434                 build_target "mips32eb" "mips-linux-gnu" &
    435                 build_target "mips64" "mips64el-linux-gnu" &
    436                 build_target "ppc32" "ppc-linux-gnu" &
    437                 build_target "ppc64" "ppc64-linux-gnu" &
    438                 build_target "sparc64" "sparc64-linux-gnu" &
    439                 build_target "sparc32" "sparc-leon3-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" &
    440586                wait
    441587                ;;
    442588        "2-way")
    443589                prepare
    444                 build_target "amd64" "amd64-linux-gnu" &
    445                 build_target "arm32" "arm-linux-gnueabi" &
     590                build_target "amd64" &
     591                build_target "arm32" &
    446592                wait
    447593               
    448                 build_target "ia32" "i686-pc-linux-gnu" &
    449                 build_target "ia64" "ia64-pc-linux-gnu" &
     594                build_target "ia32" &
     595                build_target "ia64" &
    450596                wait
    451597               
    452                 build_target "mips32" "mipsel-linux-gnu" &
    453                 build_target "mips32eb" "mips-linux-gnu" &
     598                build_target "mips32" &
     599                build_target "mips32eb" &
    454600                wait
    455601               
    456                 build_target "mips64" "mips64el-linux-gnu" &
    457                 build_target "ppc32" "ppc-linux-gnu" &
     602                build_target "mips64" &
     603                build_target "ppc32" &
    458604                wait
    459605               
    460                 build_target "ppc64" "ppc64-linux-gnu" &
    461                 build_target "sparc64" "sparc64-linux-gnu" &
    462                 wait
    463 
    464                 build_target "sparc32" "sparc-leon3-linux-gnu" &
     606                build_target "ppc64" &
     607                build_target "sparc64" &
    465608                wait
    466609                ;;
Note: See TracChangeset for help on using the changeset viewer.