FROM --platform=$BUILDPLATFORM alpine:latest AS builder ARG PROJECT # Install ccache along with other dependencies RUN apk add --no-cache \ build-base \ cmake \ git \ musl-dev \ curl \ bash \ musl \ g++ \ ninja \ linux-headers \ mold \ zlib-static \ ccache \ libunwind-dev \ libdwarf-dev # Set working directory WORKDIR /build COPY CMakeLists.txt cmake_prebuild.sh ./ #COPY cmake ./cmake COPY src/version.hpp.in ./src/version.hpp.in # Configure and build with ccache RUN mkdir -p build_static && \ cmake -G Ninja -B build_static -DCMAKE_BUILD_TYPE=Debug \ -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ -DCMAKE_C_COMPILER_LAUNCHER=ccache \ -DCMAKE_EXE_LINKER_FLAGS="-fuse-ld=mold -static" \ -DCMAKE_FIND_LIBRARY_SUFFIXES=".a" \ -DZLIB_BUILD_SHARED=OFF \ -DZLIB_BUILD_STATIC=ON \ -DBUILD_SHARED_LIBS=OFF \ -DCPPTRACE_UNWIND_WITH_UNWIND=ON \ -DCPPTRACE_GET_SYMBOLS_WITH_LIBDWARF=ON \ -DPROJECT_NAME="${PROJECT}" \ ${CMAKE_TOOLCHAIN_FILE:+-DCMAKE_TOOLCHAIN_FILE=$CMAKE_TOOLCHAIN_FILE} # Explicitly build dependencies first (cached separately) RUN cmake --build build_static --target run_prebuild_script # Copy source files COPY src ./build_static/src RUN cmake --build build_static # Final stage that only contains the binary FROM scratch AS project ARG PROJECT COPY --from=builder /build/build_static/${PROJECT} /${PROJECT}