mirror of
https://github.com/mhx/dwarfs.git
synced 2025-09-08 11:59:48 -04:00
wip: cross-build
This commit is contained in:
parent
391fa68589
commit
a348942b82
121
.docker/Dockerfile.alpine-xx
Normal file
121
.docker/Dockerfile.alpine-xx
Normal file
@ -0,0 +1,121 @@
|
||||
# syntax=docker/dockerfile:1
|
||||
ARG ARCH=amd64
|
||||
FROM --platform=$BUILDPLATFORM tonistiigi/xx AS xx
|
||||
FROM --platform=$BUILDPLATFORM alpine:latest
|
||||
RUN apk update
|
||||
RUN apk upgrade
|
||||
RUN apk add --no-cache \
|
||||
bash-completion \
|
||||
build-base \
|
||||
wget \
|
||||
curl \
|
||||
vim \
|
||||
tar \
|
||||
ripgrep \
|
||||
py3-pip \
|
||||
less \
|
||||
gcc \
|
||||
g++ \
|
||||
clang19 \
|
||||
git \
|
||||
ccache \
|
||||
samurai \
|
||||
cmake \
|
||||
make \
|
||||
bison \
|
||||
flex \
|
||||
ronn \
|
||||
fuse \
|
||||
fuse-dev \
|
||||
fuse-static \
|
||||
fuse3 \
|
||||
fuse3-dev \
|
||||
fuse3-static \
|
||||
pkgconf \
|
||||
binutils-dev \
|
||||
libevent-dev \
|
||||
libevent-static \
|
||||
linux-headers \
|
||||
date-dev \
|
||||
range-v3-dev \
|
||||
zlib-static \
|
||||
libucontext-dev \
|
||||
libdwarf-dev \
|
||||
elfutils-dev \
|
||||
utfcpp \
|
||||
nlohmann-json \
|
||||
meson \
|
||||
autoconf \
|
||||
strace \
|
||||
gdb
|
||||
|
||||
COPY --from=xx / /
|
||||
ARG TARGETPLATFORM
|
||||
RUN xx-apk add --no-cache musl-dev binutils gcc g++
|
||||
|
||||
# Install UPX
|
||||
ARG ARCH
|
||||
# UPX isn't supported on RISC-V yet, so skip this
|
||||
RUN if [ "$ARCH" != "riscv64" ]; then \
|
||||
wget -O - https://github.com/upx/upx/releases/download/v5.0.0/upx-5.0.0-$(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 RISC-V architecture while it is not supported."; \
|
||||
echo "See https://github.com/upx/upx/discussions/793 for details."; \
|
||||
fi
|
||||
|
||||
# Install mistletoe
|
||||
RUN pip3 install --break-system-packages --root-user-action ignore mistletoe
|
||||
|
||||
# Install size-optimized and static-link-optimized libstdc++
|
||||
RUN apk add --no-cache gmp-dev mpfr-dev mpc1-dev isl-dev texinfo rsync
|
||||
#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-stage1 s
|
||||
RUN bash /usr/local/bin/install-toolchain.sh build-final s
|
||||
RUN bash /usr/local/bin/install-toolchain.sh cleanup
|
||||
|
||||
# Install mold
|
||||
COPY install-mold.sh /usr/local/bin/install-mold.sh
|
||||
RUN bash /usr/local/bin/install-mold.sh
|
||||
|
||||
RUN apk add qemu-riscv64
|
||||
COPY meson-x86_64-riscv64.txt /usr/local/share/meson-x86_64-riscv64.txt
|
||||
|
||||
# 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
|
||||
RUN bash /usr/local/bin/install-static-libs.sh gcc clang-19 :alpine:libunwind
|
||||
RUN bash /usr/local/bin/install-static-libs.sh gcc clang-19 :alpine:boost
|
||||
RUN bash /usr/local/bin/install-static-libs.sh gcc clang-19 :alpine:jemalloc
|
||||
RUN bash /usr/local/bin/install-static-libs.sh gcc clang-19 :alpine:mimalloc
|
||||
RUN bash /usr/local/bin/install-static-libs.sh gcc clang-19 :alpine:double-conversion
|
||||
RUN bash /usr/local/bin/install-static-libs.sh gcc clang-19 :alpine:fmt
|
||||
RUN bash /usr/local/bin/install-static-libs.sh gcc clang-19 :alpine:fuse
|
||||
RUN bash /usr/local/bin/install-static-libs.sh gcc clang-19 :alpine:glog
|
||||
RUN bash /usr/local/bin/install-static-libs.sh gcc clang-19 :alpine:benchmark
|
||||
RUN bash /usr/local/bin/install-static-libs.sh gcc clang-19 :alpine:xxhash
|
||||
RUN bash /usr/local/bin/install-static-libs.sh gcc clang-19 :alpine:bzip2
|
||||
RUN bash /usr/local/bin/install-static-libs.sh gcc clang-19 :alpine:brotli
|
||||
RUN bash /usr/local/bin/install-static-libs.sh gcc clang-19 :alpine:lz4
|
||||
RUN bash /usr/local/bin/install-static-libs.sh gcc clang-19 :alpine:xz
|
||||
RUN bash /usr/local/bin/install-static-libs.sh gcc clang-19 :alpine:zstd
|
||||
RUN bash /usr/local/bin/install-static-libs.sh gcc clang-19 :alpine:libressl
|
||||
RUN bash /usr/local/bin/install-static-libs.sh gcc clang-19 :alpine:libarchive
|
||||
RUN bash /usr/local/bin/install-static-libs.sh gcc clang-19 :alpine:flac
|
||||
RUN bash /usr/local/bin/install-static-libs.sh gcc clang-19 :alpine:libdwarf
|
||||
RUN bash /usr/local/bin/install-static-libs.sh gcc clang-19 :alpine:cpptrace
|
||||
|
||||
### # RUN bash /usr/local/bin/install-static-libs.sh gcc clang-19 :alpine
|
||||
|
||||
# Install the *real* ninja...
|
||||
# TODO: move this up if we change anything
|
||||
RUN apk add --no-cache ninja-build
|
||||
RUN apk del fuse fuse-dev fuse-static binutils-dev
|
||||
|
||||
# Set up git & user
|
||||
RUN git config --global --add safe.directory /workspace
|
||||
RUN adduser -G users -s bash -u 1000 -D mhx
|
||||
USER mhx
|
||||
ENTRYPOINT /workspace/.docker/build-linux.sh
|
@ -2,6 +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_UBUNTU2204="dwarfs-buildenv-ubuntu2204"
|
||||
IMAGE_FEDORA="dwarfs-buildenv-fedora"
|
||||
IMAGE_ARCH="dwarfs-buildenv-arch"
|
||||
@ -39,6 +40,12 @@ build_alpine:
|
||||
run_alpine:
|
||||
@docker run $(COMMON_RUN_OPTS) $(IMAGE_ALPINE)
|
||||
|
||||
build_alpine_xx_riscv:
|
||||
docker buildx build -f Dockerfile.alpine-xx --platform linux/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)
|
||||
|
||||
build_alpine_riscv:
|
||||
docker build -f Dockerfile.alpine -t $(IMAGE_ALPINE_RISCV) --build-arg ARCH=riscv64 .
|
||||
|
||||
|
@ -2,6 +2,14 @@
|
||||
|
||||
set -ex
|
||||
|
||||
if [ -n "$TARGETPLATFORM" ]; then
|
||||
# export CC="xx-cc"
|
||||
# export CXX="xx-c++"
|
||||
export TRIPLETS="--host=$(TARGETPLATFORM= xx-info triple) --build=$(TARGETPLATFORM= xx-info triple) --target=$(xx-info triple)"
|
||||
else
|
||||
export TRIPLETS=""
|
||||
fi
|
||||
|
||||
cd "$HOME"
|
||||
mkdir pkgs
|
||||
cd pkgs
|
||||
@ -74,7 +82,7 @@ for opt in s; do
|
||||
;;
|
||||
esac
|
||||
|
||||
"$HOME"/pkgs/gcc-${GCC_VERSION}/configure --prefix=${INSTALLDIR} --libdir=${INSTALLDIR}/lib \
|
||||
"$HOME"/pkgs/gcc-${GCC_VERSION}/configure ${TRIPLETS} --prefix=${INSTALLDIR} --libdir=${INSTALLDIR}/lib \
|
||||
--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 \
|
||||
--disable-libssp --disable-libsanitizer --with-system-zlib --enable-checking=release --disable-cet --disable-fixed-point \
|
||||
|
@ -2,6 +2,11 @@
|
||||
|
||||
set -ex
|
||||
|
||||
# if [ -n "$TARGETPLATFORM" ]; then
|
||||
# export CC="xx-cc"
|
||||
# export CXX="xx-c++"
|
||||
# fi
|
||||
|
||||
cd "$HOME"
|
||||
mkdir pkgs
|
||||
cd pkgs
|
||||
|
@ -18,6 +18,7 @@ BZIP2_VERSION=1.0.8
|
||||
|
||||
LIBARCHIVE_VERSION=3.8.1 # 2025-06-01
|
||||
FLAC_VERSION=1.5.0 # 2025-02-11
|
||||
LIBUCONTEXT_VERSION=1.3.2 # 2024-10-07
|
||||
LIBUNWIND_VERSION=1.8.2 # 2025-05-22
|
||||
BENCHMARK_VERSION=1.9.4 # 2025-05-19
|
||||
BOOST_VERSION=1.88.0 # 2025-04-11
|
||||
@ -35,6 +36,7 @@ LIBFUSE_VERSION=3.17.2 # 2025-04-23
|
||||
MIMALLOC_VERSION=2.1.7 # 2024-05-21
|
||||
JEMALLOC_VERSION=5.3.0 # 2022-05-02
|
||||
XZ_VERSION=5.8.1 # 2025-04-03
|
||||
LIBDWARF_VERSION=2.1.0 # 2025-07-19
|
||||
|
||||
echo "Using $GCC and $CLANG"
|
||||
|
||||
@ -43,7 +45,7 @@ if [[ "$PKGS" == ":ubuntu" ]]; then
|
||||
COMPILERS="clang gcc"
|
||||
elif [[ "$PKGS" == ":alpine"* ]]; then
|
||||
if [[ "$PKGS" == ":alpine" ]]; then
|
||||
PKGS="benchmark,boost,brotli,cpptrace,double-conversion,flac,fmt,fuse,glog,jemalloc,libarchive,libunwind,libressl,lz4,mimalloc,openssl,xxhash,xz,zstd"
|
||||
PKGS="benchmark,boost,brotli,cpptrace,double-conversion,flac,fmt,fuse,glog,jemalloc,libarchive,libucontext,libunwind,libressl,lz4,mimalloc,openssl,xxhash,xz,zstd"
|
||||
else
|
||||
PKGS="${PKGS#:alpine:}"
|
||||
fi
|
||||
@ -51,12 +53,13 @@ elif [[ "$PKGS" == ":alpine"* ]]; then
|
||||
export COMMON_CXXFLAGS="$COMMON_CFLAGS"
|
||||
export COMMON_LDFLAGS="-fuse-ld=mold"
|
||||
# COMPILERS="clang clang-lto clang-minsize-lto gcc"
|
||||
if [[ "$ARCH" != "x86_64" && "$ARCH" != "aarch64" ]]; then
|
||||
# Let's keep it simple for more exotic architectures
|
||||
COMPILERS="clang-minsize-lto"
|
||||
else
|
||||
COMPILERS="clang clang-minsize-lto gcc"
|
||||
fi
|
||||
COMPILERS="clang-minsize-lto"
|
||||
# if [[ "$ARCH" != "x86_64" && "$ARCH" != "aarch64" ]]; then
|
||||
# # Let's keep it simple for more exotic architectures
|
||||
# COMPILERS="clang-minsize-lto"
|
||||
# else
|
||||
# COMPILERS="clang clang-minsize-lto gcc"
|
||||
# fi
|
||||
elif [[ "$PKGS" == ":none" ]]; then
|
||||
echo "No libraries to build"
|
||||
exit 0
|
||||
@ -67,6 +70,7 @@ BZIP2_TARBALL="bzip2-${BZIP2_VERSION}.tar.gz"
|
||||
BOOST_TARBALL="boost-${BOOST_VERSION}.tar.xz"
|
||||
LIBARCHIVE_TARBALL="libarchive-${LIBARCHIVE_VERSION}.tar.xz"
|
||||
FLAC_TARBALL="flac-${FLAC_VERSION}.tar.xz"
|
||||
LIBUCONTEXT_TARBALL="libucontext-${LIBUCONTEXT_VERSION}.tar.gz"
|
||||
LIBUNWIND_TARBALL="libunwind-${LIBUNWIND_VERSION}.tar.gz"
|
||||
BENCHMARK_TARBALL="benchmark-${BENCHMARK_VERSION}.tar.gz"
|
||||
OPENSSL_TARBALL="openssl-${OPENSSL_VERSION}.tar.gz"
|
||||
@ -83,6 +87,7 @@ LIBFUSE_TARBALL="fuse-${LIBFUSE_VERSION}.tar.gz"
|
||||
MIMALLOC_TARBALL="mimalloc-${MIMALLOC_VERSION}.tar.gz"
|
||||
JEMALLOC_TARBALL="jemalloc-${JEMALLOC_VERSION}.tar.bz2"
|
||||
XZ_TARBALL="xz-${XZ_VERSION}.tar.xz"
|
||||
LIBDWARF_TARBALL="libdwarf-${LIBDWARF_VERSION}.tar.xz"
|
||||
|
||||
use_lib() {
|
||||
local lib="$1"
|
||||
@ -122,6 +127,7 @@ fetch_lib bzip2 https://sourceware.org/pub/bzip2/${BZIP2_TARBALL}
|
||||
fetch_lib boost https://github.com/boostorg/boost/releases/download/boost-${BOOST_VERSION}/boost-${BOOST_VERSION}-cmake.tar.xz ${BOOST_TARBALL}
|
||||
fetch_lib libarchive https://github.com/libarchive/libarchive/releases/download/v${LIBARCHIVE_VERSION}/${LIBARCHIVE_TARBALL}
|
||||
fetch_lib flac https://github.com/xiph/flac/releases/download/${FLAC_VERSION}/${FLAC_TARBALL}
|
||||
fetch_lib libucontext https://github.com/kaniini/libucontext/archive/refs/tags/${LIBUCONTEXT_TARBALL}
|
||||
fetch_lib libunwind https://github.com/libunwind/libunwind/releases/download/v${LIBUNWIND_VERSION}/${LIBUNWIND_TARBALL}
|
||||
fetch_lib benchmark https://github.com/google/benchmark/archive/refs/tags/v${BENCHMARK_VERSION}.tar.gz ${BENCHMARK_TARBALL}
|
||||
fetch_lib openssl https://github.com/openssl/openssl/releases/download/openssl-${OPENSSL_VERSION}/${OPENSSL_TARBALL}
|
||||
@ -138,6 +144,7 @@ fetch_lib fuse https://github.com/libfuse/libfuse/releases/download/fuse-${LIBFU
|
||||
fetch_lib mimalloc https://github.com/microsoft/mimalloc/archive/refs/tags/v${MIMALLOC_VERSION}.tar.gz ${MIMALLOC_TARBALL}
|
||||
fetch_lib jemalloc https://github.com/jemalloc/jemalloc/releases/download/${JEMALLOC_VERSION}/${JEMALLOC_TARBALL}
|
||||
fetch_lib xz https://github.com/tukaani-project/xz/releases/download/v${XZ_VERSION}/${XZ_TARBALL}
|
||||
fetch_lib libdwarf https://github.com/davea42/libdwarf-code/releases/download/v${LIBDWARF_VERSION}/${LIBDWARF_TARBALL}
|
||||
|
||||
set_build_flags() {
|
||||
if [[ $CFLAGS =~ ^[[:space:]]*$ ]]; then
|
||||
@ -167,7 +174,11 @@ opt_size() {
|
||||
export CFLAGS="$SIZE_CFLAGS"
|
||||
export CXXFLAGS="$SIZE_CXXFLAGS"
|
||||
# export CMAKE_ARGS="-DCMAKE_BUILD_TYPE=MinSizeRel"
|
||||
export CMAKE_ARGS=
|
||||
if [ -n "$TARGETPLATFORM" ]; then
|
||||
export CMAKE_ARGS="-DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=$(xx-info arch)"
|
||||
else
|
||||
export CMAKE_ARGS=
|
||||
fi
|
||||
set_build_flags
|
||||
}
|
||||
|
||||
@ -175,25 +186,66 @@ opt_perf() {
|
||||
export CFLAGS="$PERF_CFLAGS"
|
||||
export CXXFLAGS="$PERF_CXXFLAGS"
|
||||
# export CMAKE_ARGS="-DCMAKE_BUILD_TYPE=Release"
|
||||
export CMAKE_ARGS=
|
||||
if [ -n "$TARGETPLATFORM" ]; then
|
||||
export CMAKE_ARGS="-DCMAKE_SYSTEM_NAME=Linux -DCMAKE_SYSTEM_PROCESSOR=$(xx-info arch)"
|
||||
else
|
||||
export CMAKE_ARGS=
|
||||
fi
|
||||
set_build_flags
|
||||
}
|
||||
|
||||
if [ -n "$TARGETPLATFORM" ]; then
|
||||
export TARGET="$(xx-info triple)"
|
||||
export TRIPLETS="--host=$(xx-info triple) --target=$(xx-info triple) --build=$(TARGETPLATFORM= xx-info triple)"
|
||||
export TRIPLETS2="--host=$(TARGETPLATFORM= xx-info triple) --target=$(xx-info triple) --build=$(TARGETPLATFORM= xx-info triple)"
|
||||
export BOOST_CMAKE_ARGS="-DBOOST_CONTEXT_ARCHITECTURE=$(xx-info arch)"
|
||||
export OPENSSL_TARGET_ARGS="linux-$(xx-info arch)"
|
||||
export LIBUCONTEXT_MAKE_ARGS="ARCH=$(xx-info arch)"
|
||||
else
|
||||
export TARGET=""
|
||||
export TRIPLETS=""
|
||||
export TRIPLETS2=""
|
||||
export BOOST_CMAKE_ARGS=""
|
||||
export OPENSSL_TARGET_ARGS=""
|
||||
export LIBUCONTEXT_MAKE_ARGS=""
|
||||
fi
|
||||
|
||||
# TODO
|
||||
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"
|
||||
|
||||
for COMPILER in $COMPILERS; do
|
||||
export SIZE_CFLAGS="$COMMON_CFLAGS"
|
||||
export SIZE_CXXFLAGS="$COMMON_CXXFLAGS"
|
||||
export PERF_CFLAGS="$COMMON_CFLAGS"
|
||||
export PERF_CXXFLAGS="$COMMON_CXXFLAGS"
|
||||
export COMP_LDFLAGS="$COMMON_LDFLAGS"
|
||||
INSTALL_DIR=/opt/static-libs/$COMPILER
|
||||
if [ -n "$TARGETPLATFORM" ]; then
|
||||
INSTALL_DIR="$INSTALL_DIR/$TARGET"
|
||||
fi
|
||||
INSTALL_DIR="$INSTALL_DIR/usr"
|
||||
|
||||
export SIZE_CFLAGS="$COMMON_CFLAGS -isystem $INSTALL_DIR/include"
|
||||
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"
|
||||
|
||||
case "$COMPILER" in
|
||||
clang*)
|
||||
export CC="$CLANG"
|
||||
export CXX="${CLANG/clang/clang++}"
|
||||
if [ -n "$TARGETPLATFORM" ]; then
|
||||
export CC="xx-clang"
|
||||
export CXX="xx-clang++"
|
||||
else
|
||||
export CC="$CLANG"
|
||||
export CXX="${CLANG/clang/clang++}"
|
||||
fi
|
||||
;;
|
||||
gcc*)
|
||||
export CC="$GCC"
|
||||
export CXX="${GCC/gcc/g++}"
|
||||
if [ -n "$TARGETPLATFORM" ]; then
|
||||
export CC="$TARGET-gcc"
|
||||
export CXX="$TARGET-g++"
|
||||
else
|
||||
export CC="$GCC"
|
||||
export CXX="${GCC/gcc/g++}"
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
echo "Unknown compiler: $COMPILER"
|
||||
@ -221,7 +273,15 @@ for COMPILER in $COMPILERS; do
|
||||
cd "$HOME/pkgs"
|
||||
mkdir $COMPILER
|
||||
|
||||
INSTALL_DIR=/opt/static-libs/$COMPILER
|
||||
if use_lib libucontext; then
|
||||
opt_size
|
||||
cd "$HOME/pkgs/$COMPILER"
|
||||
mkdir libucontext-${LIBUCONTEXT_VERSION}
|
||||
tar xf ../${LIBUCONTEXT_TARBALL} --strip-components=1 -C libucontext-${LIBUCONTEXT_VERSION}
|
||||
cd libucontext-${LIBUCONTEXT_VERSION}
|
||||
make -j$(nproc) ${LIBUCONTEXT_MAKE_ARGS}
|
||||
make install ${LIBUCONTEXT_MAKE_ARGS} DESTDIR="$INSTALL_DIR" prefix=""
|
||||
fi
|
||||
|
||||
if use_lib libunwind; then
|
||||
opt_size
|
||||
@ -229,7 +289,7 @@ for COMPILER in $COMPILERS; do
|
||||
tar xf ../${LIBUNWIND_TARBALL}
|
||||
cd libunwind-${LIBUNWIND_VERSION}
|
||||
LDFLAGS="$LDFLAGS -lucontext" CFLAGS="$CFLAGS -fno-stack-protector" ./configure \
|
||||
--prefix="$INSTALL_DIR" --enable-cxx-exceptions --disable-tests
|
||||
${TRIPLETS} --prefix="$INSTALL_DIR" --enable-cxx-exceptions --disable-tests
|
||||
make -j$(nproc)
|
||||
make install
|
||||
fi
|
||||
@ -244,7 +304,7 @@ for COMPILER in $COMPILERS; do
|
||||
cmake .. -DBOOST_ENABLE_MPI=OFF -DBOOST_ENABLE_PYTHON=OFF -DBUILD_SHARED_LIBS=OFF \
|
||||
-DBOOST_IOSTREAMS_ENABLE_ZLIB=OFF -DBOOST_IOSTREAMS_ENABLE_BZIP2=OFF \
|
||||
-DBOOST_IOSTREAMS_ENABLE_LZMA=OFF -DBOOST_IOSTREAMS_ENABLE_ZSTD=OFF \
|
||||
-DBOOST_EXCLUDE_LIBRARIES=stacktrace \
|
||||
-DBOOST_EXCLUDE_LIBRARIES=stacktrace ${BOOST_CMAKE_ARGS} \
|
||||
-DCMAKE_INSTALL_PREFIX="$INSTALL_DIR" ${CMAKE_ARGS}
|
||||
make -j$(nproc)
|
||||
make install
|
||||
@ -257,16 +317,17 @@ for COMPILER in $COMPILERS; do
|
||||
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
|
||||
./autogen.sh
|
||||
mkdir build-minimal
|
||||
cd build-minimal
|
||||
../configure --prefix="$INSTALL_DIR-jemalloc-minimal" --localstatedir=/var --sysconfdir=/etc --with-lg-hugepage=21 --disable-stats --disable-prof --enable-static --disable-shared --disable-log --disable-debug
|
||||
make -j$(nproc)
|
||||
make install
|
||||
cd ..
|
||||
mkdir build-full
|
||||
cd build-full
|
||||
../configure --prefix="$INSTALL_DIR-jemalloc-full" --localstatedir=/var --sysconfdir=/etc --with-lg-hugepage=21 --enable-stats --enable-prof --enable-static --disable-shared --disable-log --disable-debug
|
||||
./autogen.sh ${TRIPLETS}
|
||||
# mkdir build-minimal
|
||||
# cd build-minimal
|
||||
# ../configure ${TRIPLETS} --prefix="$INSTALL_DIR-jemalloc-minimal" --localstatedir=/var --sysconfdir=/etc --with-lg-hugepage=21 --disable-stats --disable-prof --enable-static --disable-shared --disable-log --disable-debug
|
||||
# make -j$(nproc)
|
||||
# make install
|
||||
# cd ..
|
||||
# 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
|
||||
make -j$(nproc)
|
||||
make install
|
||||
fi
|
||||
@ -314,7 +375,8 @@ for COMPILER in $COMPILERS; do
|
||||
cd fuse-${LIBFUSE_VERSION}
|
||||
mkdir build
|
||||
cd build
|
||||
meson setup .. --default-library=static --prefix="$INSTALL_DIR"
|
||||
meson setup .. --default-library=static --prefix="$INSTALL_DIR" --cross-file=/usr/local/share/meson-x86_64-riscv64.txt
|
||||
# meson configure ${TRIPLETS} -D utils=false -D tests=false -D examples=false
|
||||
meson configure -D utils=false -D tests=false -D examples=false
|
||||
meson setup --reconfigure ..
|
||||
ninja
|
||||
@ -392,7 +454,7 @@ for COMPILER in $COMPILERS; do
|
||||
cd "$HOME/pkgs/$COMPILER"
|
||||
tar xf ../${XZ_TARBALL}
|
||||
cd xz-${XZ_VERSION}
|
||||
./configure --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
|
||||
make -j$(nproc)
|
||||
make install
|
||||
fi
|
||||
@ -404,7 +466,7 @@ for COMPILER in $COMPILERS; do
|
||||
cd zstd-${ZSTD_VERSION}
|
||||
mkdir meson-build
|
||||
cd meson-build
|
||||
meson setup ../build/meson --default-library=static --prefix="$INSTALL_DIR"
|
||||
meson setup ../build/meson --default-library=static --prefix="$INSTALL_DIR" --cross-file=/usr/local/share/meson-x86_64-riscv64.txt
|
||||
meson configure -D zlib=disabled -D lzma=disabled -D lz4=disabled
|
||||
meson setup --reconfigure ../build/meson
|
||||
ninja
|
||||
@ -416,7 +478,8 @@ for COMPILER in $COMPILERS; do
|
||||
cd "$HOME/pkgs/$COMPILER"
|
||||
tar xf ../${OPENSSL_TARBALL}
|
||||
cd openssl-${OPENSSL_VERSION}
|
||||
./Configure --prefix="$INSTALL_DIR-openssl" --libdir=lib threads no-fips no-shared no-pic no-dso no-aria no-async no-atexit \
|
||||
./Configure ${OPENSSL_TARGET_ARGS} --prefix="$INSTALL_DIR-openssl" --libdir=lib \
|
||||
threads no-fips no-shared no-pic no-dso no-aria no-async no-atexit \
|
||||
no-autoload-config no-blake2 no-bf no-camellia no-cast no-chacha no-cmac no-cms no-cmp no-comp no-ct no-des \
|
||||
no-dgram no-dh no-dsa no-ec no-engine no-filenames no-idea no-ktls no-md4 no-multiblock \
|
||||
no-nextprotoneg no-ocsp no-ocb no-poly1305 no-psk no-rc2 no-rc4 no-seed no-siphash no-siv no-sm3 no-sm4 \
|
||||
@ -432,19 +495,20 @@ for COMPILER in $COMPILERS; do
|
||||
cd "$HOME/pkgs/$COMPILER"
|
||||
tar xf ../${LIBRESSL_TARBALL}
|
||||
cd libressl-${LIBRESSL_VERSION}
|
||||
./configure --prefix="$INSTALL_DIR-libressl" --enable-static --disable-shared --disable-tests
|
||||
# ./configure ${TRIPLETS} --prefix="$INSTALL_DIR-libressl" --enable-static --disable-shared --disable-tests
|
||||
./configure ${TRIPLETS} --prefix="$INSTALL_DIR" --enable-static --disable-shared --disable-tests
|
||||
make -j$(nproc)
|
||||
make install
|
||||
fi
|
||||
|
||||
if use_lib libarchive; then
|
||||
unset LIBARCHIVE_PREFIXES
|
||||
if use_lib openssl; then
|
||||
LIBARCHIVE_PREFIXES="$LIBARCHIVE_PREFIXES $INSTALL_DIR-openssl"
|
||||
fi
|
||||
if use_lib libressl; then
|
||||
LIBARCHIVE_PREFIXES="$LIBARCHIVE_PREFIXES $INSTALL_DIR-libressl"
|
||||
fi
|
||||
# if use_lib openssl; then
|
||||
# LIBARCHIVE_PREFIXES="$LIBARCHIVE_PREFIXES $INSTALL_DIR-openssl"
|
||||
# fi
|
||||
# if use_lib libressl; then
|
||||
# LIBARCHIVE_PREFIXES="$LIBARCHIVE_PREFIXES $INSTALL_DIR-libressl"
|
||||
# fi
|
||||
if [[ -z "$LIBARCHIVE_PREFIXES" ]]; then
|
||||
LIBARCHIVE_PREFIXES="$INSTALL_DIR"
|
||||
fi
|
||||
@ -456,10 +520,10 @@ for COMPILER in $COMPILERS; do
|
||||
tar xf ../${LIBARCHIVE_TARBALL}
|
||||
cd libarchive-${LIBARCHIVE_VERSION}
|
||||
# TODO: once DwarFS supports ACLs / xattrs, we need to update this
|
||||
export CFLAGS="-I$prefix/include $CFLAGS"
|
||||
export CPPFLAGS="-I$prefix/include $CPPFLAGS"
|
||||
export LDFLAGS="-L$prefix/lib $LDFLAGS"
|
||||
./configure --prefix="$prefix" \
|
||||
# export CFLAGS="-I$prefix/include $CFLAGS"
|
||||
# export CPPFLAGS="-I$prefix/include $CPPFLAGS"
|
||||
# export LDFLAGS="-L$prefix/lib $LDFLAGS"
|
||||
./configure ${TRIPLETS} --prefix="$prefix" \
|
||||
--without-iconv --without-xml2 --without-expat \
|
||||
--without-bz2lib --without-zlib \
|
||||
--disable-shared --disable-acl --disable-xattr \
|
||||
@ -475,7 +539,7 @@ for COMPILER in $COMPILERS; do
|
||||
cd "$HOME/pkgs/$COMPILER"
|
||||
tar xf ../${FILE_TARBALL}
|
||||
cd file-${FILE_VERSION}
|
||||
./configure --prefix="$INSTALL_DIR" --enable-static=yes --enable-shared=no
|
||||
./configure ${TRIPLETS} --prefix="$INSTALL_DIR" --enable-static=yes --enable-shared=no
|
||||
make -j$(nproc)
|
||||
make install
|
||||
fi
|
||||
@ -485,12 +549,26 @@ for COMPILER in $COMPILERS; do
|
||||
cd "$HOME/pkgs/$COMPILER"
|
||||
tar xf ../${FLAC_TARBALL}
|
||||
cd flac-${FLAC_VERSION}
|
||||
./configure --prefix="$INSTALL_DIR" --enable-static=yes --enable-shared=no \
|
||||
./configure ${TRIPLETS} --prefix="$INSTALL_DIR" --enable-static=yes --enable-shared=no \
|
||||
--disable-doxygen-docs --disable-ogg --disable-programs --disable-examples
|
||||
make -j$(nproc)
|
||||
make install
|
||||
fi
|
||||
|
||||
if use_lib libdwarf; then
|
||||
opt_size
|
||||
cd "$HOME/pkgs/$COMPILER"
|
||||
tar xf ../${LIBDWARF_TARBALL}
|
||||
cd libdwarf-${LIBDWARF_VERSION}
|
||||
mkdir meson-build
|
||||
cd meson-build
|
||||
meson setup .. --default-library=static --prefix="$INSTALL_DIR" --cross-file=/usr/local/share/meson-x86_64-riscv64.txt
|
||||
# meson configure
|
||||
# meson setup --reconfigure ..
|
||||
ninja
|
||||
ninja install
|
||||
fi
|
||||
|
||||
if use_lib cpptrace; then
|
||||
opt_size
|
||||
cd "$HOME/pkgs/$COMPILER"
|
||||
@ -498,7 +576,7 @@ for COMPILER in $COMPILERS; do
|
||||
cd cpptrace-${CPPTRACE_VERSION}
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. -DCMAKE_INSTALL_PREFIX="$INSTALL_DIR" ${CMAKE_ARGS}
|
||||
cmake .. -DCMAKE_INSTALL_PREFIX="$INSTALL_DIR" -DCPPTRACE_USE_EXTERNAL_LIBDWARF=ON -DCPPTRACE_FIND_LIBDWARF_WITH_PKGCONFIG=ON ${CMAKE_ARGS}
|
||||
make -j$(nproc)
|
||||
make install
|
||||
fi
|
||||
|
172
.docker/install-toolchain.sh
Normal file
172
.docker/install-toolchain.sh
Normal file
@ -0,0 +1,172 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -ex
|
||||
|
||||
TASK="$1"
|
||||
OPT="${2:-s}"
|
||||
|
||||
if [ -z "$TARGETPLATFORM" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
BINUTILS_VERSION=2.44
|
||||
GCC_VERSION=14.2.0
|
||||
MUSL_VERSION=1.2.5
|
||||
LINUX_VERSION=6.15.7
|
||||
|
||||
BINUTILS_TARBALL=binutils-${BINUTILS_VERSION}.tar.xz
|
||||
GCC_TARBALL=gcc-${GCC_VERSION}.tar.xz
|
||||
MUSL_TARBALL=musl-${MUSL_VERSION}.tar.gz
|
||||
LINUX_TARBALL=linux-${LINUX_VERSION}.tar.xz
|
||||
|
||||
ARCH="$(uname -m)"
|
||||
|
||||
ORIGPATH="$PATH"
|
||||
TARGET="$(xx-info triple)"
|
||||
|
||||
CARCH="$(xx-info arch)"
|
||||
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
|
||||
|
||||
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"
|
||||
|
||||
SYSROOT="/opt/static-libs/libstdc++-O${OPT}/${TARGET}"
|
||||
PREFIX="$SYSROOT/usr"
|
||||
PATH="$PREFIX/bin:$ORIGPATH"
|
||||
|
||||
case "$TASK" in
|
||||
prepare)
|
||||
cd "$HOME"
|
||||
mkdir pkgs
|
||||
cd pkgs
|
||||
|
||||
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}
|
||||
|
||||
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
|
||||
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-stage1)
|
||||
cd "${HOME}"/pkgs
|
||||
|
||||
mkdir binutils-${BINUTILS_VERSION}-build-O${OPT}
|
||||
cd binutils-${BINUTILS_VERSION}-build-O${OPT}
|
||||
|
||||
"$HOME"/pkgs/binutils-${BINUTILS_VERSION}/configure \
|
||||
--target=$TARGET --prefix=$PREFIX --with-sysroot=$SYSROOT --disable-nls --disable-werror
|
||||
make -j"$(nproc)"
|
||||
make install
|
||||
|
||||
cd "$HOME"/pkgs/linux-${LINUX_VERSION}
|
||||
make ARCH="$CARCH" INSTALL_HDR_PATH=$PREFIX headers_install
|
||||
|
||||
cd "$HOME"/pkgs
|
||||
mkdir gcc-${GCC_VERSION}-build-O${OPT}-stage1
|
||||
cd gcc-${GCC_VERSION}-build-O${OPT}-stage1
|
||||
"$HOME"/pkgs/gcc-${GCC_VERSION}/configure \
|
||||
--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
|
||||
make install-gcc
|
||||
make install-target-libgcc
|
||||
|
||||
cd "$HOME"/pkgs
|
||||
rm -rf musl-${MUSL_VERSION}
|
||||
tar xf ${MUSL_TARBALL}
|
||||
cd musl-${MUSL_VERSION}
|
||||
./configure --prefix=$PREFIX --target=$TARGET CC=$TARGET-gcc
|
||||
make install-headers
|
||||
make -j"$(nproc)"
|
||||
make install
|
||||
;;
|
||||
|
||||
build-final)
|
||||
cd "$HOME"/pkgs
|
||||
mkdir gcc-${GCC_VERSION}-build-O${OPT}-final
|
||||
cd gcc-${GCC_VERSION}-build-O${OPT}-final
|
||||
|
||||
case "$ARCH" in
|
||||
aarch64)
|
||||
_arch_config="--with-arch=armv8-a --with-abi=lp64"
|
||||
;;
|
||||
esac
|
||||
|
||||
"$HOME"/pkgs/gcc-${GCC_VERSION}/configure \
|
||||
--target=$TARGET --prefix=$PREFIX --with-sysroot=$SYSROOT \
|
||||
--libdir=$PREFIX/lib --includedir=$PREFIX/include \
|
||||
--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)"
|
||||
make install
|
||||
;;
|
||||
|
||||
cleanup)
|
||||
cd "$HOME"
|
||||
rm -rf pkgs
|
||||
;;
|
||||
esac
|
||||
|
||||
|
11
.docker/meson-x86_64-riscv64.txt
Normal file
11
.docker/meson-x86_64-riscv64.txt
Normal file
@ -0,0 +1,11 @@
|
||||
[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'
|
Loading…
x
Reference in New Issue
Block a user