done
This commit is contained in:
196
reth.Dockerfile
196
reth.Dockerfile
@@ -79,111 +79,82 @@ ENV CFLAGS_BASE="-O3 -flto=thin -fomit-frame-pointer -fno-semantic-interposition
|
||||
ENV CXXFLAGS_BASE="-O3 -flto=thin -fomit-frame-pointer -fno-semantic-interposition -funroll-loops -ffast-math"
|
||||
ENV LDFLAGS="-Wl,-O3 -Wl,--as-needed -Wl,--gc-sections -fuse-ld=/usr/local/bin/mold"
|
||||
|
||||
# Create build script with architecture-specific optimizations
|
||||
RUN cat > /build/build.sh << 'EOFSCRIPT'
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# Base flags
|
||||
RUSTFLAGS_BASE="-C link-arg=-fuse-ld=/usr/local/bin/mold -C opt-level=3"
|
||||
CFLAGS_BASE="-O3 -flto=thin -fomit-frame-pointer -fno-semantic-interposition -funroll-loops -ffast-math"
|
||||
CXXFLAGS_BASE="-O3 -flto=thin -fomit-frame-pointer -fno-semantic-interposition -funroll-loops -ffast-math"
|
||||
|
||||
# Configure CPU-specific optimizations
|
||||
case "$ARCH_TARGET" in
|
||||
"zen5")
|
||||
export RUSTFLAGS="$RUSTFLAGS_BASE -C target-cpu=znver5 -C llvm-args=-enable-machine-outliner -C llvm-args=-enable-gvn-hoist -C llvm-args=-enable-dfa-jump-thread"
|
||||
export CFLAGS="$CFLAGS_BASE -march=znver5"
|
||||
export CXXFLAGS="$CXXFLAGS_BASE -march=znver5"
|
||||
;;
|
||||
"zen4")
|
||||
export RUSTFLAGS="$RUSTFLAGS_BASE -C target-cpu=znver4 -C llvm-args=-enable-machine-outliner"
|
||||
export CFLAGS="$CFLAGS_BASE -march=znver4"
|
||||
export CXXFLAGS="$CXXFLAGS_BASE -march=znver4"
|
||||
;;
|
||||
"zen3")
|
||||
export RUSTFLAGS="$RUSTFLAGS_BASE -C target-cpu=znver3"
|
||||
export CFLAGS="$CFLAGS_BASE -march=znver3"
|
||||
export CXXFLAGS="$CXXFLAGS_BASE -march=znver3"
|
||||
;;
|
||||
"zen2")
|
||||
export RUSTFLAGS="$RUSTFLAGS_BASE -C target-cpu=znver2"
|
||||
export CFLAGS="$CFLAGS_BASE -march=znver2"
|
||||
export CXXFLAGS="$CXXFLAGS_BASE -march=znver2"
|
||||
;;
|
||||
"skylake")
|
||||
export RUSTFLAGS="$RUSTFLAGS_BASE -C target-cpu=skylake"
|
||||
export CFLAGS="$CFLAGS_BASE -march=skylake"
|
||||
export CXXFLAGS="$CXXFLAGS_BASE -march=skylake"
|
||||
;;
|
||||
"cascadelake")
|
||||
export RUSTFLAGS="$RUSTFLAGS_BASE -C target-cpu=cascadelake"
|
||||
export CFLAGS="$CFLAGS_BASE -march=cascadelake"
|
||||
export CXXFLAGS="$CXXFLAGS_BASE -march=cascadelake"
|
||||
;;
|
||||
"icelake")
|
||||
export RUSTFLAGS="$RUSTFLAGS_BASE -C target-cpu=icelake-server"
|
||||
export CFLAGS="$CFLAGS_BASE -march=icelake-server"
|
||||
export CXXFLAGS="$CXXFLAGS_BASE -march=icelake-server"
|
||||
;;
|
||||
"sapphirerapids")
|
||||
export RUSTFLAGS="$RUSTFLAGS_BASE -C target-cpu=sapphirerapids"
|
||||
export CFLAGS="$CFLAGS_BASE -march=sapphirerapids"
|
||||
export CXXFLAGS="$CXXFLAGS_BASE -march=sapphirerapids"
|
||||
;;
|
||||
"emeraldrapids")
|
||||
export RUSTFLAGS="$RUSTFLAGS_BASE -C target-cpu=emeraldrapids"
|
||||
export CFLAGS="$CFLAGS_BASE -march=emeraldrapids"
|
||||
export CXXFLAGS="$CXXFLAGS_BASE -march=emeraldrapids"
|
||||
;;
|
||||
"alderlake")
|
||||
export RUSTFLAGS="$RUSTFLAGS_BASE -C target-cpu=alderlake"
|
||||
export CFLAGS="$CFLAGS_BASE -march=alderlake"
|
||||
export CXXFLAGS="$CXXFLAGS_BASE -march=alderlake"
|
||||
;;
|
||||
"raptorlake")
|
||||
export RUSTFLAGS="$RUSTFLAGS_BASE -C target-cpu=raptorlake"
|
||||
export CFLAGS="$CFLAGS_BASE -march=raptorlake"
|
||||
export CXXFLAGS="$CXXFLAGS_BASE -march=raptorlake"
|
||||
;;
|
||||
"x86-64-v3")
|
||||
export RUSTFLAGS="$RUSTFLAGS_BASE -C target-cpu=x86-64-v3"
|
||||
export CFLAGS="$CFLAGS_BASE -march=x86-64-v3"
|
||||
export CXXFLAGS="$CXXFLAGS_BASE -march=x86-64-v3"
|
||||
;;
|
||||
"x86-64-v4")
|
||||
export RUSTFLAGS="$RUSTFLAGS_BASE -C target-cpu=x86-64-v4"
|
||||
export CFLAGS="$CFLAGS_BASE -march=x86-64-v4"
|
||||
export CXXFLAGS="$CXXFLAGS_BASE -march=x86-64-v4"
|
||||
;;
|
||||
"native")
|
||||
export RUSTFLAGS="$RUSTFLAGS_BASE -C target-cpu=native"
|
||||
export CFLAGS="$CFLAGS_BASE -march=native"
|
||||
export CXXFLAGS="$CXXFLAGS_BASE -march=native"
|
||||
;;
|
||||
*)
|
||||
export RUSTFLAGS="$RUSTFLAGS_BASE -C target-cpu=$ARCH_TARGET"
|
||||
export CFLAGS="$CFLAGS_BASE -march=$ARCH_TARGET"
|
||||
export CXXFLAGS="$CXXFLAGS_BASE -march=$ARCH_TARGET"
|
||||
;;
|
||||
esac
|
||||
|
||||
echo "Building with RUSTFLAGS: $RUSTFLAGS"
|
||||
echo "Building with CFLAGS: $CFLAGS"
|
||||
|
||||
if [ "$BUILD_OP_RETH" = "true" ]; then
|
||||
echo "Building op-reth with optimism feature"
|
||||
cargo build --profile $PROFILE --locked --bin op-reth --features optimism,jemalloc,asm-keccak
|
||||
else
|
||||
echo "Building standard reth"
|
||||
cargo build --profile $PROFILE --locked --bin reth --features jemalloc,asm-keccak
|
||||
fi
|
||||
EOFSCRIPT
|
||||
|
||||
RUN chmod +x /build/build.sh
|
||||
|
||||
# Run the build
|
||||
RUN /build/build.sh
|
||||
# Configure architecture-specific flags and build
|
||||
RUN --mount=type=cache,target=/usr/local/cargo/registry \
|
||||
--mount=type=cache,target=/usr/local/cargo/git \
|
||||
--mount=type=cache,target=/build/target \
|
||||
if [ "$ARCH_TARGET" = "zen5" ]; then \
|
||||
RUSTFLAGS="-C target-cpu=znver5 -C link-arg=-fuse-ld=/usr/local/bin/mold -C opt-level=3 -C llvm-args=-enable-machine-outliner -C llvm-args=-enable-gvn-hoist -C llvm-args=-enable-dfa-jump-thread" \
|
||||
CFLAGS="$CFLAGS_BASE -march=znver5" \
|
||||
CXXFLAGS="$CXXFLAGS_BASE -march=znver5"; \
|
||||
elif [ "$ARCH_TARGET" = "zen4" ]; then \
|
||||
RUSTFLAGS="-C target-cpu=znver4 -C link-arg=-fuse-ld=/usr/local/bin/mold -C opt-level=3 -C llvm-args=-enable-machine-outliner" \
|
||||
CFLAGS="$CFLAGS_BASE -march=znver4" \
|
||||
CXXFLAGS="$CXXFLAGS_BASE -march=znver4"; \
|
||||
elif [ "$ARCH_TARGET" = "zen3" ]; then \
|
||||
RUSTFLAGS="-C target-cpu=znver3 -C link-arg=-fuse-ld=/usr/local/bin/mold -C opt-level=3" \
|
||||
CFLAGS="$CFLAGS_BASE -march=znver3" \
|
||||
CXXFLAGS="$CXXFLAGS_BASE -march=znver3"; \
|
||||
elif [ "$ARCH_TARGET" = "zen2" ]; then \
|
||||
RUSTFLAGS="-C target-cpu=znver2 -C link-arg=-fuse-ld=/usr/local/bin/mold -C opt-level=3" \
|
||||
CFLAGS="$CFLAGS_BASE -march=znver2" \
|
||||
CXXFLAGS="$CXXFLAGS_BASE -march=znver2"; \
|
||||
elif [ "$ARCH_TARGET" = "skylake" ]; then \
|
||||
RUSTFLAGS="-C target-cpu=skylake -C link-arg=-fuse-ld=/usr/local/bin/mold -C opt-level=3" \
|
||||
CFLAGS="$CFLAGS_BASE -march=skylake" \
|
||||
CXXFLAGS="$CXXFLAGS_BASE -march=skylake"; \
|
||||
elif [ "$ARCH_TARGET" = "cascadelake" ]; then \
|
||||
RUSTFLAGS="-C target-cpu=cascadelake -C link-arg=-fuse-ld=/usr/local/bin/mold -C opt-level=3" \
|
||||
CFLAGS="$CFLAGS_BASE -march=cascadelake" \
|
||||
CXXFLAGS="$CXXFLAGS_BASE -march=cascadelake"; \
|
||||
elif [ "$ARCH_TARGET" = "icelake" ]; then \
|
||||
RUSTFLAGS="-C target-cpu=icelake-server -C link-arg=-fuse-ld=/usr/local/bin/mold -C opt-level=3" \
|
||||
CFLAGS="$CFLAGS_BASE -march=icelake-server" \
|
||||
CXXFLAGS="$CXXFLAGS_BASE -march=icelake-server"; \
|
||||
elif [ "$ARCH_TARGET" = "sapphirerapids" ]; then \
|
||||
RUSTFLAGS="-C target-cpu=sapphirerapids -C link-arg=-fuse-ld=/usr/local/bin/mold -C opt-level=3" \
|
||||
CFLAGS="$CFLAGS_BASE -march=sapphirerapids" \
|
||||
CXXFLAGS="$CXXFLAGS_BASE -march=sapphirerapids"; \
|
||||
elif [ "$ARCH_TARGET" = "emeraldrapids" ]; then \
|
||||
RUSTFLAGS="-C target-cpu=emeraldrapids -C link-arg=-fuse-ld=/usr/local/bin/mold -C opt-level=3" \
|
||||
CFLAGS="$CFLAGS_BASE -march=emeraldrapids" \
|
||||
CXXFLAGS="$CXXFLAGS_BASE -march=emeraldrapids"; \
|
||||
elif [ "$ARCH_TARGET" = "alderlake" ]; then \
|
||||
RUSTFLAGS="-C target-cpu=alderlake -C link-arg=-fuse-ld=/usr/local/bin/mold -C opt-level=3" \
|
||||
CFLAGS="$CFLAGS_BASE -march=alderlake" \
|
||||
CXXFLAGS="$CXXFLAGS_BASE -march=alderlake"; \
|
||||
elif [ "$ARCH_TARGET" = "raptorlake" ]; then \
|
||||
RUSTFLAGS="-C target-cpu=raptorlake -C link-arg=-fuse-ld=/usr/local/bin/mold -C opt-level=3" \
|
||||
CFLAGS="$CFLAGS_BASE -march=raptorlake" \
|
||||
CXXFLAGS="$CXXFLAGS_BASE -march=raptorlake"; \
|
||||
elif [ "$ARCH_TARGET" = "x86-64-v3" ]; then \
|
||||
RUSTFLAGS="-C target-cpu=x86-64-v3 -C link-arg=-fuse-ld=/usr/local/bin/mold -C opt-level=3" \
|
||||
CFLAGS="$CFLAGS_BASE -march=x86-64-v3" \
|
||||
CXXFLAGS="$CXXFLAGS_BASE -march=x86-64-v3"; \
|
||||
elif [ "$ARCH_TARGET" = "x86-64-v4" ]; then \
|
||||
RUSTFLAGS="-C target-cpu=x86-64-v4 -C link-arg=-fuse-ld=/usr/local/bin/mold -C opt-level=3" \
|
||||
CFLAGS="$CFLAGS_BASE -march=x86-64-v4" \
|
||||
CXXFLAGS="$CXXFLAGS_BASE -march=x86-64-v4"; \
|
||||
elif [ "$ARCH_TARGET" = "native" ]; then \
|
||||
RUSTFLAGS="-C target-cpu=native -C link-arg=-fuse-ld=/usr/local/bin/mold -C opt-level=3" \
|
||||
CFLAGS="$CFLAGS_BASE -march=native" \
|
||||
CXXFLAGS="$CXXFLAGS_BASE -march=native"; \
|
||||
else \
|
||||
RUSTFLAGS="-C target-cpu=$ARCH_TARGET -C link-arg=-fuse-ld=/usr/local/bin/mold -C opt-level=3" \
|
||||
CFLAGS="$CFLAGS_BASE -march=$ARCH_TARGET" \
|
||||
CXXFLAGS="$CXXFLAGS_BASE -march=$ARCH_TARGET"; \
|
||||
fi && \
|
||||
export RUSTFLAGS CFLAGS CXXFLAGS && \
|
||||
echo "Building with RUSTFLAGS: $RUSTFLAGS" && \
|
||||
if [ "$BUILD_OP_RETH" = "true" ]; then \
|
||||
echo "Building op-reth with optimism feature" && \
|
||||
cargo build --profile $PROFILE --locked --bin op-reth --features optimism,jemalloc,asm-keccak && \
|
||||
cp target/$PROFILE/op-reth /usr/local/bin/op-reth; \
|
||||
else \
|
||||
echo "Building standard reth" && \
|
||||
cargo build --profile $PROFILE --locked --bin reth --features jemalloc,asm-keccak && \
|
||||
cp target/$PROFILE/reth /usr/local/bin/reth; \
|
||||
fi
|
||||
|
||||
# Final stage - minimal runtime
|
||||
FROM debian:bookworm-slim
|
||||
@@ -195,17 +166,10 @@ RUN apt-get update && apt-get install -y \
|
||||
libjemalloc2 \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Copy the optimized binary (handle both reth and op-reth)
|
||||
ARG BUILD_OP_RETH=false
|
||||
RUN --mount=type=bind,from=builder,source=/build/target,target=/build/target \
|
||||
if [ "$BUILD_OP_RETH" = "true" ]; then \
|
||||
echo "Copying op-reth binary" && \
|
||||
cp /build/target/*/op-reth /usr/local/bin/op-reth && \
|
||||
ln -s /usr/local/bin/op-reth /usr/local/bin/reth; \
|
||||
else \
|
||||
echo "Copying standard reth binary" && \
|
||||
cp /build/target/*/reth /usr/local/bin/reth; \
|
||||
fi
|
||||
# Copy the optimized binary (only one will exist)
|
||||
# Use wildcards to avoid errors when copying non-existent files
|
||||
COPY --from=builder /usr/local/bin/reth* /usr/local/bin/
|
||||
COPY --from=builder /usr/local/bin/op-reth* /usr/local/bin/
|
||||
|
||||
# Create non-root user
|
||||
RUN useradd -m -u 1000 -s /bin/bash reth
|
||||
|
||||
Reference in New Issue
Block a user