WIP some more optimizations in the docker process. Preparing the dev container, using arguments.

This commit is contained in:
Bart Beumer 2025-12-02 22:25:10 +00:00
parent ca820ff108
commit 3f22f888d6
4 changed files with 60 additions and 26 deletions

View File

@ -1,8 +1,12 @@
{ {
"name": "C++", "name": "4beumer.nl C++",
"build": { "build": {
"dockerfile": "../devcontainer.Dockerfile" "dockerfile": "../devcontainer.Dockerfile",
"args": {
"BUILD_TYPE": "Debug"
}
}, },
"postCreateCommand": "${containerWorkspaceFolder}/.devcontainer/postcreate.py --build_type=Debug",
// Configure tool-specific properties. // Configure tool-specific properties.
"customizations": { "customizations": {
"vscode": { "vscode": {
@ -14,6 +18,7 @@
}, },
"extensions": [ "extensions": [
"ms-vscode.cpptools", "ms-vscode.cpptools",
"ms-python.python",
"twxs.cmake", "twxs.cmake",
"ms-vscode.cmake-tools", "ms-vscode.cmake-tools",
"konicy.conan-extension" "konicy.conan-extension"

10
.devcontainer/postcreate.py Executable file
View File

@ -0,0 +1,10 @@
#! /usr/bin/python
import argparse
import os
parser = argparse.ArgumentParser()
parser.add_argument('--build_type')
args = parser.parse_args()
print ('Executing post-create steps. Build type ', args.build_type)
os.system('conan install /workspaces/network-experiment -of /workspaces/build -s build_type=' + args.build_type)

View File

@ -1,5 +1,12 @@
FROM alpine:3.21.3 AS build FROM alpine:3.21.3
# Build type used by conan. "Debug" and "Release" are supported.
ARG BUILD_TYPE=Debug
RUN mkdir -p /root/.local/bin
ENV PATH="${PATH}:/root/.local/bin"
# Install packages needed in both building and running.
RUN apk update && \ RUN apk update && \
apk add --no-cache \ apk add --no-cache \
libstdc++ libstdc++
@ -20,23 +27,25 @@ RUN apk add --no-cache \
m4 \ m4 \
perl \ perl \
python3 \ python3 \
py3-pip && \ pipx && \
pip install --break-system-packages conan && \ pipx ensurepath
RUN pipx install conan && \
conan profile detect conan profile detect
# Pre-build some conan packages we require and take a lot of time to build. This to # Pre-build some conan packages we require and take a lot of time to build. This to
# avoid expensive rebuilding everytime we need a fresh dev container.. # avoid expensive rebuilding everytime we need a fresh dev container..
RUN mkdir -p /workspaces/tmp RUN mkdir -p /workspaces/tmp
WORKDIR /workspaces/tmp WORKDIR /workspaces/tmp
RUN conan install -s build_type=Debug -b=* --requires=boost/1.89.0 RUN conan install -s build_type=${BUILD_TYPE} -b=* --requires=boost/1.89.0
RUN conan install -s build_type=Debug -b=* --requires=libmagic/5.45 RUN conan install -s build_type=${BUILD_TYPE} -b=* --requires=libmagic/5.45
RUN conan install -s build_type=Debug -b=* --requires=freetype/2.14.1 RUN conan install -s build_type=${BUILD_TYPE} -b=* --requires=freetype/2.14.1
RUN conan install -s build_type=Debug -b=missing --requires=gtest/1.14.0 RUN conan install -s build_type=${BUILD_TYPE} -b=missing --requires=gtest/1.14.0
RUN conan install -s build_type=Debug -b=missing --requires=libjpeg/9f RUN conan install -s build_type=${BUILD_TYPE} -b=missing --requires=libjpeg/9f
# Remove the temporary workspace, build results for the conan packages remain cached.
WORKDIR /workspaces WORKDIR /workspaces
RUN rm -rf tmp && \ RUN rm -rf tmp
mkdir network-experiment && \
mkdir build && \ RUN apk add --no-cache \
mkdir install clang \
clang-extra-tools \
gdb \
git

View File

@ -1,5 +1,12 @@
FROM alpine:3.21.3 AS build FROM alpine:3.21.3 AS build
# Build type used by conan. "Debug" and "Release" are supported.
ARG BUILD_TYPE=Release
RUN mkdir -p /root/.local/bin
ENV PATH="${PATH}:/root/.local/bin"
# Install packages needed in both building and running.
RUN apk update && \ RUN apk update && \
apk add --no-cache \ apk add --no-cache \
libstdc++ libstdc++
@ -20,19 +27,22 @@ RUN apk add --no-cache \
m4 \ m4 \
perl \ perl \
python3 \ python3 \
py3-pip && \ pipx && \
pip install --break-system-packages conan && \ pipx ensurepath
RUN pipx install conan && \
conan profile detect conan profile detect
# Pre-build some conan packages we require and take a lot of time to build. This to # Pre-build some conan packages we require and take a lot of time to build. This to
# avoid expensive rebuilding everytime we need a fresh dev container.. # avoid expensive rebuilding everytime we need a fresh dev container..
RUN mkdir -p /workspaces/tmp RUN mkdir -p /workspaces/tmp
WORKDIR /workspaces/tmp WORKDIR /workspaces/tmp
RUN conan install -s build_type=Release -b=* --requires=boost/1.89.0 RUN conan install -s build_type=${BUILD_TYPE} -b=* --requires=boost/1.89.0
RUN conan install -s build_type=Release -b=* --requires=libmagic/5.45 RUN conan install -s build_type=${BUILD_TYPE} -b=* --requires=libmagic/5.45
RUN conan install -s build_type=Release -b=* --requires=freetype/2.14.1 RUN conan install -s build_type=${BUILD_TYPE} -b=* --requires=freetype/2.14.1
RUN conan install -s build_type=Release -b=missing --requires=gtest/1.14.0 RUN conan install -s build_type=${BUILD_TYPE} -b=missing --requires=gtest/1.14.0
RUN conan install -s build_type=Release -b=missing --requires=libjpeg/9f RUN conan install -s build_type=${BUILD_TYPE} -b=missing --requires=libjpeg/9f
WORKDIR /workspaces
RUN rm -rf tmp
# Remove the temporary workspace, build results for the conan packages remain cached. # Remove the temporary workspace, build results for the conan packages remain cached.
WORKDIR /workspaces WORKDIR /workspaces
@ -41,16 +51,16 @@ RUN rm -rf tmp && \
mkdir build && \ mkdir build && \
mkdir install mkdir install
# Build and install # Build and install
WORKDIR /workspaces/network-experiment WORKDIR /workspaces/network-experiment
ADD . . ADD . .
RUN conan install /workspaces/network-experiment -of /workspaces/build -s build_type=Release RUN conan install /workspaces/network-experiment -of /workspaces/build -s build_type=${BUILD_TYPE}
RUN cmake -DCMAKE_POLICY_DEFAULT_CMP0091=NEW -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -S . -B /workspaces/build --install-prefix=/workspaces/install RUN cmake -DCMAKE_POLICY_DEFAULT_CMP0091=NEW -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake -S . -B /workspaces/build --install-prefix=/workspaces/install
RUN cmake --build /workspaces/build --parallel RUN cmake --build /workspaces/build --parallel
RUN cmake --install /workspaces/build RUN cmake --install /workspaces/build
FROM alpine:3.21.3 FROM alpine:3.21.3
RUN apk update && \ RUN apk update && \