build by musl instead of glibc

This commit is contained in:
Alireza Ahmadi
2025-08-20 21:29:49 +02:00
parent e54cca19fa
commit 12addde548
+28 -41
View File
@@ -8,6 +8,7 @@ on:
branches: branches:
- main - main
paths: paths:
- '.github/workflows/release.yml'
- 'frontend/**' - 'frontend/**'
- '**.sh' - '**.sh'
- '**.go' - '**.go'
@@ -27,7 +28,7 @@ jobs:
- armv5 - armv5
- 386 - 386
- s390x - s390x
runs-on: ubuntu-22.04 runs-on: ubuntu-latest
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v5.0.0 uses: actions/checkout@v5.0.0
@@ -45,23 +46,6 @@ jobs:
with: with:
node-version: '22' node-version: '22'
registry-url: 'https://registry.npmjs.org' registry-url: 'https://registry.npmjs.org'
- name: Install dependencies
run: |
sudo apt-get update
if [ "${{ matrix.platform }}" == "arm64" ]; then
sudo apt install gcc-aarch64-linux-gnu
elif [ "${{ matrix.platform }}" == "armv7" ]; then
sudo apt install gcc-arm-linux-gnueabihf
elif [ "${{ matrix.platform }}" == "armv6" ]; then
sudo apt install gcc-arm-linux-gnueabihf
elif [ "${{ matrix.platform }}" == "armv5" ]; then
sudo apt install gcc-arm-linux-gnueabi
elif [ "${{ matrix.platform }}" == "386" ]; then
sudo apt install gcc-i686-linux-gnu
elif [ "${{ matrix.platform }}" == "s390x" ]; then
sudo apt install gcc-s390x-linux-gnu
fi
- name: Build frontend - name: Build frontend
run: | run: |
@@ -77,31 +61,34 @@ jobs:
export CGO_ENABLED=1 export CGO_ENABLED=1
export GOOS=linux export GOOS=linux
export GOARCH=${{ matrix.platform }} export GOARCH=${{ matrix.platform }}
if [ "${{ matrix.platform }}" == "arm64" ]; then # Use Bootlin prebuilt cross-toolchains (musl 1.2.5 in stable series)
export GOARCH=arm64 case "${{ matrix.platform }}" in
export CC=aarch64-linux-gnu-gcc amd64) BOOTLIN_ARCH="x86-64" ;;
elif [ "${{ matrix.platform }}" == "armv7" ]; then arm64) BOOTLIN_ARCH="aarch64" ;;
export GOARCH=arm armv7) BOOTLIN_ARCH="armv7-eabihf"; export GOARCH=arm GOARM=7 ;;
export GOARM=7 armv6) BOOTLIN_ARCH="armv6-eabihf"; export GOARCH=arm GOARM=6 ;;
export CC=arm-linux-gnueabihf-gcc armv5) BOOTLIN_ARCH="armv5-eabi"; export GOARCH=arm GOARM=5 ;;
elif [ "${{ matrix.platform }}" == "armv6" ]; then 386) BOOTLIN_ARCH="x86-i686" ;;
export GOARCH=arm s390x) BOOTLIN_ARCH="s390x-z13" ;;
export GOARM=6 esac
export CC=arm-linux-gnueabihf-gcc echo "Resolving Bootlin musl toolchain for arch=$BOOTLIN_ARCH (platform=${{ matrix.platform }})"
elif [ "${{ matrix.platform }}" == "armv5" ]; then TARBALL_BASE="https://toolchains.bootlin.com/downloads/releases/toolchains/$BOOTLIN_ARCH/tarballs/"
export GOARCH=arm TARBALL_URL=$(curl -fsSL "$TARBALL_BASE" | grep -oE "${BOOTLIN_ARCH}--musl--stable-[^\"]+\\.tar\\.xz" | sort -r | head -n1)
export GOARM=5 [ -z "$TARBALL_URL" ] && { echo "Failed to locate Bootlin musl toolchain for arch=$BOOTLIN_ARCH" >&2; exit 1; }
export CC=arm-linux-gnueabi-gcc echo "Downloading: $TARBALL_URL"
elif [ "${{ matrix.platform }}" == "386" ]; then cd /tmp
export GOARCH=386 curl -fL -sS -o "$(basename "$TARBALL_URL")" "$TARBALL_BASE/$TARBALL_URL"
export CC=i686-linux-gnu-gcc tar -xf "$(basename "$TARBALL_URL")"
elif [ "${{ matrix.platform }}" == "s390x" ]; then TOOLCHAIN_DIR=$(find . -maxdepth 1 -type d -name "${BOOTLIN_ARCH}--musl--stable-*" | head -n1)
export GOARCH=s390x export PATH="$(realpath "$TOOLCHAIN_DIR")/bin:$PATH"
export CC=s390x-linux-gnu-gcc export CC=$(realpath "$(find "$TOOLCHAIN_DIR/bin" -name '*-gcc.br_real' -type f -executable | head -n1)")
fi [ -z "$CC" ] && { echo "No gcc.br_real found in $TOOLCHAIN_DIR/bin" >&2; exit 1; }
cd -
### Build s-ui ### Build s-ui
go build -ldflags="-w -s" -tags "with_quic,with_grpc,with_utls,with_acme,with_gvisor" -o sui main.go go build -ldflags="-w -s -linkmode external -extldflags '-static'" -tags "with_quic,with_grpc,with_utls,with_acme,with_gvisor" -o sui main.go
file sui
ldd sui || echo "Static binary confirmed"
mkdir s-ui mkdir s-ui
cp sui s-ui/ cp sui s-ui/