Dockerfile
This commit is contained in:
commit
3a53f14cce
96
Dockerfile
Normal file
96
Dockerfile
Normal file
@ -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"]
|
Loading…
x
Reference in New Issue
Block a user