diff --git a/.docker/Dockerfile.alpine-xx b/.docker/Dockerfile.alpine-xx index 20285de5..5dcf92b8 100644 --- a/.docker/Dockerfile.alpine-xx +++ b/.docker/Dockerfile.alpine-xx @@ -2,9 +2,17 @@ ARG ARCH=amd64 FROM $ARCH/alpine:latest +ARG ARCH +ARG TARGET_ARCHS=$ARCH +ARG TOOLCHAIN_OPTIMIZE=s + RUN apk update RUN apk upgrade -RUN apk add --no-cache \ +RUN qemu_pkgs=""; \ + for arch in $(echo $TARGET_ARCHS | tr ',' ' '); do \ + qemu_pkgs="$qemu_pkgs qemu-$arch"; \ + done; \ + apk add --no-cache \ bash-completion \ build-base \ wget \ @@ -36,19 +44,33 @@ RUN apk add --no-cache \ strace \ gdb \ gmp-dev \ + zlib-static \ + zstd-static \ zlib-dev \ + zstd-dev \ mpfr-dev \ mpc1-dev \ isl-dev \ texinfo \ linux-headers \ rsync \ - qemu-riscv64 \ - qemu-i386 + $qemu_pkgs + +COPY fetch.sh /usr/local/bin/fetch.sh # Install mold COPY install-mold.sh /usr/local/bin/install-mold.sh -RUN bash /usr/local/bin/install-mold.sh +RUN --mount=type=cache,id=ccache,target=/root/.ccache --mount=type=cache,id=pkgcache,target=/root/.pkgcache \ + bash /usr/local/bin/install-mold.sh + +# Install bloaty +COPY install-bloaty.sh /usr/local/bin/install-bloaty.sh +RUN --mount=type=cache,id=ccache,target=/root/.ccache --mount=type=cache,id=pkgcache,target=/root/.pkgcache \ + if [ "$ARCH" == "amd64" ]; then \ + bash /usr/local/bin/install-bloaty.sh; \ + else \ + echo "Skipping bloaty installation for $ARCH."; \ + fi RUN apk del linux-headers @@ -56,51 +78,112 @@ RUN apk del linux-headers #COPY install-libstdcxx.sh /usr/local/bin/install-libstdcxx.sh #RUN bash /usr/local/bin/install-libstdcxx.sh COPY install-toolchain.sh /usr/local/bin/install-toolchain.sh -RUN bash /usr/local/bin/install-toolchain.sh prepare -RUN bash /usr/local/bin/install-toolchain.sh build riscv64 s -RUN bash /usr/local/bin/install-toolchain.sh build i386 s -RUN bash /usr/local/bin/install-toolchain.sh cleanup +RUN --mount=type=cache,id=ccache,target=/root/.ccache --mount=type=cache,id=pkgcache,target=/root/.pkgcache \ + bash /usr/local/bin/install-toolchain.sh $TARGET_ARCHS $TOOLCHAIN_OPTIMIZE -RUN apk del zlib-dev +RUN apk del zlib-dev zstd-dev + +# Clear the config cache after a toolchain update +RUN --mount=type=cache,id=cfgcache,target=/root/.cfgcache \ + rm -rf /root/.cfgcache/* # Install all static libraries COPY install-static-libs.sh /usr/local/bin/install-static-libs.sh -RUN bash /usr/local/bin/install-static-libs.sh riscv64,i386 :alpine:libucontext -RUN bash /usr/local/bin/install-static-libs.sh riscv64,i386 :alpine:libunwind -RUN bash /usr/local/bin/install-static-libs.sh riscv64,i386 :alpine:nlohmann -RUN bash /usr/local/bin/install-static-libs.sh riscv64,i386 :alpine:date -RUN bash /usr/local/bin/install-static-libs.sh riscv64,i386 :alpine:utfcpp -RUN bash /usr/local/bin/install-static-libs.sh riscv64,i386 :alpine:boost -RUN bash /usr/local/bin/install-static-libs.sh riscv64,i386 :alpine:jemalloc -RUN bash /usr/local/bin/install-static-libs.sh riscv64,i386 :alpine:mimalloc -RUN bash /usr/local/bin/install-static-libs.sh riscv64,i386 :alpine:double-conversion -RUN bash /usr/local/bin/install-static-libs.sh riscv64,i386 :alpine:fmt -RUN bash /usr/local/bin/install-static-libs.sh riscv64,i386 :alpine:fuse -RUN bash /usr/local/bin/install-static-libs.sh riscv64,i386 :alpine:fuse3 -RUN bash /usr/local/bin/install-static-libs.sh riscv64,i386 :alpine:glog -RUN bash /usr/local/bin/install-static-libs.sh riscv64,i386 :alpine:benchmark -RUN bash /usr/local/bin/install-static-libs.sh riscv64,i386 :alpine:xxhash -RUN bash /usr/local/bin/install-static-libs.sh riscv64,i386 :alpine:bzip2 -RUN bash /usr/local/bin/install-static-libs.sh riscv64,i386 :alpine:brotli -RUN bash /usr/local/bin/install-static-libs.sh riscv64,i386 :alpine:lz4 -RUN bash /usr/local/bin/install-static-libs.sh riscv64,i386 :alpine:xz -RUN bash /usr/local/bin/install-static-libs.sh riscv64,i386 :alpine:zstd -RUN bash /usr/local/bin/install-static-libs.sh riscv64,i386 :alpine:openssl -RUN bash /usr/local/bin/install-static-libs.sh riscv64,i386 :alpine:libressl -RUN bash /usr/local/bin/install-static-libs.sh riscv64,i386 :alpine:libevent -RUN bash /usr/local/bin/install-static-libs.sh riscv64,i386 :alpine:libarchive -RUN bash /usr/local/bin/install-static-libs.sh riscv64,i386 :alpine:flac -RUN bash /usr/local/bin/install-static-libs.sh riscv64,i386 :alpine:libdwarf -RUN bash /usr/local/bin/install-static-libs.sh riscv64,i386 :alpine:cpptrace -RUN bash /usr/local/bin/install-static-libs.sh riscv64,i386 :alpine:range-v3 -RUN bash /usr/local/bin/install-static-libs.sh riscv64,i386 :alpine:parallel-hashmap -# RUN bash /usr/local/bin/install-static-libs.sh gcc clang-19 :alpine +RUN --mount=type=cache,id=ccache,target=/root/.ccache --mount=type=cache,id=pkgcache,target=/root/.pkgcache \ + --mount=type=cache,id=cfgcache,target=/root/.cfgcache \ + bash /usr/local/bin/install-static-libs.sh $TARGET_ARCHS :alpine:libucontext +RUN --mount=type=cache,id=ccache,target=/root/.ccache --mount=type=cache,id=pkgcache,target=/root/.pkgcache \ + --mount=type=cache,id=cfgcache,target=/root/.cfgcache \ + bash /usr/local/bin/install-static-libs.sh $TARGET_ARCHS :alpine:libunwind +RUN --mount=type=cache,id=ccache,target=/root/.ccache --mount=type=cache,id=pkgcache,target=/root/.pkgcache \ + --mount=type=cache,id=cfgcache,target=/root/.cfgcache \ + bash /usr/local/bin/install-static-libs.sh $TARGET_ARCHS :alpine:nlohmann +RUN --mount=type=cache,id=ccache,target=/root/.ccache --mount=type=cache,id=pkgcache,target=/root/.pkgcache \ + --mount=type=cache,id=cfgcache,target=/root/.cfgcache \ + bash /usr/local/bin/install-static-libs.sh $TARGET_ARCHS :alpine:date +RUN --mount=type=cache,id=ccache,target=/root/.ccache --mount=type=cache,id=pkgcache,target=/root/.pkgcache \ + --mount=type=cache,id=cfgcache,target=/root/.cfgcache \ + bash /usr/local/bin/install-static-libs.sh $TARGET_ARCHS :alpine:utfcpp +RUN --mount=type=cache,id=ccache,target=/root/.ccache --mount=type=cache,id=pkgcache,target=/root/.pkgcache \ + --mount=type=cache,id=cfgcache,target=/root/.cfgcache \ + bash /usr/local/bin/install-static-libs.sh $TARGET_ARCHS :alpine:boost +RUN --mount=type=cache,id=ccache,target=/root/.ccache --mount=type=cache,id=pkgcache,target=/root/.pkgcache \ + --mount=type=cache,id=cfgcache,target=/root/.cfgcache \ + bash /usr/local/bin/install-static-libs.sh $TARGET_ARCHS :alpine:jemalloc +RUN --mount=type=cache,id=ccache,target=/root/.ccache --mount=type=cache,id=pkgcache,target=/root/.pkgcache \ + --mount=type=cache,id=cfgcache,target=/root/.cfgcache \ + bash /usr/local/bin/install-static-libs.sh $TARGET_ARCHS :alpine:mimalloc +RUN --mount=type=cache,id=ccache,target=/root/.ccache --mount=type=cache,id=pkgcache,target=/root/.pkgcache \ + --mount=type=cache,id=cfgcache,target=/root/.cfgcache \ + bash /usr/local/bin/install-static-libs.sh $TARGET_ARCHS :alpine:double-conversion +RUN --mount=type=cache,id=ccache,target=/root/.ccache --mount=type=cache,id=pkgcache,target=/root/.pkgcache \ + --mount=type=cache,id=cfgcache,target=/root/.cfgcache \ + bash /usr/local/bin/install-static-libs.sh $TARGET_ARCHS :alpine:fmt +RUN --mount=type=cache,id=ccache,target=/root/.ccache --mount=type=cache,id=pkgcache,target=/root/.pkgcache \ + --mount=type=cache,id=cfgcache,target=/root/.cfgcache \ + bash /usr/local/bin/install-static-libs.sh $TARGET_ARCHS :alpine:fuse +RUN --mount=type=cache,id=ccache,target=/root/.ccache --mount=type=cache,id=pkgcache,target=/root/.pkgcache \ + --mount=type=cache,id=cfgcache,target=/root/.cfgcache \ + bash /usr/local/bin/install-static-libs.sh $TARGET_ARCHS :alpine:fuse3 +RUN --mount=type=cache,id=ccache,target=/root/.ccache --mount=type=cache,id=pkgcache,target=/root/.pkgcache \ + --mount=type=cache,id=cfgcache,target=/root/.cfgcache \ + bash /usr/local/bin/install-static-libs.sh $TARGET_ARCHS :alpine:glog +RUN --mount=type=cache,id=ccache,target=/root/.ccache --mount=type=cache,id=pkgcache,target=/root/.pkgcache \ + --mount=type=cache,id=cfgcache,target=/root/.cfgcache \ + bash /usr/local/bin/install-static-libs.sh $TARGET_ARCHS :alpine:benchmark +RUN --mount=type=cache,id=ccache,target=/root/.ccache --mount=type=cache,id=pkgcache,target=/root/.pkgcache \ + --mount=type=cache,id=cfgcache,target=/root/.cfgcache \ + bash /usr/local/bin/install-static-libs.sh $TARGET_ARCHS :alpine:xxhash +RUN --mount=type=cache,id=ccache,target=/root/.ccache --mount=type=cache,id=pkgcache,target=/root/.pkgcache \ + --mount=type=cache,id=cfgcache,target=/root/.cfgcache \ + bash /usr/local/bin/install-static-libs.sh $TARGET_ARCHS :alpine:bzip2 +RUN --mount=type=cache,id=ccache,target=/root/.ccache --mount=type=cache,id=pkgcache,target=/root/.pkgcache \ + --mount=type=cache,id=cfgcache,target=/root/.cfgcache \ + bash /usr/local/bin/install-static-libs.sh $TARGET_ARCHS :alpine:brotli +RUN --mount=type=cache,id=ccache,target=/root/.ccache --mount=type=cache,id=pkgcache,target=/root/.pkgcache \ + --mount=type=cache,id=cfgcache,target=/root/.cfgcache \ + bash /usr/local/bin/install-static-libs.sh $TARGET_ARCHS :alpine:lz4 +RUN --mount=type=cache,id=ccache,target=/root/.ccache --mount=type=cache,id=pkgcache,target=/root/.pkgcache \ + --mount=type=cache,id=cfgcache,target=/root/.cfgcache \ + bash /usr/local/bin/install-static-libs.sh $TARGET_ARCHS :alpine:xz +RUN --mount=type=cache,id=ccache,target=/root/.ccache --mount=type=cache,id=pkgcache,target=/root/.pkgcache \ + --mount=type=cache,id=cfgcache,target=/root/.cfgcache \ + bash /usr/local/bin/install-static-libs.sh $TARGET_ARCHS :alpine:zstd +RUN --mount=type=cache,id=ccache,target=/root/.ccache --mount=type=cache,id=pkgcache,target=/root/.pkgcache \ + --mount=type=cache,id=cfgcache,target=/root/.cfgcache \ + bash /usr/local/bin/install-static-libs.sh $TARGET_ARCHS :alpine:openssl +RUN --mount=type=cache,id=ccache,target=/root/.ccache --mount=type=cache,id=pkgcache,target=/root/.pkgcache \ + --mount=type=cache,id=cfgcache,target=/root/.cfgcache \ + bash /usr/local/bin/install-static-libs.sh $TARGET_ARCHS :alpine:libressl +RUN --mount=type=cache,id=ccache,target=/root/.ccache --mount=type=cache,id=pkgcache,target=/root/.pkgcache \ + --mount=type=cache,id=cfgcache,target=/root/.cfgcache \ + bash /usr/local/bin/install-static-libs.sh $TARGET_ARCHS :alpine:libevent +RUN --mount=type=cache,id=ccache,target=/root/.ccache --mount=type=cache,id=pkgcache,target=/root/.pkgcache \ + --mount=type=cache,id=cfgcache,target=/root/.cfgcache \ + bash /usr/local/bin/install-static-libs.sh $TARGET_ARCHS :alpine:libarchive +RUN --mount=type=cache,id=ccache,target=/root/.ccache --mount=type=cache,id=pkgcache,target=/root/.pkgcache \ + --mount=type=cache,id=cfgcache,target=/root/.cfgcache \ + bash /usr/local/bin/install-static-libs.sh $TARGET_ARCHS :alpine:flac +RUN --mount=type=cache,id=ccache,target=/root/.ccache --mount=type=cache,id=pkgcache,target=/root/.pkgcache \ + --mount=type=cache,id=cfgcache,target=/root/.cfgcache \ + bash /usr/local/bin/install-static-libs.sh $TARGET_ARCHS :alpine:libdwarf +RUN --mount=type=cache,id=ccache,target=/root/.ccache --mount=type=cache,id=pkgcache,target=/root/.pkgcache \ + --mount=type=cache,id=cfgcache,target=/root/.cfgcache \ + bash /usr/local/bin/install-static-libs.sh $TARGET_ARCHS :alpine:cpptrace +RUN --mount=type=cache,id=ccache,target=/root/.ccache --mount=type=cache,id=pkgcache,target=/root/.pkgcache \ + --mount=type=cache,id=cfgcache,target=/root/.cfgcache \ + bash /usr/local/bin/install-static-libs.sh $TARGET_ARCHS :alpine:range-v3 +RUN --mount=type=cache,id=ccache,target=/root/.ccache --mount=type=cache,id=pkgcache,target=/root/.pkgcache \ + --mount=type=cache,id=cfgcache,target=/root/.cfgcache \ + bash /usr/local/bin/install-static-libs.sh $TARGET_ARCHS :alpine:parallel-hashmap +# RUN --mount=type=cache,id=ccache,target=/root/.ccache --mount=type=cache,id=pkgcache,target=/root/.pkgcache \ +# --mount=type=cache,id=cfgcache,target=/root/.cfgcache \ +# bash /usr/local/bin/install-static-libs.sh $TARGET_ARCHS :alpine # Install UPX -ARG ARCH # UPX isn't supported on RISC-V/S390 (yet), so skip this -RUN if ! [[ "$ARCH" =~ "^(riscv|s390)" ]]; then \ +RUN if ! [ "$ARCH" == "amd64" ] || [ "$ARCH" == "arm64v8" ]; then \ wget -O - https://github.com/upx/upx/releases/download/v5.0.2/upx-5.0.2-$(bash -c "echo \${0//v8/}" $ARCH)_linux.tar.xz | tar -xJf - -C /usr/local/bin --strip-components=1 --wildcards "*/upx"; \ else \ echo "Skipping UPX installation for $ARCH architecture while it is not supported."; \ diff --git a/.docker/Makefile b/.docker/Makefile index 239635ae..1aa4271d 100644 --- a/.docker/Makefile +++ b/.docker/Makefile @@ -2,8 +2,7 @@ IMAGE_UBUNTU="dwarfs-buildenv" IMAGE_DEBIAN="dwarfs-buildenv-debian" IMAGE_ALPINE="dwarfs-buildenv-alpine" IMAGE_ALPINE_RISCV="dwarfs-buildenv-alpine-riscv64" -IMAGE_ALPINE_XX_RISCV="dwarfs-buildenv-alpine-xx-riscv64" -IMAGE_ALPINE_XX_I386="dwarfs-buildenv-alpine-xx-i386" +IMAGE_ALPINE_XX="dwarfs-buildenv-alpine-xx" IMAGE_UBUNTU2204="dwarfs-buildenv-ubuntu2204" IMAGE_FEDORA="dwarfs-buildenv-fedora" IMAGE_ARCH="dwarfs-buildenv-arch" @@ -41,17 +40,11 @@ build_alpine: run_alpine: @docker run $(COMMON_RUN_OPTS) $(IMAGE_ALPINE) -build_alpine_xx_riscv: - docker buildx build -f Dockerfile.alpine-xx --build-arg TARGETARCH=riscv64 -t $(IMAGE_ALPINE_XX_RISCV) . +build_alpine_xx: + docker buildx build -f Dockerfile.alpine-xx --build-arg TARGET_ARCHS=x86_64,aarch64,loongarch64,riscv64,i386 -t $(IMAGE_ALPINE_XX) . -run_alpine_xx_riscv: - @docker run --env TARGETARCH=riscv64 $(COMMON_RUN_OPTS) $(IMAGE_ALPINE_XX_RISCV) - -build_alpine_xx_i386: - docker buildx build -f Dockerfile.alpine-xx --build-arg TARGETARCH=i386 -t $(IMAGE_ALPINE_XX_I386) . - -run_alpine_xx_i386: - @docker run --env TARGETARCH=i386 $(COMMON_RUN_OPTS) $(IMAGE_ALPINE_XX_I386) +run_alpine_xx: + @docker run $(COMMON_RUN_OPTS) $(IMAGE_ALPINE_XX) build_alpine_riscv: docker build -f Dockerfile.alpine -t $(IMAGE_ALPINE_RISCV) --build-arg ARCH=riscv64 . diff --git a/.docker/fetch.sh b/.docker/fetch.sh new file mode 100755 index 00000000..ef4bc43d --- /dev/null +++ b/.docker/fetch.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +set -ex + +URL=$1 +FILE=${2:-$(basename "$URL")} +SHA512SUM="${3}" + +URLHASH=$(echo -n "$URL" | sha256sum | awk '{print $1}') +CACHEDIR="$HOME/.pkgcache" +CACHEFILE="$CACHEDIR/$URLHASH" + +if [ ! -f "$CACHEFILE" ]; then + rm -f "$CACHEFILE.tmp" + curl --retry 5 -L "$URL" > "$CACHEFILE.tmp" + if [ -n "$SHA512SUM" ]; then + echo "$SHA512SUM $CACHEFILE.tmp" | sha512sum -c - + if [ $? -ne 0 ]; then + echo "Checksum verification failed for $URL" + rm -f "$CACHEFILE.tmp" + exit 1 + fi + fi + mv -f "$CACHEFILE.tmp" "$CACHEFILE" +fi + +if [ "$FILE" == "-" ]; then + cat "$CACHEFILE" +else + cp "$CACHEFILE" "$FILE" +fi diff --git a/.docker/install-bloaty.sh b/.docker/install-bloaty.sh index aad8007e..519a1fe6 100644 --- a/.docker/install-bloaty.sh +++ b/.docker/install-bloaty.sh @@ -6,13 +6,16 @@ cd "$HOME" mkdir pkgs cd pkgs -git clone --recurse-submodules https://github.com/google/bloaty +git clone --depth=1 --recurse-submodules --shallow-submodules https://github.com/google/bloaty cd bloaty mkdir build cd build +export PATH="/usr/lib/ccache/bin:$PATH" + cmake .. -GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local ninja +ccache -s ninja install cd "$HOME" diff --git a/.docker/install-mold.sh b/.docker/install-mold.sh index d12b0af4..efe1ef01 100644 --- a/.docker/install-mold.sh +++ b/.docker/install-mold.sh @@ -13,14 +13,17 @@ cd pkgs MOLD_VERSION=2.40.2 -wget -O mold-${MOLD_VERSION}.tar.gz https://github.com/rui314/mold/archive/refs/tags/v${MOLD_VERSION}.tar.gz +fetch.sh https://github.com/rui314/mold/archive/refs/tags/v${MOLD_VERSION}.tar.gz mold-${MOLD_VERSION}.tar.gz tar xf mold-${MOLD_VERSION}.tar.gz cd mold-${MOLD_VERSION} mkdir build cd build +export PATH="/usr/lib/ccache/bin:$PATH" + cmake .. -GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local ninja +ccache -s ninja install cd "$HOME" diff --git a/.docker/install-static-libs.sh b/.docker/install-static-libs.sh index 9d7f4564..fc27b8bb 100644 --- a/.docker/install-static-libs.sh +++ b/.docker/install-static-libs.sh @@ -49,6 +49,7 @@ PARALLEL_HASHMAP_VERSION=2.0.0 # 2025-01-21 echo "Using $GCC and $CLANG" if [[ "$PKGS" == ":ubuntu" ]]; then + # TODO: this is no longer supported PKGS="file,bzip2,libarchive,flac,libunwind,benchmark,openssl,cpptrace" COMPILERS="clang gcc" elif [[ "$PKGS" == ":alpine"* ]]; then @@ -115,9 +116,7 @@ use_lib() { if use_lib file; then RETRY=0 while true; do - rm -f "$FILE_TARBALL" - curl -o "$FILE_TARBALL" "ftp://ftp.astron.com/pub/file/$FILE_TARBALL" - if echo "${FILE_SHA512} $FILE_TARBALL" | sha512sum -c; then + if fetch.sh "ftp://ftp.astron.com/pub/file/$FILE_TARBALL" "$FILE_TARBALL" "$FILE_SHA512"; then break fi RETRY=$((RETRY+1)) @@ -133,7 +132,7 @@ fetch_lib() { local url="$2" local tarball="${3:-${url##*/}}" if use_lib "$lib"; then - wget -O "$tarball" "$url" + fetch.sh "$url" "$tarball" fi } @@ -195,10 +194,7 @@ opt_size() { export CFLAGS="$SIZE_CFLAGS" export CXXFLAGS="$SIZE_CXXFLAGS" # export CMAKE_ARGS="-DCMAKE_BUILD_TYPE=MinSizeRel" - export CMAKE_ARGS="-GNinja" - if [ -n "$TARGETARCH" ]; then - export CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=$CARCH" - fi + export CMAKE_ARGS="-GNinja -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=$CARCH" set_build_flags } @@ -206,10 +202,7 @@ opt_perf() { export CFLAGS="$PERF_CFLAGS" export CXXFLAGS="$PERF_CXXFLAGS" # export CMAKE_ARGS="-DCMAKE_BUILD_TYPE=Release" - export CMAKE_ARGS="-GNinja" - if [ -n "$TARGETARCH" ]; then - export CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=$CARCH" - fi + export CMAKE_ARGS="-GNinja -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=$CARCH" set_build_flags } @@ -218,45 +211,44 @@ for target_arch in ${TARGET_ARCH_STR//,/ }; do echo "Building for target architecture: $target_arch" echo "===========================================================" - if [ "$target_arch" != "$ARCH" ]; then - export TARGETARCH="$target_arch" - else - unset TARGETARCH - fi - - export CARCH="$TARGETARCH" + export CARCH="$target_arch" rm -f /tmp/meson-$CARCH.txt - if [ -n "$TARGETARCH" ]; then - export TARGET="${TARGETARCH}-unknown-linux-musl" - export TRIPLETS="--host=$TARGET --target=$TARGET --build=$ARCH-alpine-linux-musl" - export BOOST_CMAKE_ARGS="-DBOOST_CONTEXT_ARCHITECTURE=$CARCH" - export LIBUCONTEXT_MAKE_ARGS="ARCH=$CARCH" - export MESON_CROSS_FILE="--cross-file=/tmp/meson-$CARCH.txt" + case "$CARCH" in + aarch64*) OPENSSL_TARGET_ARGS="linux-aarch64" ;; + arm*) OPENSSL_TARGET_ARGS="linux-armv4" ;; + mips64*) OPENSSL_TARGET_ARGS="linux64-mips64" ;; + ppc) OPENSSL_TARGET_ARGS="linux-ppc" ;; + ppc64) OPENSSL_TARGET_ARGS="linux-ppc64" ;; + ppc64le) OPENSSL_TARGET_ARGS="linux-ppc64le" ;; + i386) OPENSSL_TARGET_ARGS="linux-elf" ;; + s390x) OPENSSL_TARGET_ARGS="linux64-s390x" ;; + riscv64) OPENSSL_TARGET_ARGS="linux64-riscv64" ;; + loongarch64) OPENSSL_TARGET_ARGS="linux64-loongarch64" ;; + x86_64) OPENSSL_TARGET_ARGS="linux-x86_64" ;; + *) echo "Unable to determine architecture from (CARCH=$CARCH)"; exit 1 ;; + esac - case "$CARCH" in - aarch64*) OPENSSL_TARGET_ARGS="linux-aarch64" ;; - arm*) OPENSSL_TARGET_ARGS="linux-armv4" ;; - mips64*) OPENSSL_TARGET_ARGS="linux64-mips64" ;; - ppc) OPENSSL_TARGET_ARGS="linux-ppc" ;; - ppc64) OPENSSL_TARGET_ARGS="linux-ppc64" ;; - ppc64le) OPENSSL_TARGET_ARGS="linux-ppc64le" ;; - i386) OPENSSL_TARGET_ARGS="linux-elf" ;; - s390x) OPENSSL_TARGET_ARGS="linux64-s390x";; - riscv64) OPENSSL_TARGET_ARGS="linux64-riscv64";; - loongarch64) OPENSSL_TARGET_ARGS="linux64-loongarch64";; - *) echo "Unable to determine architecture from (CARCH=$CARCH)"; exit 1 ;; - esac + BOOST_CONTEXT_ARCH="$CARCH" + case "$CARCH" in + aarch64*) BOOST_CONTEXT_ARCH="arm64" ;; + esac - endian="little" - case "$CARCH" in - powerpc|powerpc64|s390|s390x) - endian="big" - ;; - esac + export TARGET="${CARCH}-unknown-linux-musl" + export TRIPLETS="--host=$TARGET --target=$TARGET --build=$ARCH-alpine-linux-musl" + export BOOST_CMAKE_ARGS="-DBOOST_CONTEXT_ARCHITECTURE=$BOOST_CONTEXT_ARCH" + export LIBUCONTEXT_MAKE_ARGS="ARCH=$CARCH" + export MESON_CROSS_FILE="--cross-file=/tmp/meson-$CARCH.txt" - cat < /tmp/meson-$CARCH.txt + endian="little" + case "$CARCH" in + powerpc|powerpc64|s390|s390x) + endian="big" + ;; + esac + + cat < /tmp/meson-$CARCH.txt [binaries] c = '$TARGET-clang' cpp = '$TARGET-clang++' @@ -270,31 +262,17 @@ cpu_family = '$CARCH' cpu = '$CARCH' endian = '$endian' EOF - else - export TARGET="" - export TRIPLETS="" - export BOOST_CMAKE_ARGS="" - export OPENSSL_TARGET_ARGS="" - export LIBUCONTEXT_MAKE_ARGS="" - export MESON_CROSS_FILE="" - fi - export PATH="/opt/cross/usr/bin:$PATH" + export SYSROOT="/opt/cross/Os" + export PATH="$SYSROOT/usr/lib/ccache/bin:$SYSROOT/usr/bin:$PATH" export WORKROOT="$HOME/pkgs" for COMPILER in $COMPILERS; do - INSTALL_DIR=/opt/static-libs/$COMPILER - INSTALL_DIR_OPENSSL=/opt/static-libs/$COMPILER-openssl - INSTALL_DIR_LIBRESSL=/opt/static-libs/$COMPILER-libressl - WORKSUBDIR="$COMPILER" - TARGET_FLAGS= - if [ -n "$TARGETARCH" ]; then - INSTALL_DIR="$INSTALL_DIR/$TARGET" - INSTALL_DIR_OPENSSL="$INSTALL_DIR_OPENSSL/$TARGET" - INSTALL_DIR_LIBRESSL="$INSTALL_DIR_LIBRESSL/$TARGET" - WORKSUBDIR="$WORKSUBDIR/$TARGET" - TARGET_FLAGS="--sysroot=/opt/cross" - fi + INSTALL_DIR="/opt/static-libs/$COMPILER/$TARGET" + INSTALL_DIR_OPENSSL="/opt/static-libs/$COMPILER-openssl/$TARGET" + INSTALL_DIR_LIBRESSL="/opt/static-libs/$COMPILER-libressl/$TARGET" + WORKSUBDIR="$COMPILER/$TARGET" + TARGET_FLAGS="--sysroot=$SYSROOT" WORKDIR="$WORKROOT/$WORKSUBDIR" export SIZE_CFLAGS="$TARGET_FLAGS $COMMON_CFLAGS -isystem $INSTALL_DIR/include" @@ -306,22 +284,12 @@ EOF case "$COMPILER" in clang*) - if [ -n "$TARGETARCH" ]; then - export CC="$TARGET-clang" - export CXX="$TARGET-clang++" - else - export CC="$CLANG" - export CXX="${CLANG/clang/clang++}" - fi + export CC="$TARGET-clang" + export CXX="$TARGET-clang++" ;; gcc*) - if [ -n "$TARGETARCH" ]; then - export CC="$TARGET-gcc" - export CXX="$TARGET-g++" - else - export CC="$GCC" - export CXX="${GCC/gcc/g++}" - fi + export CC="$TARGET-gcc" + export CXX="$TARGET-g++" ;; *) echo "Unknown compiler: $COMPILER" @@ -364,8 +332,11 @@ EOF cd "$WORKDIR" tar xf ${WORKROOT}/${LIBUNWIND_TARBALL} cd libunwind-${LIBUNWIND_VERSION} - LDFLAGS="$LDFLAGS -lucontext" CFLAGS="$CFLAGS -fno-stack-protector" ./configure \ - ${TRIPLETS} --prefix="$INSTALL_DIR" --enable-cxx-exceptions --disable-tests --disable-shared + fetch.sh https://gitlab.alpinelinux.org/alpine/aports/-/raw/master/main/libunwind/Remove-the-useless-endina.h-for-loongarch64.patch - | patch -p1 + fetch.sh https://gitlab.alpinelinux.org/alpine/aports/-/raw/master/main/libunwind/fix-libunwind-pc-in.patch - | patch -p1 + LDFLAGS="$LDFLAGS -lucontext" CFLAGS="$CFLAGS -fno-stack-protector" \ + ./configure ${TRIPLETS} --prefix="$INSTALL_DIR" --enable-cxx-exceptions --disable-tests --disable-shared \ + --cache-file=$HOME/.cfgcache/libunwind-${LIBUNWIND_VERSION}-${CARCH}-${COMPILER}.cache make -j$(nproc) make install fi @@ -420,8 +391,8 @@ EOF cd "$WORKDIR" tar xf ${WORKROOT}/${JEMALLOC_TARBALL} cd jemalloc-${JEMALLOC_VERSION} - curl https://gitlab.alpinelinux.org/alpine/aports/-/raw/abc0b4170e42e2a7d835e4490ecbae49e6f3d137/main/jemalloc/musl-exception-specification-errors.patch | patch -p1 - curl https://gitlab.alpinelinux.org/alpine/aports/-/raw/abc0b4170e42e2a7d835e4490ecbae49e6f3d137/main/jemalloc/pkgconf.patch | patch -p1 + fetch.sh https://gitlab.alpinelinux.org/alpine/aports/-/raw/abc0b4170e42e2a7d835e4490ecbae49e6f3d137/main/jemalloc/musl-exception-specification-errors.patch - | patch -p1 + fetch.sh https://gitlab.alpinelinux.org/alpine/aports/-/raw/abc0b4170e42e2a7d835e4490ecbae49e6f3d137/main/jemalloc/pkgconf.patch - | patch -p1 ./autogen.sh ${TRIPLETS} # mkdir build-minimal # cd build-minimal @@ -432,7 +403,9 @@ EOF # mkdir build-full mkdir build cd build - ../configure ${TRIPLETS} --prefix="$INSTALL_DIR" --localstatedir=/var --sysconfdir=/etc --with-lg-hugepage=21 --enable-stats --enable-prof --enable-static --disable-shared --disable-log --disable-debug + ../configure ${TRIPLETS} --prefix="$INSTALL_DIR" --localstatedir=/var --sysconfdir=/etc --with-lg-hugepage=21 \ + --enable-stats --enable-prof --enable-static --disable-shared --disable-log --disable-debug \ + --cache-file=$HOME/.cfgcache/jemalloc-${JEMALLOC_VERSION}-${CARCH}-${COMPILER}.cache make -j$(nproc) make install fi @@ -480,7 +453,8 @@ EOF cd fuse-${LIBFUSE_VERSION} ./configure ${TRIPLETS} --prefix="$INSTALL_DIR" \ --disable-shared --enable-static \ - --disable-example --enable-lib --disable-util + --disable-example --enable-lib --disable-util \ + --cache-file=$HOME/.cfgcache/fuse-${LIBFUSE_VERSION}-${CARCH}-${COMPILER}.cache make -j$(nproc) make install fi @@ -549,7 +523,7 @@ EOF cd brotli-${BROTLI_VERSION} mkdir build cd build - cmake .. -DCMAKE_INSTALL_PREFIX="$INSTALL_DIR" -DBUILD_SHARED_LIBS=OFF ${CMAKE_ARGS} + cmake .. -DCMAKE_INSTALL_PREFIX="$INSTALL_DIR" -DBROTLI_BUILD_TOOLS=OFF -DBUILD_SHARED_LIBS=OFF ${CMAKE_ARGS} ninja ninja install fi @@ -571,7 +545,11 @@ EOF cd "$WORKDIR" tar xf ${WORKROOT}/${XZ_TARBALL} cd xz-${XZ_VERSION} - ./configure ${TRIPLETS} --prefix="$INSTALL_DIR" --localstatedir=/var --sysconfdir=/etc --disable-rpath --disable-werror --disable-doc --disable-shared --disable-nls + ./configure ${TRIPLETS} --prefix="$INSTALL_DIR" --localstatedir=/var --sysconfdir=/etc \ + --disable-rpath --disable-werror --disable-doc --disable-shared --disable-nls \ + --disable-xz --disable-xzdec --disable-lzmainfo --disable-lzmadec \ + --disable-lzma-links --disable-scripts \ + --cache-file=$HOME/.cfgcache/xz-${XZ_VERSION}-${CARCH}-${COMPILER}.cache make -j$(nproc) make install fi @@ -584,7 +562,7 @@ EOF mkdir meson-build cd meson-build meson setup ../build/meson --default-library=static --prefix="$INSTALL_DIR" $MESON_CROSS_FILE - meson configure -D zlib=disabled -D lzma=disabled -D lz4=disabled + meson configure -D bin_programs=false -D bin_contrib=false -D zlib=disabled -D lzma=disabled -D lz4=disabled meson setup --reconfigure ../build/meson ninja ninja install @@ -608,17 +586,19 @@ EOF fi if use_lib libressl; then - opt_size - cd "$WORKDIR" - tar xf ${WORKROOT}/${LIBRESSL_TARBALL} - cd libressl-${LIBRESSL_VERSION} - mkdir build - cd build - cmake .. -DCMAKE_PREFIX_PATH="$INSTALL_DIR" -DCMAKE_INSTALL_PREFIX="$INSTALL_DIR_LIBRESSL" \ - -DBUILD_SHARED_LIBS=OFF -DLIBRESSL_APPS=OFF -DLIBRESSL_TESTS=OFF \ - ${CMAKE_ARGS} - ninja - ninja install + if [[ "$CARCH" =~ ^(x86_64|aarch64|riscv64|i386)$ ]]; then + opt_size + cd "$WORKDIR" + tar xf ${WORKROOT}/${LIBRESSL_TARBALL} + cd libressl-${LIBRESSL_VERSION} + mkdir build + cd build + cmake .. -DCMAKE_PREFIX_PATH="$INSTALL_DIR" -DCMAKE_INSTALL_PREFIX="$INSTALL_DIR_LIBRESSL" \ + -DBUILD_SHARED_LIBS=OFF -DLIBRESSL_APPS=OFF -DLIBRESSL_TESTS=OFF \ + ${CMAKE_ARGS} + ninja + ninja install + fi fi if use_lib libevent; then @@ -626,7 +606,7 @@ EOF cd "$WORKDIR" tar xf ${WORKROOT}/${LIBEVENT_TARBALL} cd libevent-${LIBEVENT_VERSION}-stable - curl https://github.com/libevent/libevent/commit/883630f76cbf512003b81de25cd96cb75c6cf0f9.diff | patch -p1 + fetch.sh https://github.com/libevent/libevent/commit/883630f76cbf512003b81de25cd96cb75c6cf0f9.diff - | patch -p1 mkdir build cd build cmake .. -DCMAKE_PREFIX_PATH="$INSTALL_DIR" -DCMAKE_INSTALL_PREFIX="$INSTALL_DIR" ${CMAKE_ARGS} \ @@ -650,6 +630,12 @@ EOF if use_lib libarchive; then for prefix in $SSL_PREFIXES; do + sslsuffix="" + if [[ "$prefix" == *libressl* ]]; then + sslsuffix="-libressl" + elif [[ "$prefix" == *openssl* ]]; then + sslsuffix="-openssl" + fi opt_size # This is safe because `opt_size` will re-initialize CFLAGS, CPPFLAGS, and LDFLAGS export CFLAGS="-I$prefix/include $CFLAGS" @@ -665,7 +651,8 @@ EOF --without-bz2lib --without-zlib \ --disable-shared --disable-acl --disable-xattr \ --disable-bsdtar --disable-bsdcat --disable-bsdcpio \ - --disable-bsdunzip + --disable-bsdunzip \ + --cache-file=$HOME/.cfgcache/libarchive-${LIBARCHIVE_VERSION}-${CARCH}-${COMPILER}${sslsuffix}.cache make -j$(nproc) make install done @@ -687,7 +674,8 @@ EOF tar xf ${WORKROOT}/${FLAC_TARBALL} cd flac-${FLAC_VERSION} ./configure ${TRIPLETS} --prefix="$INSTALL_DIR" --enable-static=yes --enable-shared=no \ - --disable-doxygen-docs --disable-ogg --disable-programs --disable-examples + --disable-doxygen-docs --disable-ogg --disable-programs --disable-examples \ + --cache-file=$HOME/.cfgcache/flac-${FLAC_VERSION}-${CARCH}-${COMPILER}.cache make -j$(nproc) make install fi diff --git a/.docker/install-toolchain.sh b/.docker/install-toolchain.sh index 23bef087..95e9e94c 100644 --- a/.docker/install-toolchain.sh +++ b/.docker/install-toolchain.sh @@ -2,9 +2,9 @@ set -ex -TASK="$1" -TARGETARCH="$2" -OPT="${3:-s}" +ARCH="$(uname -m)" +TARGET_ARCH_STR="${1:-$ARCH}" +OPTIMIZE_STR="${2:-s}" BINUTILS_VERSION=2.44 GCC_VERSION=14.2.0 @@ -16,98 +16,105 @@ GCC_TARBALL=gcc-${GCC_VERSION}.tar.xz MUSL_TARBALL=musl-${MUSL_VERSION}.tar.gz LINUX_TARBALL=linux-${LINUX_VERSION}.tar.xz -ARCH="$(uname -m)" +export PATH="/usr/lib/ccache/bin:$PATH" + +cd "$HOME" +mkdir pkgs +cd pkgs + +fetch.sh https://mirror.netcologne.de/gnu/binutils/${BINUTILS_TARBALL} +fetch.sh https://ftp.gwdg.de/pub/misc/gcc/releases/gcc-${GCC_VERSION}/${GCC_TARBALL} +fetch.sh https://www.musl-libc.org/releases/${MUSL_TARBALL} +fetch.sh https://cdn.kernel.org/pub/linux/kernel/v6.x/${LINUX_TARBALL} + +tar xf ${BINUTILS_TARBALL} +tar xf ${GCC_TARBALL} +tar xf ${LINUX_TARBALL} + +cd gcc-${GCC_VERSION} + +for p in 0001-posix_memalign.patch \ + 0002-gcc-poison-system-directories.patch \ + 0003-specs-turn-on-Wl-z-now-by-default.patch \ + 0004-Turn-on-D_FORTIFY_SOURCE-2-by-default-for-C-C-ObjC-O.patch \ + 0005-On-linux-targets-pass-as-needed-by-default-to-the-li.patch \ + 0006-Enable-Wformat-and-Wformat-security-by-default.patch \ + 0007-Enable-Wtrampolines-by-default.patch \ + 0008-Disable-ssp-on-nostdlib-nodefaultlibs-and-ffreestand.patch \ + 0009-Ensure-that-msgfmt-doesn-t-encounter-problems-during.patch \ + 0010-Don-t-declare-asprintf-if-defined-as-a-macro.patch \ + 0011-libiberty-copy-PIC-objects-during-build-process.patch \ + 0012-libgcc_s.patch \ + 0013-nopie.patch \ + 0014-ada-fix-shared-linking.patch \ + 0015-build-fix-CXXFLAGS_FOR_BUILD-passing.patch \ + 0016-add-fortify-headers-paths.patch \ + 0017-Alpine-musl-package-provides-libssp_nonshared.a.-We-.patch \ + 0018-DP-Use-push-state-pop-state-for-gold-as-well-when-li.patch \ + 0019-aarch64-disable-multilib-support.patch \ + 0020-s390x-disable-multilib-support.patch \ + 0021-ppc64-le-disable-multilib-support.patch \ + 0022-x86_64-disable-multilib-support.patch \ + 0023-riscv-disable-multilib-support.patch \ + 0024-always-build-libgcc_eh.a.patch \ + 0025-ada-libgnarl-compatibility-for-musl.patch \ + 0026-ada-musl-support-fixes.patch \ + 0027-configure-Add-enable-autolink-libatomic-use-in-LINK_.patch \ + 0028-configure-fix-detection-of-atomic-builtins-in-libato.patch \ + 0029-libstdc-do-not-throw-exceptions-for-non-C-locales-on.patch \ + 0030-gdc-unconditionally-link-libgphobos-against-libucont.patch \ + 0031-druntime-link-against-libucontext-on-all-platforms.patch \ + 0032-libgnat-time_t-is-always-64-bit-on-musl-libc.patch \ + 0033-libphobos-do-not-use-LFS64-symbols.patch \ + 0034-libgo-fix-lfs64-use.patch \ + 0035-loongarch-disable-multilib-support.patch \ + 0036-libphobos-add-riscv64-and-loongarch64-support.patch \ + fix-arm64.patch \ + ppc64le-quadmath.patch \ + riscv64-improve-build-time.patch; do + fetch.sh https://gitlab.alpinelinux.org/alpine/aports/-/raw/3.21-stable/main/gcc/$p - | patch -p1 +done +fetch.sh https://gcc.gnu.org/pipermail/gcc-patches/attachments/20250220/c6211b02/attachment.bin - | patch -p1 ORIGPATH="$PATH" -TARGET="${TARGETARCH}-unknown-linux-musl" -CARCH="$TARGETARCH" -case "$CARCH" in - aarch64*) CARCH="arm64" ;; - arm*) CARCH="arm" ;; - mips*) CARCH="mips" ;; - s390*) CARCH="s390" ;; - ppc*) CARCH="powerpc" ;; - riscv*) CARCH="riscv" ;; - loongarch*) CARCH="loongarch" ;; -esac +for target_arch in ${TARGET_ARCH_STR//,/ }; do + for OPT in ${OPTIMIZE_STR//,/ }; do + echo "===========================================================" + echo "Building for target architecture: $target_arch (-O${OPT})" + echo "===========================================================" -case "$CARCH" in - i386) - GCC_CONFIGURE_ARGS="--with-arch=i486 --with-tune=generic" - ;; -esac + export TARGETARCH="$target_arch" -CFLAGS="-O${OPT} -ffunction-sections -fdata-sections -fmerge-all-constants -fPIC" -CXXFLAGS="-O${OPT} -ffunction-sections -fdata-sections -fmerge-all-constants -fPIC" -LDFLAGS="-Wl,--gc-sections" + TARGET="${TARGETARCH}-unknown-linux-musl" -SYSROOT="/opt/cross" -PREFIX="$SYSROOT/usr" -PATH="$PREFIX/bin:$ORIGPATH" + CARCH="$TARGETARCH" + case "$CARCH" in + aarch64*) CARCH="arm64" ;; + arm*) CARCH="arm" ;; + mips*) CARCH="mips" ;; + s390*) CARCH="s390" ;; + ppc*) CARCH="powerpc" ;; + riscv*) CARCH="riscv" ;; + loongarch*) CARCH="loongarch" ;; + esac -case "$TASK" in - prepare) - cd "$HOME" - mkdir pkgs - cd pkgs + case "$CARCH" in + i386) + GCC_CONFIGURE_ARGS="--with-arch=i486 --with-tune=generic" + ;; + esac - wget https://mirror.netcologne.de/gnu/binutils/${BINUTILS_TARBALL} - wget https://ftp.gwdg.de/pub/misc/gcc/releases/gcc-${GCC_VERSION}/${GCC_TARBALL} - wget https://www.musl-libc.org/releases/${MUSL_TARBALL} - wget https://cdn.kernel.org/pub/linux/kernel/v6.x/${LINUX_TARBALL} + CFLAGS="-O${OPT} -ffunction-sections -fdata-sections -fmerge-all-constants -fPIC" + CXXFLAGS="-O${OPT} -ffunction-sections -fdata-sections -fmerge-all-constants -fPIC" + LDFLAGS="-Wl,--gc-sections" - tar xf ${BINUTILS_TARBALL} - tar xf ${GCC_TARBALL} - tar xf ${LINUX_TARBALL} + SYSROOT="/opt/cross/O${OPT}" + PREFIX="$SYSROOT/usr" + PATH="$PREFIX/bin:$ORIGPATH" - cd gcc-${GCC_VERSION} + GCC_NOCS="MAKEINFO=/bin/true gcc_cv_prog_makeinfo_modern=no HELP2MAN=/bin/true TEXI2POD=/bin/true POD2MAN=/bin/true" - for p in 0001-posix_memalign.patch \ - 0002-gcc-poison-system-directories.patch \ - 0003-specs-turn-on-Wl-z-now-by-default.patch \ - 0004-Turn-on-D_FORTIFY_SOURCE-2-by-default-for-C-C-ObjC-O.patch \ - 0005-On-linux-targets-pass-as-needed-by-default-to-the-li.patch \ - 0006-Enable-Wformat-and-Wformat-security-by-default.patch \ - 0007-Enable-Wtrampolines-by-default.patch \ - 0008-Disable-ssp-on-nostdlib-nodefaultlibs-and-ffreestand.patch \ - 0009-Ensure-that-msgfmt-doesn-t-encounter-problems-during.patch \ - 0010-Don-t-declare-asprintf-if-defined-as-a-macro.patch \ - 0011-libiberty-copy-PIC-objects-during-build-process.patch \ - 0012-libgcc_s.patch \ - 0013-nopie.patch \ - 0014-ada-fix-shared-linking.patch \ - 0015-build-fix-CXXFLAGS_FOR_BUILD-passing.patch \ - 0016-add-fortify-headers-paths.patch \ - 0017-Alpine-musl-package-provides-libssp_nonshared.a.-We-.patch \ - 0018-DP-Use-push-state-pop-state-for-gold-as-well-when-li.patch \ - 0019-aarch64-disable-multilib-support.patch \ - 0020-s390x-disable-multilib-support.patch \ - 0021-ppc64-le-disable-multilib-support.patch \ - 0022-x86_64-disable-multilib-support.patch \ - 0023-riscv-disable-multilib-support.patch \ - 0024-always-build-libgcc_eh.a.patch \ - 0025-ada-libgnarl-compatibility-for-musl.patch \ - 0026-ada-musl-support-fixes.patch \ - 0027-configure-Add-enable-autolink-libatomic-use-in-LINK_.patch \ - 0028-configure-fix-detection-of-atomic-builtins-in-libato.patch \ - 0029-libstdc-do-not-throw-exceptions-for-non-C-locales-on.patch \ - 0030-gdc-unconditionally-link-libgphobos-against-libucont.patch \ - 0031-druntime-link-against-libucontext-on-all-platforms.patch \ - 0032-libgnat-time_t-is-always-64-bit-on-musl-libc.patch \ - 0033-libphobos-do-not-use-LFS64-symbols.patch \ - 0034-libgo-fix-lfs64-use.patch \ - 0035-loongarch-disable-multilib-support.patch \ - 0036-libphobos-add-riscv64-and-loongarch64-support.patch \ - fix-arm64.patch \ - ppc64le-quadmath.patch \ - riscv64-improve-build-time.patch; do - curl https://gitlab.alpinelinux.org/alpine/aports/-/raw/3.21-stable/main/gcc/$p | patch -p1 - done - curl https://gcc.gnu.org/pipermail/gcc-patches/attachments/20250220/c6211b02/attachment.bin | patch -p1 - ;; - - build) # Stage 1 cd "${HOME}"/pkgs @@ -129,9 +136,9 @@ case "$TASK" in --target=$TARGET --prefix=$PREFIX --with-sysroot=$SYSROOT --with-newlib --without-headers \ --disable-nls --disable-shared --disable-multilib --disable-decimal-float --disable-threads \ --disable-libatomic --disable-libgomp --disable-libquadmath --disable-libssp --disable-libvtv \ - --disable-libstdcxx --enable-languages=c,c++ - make -j"$(nproc)" all-gcc - make -j"$(nproc)" all-target-libgcc + --disable-libstdcxx --enable-languages=c,c++ ${GCC_NOCS} + make -j"$(nproc)" all-gcc ${GCC_NOCS} + make -j"$(nproc)" all-target-libgcc ${GCC_NOCS} make install-gcc make install-target-libgcc @@ -161,17 +168,21 @@ case "$TASK" in --disable-shared --enable-tls --disable-libstdcxx-pch --disable-multilib --disable-nls --disable-werror --disable-symvers \ --enable-threads --enable-__cxa_atexit --enable-languages=c,c++ --enable-link-serialization=2 --enable-linker-build-id \ --enable-libssp --disable-libsanitizer --with-system-zlib --enable-checking=release --disable-cet --disable-fixed-point \ - --enable-libstdcxx-time=yes --enable-default-pie --enable-default-ssp --with-linker-hash-style=gnu ${_arch_config} - make -j"$(nproc)" + --enable-libstdcxx-time=yes --enable-default-pie --enable-default-ssp --with-linker-hash-style=gnu ${_arch_config} ${GCC_NOCS} + make -j"$(nproc)" ${GCC_NOCS} make install # Symbolic links for clang ln -s /usr/bin/clang $PREFIX/bin/$TARGET-clang ln -s /usr/bin/clang++ $PREFIX/bin/$TARGET-clang++ - ;; - cleanup) - cd "$HOME" - rm -rf pkgs - ;; -esac + # Also provide ccache symlinks + mkdir -p $PREFIX/lib/ccache/bin + for binary in gcc g++ clang clang++; do + ln -s /usr/bin/ccache $PREFIX/lib/ccache/bin/$TARGET-$binary + done + done +done + +cd "$HOME" +rm -rf pkgs diff --git a/.docker/meson-x86_64-riscv64.txt b/.docker/meson-x86_64-riscv64.txt deleted file mode 100644 index f5518dc5..00000000 --- a/.docker/meson-x86_64-riscv64.txt +++ /dev/null @@ -1,11 +0,0 @@ -[binaries] -c = 'xx-clang' -cpp = 'xx-clang++' -ar = 'riscv64-alpine-linux-musl-ar' -strip = 'riscv64-alpine-linux-musl-strip' - -[host_machine] -system = 'linux' -cpu_family = 'riscv64' -cpu = 'riscv64' -endian = 'little'