From ca74acbafbf8418b3f0feb7112e76a6029b22be9 Mon Sep 17 00:00:00 2001 From: Azalea Gui <22280294+hykilpikonna@users.noreply.github.com> Date: Sun, 22 Dec 2024 04:22:52 -0500 Subject: [PATCH] [O] Build rust using musl static --- tools/rust-builder/general/Dockerfile | 34 ++++++++++++++++----------- tools/rust-builder/general/build.sh | 25 ++++++++++++++++---- 2 files changed, 40 insertions(+), 19 deletions(-) diff --git a/tools/rust-builder/general/Dockerfile b/tools/rust-builder/general/Dockerfile index 951d49a1..bdc2994d 100644 --- a/tools/rust-builder/general/Dockerfile +++ b/tools/rust-builder/general/Dockerfile @@ -1,21 +1,27 @@ -FROM debian:10-slim +FROM debian # Install Rust building environment -RUN apt update && apt install -y curl build-essential gcc libssl-dev bash musl-tools mingw-w64 +RUN apt update && apt install -y curl build-essential gcc libssl-dev bash musl-tools mingw-w64 \ + gcc-arm-linux-gnueabihf gcc-aarch64-linux-gnu gcc-riscv64-linux-gnu RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y -# Add toolchains for building for gnu[x86_64, aarch64, armv7l], musl[x86_64], and windows[x86_64, aarch64] +# Add toolchains for building for musl[x86_64, aarch64, armv7l, riscv64], windows[x86_64] RUN /root/.cargo/bin/rustup target add \ - x86_64-unknown-linux-gnu \ - aarch64-unknown-linux-gnu \ - armv7-unknown-linux-gnueabihf \ - x86_64-unknown-linux-musl \ + x86_64-unknown-linux-musl aarch64-unknown-linux-musl armv7-unknown-linux-musleabihf riscv64gc-unknown-linux-musl \ x86_64-pc-windows-gnu -# Install armv7l & aarch64 toolchains -RUN apt install -y gcc-arm-linux-gnueabihf gcc-aarch64-linux-gnu - -# Add cargo to path -ENV PATH="/root/.cargo/bin:${PATH}" - -WORKDIR /app +# Compile musl for multiple architectures +RUN curl "https://musl.libc.org/releases/musl-1.2.5.tar.gz" --output musl.tgz && \ + tar -xvf musl.tgz && \ + cd musl-*/ && \ + ./configure --prefix=/musl/aarch64 --exec-prefix=/musl/aarch64 --target=aarch64-linux-gnu --enable-wrapper=all && \ + make -j18 install && \ + make clean && \ + ./configure --prefix=/musl/armv7l --exec-prefix=/musl/armv7l --target=arm-linux-gnueabihf --enable-wrapper=all && \ + make -j18 install && \ + make clean && \ + ./configure --prefix=/musl/riscv64 --exec-prefix=/musl/riscv64 --target=riscv64-linux-gnu --enable-wrapper=all && \ + make -j18 install && \ + make clean && \ + cd .. && \ + rm -rf musl-* diff --git a/tools/rust-builder/general/build.sh b/tools/rust-builder/general/build.sh index c7d7c436..73f30dac 100755 --- a/tools/rust-builder/general/build.sh +++ b/tools/rust-builder/general/build.sh @@ -2,13 +2,28 @@ set -e +# Add cargo to path +export PATH="$HOME/.cargo/bin:$PATH" +cd /app + # Set linkers for cross-compilation -export CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_LINKER=/usr/bin/arm-linux-gnueabihf-gcc -export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=/usr/bin/aarch64-linux-gnu-gcc +export CARGO_TARGET_X86_64_UNKNOWN_LINUX_MUSL_LINKER=musl-gcc +export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER=/musl/aarch64/bin/musl-gcc +export CARGO_TARGET_ARMV7_UNKNOWN_LINUX_MUSLEABIHF_LINKER=/musl/armv7l/bin/musl-gcc +export CARGO_TARGET_RISCV64GC_UNKNOWN_LINUX_MUSL_LINKER=/musl/riscv64/bin/musl-gcc + +# OSX linker and ar +#export OSX_VER=20.4 +#export CARGO_TARGET_X86_64_APPLE_DARWIN_LINKER=/osxcross/bin/x86_64-apple-darwin$OSX_VER-clang +#export CARGO_TARGET_X86_64_APPLE_DARWIN_AR=/osxcross/bin/x86_64-apple-darwin$OSX_VER-ar +#export CARGO_TARGET_AARCH64_APPLE_DARWIN_LINKER=/osxcross/bin/aarch64-apple-darwin$OSX_VER-clang +#export CARGO_TARGET_AARCH64_APPLE_DARWIN_AR=/osxcross/bin/aarch64-apple-darwin$OSX_VER-ar # Build for platforms -cargo build --release --target x86_64-unknown-linux-gnu -cargo build --release --target aarch64-unknown-linux-gnu -cargo build --release --target armv7-unknown-linux-gnueabihf cargo build --release --target x86_64-unknown-linux-musl +cargo build --release --target aarch64-unknown-linux-musl +cargo build --release --target armv7-unknown-linux-musleabihf +#cargo build --release --target riscv64gc-unknown-linux-musl cargo build --release --target x86_64-pc-windows-gnu +#cargo build --release --target x86_64-apple-darwin +#cargo build --release --target aarch64-apple-darwin