# syntax=docker/dockerfile:1.4 FROM --platform=$BUILDPLATFORM alpine:3.19 AS deps # Install build dependencies RUN apk add --no-cache \ build-base \ cmake \ git \ linux-headers \ musl-dev \ zlib \ zlib-dev \ zlib-static \ bzip2-static \ xz-static \ zstd-static \ curl \ bash \ gcc \ g++ \ libstdc++ \ ccache \ ninja \ pkgconfig FROM deps AS build ARG TARGETARCH WORKDIR /source COPY . . # Create and run build script RUN printf '#!/bin/bash\n\ set -e\n\ echo "Setting up build directory..."\n\ mkdir -p /build/ccache\n\ mkdir -p /build/build_${TARGETARCH}\n\ \n\ echo "Checking static libraries..."\n\ ls -la /usr/lib/libz.a /usr/lib/libstdc++.a /usr/lib/libc.a || true\n\ \n\ echo "Setting up ccache..."\n\ export CCACHE_DIR=/build/ccache\n\ export CCACHE_MAXSIZE=2G\n\ export PATH="/usr/lib/ccache/bin:$PATH"\n\ \n\ echo "Running CMake configuration..."\n\ cd /build/build_${TARGETARCH}\n\ cmake /source -G Ninja -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_FIND_LIBRARY_SUFFIXES=".a" \ -DBUILD_SHARED_LIBS=OFF \ -DCMAKE_C_COMPILER_LAUNCHER=ccache \ -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ -DCMAKE_POLICY_DEFAULT_CMP0074=NEW \ -DZLIB_INCLUDE_DIR=/usr/include \ -DZLIB_USE_STATIC_LIBS=TRUE \ -DCMAKE_EXE_LINKER_FLAGS="-Wl,-Bstatic -lz -lstdc++ -static-libgcc" \ -DCMAKE_C_FLAGS="-fPIC" \ -DCMAKE_CXX_FLAGS="-fPIC" \ -DCMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX=".a" 2>&1 | tee cmake.log\n\ \n\ echo "Starting build..."\n\ ninja -v -j$(nproc) 2>&1 | tee build.log\n\ \n\ echo "Build complete. Checking for binary..."\n\ if [ ! -f dropshell ]; then\n\ echo "Build failed. Directory contents:"\n\ ls -la\n\ echo "CMake log:"\n\ cat cmake.log\n\ echo "Build log:"\n\ cat build.log\n\ exit 1\n\ fi\n\ \n\ echo "ccache stats:"\n\ ccache -s\n' > /source/docker_build.sh && chmod +x /source/docker_build.sh && /source/docker_build.sh # Final stage: copy out the binary FROM scratch AS export-stage ARG TARGETARCH COPY --from=build /build/build_${TARGETARCH}/dropshell /dropshell