getpkg/Dockerfile
2025-05-26 17:23:07 +12:00

136 lines
3.5 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"
# Install build dependencies
RUN echo "https://dl-cdn.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories && \
apk update && \
apk add --no-cache \
build-base \
cmake \
ninja \
git \
wget \
curl \
openssl-dev \
zlib-static \
zlib-dev \
linux-headers \
bash \
ccache \
mold \
musl-dev \
gcc \
g++ \
make \
python3 \
bison \
flex \
texinfo \
gperf \
help2man \
gettext-dev \
autoconf \
automake \
libtool \
patch \
gawk \
xz-dev \
crosstool-ng
########################################
# 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 echo "https://dl-cdn.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories && \
apk update && \
apk add --no-cache \
build-base \
cmake \
ninja \
git \
openssl-dev \
zlib-static \
bash \
wget \
curl \
linux-headers \
ccache \
mold \
crosstool-ng
# Configure mold as the default linker
ENV LD=mold
# Copy prebuilt static libs + headers and cross-compiler toolchain
COPY --from=builder /usr/local /usr/local
# Add toolchain to PATH
ENV PATH="/opt/cross/bin:${PATH}"
ENV CFLAGS="-static -O2" \
CXXFLAGS="-static -O2" \
LDFLAGS="-static"
WORKDIR /workspace
ENTRYPOINT ["/bin/bash"]