Skip to content

The shortest and fastest script to build working cross compilers targeting musl libc

License

Notifications You must be signed in to change notification settings

firasuke/mussel

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

mussel

mussel is the shortest and fastest script available today to build working cross compilers that target musl libc.

Features

  1. Up-to-date: uses latest available upstream sources for packages
  2. Fast: probably the fastest script around to build a cross compiler targeting musl libc, and runs fully under dash
  3. Short: has the least amount of steps (see below) required to build a cross compiler targeting musl libc (even less than musl-cross-make)
  4. Small: all installation steps use install-strip where applicable
  5. Simple: easy to read, modify and extend
  6. POSIX Compliant: the entire script is POSIX compliant
  7. Well Documented: the script comes with a DOCUMENTATION.md file that includes state of the art information explaining what is being done and why

Requirements:

To confirm you have all required packages, please execute ./check.

Usage

Building a Cross Compiler

./mussel (arch) (flags)

(arch): See Supported Architectures below

(flags):

  f | -f | --enable-fortran        Enable optional Fortran support
  k | -k | --enable-pkg-config     Enable optional pkg-config support
  l | -l | --enable-linux-headers  Enable optional Linux Headers support
  o | -o | --enable-openmp         Enable optional OpenMP support
  p | -p | --parallel              Use all available cores on the host system
  q | -q | --enable-quadmath       Enable optional libquadmath support (default for Fortran)
  x | -x | --disable-cxx           Disable optional C++ support

Other Commands

./mussel (command)

(command):

  c | -c | --clean                 Clean mussel's build environment
  h | -h | --help                  Display this help message

Sources will be preserved.

Supported Architectures

  • aarch64
  • armv4t
  • armv5te
  • armv6
  • armv6kz (Raspberry Pi 1 Models A, B, B+, the Compute Module, and the Raspberry Pi Zero)
  • armv7
  • i486
  • i586
  • i686
  • m68k
  • microblaze
  • microblazeel
  • mips64
  • mips64el
  • mipsisa64r6
  • mipsisa64r6el
  • or1k
  • powerpc
  • powerpcle
  • powerpc64
  • powerpc64le
  • riscv64
  • s390x
  • sh2
  • sh2be
  • sh2-fdpic
  • sh2be-fdpic
  • sh4
  • sh4be
  • x86-64

Packages

  1. binutils: 2.42
  2. gcc: 13.2.0
  3. gmp: 6.3.0
  4. isl: 0.26
  5. linux: 6.5.3 (Optional Linux Headers Support) (Disabled by default)
  6. mpc: 1.3.1
  7. mpfr: 4.2.1
  8. musl: 1.2.4
  9. pkgconf: 2.1.0 (Optional pkg-config Support) (Disabled by default)

How Is mussel Doing It?

  1. Install musl headers
  2. Configure, build and install cross binutils
  3. Configure, build and install cross gcc (with libgcc-static)
  4. Configure, build and install musl
  5. Build, and install libgcc-shared

Optional Steps

  • Build and install libstdc++-v3 (Optional C++ Support) (Enabled by default)
  • Build and install libgomp (Optional OpenMP Support) (Disabled by default)
  • Build and install libquadmath (Optional Quadruple-precision Support) (Disabled by default, Enabled for Fortran)
  • Build and install libgfortran (Optional Fortran Support) (Disabled by default)
  • Install linux-headers (Optional Linux Headers Support) (Disabled by default)
  • Configure, build and install pkgconf (Optional pkg-config Support) (Disabled by default)

Using mussel With Host's pkg-config or pkgconf

The reason we included pkgconf with mussel as an optional step is because we can easily configure the host's pkg-config or pkgconf to work with mussel without having to build our own version of pkg-config or pkgconf.

Here are the five magical environment variables that we need to set to configure the host's pkg-config or pkgconf to work with mussel:

export PKG_CONFIG_PATH=$MSYSROOT/usr/lib/pkgconfig:$MSYSROOT/usr/share/pkgconfig
export PKG_CONFIG_LIBDIR=$MSYSROOT/usr/lib/pkgconfig:$MSYSROOT/usr/share/pkgconfig
export PKG_CONFIG_SYSROOT_DIR=$MSYSROOT

export PKG_CONFIG_SYSTEM_INCLUDE_PATH=$MSYSROOT/usr/include
export PKG_CONFIG_SYSTEM_LIBRARY_PATH=$MSYSROOT/usr/lib

The last two I believe are pkgconf specific but setting them won't do any harm.

Using mussel With Host's meson

mussel now provides cross-compilation configuration files for meson that support all listed architectures, and a wrapper around host's meson (mussel-meson) in an effort to make dealing with meson a bit easier.

Projects Using mussel

Credits and Inspiration

mussel is possible thanks to the awesome work done by Aurelian, Rich Felker, qword, The Managarm Project, glaucus (where it's actually implemented) and musl-cross-make.

Author

Firas Khalil Khana (firasuke) <[email protected]>

Contributors

License

mussel is licensed under the Internet Systems Consortium (ISC) license.

Dedication

mussel is dedicated to all those that believe setting up a cross compiler targeting musl libc is a complicated process.

Community

Mirrors