Skip to content

Latest commit

 

History

History
190 lines (164 loc) · 6.48 KB

README.md

File metadata and controls

190 lines (164 loc) · 6.48 KB

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)
  s | -s | --min-size              Optimize for minimum size
  x | -x | --disable-cxx           Disable optional C++ support
  g | -g | --disable-isl           Disable isl Library support (Graphite loop optimisations)
  T | -T | --custom-vendor         Sets a custom vendor for tuple, requires architecture to be set before

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
  • mips
  • mipsel
  • 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.44
  2. gcc: 14.2.0
  3. gmp: 6.3.0
  4. isl: 0.27
  5. linux: 6.13.7 (Optional Linux Headers Support) (Disabled by default)
  6. mpc: 1.3.1
  7. mpfr: 4.2.2
  8. musl: 1.2.5
  9. pkgconf: 2.4.3 (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 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