getpkg/Dockerfile
2025-05-26 14:06:23 +12:00

112 lines
2.9 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 \
linux-headers \
bash \
ccache \
mold
# Configure mold as the default linker
ENV LD=mold
########################################
# 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) #
#############################
RUN wget -q https://raw.githubusercontent.com/yhirose/cpp-httplib/master/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 \
bash \
wget \
curl \
linux-headers \
ccache \
mold
# Configure mold as the default linker
ENV LD=mold
# 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/bash"]