A small suite of scripts and patches for building musl libc cross compilers.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Gregor Richards a4777a6dc5 Swapping 4.7.3 for 4.7.4, 4.8.4 for 4.8.5. 4.7.4 is musl-gcc-patches 7f88e688bfc7. 4.8.5 is e2147f5aafcd. 7 years ago
extra Whether a linux tarball or kernel-headers tarball is used, built-tarballs must delete it properly. 8 years ago
patches Swapping 4.7.3 for 4.7.4, 4.8.4 for 4.8.5. 4.7.4 is musl-gcc-patches 7f88e688bfc7. 4.8.5 is e2147f5aafcd. 7 years ago
tarballs Initial import, with support for binutils 2.22, GCC {4.6.3,4.7.0,4.7.1} and musl 0.9.2. 10 years ago
README.md README: Remove warning about gcc 4.9 8 years ago
build.sh The sysroot flag should have an =, e.g. --with-sysroot=/usr/whatever 8 years ago
clean.sh use patched kernel-headers package from sabotage linux 8 years ago
config-static.sh Made everything work with sh instead of bash, simplified config.sh by allowing many parts to be auto-detected. 10 years ago
config.sh A few minor grammar fixups. 9 years ago
defs.sh Updated to musl 1.1.12. 7 years ago


About this branch

GregorR is the original author of musl-cross, but is sometimes busy with life and may vanish from time to time. If the repo GregorR/musl-cross seems out of date, you may want to check github.com/sabotage-linux/musl-cross .

About musl-cross

This is a small suite of scripts and patches to build a musl libc cross-compiler. Prebuilt cross and native compilers are available at http://musl.codu.org/

For the impatient, ./build.sh should build a cross compiler to /opt/cross/-linux-musl, no muss, no fuss. Otherwise, you can edit config.sh to make cross-compilers to other architectures, and even copy config.sh to another directory then run build.sh from there to avoid polluting the source dir.

Notes on building normal cross compilers

  • For ARM, you must set the triple to arm-linux-musleabi (eabi is the important bit here)

  • You can set versions of binutils, GCC or musl in config.sh with:

  • You can set configure flags for each step:

  • You can use a git checkout of musl with:

      MUSL_VERSION=<git tag or commit>
  • If you do not have the GMP, MPFR and/or MPC development libraries on your host, you can build them along with GCC with a config.sh line:



  • If you would like to target a specific CPU revision, usually this is done by GCC configuration options like so:


    For ix86 however, it is more common to do this by the target name, e.g. i486-linux-musl instead of i686-linux-musl.

Upgrading cross compilers

It is possible to upgrade the musl version in a musl-cross cross compiler without rebuilding the entire cross compiler prefix from scratch. Simply download and extract the new version of musl, then configure it like so:

./configure --prefix="<prefix>/<triple>" CC="<triple>-gcc"

Where "" is the prefix the cross compiler root was installed/extracted to, and is the GNU-style target triple (e.g. i486-linux-musl).

Other scripts and helpers

  • config.sh is an example configuration file. In many cases, it will do exactly what you want it to do with no modification, which is why it's simply named "config.sh" instead of, e.g., "config-sample.sh"

  • extra/build-gcc-deps.sh will build the dependencies for GCC into the build prefix specified by config.sh, which are just often a nice thing to have. It is of course not necessary.

  • extra/build-tarballs.sh builds convenient musl cross-compiler tarballs in a rather inconvenient way. It first builds a musl cross-compiler to the host platform (e.g. i686), then it uses that to build static cross-compilers to various platforms. As a result, building e.g. three cross-compiler tarballs involves eight compiler build phases (read: this is slow). However, the resultant tarballs are cross-compilers statically linked against musl, making them stable and portable.

  • config-static.sh is an example configuration file for building a static cross-compiler. You can use this if, e.g., you already have a build of musl (and so have musl-gcc) but would like to make a complete, static cross-compiler based on that, or if you already have a musl cross-compiler (and so have -linux-musl-gcc) but would like to make a static cross-compiler itself compiled against musl.


musl-cross depends on:

  • shell and core utils (busybox is fine)
  • mercurial or git (for checkout only)
  • wget (busybox is fine)
  • patch
  • gcc
  • make
  • gawk

The following are GCC dependencies, which can be installed on the host system, or installed automatically using GCC_BUILTIN_PREREQS=yes:

  • gmp
  • mpfr
  • mpc

Building GMP additionally requires m4.

Other sources

The patches for GCC are maintained in a separate repository, http://bitbucket.org/GregorR/musl-gcc-patches/ (mirrored to git at http://github.com/GregorR/musl-gcc-patches ).