Awesome
mussel
mussel
is the shortest and fastest script available today to build working cross
compilers that target musl
libc.
Features
- Up-to-date: uses latest available upstream sources for packages
- Fast: probably the fastest script around to build a cross compiler
targeting
musl
libc, and runs fully underdash
- Short: has the least amount of steps (see below) required to build a cross compiler targeting musl libc (even less than musl-cross-make)
- Small: all installation steps use
install-strip
where applicable - Simple: easy to read, modify and extend
- POSIX Compliant: the entire script is POSIX compliant
- 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
binutils
: 2.42gcc
: 13.2.0gmp
: 6.3.0isl
: 0.26linux
: 6.5.3 (Optional Linux Headers Support) (Disabled by default)mpc
: 1.3.1mpfr
: 4.2.1musl
: 1.2.4pkgconf
: 2.1.0 (Optionalpkg-config
Support) (Disabled by default)
How Is mussel
Doing It?
- Install
musl
headers - Configure, build and install cross
binutils
- Configure, build and install cross
gcc
(withlibgcc-static
) - Configure, build and install
musl
- 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
(Optionalpkg-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) <firasuke@glaucuslinux.org>
Contributors
- Alexander Barris (AwlsomeAlex) <alex@awlsome.com>
- Andrew Blue <andy@antareslinux.org>
- ayb <ayb@3hg.fr>
- Luiz Antônio Rangel at Pindorama (takusuman) <luiz.antonio.rangel@outlook.com.br>
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.