musllvm

A pure LLVM/Clang cross compiler toolchain targeting musl C
git clone git://git.daat.foo/musllvm.git
Log | Files | Refs | README | LICENSE

commit 58d098dfae9ff876c051a8729cfaa5aa1961276b
parent e12419d686faaf1a7daca96245b5f3b1abd477a0
Author: cowmonk <cowmonk@based.pt>
Date:   Sat, 15 Nov 2025 10:15:15 -0700

Reworking the toolchain

We need to make a cross compiler first before then targeting the actual
toolchain

Diffstat:
MMakefile | 3+--
Mscripts/headers.sh | 2--
Ascripts/musl-cross.sh | 35+++++++++++++++++++++++++++++++++++
Dscripts/musl.sh | 38--------------------------------------
4 files changed, 36 insertions(+), 42 deletions(-)

diff --git a/Makefile b/Makefile @@ -14,8 +14,7 @@ pull: fi build: init - ./scripts/headers.sh - ./scripts/musl.sh + ./scripts/musl-cross.sh init: @if [ ! -d ./build/${FROOT} ]; then \ diff --git a/scripts/headers.sh b/scripts/headers.sh @@ -38,5 +38,3 @@ make headers find usr/include -type f ! -name '*.h' -delete cp -rv usr/include/* ../"$FROOT"/include/ -exit - diff --git a/scripts/musl-cross.sh b/scripts/musl-cross.sh @@ -0,0 +1,35 @@ +#!/bin/sh +set -eu + +ARCH=$(uname -m) +FROOT="../$ARCH-musllvm" # make install in source dir +MUSL_TAR=$(ls ./sources/musl-*.tar.* 2>/dev/null | head -n 1 | xargs basename) +if [ -z "$MUSL_TAR" ]; then + echo "ERR: No Musl tarball found in sources directory" + exit 1 +fi +MUSL_SOURCE="${MUSL_TAR%%.tar.*}" + +if command -v "clang" >/dev/null 2>&1 && command -v "lld" >/dev/null 2>&1; then + export CC="clang" +else + export CC="cc" +fi + +if [ ! -d ./build/"MUSL_SOURCE" ]; then + echo "Extracting Musl tarball to ./build/" + tar -xpf ./sources/"$MUSL_TAR" -C ./build +else + echo "Musl source already extracted." +fi + +echo "Buliding musl headers" +if [ -f "./build/$MUSL_SOURCE" ]; then + echo "Musl headers already built, skipping..." + exit +fi + +cd ./build/"$MUSL_SOURCE" + +echo "Installing musl headers..." +DESTDIR=$FROOT make ARCH=$(uname -m) install-headers diff --git a/scripts/musl.sh b/scripts/musl.sh @@ -1,38 +0,0 @@ -#!/bin/sh -set -eu - -ARCH=$(uname -m) -FROOT="./build/$ARCH-musllvm" -MUSL_TAR=$(ls ./sources/musl-*.tar.* 2>/dev/null | head -n 1 | xargs basename) -if [ -z "$MUSL_TAR" ]; then - echo "ERR: No Musl tarball found in sources directory" - exit 1 -fi -MUSL_SOURCE="${MUSL_TAR%%.tar.*}" - -if command -v "clang" >/dev/null 2>&1 && command -v "lld" >/dev/null 2>&1; then - export CC="clang" -else - export CC="cc" -fi - -if [ ! -d ./build/"MUSL_SOURCE" ]; then - echo "Extracting Musl tarball to ./build/" - tar -xpf ./sources/"$MUSL_TAR" -C ./build -else - echo "Musl source already extracted." -fi - -echo "Buliding musl" -if [ -f ./build/"$FROOT"/include/libc.so ]; then - echo "Musl already built, skipping..." - exit -fi - -cd ./build/"$MUSL_SOURCE" - -./configure \ - --prefix=/ \ - -make -j$(nproc) -DESTDIR=$FROOT make install