From 6fcff98d5956f1c523637810d782fdb4b41e8c55 Mon Sep 17 00:00:00 2001 From: Valdemar Erk Date: Sat, 15 Jun 2024 16:54:34 +0200 Subject: [PATCH] clean up dockerfile --- Dockerfile | 108 +++++++++++++++++++++++++++++++---------------------- 1 file changed, 64 insertions(+), 44 deletions(-) diff --git a/Dockerfile b/Dockerfile index 74fc858..6ff7dbd 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,38 +10,50 @@ ARG RUST_TARGET ARG MUSL_TARGET ARG FEATURES -RUN apk upgrade && \ - apk add curl gcc musl-dev && \ +RUN < /app/.cargo/config; \ - else \ - echo "skipping toolchain as we are native" && \ - echo -e "\ -[build]\n\ -rustflags = [\"-L\", \"native=/usr/lib\"]\n\ -[unstable]\n\ -build-std = [\"std\", \"panic_abort\"]\n\ -" > /app/.cargo/config && \ - ln -s /usr/bin/strip /usr/bin/actual-strip; \ - fi +RUN <<-EOT bash +set -ex + +source $HOME/.cargo/env +mkdir -p /app/.cargo +if [ "$RUST_TARGET" != $(rustup target list --installed) ]; then + rustup target add $RUST_TARGET + curl -L "https://musl.cc/$MUSL_TARGET-cross.tgz" -o /toolchain.tgz + tar xf toolchain.tgz + ln -s "/$MUSL_TARGET-cross/bin/$MUSL_TARGET-gcc" "/usr/bin/$MUSL_TARGET-gcc" + ln -s "/$MUSL_TARGET-cross/bin/$MUSL_TARGET-ld" "/usr/bin/$MUSL_TARGET-ld" + ln -s "/$MUSL_TARGET-cross/bin/$MUSL_TARGET-strip" "/usr/bin/actual-strip" + GCC_VERSION=$($MUSL_TARGET-gcc --version | grep gcc | awk '{print $3}') + echo -e "\ + [build]\n\ + rustflags = [\"-L\", \"native=/$MUSL_TARGET-cross/$MUSL_TARGET/lib\", \ + \"-L\", \"native=/$MUSL_TARGET-cross/lib/gcc/$MUSL_TARGET/$GCC_VERSION/\", \ + \"-l\", \"static=gcc\", \ + \"-C\", \"link-self-contained=y\", \ + \"-C\", \"linker-flavor=gcc\"\ + ]\n\ + [target.$RUST_TARGET]\n\ + linker = \"$MUSL_TARGET-gcc\"\n\ + [unstable]\n\ + build-std = [\"std\", \"panic_abort\"]\n\ +" > /app/.cargo/config; +else + echo "skipping toolchain as we are native" + echo -e "\ + [build]\n\ + rustflags = [\"-L\", \"native=/usr/lib\"]\n\ + [unstable]\n\ + build-std = [\"std\", \"panic_abort\"]\n\ +" > /app/.cargo/config + ln -s /usr/bin/strip /usr/bin/actual-strip; +fi +EOT WORKDIR /app @@ -50,16 +62,20 @@ COPY ./Cargo.toml ./Cargo.toml # We need a source directory so that it builds the dependencies and an empty # binary. -RUN mkdir src/ -RUN echo 'fn main() {}' > ./src/main.rs -RUN source $HOME/.cargo/env && \ - if [ "$FEATURES" == "" ]; then \ +RUN <<-EOT bash + set -ex + + mkdir src/ + echo 'fn main() {}' -> ./src/main.rs + source $HOME/.cargo/env + if [ "$FEATURES" == "" ]; then cargo build --release \ - --target="$RUST_TARGET"; \ - else \ + --target="$RUST_TARGET"; + else cargo build --release \ - --target="$RUST_TARGET" --features="$FEATURES"; \ + --target="$RUST_TARGET" --features="$FEATURES"; fi +EOT # Now, delete the fake source and copy in the actual source. This allows us to # have a previous compilation step for compiling the dependencies, while being @@ -74,16 +90,20 @@ RUN source $HOME/.cargo/env && \ RUN rm -f target/$RUST_TARGET/release/deps/twilight_http_proxy* COPY ./src ./src -RUN source $HOME/.cargo/env && \ - if [ "$FEATURES" == "" ]; then \ +RUN <<-EOT bash + set -ex + + source $HOME/.cargo/env + if [ "$FEATURES" == "" ]; then cargo build --release \ - --target="$RUST_TARGET"; \ - else \ + --target="$RUST_TARGET" + else cargo build --release \ - --target="$RUST_TARGET" --features="$FEATURES"; \ - fi && \ - cp target/$RUST_TARGET/release/twilight-http-proxy /twilight-http-proxy && \ + --target="$RUST_TARGET" --features="$FEATURES" + fi + cp target/$RUST_TARGET/release/twilight-http-proxy /twilight-http-proxy actual-strip /twilight-http-proxy +EOT FROM scratch