Changeset 2223ceb in mainline


Ignore:
Timestamp:
2018-04-30T16:42:00Z (6 years ago)
Author:
Jiří Zárevúcky <jiri.zarevucky@…>
Children:
aa0c8b2
Parents:
4c5f04f
git-author:
Jiří Zárevúcky <jiri.zarevucky@…> (2018-04-30 14:51:05)
git-committer:
Jiří Zárevúcky <jiri.zarevucky@…> (2018-04-30 16:42:00)
Message:

Revive support for custom target specification.

Instead of maintaining patches separately, directly pull sources from
git. The target is, at the moment, still opt-in.

Location:
tools
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • tools/autotool.py

    r4c5f04f r2223ceb  
    185185                if (config['CROSS_TARGET'] == "arm32"):
    186186                        gnu_target = "arm-linux-gnueabi"
    187                         helenos_target = "arm-helenos-gnueabi"
     187                        helenos_target = "arm-helenos"
    188188
    189189                if (config['CROSS_TARGET'] == "ia32"):
    190190                        gnu_target = "i686-pc-linux-gnu"
    191                         helenos_target = "i686-pc-helenos"
     191                        helenos_target = "i686-helenos"
    192192
    193193                if (config['CROSS_TARGET'] == "mips32"):
     
    204204                platform = config['PLATFORM']
    205205                gnu_target = "arm-linux-gnueabi"
    206                 helenos_target = "arm-helenos-gnueabi"
     206                helenos_target = "arm-helenos"
    207207
    208208        if (config['PLATFORM'] == "ia32"):
    209209                platform = config['PLATFORM']
    210210                gnu_target = "i686-pc-linux-gnu"
    211                 helenos_target = "i686-pc-helenos"
     211                helenos_target = "i686-helenos"
    212212
    213213        if (config['PLATFORM'] == "ia64"):
    214214                platform = config['PLATFORM']
    215215                gnu_target = "ia64-pc-linux-gnu"
    216                 helenos_target = "ia64-pc-helenos"
     216                helenos_target = "ia64-helenos"
    217217
    218218        if (config['PLATFORM'] == "mips32"):
  • tools/toolchain.sh

    r4c5f04f r2223ceb  
    2929#
    3030
     31BINUTILS_GDB_GIT="https://github.com/HelenOS/binutils-gdb.git"
     32
     33BINUTILS_BRANCH="binutils-2_30-helenos"
    3134BINUTILS_VERSION="2.30"
    32 BINUTILS_RELEASE=""
     35
     36GDB_BRANCH="gdb-8_1-helenos"
     37GDB_VERSION="8.1"
     38
     39GCC_GIT="https://github.com/HelenOS/gcc.git"
     40GCC_BRANCH="7_3_0-helenos"
    3341GCC_VERSION="7.3.0"
    34 GDB_VERSION="8.1"
    3542
    3643BASEDIR="`pwd`"
    3744SRCDIR="$(readlink -f $(dirname "$0"))"
    38 BINUTILS="binutils-${BINUTILS_VERSION}${BINUTILS_RELEASE}.tar.bz2"
    39 GCC="gcc-${GCC_VERSION}.tar.xz"
    40 GDB="gdb-${GDB_VERSION}.tar.gz"
    4145
    4246REAL_INSTALL=true
     
    4953
    5054                exit 1
    51         fi
    52 }
    53 
    54 check_md5() {
    55         FILE="$1"
    56         SUM="$2"
    57 
    58         COMPUTED="`md5sum "${FILE}" | cut -d' ' -f1`"
    59         if [ "${SUM}" != "${COMPUTED}" ] ; then
    60                 echo
    61                 echo "Checksum of ${FILE} does not match."
    62 
    63                 exit 2
    6455        fi
    6556}
     
    9990        echo
    10091        echo "The --helenos-target will build HelenOS-specific toolchain"
    101         echo "(i.e. it will use *-helenos-* triplet instead of *-linux-*)."
    102         echo "This toolchain is installed into /usr/local/cross-helenos by"
    103         echo "default. The settings can be changed by setting environment"
    104         echo "variable CROSS_HELENOS_PREFIX."
     92        echo "(i.e. it will use *-helenos triplet instead of *-linux-*)."
    10593        echo "Using the HelenOS-specific toolchain is still an experimental"
    10694        echo "feature that is not fully supported."
     
    148136}
    149137
    150 download_fetch() {
    151         SOURCE="$1"
    152         FILE="$2"
    153         CHECKSUM="$3"
    154 
    155         if [ ! -f "${FILE}" ] ; then
    156                 change_title "Downloading ${FILE}"
    157                 wget -c "${SOURCE}${FILE}" -O "${FILE}".part
    158                 check_error $? "Error downloading ${FILE}."
    159 
    160                 mv "${FILE}".part "${FILE}"
    161         fi
    162 
    163         check_md5 "${FILE}" "${CHECKSUM}"
    164 }
    165 
    166 source_check() {
    167         FILE="$1"
    168 
    169         if [ ! -f "${FILE}" ] ; then
    170                 echo
    171                 echo "File ${FILE} not found."
    172 
    173                 exit 4
    174         fi
    175 }
    176 
    177138cleanup_dir() {
    178139        DIR="$1"
     
    226187}
    227188
    228 unpack_tarball() {
    229         FILE="$1"
    230         DESC="$2"
    231 
    232         change_title "Unpacking ${DESC}"
    233         echo " >>> Unpacking ${DESC}"
    234 
    235         case "${FILE}" in
    236                 *.gz)
    237                         tar -xzf "${FILE}"
    238                         ;;
    239                 *.xz)
    240                         tar -xJf "${FILE}"
    241                         ;;
    242                 *.bz2)
    243                         tar -xjf "${FILE}"
    244                         ;;
    245                 *)
    246                         check_error 1 "Don't know how to unpack ${DESC}."
    247                         ;;
    248         esac
    249         check_error $? "Error unpacking ${DESC}."
    250 }
    251 
    252189prepare() {
    253190        show_dependencies
     
    258195        check_error $? "Change directory failed."
    259196
    260         BINUTILS_SOURCE="ftp://ftp.gnu.org/gnu/binutils/"
    261         GCC_SOURCE="ftp://ftp.gnu.org/gnu/gcc/gcc-${GCC_VERSION}/"
    262         GDB_SOURCE="ftp://ftp.gnu.org/gnu/gdb/"
    263 
    264         echo ">>> Downloading tarballs"
    265 
    266         download_fetch "${BINUTILS_SOURCE}" "${BINUTILS}" "cc47a2f256b4a593206b4d7e62a60b32"
    267         download_fetch "${GCC_SOURCE}" "${GCC}" "be2da21680f27624f3a87055c4ba5af2"
    268         download_fetch "${GDB_SOURCE}" "${GDB}" "0c85ecbb43569ec43b1c9230622e84ab"
    269 
    270         echo ">>> Unpacking tarballs"
    271         cd "${WORKDIR}"
    272         check_error $? "Change directory failed."
    273 
    274         unpack_tarball "${BASEDIR}/downloads/${BINUTILS}" "binutils"
    275         unpack_tarball "${BASEDIR}/downloads/${GCC}" "GCC"
    276         unpack_tarball "${BASEDIR}/downloads/${GDB}" "GDB"
     197        echo ">>> Downloading sources"
     198        git clone --depth 1 -b "$BINUTILS_BRANCH" "$BINUTILS_GDB_GIT" "binutils-$BINUTILS_VERSION"
     199        git clone --depth 1 -b "$GDB_BRANCH" "$BINUTILS_GDB_GIT" "gdb-$GDB_VERSION"
     200        git clone --depth 1 -b "$GCC_BRANCH" "$GCC_GIT" "gcc-$GCC_VERSION"
     201
     202        # If the directory already existed, pull upstream changes.
     203        git -C "binutils-$BINUTILS_VERSION" pull
     204        git -C "gdb-$GDB_VERSION" pull
     205        git -C "gcc-$GCC_VERSION" pull
    277206
    278207        echo ">>> Downloading GCC prerequisites"
     
    284213set_target_from_platform() {
    285214        case "$1" in
     215                "arm32")
     216                        GNU_ARCH="arm"
     217                        ;;
     218                "ia32")
     219                        GNU_ARCH="i686"
     220                        ;;
     221                "mips32")
     222                        GNU_ARCH="mipsel"
     223                        ;;
     224                "mips32eb")
     225                        GNU_ARCH="mips"
     226                        ;;
     227                "mips64")
     228                        GNU_ARCH="mips64el"
     229                        ;;
     230                "ppc32")
     231                        GNU_ARCH="ppc"
     232                        ;;
     233                *)
     234                        GNU_ARCH="$1"
     235                        ;;
     236        esac
     237
     238        HELENOS_TARGET="${GNU_ARCH}-helenos"
     239
     240        case "$1" in
    286241                "amd64")
    287                         LINUX_TARGET="amd64-unknown-elf"
    288                         HELENOS_TARGET="amd64-helenos"
     242                        LINUX_TARGET="${GNU_ARCH}-unknown-elf"
    289243                        ;;
    290244                "arm32")
    291                         LINUX_TARGET="arm-linux-gnueabi"
    292                         HELENOS_TARGET="arm-helenos-gnueabi"
    293                         ;;
    294                 "ia32")
    295                         LINUX_TARGET="i686-pc-linux-gnu"
    296                         HELENOS_TARGET="i686-pc-helenos"
    297                         ;;
    298                 "ia64")
    299                         LINUX_TARGET="ia64-pc-linux-gnu"
    300                         HELENOS_TARGET="ia64-pc-helenos"
    301                         ;;
    302                 "mips32")
    303                         LINUX_TARGET="mipsel-linux-gnu"
    304                         HELENOS_TARGET="mipsel-helenos"
    305                         ;;
    306                 "mips32eb")
    307                         LINUX_TARGET="mips-linux-gnu"
    308                         HELENOS_TARGET="mips-helenos"
    309                         ;;
    310                 "mips64")
    311                         LINUX_TARGET="mips64el-linux-gnu"
    312                         HELENOS_TARGET="mips64el-helenos"
    313                         ;;
    314                 "ppc32")
    315                         LINUX_TARGET="ppc-linux-gnu"
    316                         HELENOS_TARGET="ppc-helenos"
    317                         ;;
    318                 "ppc64")
    319                         LINUX_TARGET="ppc64-linux-gnu"
    320                         HELENOS_TARGET="ppc64-helenos"
    321                         ;;
    322                 "riscv64")
    323                         LINUX_TARGET="riscv64-unknown-linux-gnu"
    324                         HELENOS_TARGET="riscv64-helenos"
    325                         ;;
    326                 "sparc64")
    327                         LINUX_TARGET="sparc64-linux-gnu"
    328                         HELENOS_TARGET="sparc64-helenos"
     245                        LINUX_TARGET="${GNU_ARCH}-linux-gnueabi"
    329246                        ;;
    330247                *)
    331                         check_error 1 "No target known for $1."
     248                        LINUX_TARGET="${GNU_ARCH}-linux-gnu"
    332249                        ;;
    333250        esac
     
    355272        fi
    356273
     274        if [ -z "$JOBS" ] ; then
     275                JOBS=`nproc`
     276        fi
     277
    357278        PREFIX="${CROSS_PREFIX}/${TARGET}"
    358279
     
    362283        check_dirs "${PREFIX}" "${WORKDIR}"
    363284
     285        if $USE_HELENOS_TARGET ; then
     286                echo ">>> Creating build sysroot"
     287                mkdir -p "${WORKDIR}/sysroot/include"
     288                mkdir "${WORKDIR}/sysroot/lib"
     289                cp -r -L -t "${WORKDIR}/sysroot/include" \
     290                        ${SRCDIR}/../abi/include/* \
     291                        ${SRCDIR}/../uspace/lib/c/arch/${PLATFORM}/include/* \
     292                        ${SRCDIR}/../uspace/lib/c/include/*
     293                check_error $? "Failed to create build sysroot."
     294        fi
     295
    364296        echo ">>> Processing binutils (${PLATFORM})"
    365297        mkdir -p "${BINUTILSDIR}"
     
    370302        CFLAGS=-Wno-error "${BASEDIR}/downloads/binutils-${BINUTILS_VERSION}/configure" \
    371303                "--target=${TARGET}" \
    372                 "--prefix=${PREFIX}" "--program-prefix=${TARGET}-" \
    373                 --disable-nls --disable-werror --enable-gold \
    374                 --enable-deterministic-archives
     304                "--prefix=${PREFIX}" \
     305                "--program-prefix=${TARGET}-" \
     306                --disable-nls \
     307                --disable-werror \
     308                --enable-gold \
     309                --enable-deterministic-archives \
     310                --disable-gdb \
     311                --with-sysroot
    375312        check_error $? "Error configuring binutils."
    376313
    377314        change_title "binutils: make (${PLATFORM})"
    378         make all
     315        make all -j$JOBS
    379316        check_error $? "Error compiling binutils."
    380317
     
    389326        check_error $? "Change directory failed."
    390327
     328        if $USE_HELENOS_TARGET ; then
     329                SYSROOT=--with-sysroot --with-build-sysroot="${WORKDIR}/sysroot"
     330        else
     331                SYSROOT=--without-headers
     332        fi
     333
    391334        change_title "GCC: configure (${PLATFORM})"
    392335        PATH="$PATH:${INSTALL_DIR}/${PREFIX}/bin" "${BASEDIR}/downloads/gcc-${GCC_VERSION}/configure" \
    393336                "--target=${TARGET}" \
    394                 "--prefix=${PREFIX}" "--program-prefix=${TARGET}-" \
    395                 --with-gnu-as --with-gnu-ld --disable-nls --disable-threads \
    396                 --enable-languages=c,objc,c++,obj-c++ \
    397                 --disable-multilib --disable-libgcj --without-headers \
    398                 --disable-shared --enable-lto --disable-werror
     337                "--prefix=${PREFIX}" \
     338                "--program-prefix=${TARGET}-" \
     339                --with-gnu-as \
     340                --with-gnu-ld \
     341                --disable-nls \
     342                --enable-languages=c,objc,c++,obj-c++,go \
     343                --enable-lto \
     344                --disable-shared \
     345                --disable-werror \
     346                $SYSROOT
    399347        check_error $? "Error configuring GCC."
    400348
    401349        change_title "GCC: make (${PLATFORM})"
    402         PATH="${PATH}:${PREFIX}/bin:${INSTALL_DIR}/${PREFIX}/bin" make all-gcc
     350        PATH="${PATH}:${PREFIX}/bin:${INSTALL_DIR}/${PREFIX}/bin" make all-gcc -j$JOBS
    403351        check_error $? "Error compiling GCC."
     352
     353        if $USE_HELENOS_TARGET ; then
     354                PATH="${PATH}:${PREFIX}/bin:${INSTALL_DIR}/${PREFIX}/bin" make all-target-libgcc -j$JOBS
     355                check_error $? "Error compiling libgcc."
     356                # TODO: needs some extra care
     357                #PATH="${PATH}:${PREFIX}/bin:${INSTALL_DIR}/${PREFIX}/bin" make all-target-libatomic -j$JOBS
     358                #check_error $? "Error compiling libatomic."
     359                #PATH="${PATH}:${PREFIX}/bin:${INSTALL_DIR}/${PREFIX}/bin" make all-target-libstdc++-v3 -j$JOBS
     360                #check_error $? "Error compiling libstdc++."
     361        fi
    404362
    405363        change_title "GCC: install (${PLATFORM})"
    406364        PATH="${PATH}:${INSTALL_DIR}/${PREFIX}/bin" make install-gcc "DESTDIR=${INSTALL_DIR}"
     365        if $USE_HELENOS_TARGET ; then
     366                PATH="${PATH}:${INSTALL_DIR}/${PREFIX}/bin" make install-target-libgcc "DESTDIR=${INSTALL_DIR}"
     367                #PATH="${PATH}:${INSTALL_DIR}/${PREFIX}/bin" make install-target-libatomic "DESTDIR=${INSTALL_DIR}"
     368                #PATH="${PATH}:${INSTALL_DIR}/${PREFIX}/bin" make install-target-libstdc++-v3 "DESTDIR=${INSTALL_DIR}"
     369        fi
    407370        check_error $? "Error installing GCC."
    408371
     
    416379        PATH="$PATH:${INSTALL_DIR}/${PREFIX}/bin" "${BASEDIR}/downloads/gdb-${GDB_VERSION}/configure" \
    417380                "--target=${TARGET}" \
    418                 "--prefix=${PREFIX}" "--program-prefix=${TARGET}-" \
    419                 --enable-werror=no --without-guile
     381                "--prefix=${PREFIX}" \
     382                "--program-prefix=${TARGET}-" \
     383                --enable-werror=no
    420384        check_error $? "Error configuring GDB."
    421385
    422386        change_title "GDB: make (${PLATFORM})"
    423         PATH="${PATH}:${PREFIX}/bin:${INSTALL_DIR}/${PREFIX}/bin" make all
     387        PATH="${PATH}:${PREFIX}/bin:${INSTALL_DIR}/${PREFIX}/bin" make all-gdb -j$JOBS
    424388        check_error $? "Error compiling GDB."
    425389
    426390        change_title "GDB: make (${PLATFORM})"
    427         PATH="${PATH}:${INSTALL_DIR}/${PREFIX}/bin" make install "DESTDIR=${INSTALL_DIR}"
     391        PATH="${PATH}:${INSTALL_DIR}/${PREFIX}/bin" make install-gdb "DESTDIR=${INSTALL_DIR}"
    428392        check_error $? "Error installing GDB."
    429393
Note: See TracChangeset for help on using the changeset viewer.