getpkg/Dockerfile
2025-05-26 13:15:03 +12:00

97 lines
2.7 KiB
Docker
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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
#############################
# cpphttplib (headeronly) #
#############################
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 prebuilt static libs + headers
COPY --from=builder /usr/local /usr/local
ENV CFLAGS="-static -O2" \
CXXFLAGS="-static -O2" \
LDFLAGS="-static"
WORKDIR /workspace
ENTRYPOINT ["/bin/sh"]