commit 3a53f14cce68db1e3fac8260984bcf7851d9672d Author: John Date: Mon May 26 13:15:03 2025 +1200 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..28ef83c --- /dev/null +++ b/Dockerfile @@ -0,0 +1,96 @@ +# syntax=docker/dockerfile:1 + +######################## +# Stage 1: build deps # +######################## +FROM alpine:3.19 AS builder + +# Enable static builds with musl +ENV CFLAGS="-static -O2" \ + CXXFLAGS="-static -O2" \ + LDFLAGS="-static" + +# Base build tools + musl-dev, etc. +RUN apk add --no-cache \ + build-base \ + cmake \ + ninja \ + git \ + wget \ + curl \ + openssl-dev \ + zlib-static \ + zlib-dev + +######################################## +# nlohmann/json (compiled static .a) # +######################################## +ARG JSON_VERSION=3.11.3 +RUN git clone --depth 1 --branch v${JSON_VERSION} https://github.com/nlohmann/json.git /tmp/json && \ + cmake -S /tmp/json -B /tmp/json/build \ + -DJSON_BuildTests=OFF \ + -DJSON_MultipleHeaders=OFF \ + -DBUILD_SHARED_LIBS=OFF && \ + cmake --build /tmp/json/build --config Release && \ + cmake --install /tmp/json/build + +############################# +# cpp‑httplib (header‑only) # +############################# +ARG HTTPLIB_VERSION=v0.15.4 +RUN wget -q https://raw.githubusercontent.com/yhirose/cpp-httplib/${HTTPLIB_VERSION}/httplib.h \ + -O /usr/local/include/httplib.h + +################################## +# libassert (build static .a) # +################################## +ARG LIBASSERT_VERSION=v2.1.5 +RUN git clone --depth 1 --branch ${LIBASSERT_VERSION} https://github.com/jeremy-rifkin/libassert.git /tmp/libassert && \ + cmake -S /tmp/libassert -B /tmp/libassert/build \ + -DLIBASSERT_BUILD_TESTS=OFF \ + -DLIBASSERT_BUILD_EXAMPLES=OFF \ + -DLIBASSERT_BUILD_STATIC=ON && \ + cmake --build /tmp/libassert/build --config Release && \ + cmake --install /tmp/libassert/build + +##################### +# zlib (static .a) # +##################### +ARG ZLIB_VERSION=1.3.1 +RUN wget -q https://zlib.net/zlib-${ZLIB_VERSION}.tar.gz && \ + tar xzf zlib-${ZLIB_VERSION}.tar.gz && \ + cd zlib-${ZLIB_VERSION} && \ + ./configure --static && \ + make -j$(nproc) && \ + make install && \ + cd .. && rm -rf zlib-${ZLIB_VERSION}* + +############################## +# Reduce size of .a archives # +############################## +RUN strip --strip-unneeded /usr/local/lib/*.a + +############################ +# Stage 2: final build kit # +############################ +FROM alpine:3.19 + +# Install core toolchain for building apps +RUN apk add --no-cache \ + build-base \ + cmake \ + ninja \ + git \ + openssl-dev \ + zlib-static + +# Copy pre‑built static libs + headers +COPY --from=builder /usr/local /usr/local + +ENV CFLAGS="-static -O2" \ + CXXFLAGS="-static -O2" \ + LDFLAGS="-static" + +WORKDIR /workspace + +ENTRYPOINT ["/bin/sh"]