Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #! /bin/bash
- set -e
- trap 'previous_command=$this_command; this_command=$BASH_COMMAND' DEBUG
- trap 'echo FAILED COMMAND: $previous_command' EXIT
- #-------------------------------------------------------------------------------------------
- # This script will download packages for, configure, build and install a GCC cross-compiler.
- # Customize the variables (INSTALL_PATH, TARGET, etc.) to your liking before running.
- # If you get an error and need to resume the script from some point in the middle,
- # just delete/comment the preceding lines before running it again.
- #
- # See: http://preshing.com/20141119/how-to-build-a-gcc-cross-compiler
- #-------------------------------------------------------------------------------------------
- INSTALL_PATH=$HOME/build_cross_gcc/install
- TARGET=i686-linux-gnu
- USE_NEWLIB=0
- LINUX_ARCH=x86
- CONFIGURATION_OPTIONS="--disable-multilib" # --disable-threads --disable-shared
- PARALLEL_MAKE=-j8
- BINUTILS_VERSION=binutils-2.25.1
- GCC_VERSION=gcc-5.3.0
- LINUX_KERNEL_VERSION=linux-2.6.33
- GLIBC_VERSION=glibc-2.22
- MPFR_VERSION=mpfr-3.1.3
- GMP_VERSION=gmp-6.1.0
- MPC_VERSION=mpc-1.0.2
- ISL_VERSION=isl-0.12.2
- CLOOG_VERSION=cloog-0.18.1
- export PATH=$INSTALL_PATH/bin:$PATH
- mkdir -p $INSTALL_PATH
- # Download packages
- export http_proxy=$HTTP_PROXY https_proxy=$HTTP_PROXY ftp_proxy=$HTTP_PROXY
- wget -nc https://ftp.gnu.org/gnu/binutils/$BINUTILS_VERSION.tar.gz
- wget -nc https://ftp.gnu.org/gnu/gcc/$GCC_VERSION/$GCC_VERSION.tar.gz
- if [ $USE_NEWLIB -ne 0 ]; then
- wget -nc -O newlib-master.zip https://github.com/bminor/newlib/archive/master.zip || true
- unzip -qo newlib-master.zip
- else
- #wget -nc https://www.kernel.org/pub/linux/kernel/v2.6/$LINUX_KERNEL_VERSION.tar.xz
- wget -nc https://www.kernel.org/pub/linux/kernel/v3.x/$LINUX_KERNEL_VERSION.tar.xz
- wget -nc https://ftp.gnu.org/gnu/glibc/$GLIBC_VERSION.tar.xz
- fi
- wget -nc https://ftp.gnu.org/gnu/mpfr/$MPFR_VERSION.tar.xz
- wget -nc https://ftp.gnu.org/gnu/gmp/$GMP_VERSION.tar.xz
- wget -nc https://ftp.gnu.org/gnu/mpc/$MPC_VERSION.tar.gz
- wget -nc ftp://gcc.gnu.org/pub/gcc/infrastructure/$ISL_VERSION.tar.bz2
- wget -nc ftp://gcc.gnu.org/pub/gcc/infrastructure/$CLOOG_VERSION.tar.gz
- # Extract everything
- for f in *.tar*; do tar --skip-old-files -xf $f; done
- # Make symbolic links
- cd $GCC_VERSION
- ln -sf `ls -1d ../mpfr-*/` mpfr
- ln -sf `ls -1d ../gmp-*/` gmp
- ln -sf `ls -1d ../mpc-*/` mpc
- ln -sf `ls -1d ../isl-*/` isl
- ln -sf `ls -1d ../cloog-*/` cloog
- cd ..
- # Step 1. Binutils
- mkdir -p build-binutils
- cd build-binutils
- ../$BINUTILS_VERSION/configure --prefix=$INSTALL_PATH --target=$TARGET $CONFIGURATION_OPTIONS
- make $PARALLEL_MAKE
- make install
- cd ..
- # Step 2. Linux Kernel Headers
- if [ $USE_NEWLIB -eq 0 ]; then
- cd $LINUX_KERNEL_VERSION
- make ARCH=$LINUX_ARCH INSTALL_HDR_PATH=$INSTALL_PATH/$TARGET headers_install
- cd ..
- fi
- # Step 3. C/C++ Compilers
- mkdir -p build-gcc
- cd build-gcc
- if [ $USE_NEWLIB -ne 0 ]; then
- NEWLIB_OPTION=--with-newlib
- fi
- ../$GCC_VERSION/configure --prefix=$INSTALL_PATH --target=$TARGET --enable-languages=c,c++ $CONFIGURATION_OPTIONS $NEWLIB_OPTION
- make $PARALLEL_MAKE all-gcc
- make install-gcc
- cd ..
- if [ $USE_NEWLIB -ne 0 ]; then
- # Steps 4-6: Newlib
- mkdir -p build-newlib
- cd build-newlib
- ../newlib-master/configure --prefix=$INSTALL_PATH --target=$TARGET $CONFIGURATION_OPTIONS
- make $PARALLEL_MAKE
- make install
- cd ..
- else
- # Step 4. Standard C Library Headers and Startup Files
- mkdir -p build-glibc
- cd build-glibc
- ../$GLIBC_VERSION/configure --prefix=$INSTALL_PATH/$TARGET --build=$MACHTYPE --host=$TARGET --target=$TARGET --with-headers=$INSTALL_PATH/$TARGET/include $CONFIGURATION_OPTIONS libc_cv_forced_unwind=yes
- make install-bootstrap-headers=yes install-headers
- make $PARALLEL_MAKE csu/subdir_lib
- install csu/crt1.o csu/crti.o csu/crtn.o $INSTALL_PATH/$TARGET/lib
- $TARGET-gcc -nostdlib -nostartfiles -shared -x c /dev/null -o $INSTALL_PATH/$TARGET/lib/libc.so
- touch $INSTALL_PATH/$TARGET/include/gnu/stubs.h
- cd ..
- # Step 5. Compiler Support Library
- cd build-gcc
- make $PARALLEL_MAKE all-target-libgcc
- make install-target-libgcc
- cd ..
- # Step 6. Standard C Library & the rest of Glibc
- cd build-glibc
- make $PARALLEL_MAKE
- make install
- cd ..
- fi
- # Step 7. Standard C++ Library & the rest of GCC
- cd build-gcc
- make $PARALLEL_MAKE all
- make install
- cd ..
- trap - EXIT
- echo 'Success!'
Advertisement
Add Comment
Please, Sign In to add comment