A script to build GCC toolchains
Switch branches/tags
Nothing to show
Clone or download
Pull request Compare This branch is 142 commits ahead of frap129:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.


GCC toolchain build script

This is a script to build GCC toolchains targeting arm, arm64, and x86 devices (primarily Android devices).

Using the script

To build a toolchain, you will need to the following:

  • A Linux distribution (the script has been tested on Ubuntu 17.04 and Arch Linux)
  • A decent processor and RAM (i5 and 8GB of RAM or more is preferred)
  • Core developer packages
    • For Arch: the base-devel package should be enough
    • For Ubuntu: sudo apt-get install flex bison ncurses-dev texinfo gcc gperf patch libtool automake g++ libncurses5-dev gawk subversion expat libexpat1-dev python-all-dev binutils-dev libgcc1:i386 bc libcloog-isl-dev libcap-dev autoconf libgmp-dev build-essential gcc-multilib g++-multilib pkg-config libmpc-dev libmpfr-dev autopoint gettext txt2man liblzma-dev libssl-dev libz-dev

Once you have set up your environment, run the following:

git clone https://github.com/USBhost/build-tools-gcc
cd build-tools-gcc
./build -h

The printout will show you how to run the script.

Example commands:

# Build a Linaro 7.x toolchain for x86_64
./build -a x86_64 -s linaro -v 7

# Build a Linaro 7.x toolchain for arm64
./build -a arm64 -s linaro -v 7

# Build a GNU 5.x toolchain for arm
./build -a arm -s gnu -v 5

After compilation

Once it is done building, you will have a folder with the compiled toolchain as well as either a tar.xz or tar.gz file (depending on if you passed -p or not).

If the toolchains are compressed, move them into your directory of choice and run the following commands:

For xz compression:

tar -xvf <toolchain_name>.tar.xz --strip-components=1

For gz compression:

tar -xvzf <toolchain_name>.tar.gz --strip-components=1

After that, point your cross compiler to the proper file and compile! This is an easy shortcut for kernels (when run in the directory you extracted the toolchain in):

# for arm64
export CROSS_COMPILE=$(pwd)/bin/aarch64-linux-gnu-

# for arm
export CROSS_COMPILE=$(pwd)/bin/arm-linux-gnueabi-

Pull requests/issues

If you have any issues with this script, feel free to open an issue!

Pull requests are more than welcome as well. However, there is a particular coding style that should be followed:

  • All variables are uppercased and use curly braces: ${VARIABLE} instead of $variable
  • Four spaces for indents
  • Double brackets and single equal sign for string comparisons in if blocks: if [[ ${VARIABLE} = "yes" ]]; then

Additionally, please be sure to run your change through shellcheck.net (either copy and paste the script there or download the binary and run shellcheck build).