#!/bin/sh
set -eux
arch="$1"
version="$2"
old_musl=1.1.24
new_musl=1.2.5
case "$arch" in
loongarch64) musl_version="$new_musl" ;;
*)
case "$version" in
old) musl_version="$old_musl" ;;
new) musl_version="$new_musl" ;;
*)
echo "musl version must be set to either 'old' or 'new'"
exit 1
;;
esac
;;
esac
musl="musl-${musl_version}"
curl --retry 5 "https://ci-mirrors.rust-lang.org/libc/${musl}.tar.gz" | tar xzf -
cd "$musl"
case ${1} in
aarch64)
musl_arch=aarch64
kernel_arch=arm64
CC=aarch64-linux-gnu-gcc \
./configure --prefix="/musl-${musl_arch}" --enable-wrapper=yes
make install -j4
;;
arm)
musl_arch=arm
kernel_arch=arm
CC=arm-linux-gnueabihf-gcc CFLAGS="-march=armv6 -marm -mfpu=vfp" \
./configure --prefix="/musl-${musl_arch}" --enable-wrapper=yes
make install -j4
;;
i686)
musl_arch=i686
kernel_arch=i386
CC=gcc CFLAGS="-m32" \
./configure --prefix="/musl-${musl_arch}" --disable-shared --target=i686
make CROSS_COMPILE= install -j4
;;
x86_64)
musl_arch=x86_64
kernel_arch=x86_64
./configure --prefix="/musl-${musl_arch}"
make install -j4
;;
s390x)
musl_arch=s390x
kernel_arch=s390
CC=s390x-linux-gnu-gcc \
./configure --prefix="/musl-${musl_arch}" --enable-wrapper=yes
make install -j4
;;
loongarch64)
musl_arch=loongarch64
kernel_arch=loongarch
CC=loongarch64-linux-gnu-gcc-14 \
./configure --prefix="/musl-${musl_arch}" --enable-wrapper=yes
make install -j4
;;
powerpc64*)
musl_arch=powerpc64
kernel_arch=powerpc
CC="${1}-linux-gnu-gcc" CFLAGS="-mlong-double-64" \
./configure --prefix="/musl-${musl_arch}" --enable-wrapper=yes
make install -j4
;;
*)
echo "Unknown target arch: \"${1}\""
exit 1
;;
esac
cd ..
rm -rf "$musl"
alpine_version=3.20
alpine_git=https://gitlab.alpinelinux.org/alpine/aports
git clone -n --depth=1 --filter=tree:0 -b "${alpine_version}-stable" "$alpine_git"
(
cd aports
git sparse-checkout set --no-cone main/linux-headers
git checkout
cd main/linux-headers
cp APKBUILD APKBUILD.vars
cat <<- EOF >> APKBUILD.vars
echo "\$source" > alpine-source
echo "\$_kernver" > alpine-kernver
echo "\$pkgver" > alpine-pkgver
echo "\$sha512sums" > alpine-sha512sums
EOF
sed -i 's|https://kernel.org/pub/linux/kernel|https://ci-mirrors.rust-lang.org/linux/kernel|g' \
APKBUILD.vars
cat APKBUILD.vars
sh APKBUILD.vars
kernel_version=$(tr -d "[:space:]" < alpine-kernver)
pkg_version=$(tr -d "[:space:]" < alpine-pkgver)
urls=$(grep -o 'https.*' alpine-source)
kernel=""
patch=""
for url in $urls; do
base=$(basename "$url")
curl --retry 5 -L "$url" > "$base"
case $base in
linux-*) kernel=$base ;;
patch-*) patch=$base ;;
esac
grep -o "$base" alpine-sha512sums
done
sha512sum -c alpine-sha512sums
tar -xf "$kernel"
cd "linux-$kernel_version"
if [ "$pkg_version" != "$kernel_version" ]; then
unxz -c < "../$patch" | patch -p1
fi
for p in ../*.patch; do
patch -p1 < "$p"
done
make headers_install ARCH="${kernel_arch}" INSTALL_HDR_PATH="/musl-${musl_arch}"
)
rm -rf aports