From c611e28a625f9b022218fbefc37a52850677c387 Mon Sep 17 00:00:00 2001 From: Marcus Holland-Moritz Date: Wed, 23 Jul 2025 16:05:46 +0200 Subject: [PATCH] wip: drop xx stuff --- .docker/Dockerfile.alpine-xx | 23 +++++++++---------- .docker/Makefile | 8 +++---- .docker/install-static-libs.sh | 41 +++++++++++++++++++--------------- .docker/install-toolchain.sh | 6 ++--- 4 files changed, 41 insertions(+), 37 deletions(-) diff --git a/.docker/Dockerfile.alpine-xx b/.docker/Dockerfile.alpine-xx index e43e0d26..b33e7240 100644 --- a/.docker/Dockerfile.alpine-xx +++ b/.docker/Dockerfile.alpine-xx @@ -1,12 +1,9 @@ # syntax=docker/dockerfile:1 ARG ARCH=amd64 -FROM --platform=$BUILDPLATFORM tonistiigi/xx AS xx -FROM --platform=$BUILDPLATFORM alpine:latest +FROM $ARCH/alpine:latest -COPY --from=xx / / -ARG TARGETPLATFORM -ARG XXMARCH -RUN echo "Building for target platform: $TARGETPLATFORM, arch: $XXMARCH" +ARG TARGETARCH +RUN echo "Building for target: $TARGETARCH" RUN apk update RUN apk upgrade @@ -48,17 +45,15 @@ RUN apk add --no-cache \ isl-dev \ texinfo \ rsync \ - qemu-$XXMARCH - -RUN xx-apk add --no-cache binutils gcc g++ + qemu-$TARGETARCH # Install UPX ARG ARCH # UPX isn't supported on RISC-V yet, so skip this -RUN if [ "$XXMARCH" ~= "^(riscv|s390)" ]; then \ - wget -O - https://github.com/upx/upx/releases/download/v5.0.0/upx-5.0.0-$(bash -c "echo \${0//v8/}" $XXMARCH)_linux.tar.xz | tar -xJf - -C /usr/local/bin --strip-components=1 --wildcards "*/upx"; \ +RUN if [ "$TARGETARCH" ~= "^(riscv|s390)" ]; then \ + wget -O - https://github.com/upx/upx/releases/download/v5.0.0/upx-5.0.0-$(bash -c "echo \${0//v8/}" $TARGETARCH)_linux.tar.xz | tar -xJf - -C /usr/local/bin --strip-components=1 --wildcards "*/upx"; \ else \ - echo "Skipping UPX installation for RISC-V architecture while it is not supported."; \ + echo "Skipping UPX installation for $TARGETARCH architecture while it is not supported."; \ echo "See https://github.com/upx/upx/discussions/793 for details."; \ fi @@ -79,6 +74,10 @@ RUN bash /usr/local/bin/install-mold.sh RUN apk del linux-headers zlib-dev +# TODO: move into toolchain installation script +RUN ln -s /usr/bin/clang /opt/static-libs/libstdc++-Os/$TARGETARCH-unknown-linux-musl/usr/bin/$TARGETARCH-unknown-linux-musl-clang +RUN ln -s /usr/bin/clang++ /opt/static-libs/libstdc++-Os/$TARGETARCH-unknown-linux-musl/usr/bin/$TARGETARCH-unknown-linux-musl-clang++ + # 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 gcc clang-19 :alpine:libucontext diff --git a/.docker/Makefile b/.docker/Makefile index cfc160ea..239635ae 100644 --- a/.docker/Makefile +++ b/.docker/Makefile @@ -42,16 +42,16 @@ run_alpine: @docker run $(COMMON_RUN_OPTS) $(IMAGE_ALPINE) build_alpine_xx_riscv: - docker buildx build -f Dockerfile.alpine-xx --platform linux/riscv64 --build-arg XXMARCH=riscv64 -t $(IMAGE_ALPINE_XX_RISCV) . + docker buildx build -f Dockerfile.alpine-xx --build-arg TARGETARCH=riscv64 -t $(IMAGE_ALPINE_XX_RISCV) . run_alpine_xx_riscv: - @docker run --platform linux/riscv64 --env TARGETPLATFORM=linux/riscv64 $(COMMON_RUN_OPTS) $(IMAGE_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 --platform linux/i386 --build-arg XXMARCH=i386 -t $(IMAGE_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 --platform linux/i386 --env TARGETPLATFORM=linux/386 $(COMMON_RUN_OPTS) $(IMAGE_ALPINE_XX_I386) + @docker run --env TARGETARCH=i386 $(COMMON_RUN_OPTS) $(IMAGE_ALPINE_XX_I386) build_alpine_riscv: docker build -f Dockerfile.alpine -t $(IMAGE_ALPINE_RISCV) --build-arg ARCH=riscv64 . diff --git a/.docker/install-static-libs.sh b/.docker/install-static-libs.sh index cd756c76..e31f66df 100644 --- a/.docker/install-static-libs.sh +++ b/.docker/install-static-libs.sh @@ -11,7 +11,7 @@ CLANG="${2:-clang}" PKGS="${3:-:none}" ARCH="$(uname -m)" -CARCH="$(xx-info march)" +CARCH="$TARGETARCH" FILE_VERSION=5.46 FILE_SHA512=a6cb7325c49fd4af159b7555bdd38149e48a5097207acbe5e36deb5b7493ad6ea94d703da6e0edece5bb32959581741f4213707e5cb0528cd46d75a97a5242dc @@ -56,7 +56,7 @@ elif [[ "$PKGS" == ":alpine"* ]]; then fi export COMMON_CFLAGS="-ffunction-sections -fdata-sections -fmerge-all-constants" export COMMON_CXXFLAGS="$COMMON_CFLAGS" - export COMMON_LDFLAGS="-fuse-ld=mold" + export COMMON_LDFLAGS="-fuse-ld=mold -static-libgcc" # COMPILERS="clang clang-lto clang-minsize-lto gcc" COMPILERS="clang-minsize-lto" # if [[ "$ARCH" != "x86_64" && "$ARCH" != "aarch64" ]]; then @@ -186,7 +186,7 @@ opt_size() { export CFLAGS="$SIZE_CFLAGS" export CXXFLAGS="$SIZE_CXXFLAGS" # export CMAKE_ARGS="-DCMAKE_BUILD_TYPE=MinSizeRel" - if [ -n "$TARGETPLATFORM" ]; then + if [ -n "$TARGETARCH" ]; then export CMAKE_ARGS="-DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=$CARCH" else export CMAKE_ARGS= @@ -198,7 +198,7 @@ opt_perf() { export CFLAGS="$PERF_CFLAGS" export CXXFLAGS="$PERF_CXXFLAGS" # export CMAKE_ARGS="-DCMAKE_BUILD_TYPE=Release" - if [ -n "$TARGETPLATFORM" ]; then + if [ -n "$TARGETARCH" ]; then export CMAKE_ARGS="-DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=$CARCH" else export CMAKE_ARGS= @@ -208,9 +208,9 @@ opt_perf() { rm -f /tmp/meson-$CARCH.txt -if [ -n "$TARGETPLATFORM" ]; then - export TARGET="$(xx-info triple)" - export TRIPLETS="--host=$(xx-info triple) --target=$(xx-info triple) --build=$(TARGETARCH= TARGETPLATFORM= xx-info triple)" +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 OPENSSL_TARGET_ARGS="linux-$CARCH" export LIBUCONTEXT_MAKE_ARGS="ARCH=$CARCH" @@ -225,8 +225,9 @@ if [ -n "$TARGETPLATFORM" ]; then cat < /tmp/meson-$CARCH.txt [binaries] -c = 'xx-clang' -cpp = 'xx-clang++' +c = '$TARGET-clang' +cpp = '$TARGET-clang++' +ld = '$TARGET-clang' ar = '$TARGET-ar' strip = '$TARGET-strip' @@ -246,14 +247,18 @@ else fi # TODO +export INCLUDE_FLAGS="-isystem /opt/static-libs/libstdc++-Os/$TARGET/usr/include -isystem /opt/static-libs/libstdc++-Os/$TARGET/usr/$TARGET/include/c++/14.2.0 -isystem /opt/static-libs/libstdc++-Os/$TARGET/usr/$TARGET/include/c++/14.2.0/$TARGET" export PATH="/opt/static-libs/libstdc++-Os/$TARGET/usr/bin:$PATH" -export COMMON_CFLAGS="$COMMON_CFLAGS -isystem /opt/static-libs/libstdc++-Os/$TARGET/usr/include" -export COMMON_CXXFLAGS="$COMMON_CXXFLAGS -isystem /opt/static-libs/libstdc++-Os/$TARGET/usr/include" +export COMMON_CFLAGS="$COMMON_CFLAGS $INCLUDE_FLAGS" +export COMMON_CXXFLAGS="$COMMON_CXXFLAGS $INCLUDE_FLAGS" +export CPPFLAGS="$INCLUDE_FLAGS" for COMPILER in $COMPILERS; do INSTALL_DIR=/opt/static-libs/$COMPILER - if [ -n "$TARGETPLATFORM" ]; then + TARGET_LDFLAGS= + if [ -n "$TARGETARCH" ]; then INSTALL_DIR="$INSTALL_DIR/$TARGET" + TARGET_LDFLAGS="-L/opt/static-libs/libstdc++-Os/$TARGET/usr/lib --sysroot=/opt/static-libs/libstdc++-Os/$TARGET" fi INSTALL_DIR="$INSTALL_DIR/usr" @@ -261,20 +266,20 @@ for COMPILER in $COMPILERS; do export SIZE_CXXFLAGS="$COMMON_CXXFLAGS -isystem $INSTALL_DIR/include" export PERF_CFLAGS="$COMMON_CFLAGS -isystem $INSTALL_DIR/include" export PERF_CXXFLAGS="$COMMON_CXXFLAGS -isystem $INSTALL_DIR/include" - export COMP_LDFLAGS="$COMMON_LDFLAGS -L$INSTALL_DIR/lib" + export COMP_LDFLAGS="$TARGET_LDFLAGS $COMMON_LDFLAGS -L$INSTALL_DIR/lib" case "$COMPILER" in clang*) - if [ -n "$TARGETPLATFORM" ]; then - export CC="xx-clang" - export CXX="xx-clang++" + if [ -n "$TARGETARCH" ]; then + export CC="$TARGET-clang" + export CXX="$TARGET-clang++" else export CC="$CLANG" export CXX="${CLANG/clang/clang++}" fi ;; gcc*) - if [ -n "$TARGETPLATFORM" ]; then + if [ -n "$TARGETARCH" ]; then export CC="$TARGET-gcc" export CXX="$TARGET-g++" else @@ -324,7 +329,7 @@ for COMPILER in $COMPILERS; do tar xf ../${LIBUNWIND_TARBALL} cd libunwind-${LIBUNWIND_VERSION} LDFLAGS="$LDFLAGS -lucontext" CFLAGS="$CFLAGS -fno-stack-protector" ./configure \ - ${TRIPLETS} --prefix="$INSTALL_DIR" --enable-cxx-exceptions --disable-tests + ${TRIPLETS} --prefix="$INSTALL_DIR" --enable-cxx-exceptions --disable-tests --disable-shared make -j$(nproc) make install fi diff --git a/.docker/install-toolchain.sh b/.docker/install-toolchain.sh index 22ca6510..df8c249f 100644 --- a/.docker/install-toolchain.sh +++ b/.docker/install-toolchain.sh @@ -5,7 +5,7 @@ set -ex TASK="$1" OPT="${2:-s}" -if [ -z "$TARGETPLATFORM" ]; then +if [ -z "$TARGETARCH" ]; then exit 0 fi @@ -22,9 +22,9 @@ LINUX_TARBALL=linux-${LINUX_VERSION}.tar.xz ARCH="$(uname -m)" ORIGPATH="$PATH" -TARGET="$(xx-info triple)" +TARGET="${TARGETARCH}-unknown-linux-musl" -CARCH="$(xx-info march)" +CARCH="$TARGETARCH" case "$CARCH" in aarch64*) CARCH="arm64" ;; arm*) CARCH="arm" ;;