diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile
index 91a8993..91b8f0f 100644
--- a/.devcontainer/Dockerfile
+++ b/.devcontainer/Dockerfile
@@ -1,10 +1,10 @@
-# [Choice] focal (20.04), jammy (22.04), lunar (23.04)
-ARG VARIANT="lunar"
+# [Choice] focal (20.04), jammy (22.04), lunar (23.04), noble (24.04)
+ARG VARIANT="noble"
FROM ubuntu:${VARIANT}
# Restate the variant to use it later on in the llvm and cmake installations
ARG VARIANT
-ARG CMAKE_VERSION=3.28.3
+ARG CMAKE_VERSION=4.0.0
ENV PATH="${PATH}:/cmake-${CMAKE_VERSION}-linux-x86_64/bin/:"
# Install necessary packages available from standard repos
@@ -31,9 +31,9 @@ ENV CONAN_SYSREQUIRES_SUDO 0
ENV CONAN_SYSREQUIRES_MODE enabled
# User-settable versions:
-# This Dockerfile should support gcc-[10, 11, 12, 13] and clang-[10, 11, 12, 13, 14, 15, 16, 17]
+# This Dockerfile should support gcc-[10, 11, 12, 13, 14] and clang-[10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
# Earlier versions of clang will require significant modifications to the IWYU section
-ARG GCC_VER="12"
+ARG GCC_VER="14"
# Add gcc-${GCC_VER}
RUN add-apt-repository -y ppa:ubuntu-toolchain-r/test && \
apt-get update -qq && export DEBIAN_FRONTEND=noninteractive && \
@@ -44,7 +44,7 @@ RUN add-apt-repository -y ppa:ubuntu-toolchain-r/test && \
RUN update-alternatives --install /usr/bin/gcc gcc $(which gcc-${GCC_VER}) 100
RUN update-alternatives --install /usr/bin/g++ g++ $(which g++-${GCC_VER}) 100
-ARG LLVM_VER="15"
+ARG LLVM_VER="19"
# Add clang-${LLVM_VER}
ARG LLVM_URL="http://apt.llvm.org/${VARIANT}/"
ARG LLVM_PKG="llvm-toolchain-${VARIANT}-${LLVM_VER}"
@@ -92,8 +92,8 @@ RUN apt-get autoremove -y && apt-get clean && \
rm -rf /var/lib/apt/lists/*
## Install ARM GCC toolchain
-RUN wget -O archive.tar.xz "https://developer.arm.com/-/media/Files/downloads/gnu/12.2.rel1/binrel/arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi.tar.xz?rev=7bd049b7a3034e64885fa1a71c12f91d&hash=732D909FA8F68C0E1D0D17D08E057619" && \
- echo 84be93d0f9e96a15addd490b6e237f588c641c8afdf90e7610a628007fc96867 archive.tar.xz > /tmp/archive.sha256 && sha256sum -c /tmp/archive.sha256 && rm /tmp/archive.sha256 && \
+RUN wget -O archive.tar.xz "https://developer.arm.com/-/media/Files/downloads/gnu/14.2.rel1/binrel/arm-gnu-toolchain-14.2.rel1-x86_64-arm-none-eabi.tar.xz" && \
+ echo 62a63b981fe391a9cbad7ef51b17e49aeaa3e7b0d029b36ca1e9c3b2a9b78823 archive.tar.xz > /tmp/archive.sha256 && sha256sum -c /tmp/archive.sha256 && rm /tmp/archive.sha256 && \
tar xf archive.tar.xz -C /opt
# Allow the user to set compiler defaults
diff --git a/.github/workflows/build_cmake.yml b/.github/workflows/build_cmake.yml
index b58507a..f91b095 100644
--- a/.github/workflows/build_cmake.yml
+++ b/.github/workflows/build_cmake.yml
@@ -10,7 +10,7 @@ env:
jobs:
docker:
name: Test docker images
- runs-on: ubuntu-22.04
+ runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
@@ -32,12 +32,17 @@ jobs:
strategy:
fail-fast: false # 'false' means Don't stop matrix workflows even if some matrix entry fails.
matrix:
- os: [ubuntu-22.04]
+ os: [ubuntu-24.04]
buildtype: [debug]
compiler: [ {name: 'GCC 10', preset: gcc-10, pkgs: 'gcc-10 g++-10 lib32gcc-10-dev gcc-multilib'},
{name: 'GCC 11', preset: gcc-11, pkgs: 'gcc-11 g++-11 lib32gcc-11-dev gcc-multilib'},
{name: 'GCC 12', preset: gcc-12, pkgs: 'gcc-12 g++-12 lib32gcc-12-dev gcc-multilib'},
- {name: 'Clang 15', preset: clang-15, pkgs: 'clang-15 llvm-15'}
+ {name: 'GCC 13', preset: gcc-13, pkgs: 'gcc-13 g++-13 lib32gcc-13-dev gcc-multilib'},
+ {name: 'GCC 14', preset: gcc-14, pkgs: 'gcc-14 g++-14 lib32gcc-14-dev gcc-multilib'},
+ {name: 'Clang 16', preset: clang-16, pkgs: 'clang-16 llvm-16'},
+ {name: 'Clang 17', preset: clang-17, pkgs: 'clang-17 llvm-17'},
+ {name: 'Clang 18', preset: clang-18, pkgs: 'clang-18 llvm-18'},
+ {name: 'Clang 19', preset: clang-19, pkgs: 'clang-19 llvm-19'}
]
cxx: [17, 20]
@@ -92,7 +97,8 @@ jobs:
buildtype: [debug]
compiler: [ {name: 'Clang 12', preset: clang-12, pkgs: 'clang-12 llvm-12'},
{name: 'Clang 13', preset: clang-13, pkgs: 'clang-13 llvm-13'},
- {name: 'Clang 14', preset: clang-14, pkgs: 'clang-14 llvm-14'}
+ {name: 'Clang 14', preset: clang-14, pkgs: 'clang-14 llvm-14'},
+ {name: 'Clang 15', preset: clang-15, pkgs: 'clang-15 llvm-15'}
]
cxx: [17]
@@ -141,9 +147,10 @@ jobs:
strategy:
fail-fast: false # 'false' means Don't stop matrix workflows even if some matrix entry fails.
matrix:
- os: [ubuntu-22.04]
+ os: [ubuntu-24.04]
buildtype: [debug]
- compiler: [{name: 'Clang 15', preset: clang-15, pkgs: 'clang-15 llvm-15 llvm-15-dev libclang-15-dev', iwyu_branch: 'clang_15', path_prefix: "/usr/lib/llvm-15"}]
+ compiler: [{name: 'Clang 19', preset: clang-19, pkgs: 'clang-19 llvm-19 llvm-19-dev libclang-19-dev', iwyu_branch: 'clang_19', path_prefix: "/usr/lib/llvm-19"}]
+ cxx: [17, 20]
steps:
- uses: actions/checkout@v4
@@ -187,20 +194,21 @@ jobs:
- name: Configure via CMake
shell: bash
- run: cmake --preset unixlike-${{ matrix.compiler.preset }}-${{ matrix.buildtype }}-static-analysis -DCXX_STANDARD=17
+ run: cmake --preset unixlike-${{ matrix.compiler.preset }}-${{ matrix.buildtype }}-static-analysis -DCXX_STANDARD=${{ matrix.cxx }}
- name: Build
shell: bash
run: cmake --build --preset build-unixlike-${{ matrix.compiler.preset }}-${{ matrix.buildtype }}-static-analysis
linux-cross-compiling-armv7:
- name: ARM GCC, ${{ matrix.os }}, ${{ matrix.buildtype }}
+ name: ARM GCC, ${{ matrix.os }}, C++${{ matrix.cxx }}, ${{ matrix.buildtype }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false # 'false' means Don't stop matrix workflows even if some matrix entry fails.
matrix:
- os: [ubuntu-22.04]
+ os: [ubuntu-24.04]
buildtype: [debug, release]
+ cxx: [17, 20]
steps:
- uses: actions/checkout@v4
@@ -230,14 +238,14 @@ jobs:
- name: Install GCC ARM
run: |
- wget -O archive.tar.xz "https://developer.arm.com/-/media/Files/downloads/gnu/12.2.rel1/binrel/arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi.tar.xz?rev=7bd049b7a3034e64885fa1a71c12f91d&hash=732D909FA8F68C0E1D0D17D08E057619" && \
- echo 84be93d0f9e96a15addd490b6e237f588c641c8afdf90e7610a628007fc96867 archive.tar.xz > /tmp/archive.sha256 && sha256sum -c /tmp/archive.sha256 && rm /tmp/archive.sha256 && \
+ wget -O archive.tar.xz "https://developer.arm.com/-/media/Files/downloads/gnu/14.2.rel1/binrel/arm-gnu-toolchain-14.2.rel1-x86_64-arm-none-eabi.tar.xz" && \
+ echo 62a63b981fe391a9cbad7ef51b17e49aeaa3e7b0d029b36ca1e9c3b2a9b78823 archive.tar.xz > /tmp/archive.sha256 && sha256sum -c /tmp/archive.sha256 && rm /tmp/archive.sha256 && \
tar xf archive.tar.xz -C /opt
shell: bash
- name: Configure via CMake
shell: bash
- run: cmake --preset gcc-arm-${{ matrix.buildtype }}
+ run: cmake --preset gcc-arm-${{ matrix.buildtype }} -DCXX_STANDARD=${{ matrix.cxx }}
- name: Build
shell: bash
@@ -249,9 +257,9 @@ jobs:
strategy:
fail-fast: false # 'false' means Don't stop matrix workflows even if some matrix entry fails.
matrix:
- os: [ubuntu-22.04]
+ os: [ubuntu-24.04]
buildtype: [debug]
- compiler: [ {name: 'Clang 15', preset: clang-15, pkgs: 'clang-15 llvm-15'} ]
+ compiler: [ {name: 'Clang 19', preset: clang-19, pkgs: 'clang-19 llvm-19'} ]
steps:
- uses: actions/checkout@v4
@@ -294,9 +302,9 @@ jobs:
strategy:
fail-fast: false # 'false' means Don't stop matrix workflows even if some matrix entry fails.
matrix:
- os: [ubuntu-22.04]
+ os: [ubuntu-24.04]
buildtype: [debug]
- compiler: [ {name: 'Clang 15', preset: clang-15-qt, pkgs: 'clang-15 llvm-15 llvm-15-dev llvm-15-linker-tools llvm-15-tools llvm-15-runtime'} ]
+ compiler: [ {name: 'Clang 18', preset: clang-18-qt, pkgs: 'clang-18 llvm-18 llvm-18-dev llvm-18-linker-tools llvm-18-tools llvm-18-runtime'} ]
cxx: [20]
steps:
diff --git a/CMakePresets.json b/CMakePresets.json
index 19ea7d6..80e41fd 100644
--- a/CMakePresets.json
+++ b/CMakePresets.json
@@ -212,6 +212,50 @@
"CMAKE_BUILD_TYPE": "RelWithDebInfo"
}
},
+ {
+ "name": "unixlike-gcc-13-debug",
+ "displayName": "GCC 13 Debug",
+ "description": "Target Unix-like OS with the GCC 13 compiler, debug build type",
+ "inherits": "conf-unixlike-common",
+ "cacheVariables": {
+ "CMAKE_C_COMPILER": "gcc-13",
+ "CMAKE_CXX_COMPILER": "g++-13",
+ "CMAKE_BUILD_TYPE": "Debug"
+ }
+ },
+ {
+ "name": "unixlike-gcc-13-release",
+ "displayName": "GCC 13 Release",
+ "description": "Target Unix-like OS with the GCC 13 compiler, release build type",
+ "inherits": "conf-unixlike-common",
+ "cacheVariables": {
+ "CMAKE_C_COMPILER": "gcc-13",
+ "CMAKE_CXX_COMPILER": "g++-13",
+ "CMAKE_BUILD_TYPE": "RelWithDebInfo"
+ }
+ },
+ {
+ "name": "unixlike-gcc-14-debug",
+ "displayName": "GCC 14 Debug",
+ "description": "Target Unix-like OS with the GCC 14 compiler, debug build type",
+ "inherits": "conf-unixlike-common",
+ "cacheVariables": {
+ "CMAKE_C_COMPILER": "gcc-14",
+ "CMAKE_CXX_COMPILER": "g++-14",
+ "CMAKE_BUILD_TYPE": "Debug"
+ }
+ },
+ {
+ "name": "unixlike-gcc-14-release",
+ "displayName": "GCC 14 Release",
+ "description": "Target Unix-like OS with the GCC 14 compiler, release build type",
+ "inherits": "conf-unixlike-common",
+ "cacheVariables": {
+ "CMAKE_C_COMPILER": "gcc-14",
+ "CMAKE_CXX_COMPILER": "g++-14",
+ "CMAKE_BUILD_TYPE": "RelWithDebInfo"
+ }
+ },
{
"name": "unixlike-clang-12-debug",
"displayName": "Clang 12 Debug",
@@ -300,6 +344,116 @@
"CMAKE_BUILD_TYPE": "RelWithDebInfo"
}
},
+ {
+ "name": "unixlike-clang-16-debug",
+ "displayName": "Clang 16 Debug",
+ "description": "Target Unix-like OS with the Clang 16 compiler, debug build type",
+ "inherits": "conf-unixlike-common",
+ "cacheVariables": {
+ "CMAKE_C_COMPILER": "clang-16",
+ "CMAKE_CXX_COMPILER": "clang++-16",
+ "CMAKE_BUILD_TYPE": "Debug"
+ }
+ },
+ {
+ "name": "unixlike-clang-16-release",
+ "displayName": "Clang 16 Release",
+ "description": "Target Unix-like OS with the Clang 16 compiler, release build type",
+ "inherits": "conf-unixlike-common",
+ "cacheVariables": {
+ "CMAKE_C_COMPILER": "clang-16",
+ "CMAKE_CXX_COMPILER": "clang++-16",
+ "CMAKE_BUILD_TYPE": "RelWithDebInfo"
+ }
+ },
+ {
+ "name": "unixlike-clang-17-debug",
+ "displayName": "Clang 17 Debug",
+ "description": "Target Unix-like OS with the Clang 17 compiler, debug build type",
+ "inherits": "conf-unixlike-common",
+ "cacheVariables": {
+ "CMAKE_C_COMPILER": "clang-17",
+ "CMAKE_CXX_COMPILER": "clang++-17",
+ "CMAKE_BUILD_TYPE": "Debug"
+ }
+ },
+ {
+ "name": "unixlike-clang-17-release",
+ "displayName": "Clang 17 Release",
+ "description": "Target Unix-like OS with the Clang 17 compiler, release build type",
+ "inherits": "conf-unixlike-common",
+ "cacheVariables": {
+ "CMAKE_C_COMPILER": "clang-17",
+ "CMAKE_CXX_COMPILER": "clang++-17",
+ "CMAKE_BUILD_TYPE": "RelWithDebInfo"
+ }
+ },
+ {
+ "name": "unixlike-clang-18-debug",
+ "displayName": "Clang 18 Debug",
+ "description": "Target Unix-like OS with the Clang 18 compiler, debug build type",
+ "inherits": "conf-unixlike-common",
+ "cacheVariables": {
+ "CMAKE_C_COMPILER": "clang-18",
+ "CMAKE_CXX_COMPILER": "clang++-18",
+ "CMAKE_BUILD_TYPE": "Debug"
+ }
+ },
+ {
+ "name": "unixlike-clang-18-release",
+ "displayName": "Clang 18 Release",
+ "description": "Target Unix-like OS with the Clang 18 compiler, release build type",
+ "inherits": "conf-unixlike-common",
+ "cacheVariables": {
+ "CMAKE_C_COMPILER": "clang-18",
+ "CMAKE_CXX_COMPILER": "clang++-18",
+ "CMAKE_BUILD_TYPE": "RelWithDebInfo"
+ }
+ },
+ {
+ "name": "unixlike-clang-19-debug",
+ "displayName": "Clang 19 Debug",
+ "description": "Target Unix-like OS with the Clang 19 compiler, debug build type",
+ "inherits": "conf-unixlike-common",
+ "cacheVariables": {
+ "CMAKE_C_COMPILER": "clang-19",
+ "CMAKE_CXX_COMPILER": "clang++-19",
+ "CMAKE_BUILD_TYPE": "Debug"
+ }
+ },
+ {
+ "name": "unixlike-clang-19-release",
+ "displayName": "Clang 19 Release",
+ "description": "Target Unix-like OS with the Clang 19 compiler, release build type",
+ "inherits": "conf-unixlike-common",
+ "cacheVariables": {
+ "CMAKE_C_COMPILER": "clang-19",
+ "CMAKE_CXX_COMPILER": "clang++-19",
+ "CMAKE_BUILD_TYPE": "RelWithDebInfo"
+ }
+ },
+ {
+ "name": "unixlike-clang-20-debug",
+ "displayName": "Clang 20 Debug",
+ "description": "Target Unix-like OS with the Clang 20 compiler, debug build type",
+ "inherits": "conf-unixlike-common",
+ "cacheVariables": {
+ "CMAKE_C_COMPILER": "clang-20",
+ "CMAKE_CXX_COMPILER": "clang++-20",
+ "CMAKE_BUILD_TYPE": "Debug"
+ }
+ },
+ {
+ "name": "unixlike-clang-20-release",
+ "displayName": "Clang 20 Release",
+ "description": "Target Unix-like OS with the Clang 20 compiler, release build type",
+ "inherits": "conf-unixlike-common",
+ "cacheVariables": {
+ "CMAKE_C_COMPILER": "clang-20",
+ "CMAKE_CXX_COMPILER": "clang++-20",
+ "CMAKE_BUILD_TYPE": "RelWithDebInfo"
+ }
+ },
{
"name": "win32-gcc-x64-mingw-debug",
"displayName": "Windows GCC MinGW Debug",
@@ -340,6 +494,76 @@
"ENABLE_INCLUDE_WHAT_YOU_USE": "ON"
}
},
+ {
+ "name": "unixlike-clang-16-debug-static-analysis",
+ "displayName": "Clang 16 Debug - Static Analysis",
+ "description": "Target Unix-like OS with the Clang 16 compiler, debug build type",
+ "inherits": "unixlike-clang-16-debug",
+ "cacheVariables": {
+ "CMAKE_C_COMPILER": "clang-16",
+ "CMAKE_CXX_COMPILER": "clang++-16",
+ "CMAKE_BUILD_TYPE": "Debug",
+ "ENABLE_CPPCHECK": "ON",
+ "ENABLE_CLANG_TIDY": "ON",
+ "ENABLE_INCLUDE_WHAT_YOU_USE": "ON"
+ }
+ },
+ {
+ "name": "unixlike-clang-17-debug-static-analysis",
+ "displayName": "Clang 17 Debug - Static Analysis",
+ "description": "Target Unix-like OS with the Clang 17 compiler, debug build type",
+ "inherits": "unixlike-clang-17-debug",
+ "cacheVariables": {
+ "CMAKE_C_COMPILER": "clang-17",
+ "CMAKE_CXX_COMPILER": "clang++-17",
+ "CMAKE_BUILD_TYPE": "Debug",
+ "ENABLE_CPPCHECK": "ON",
+ "ENABLE_CLANG_TIDY": "ON",
+ "ENABLE_INCLUDE_WHAT_YOU_USE": "ON"
+ }
+ },
+ {
+ "name": "unixlike-clang-18-debug-static-analysis",
+ "displayName": "Clang 18 Debug - Static Analysis",
+ "description": "Target Unix-like OS with the Clang 18 compiler, debug build type",
+ "inherits": "unixlike-clang-18-debug",
+ "cacheVariables": {
+ "CMAKE_C_COMPILER": "clang-18",
+ "CMAKE_CXX_COMPILER": "clang++-18",
+ "CMAKE_BUILD_TYPE": "Debug",
+ "ENABLE_CPPCHECK": "ON",
+ "ENABLE_CLANG_TIDY": "ON",
+ "ENABLE_INCLUDE_WHAT_YOU_USE": "ON"
+ }
+ },
+ {
+ "name": "unixlike-clang-19-debug-static-analysis",
+ "displayName": "Clang 19 Debug - Static Analysis",
+ "description": "Target Unix-like OS with the Clang 19 compiler, debug build type",
+ "inherits": "unixlike-clang-19-debug",
+ "cacheVariables": {
+ "CMAKE_C_COMPILER": "clang-19",
+ "CMAKE_CXX_COMPILER": "clang++-19",
+ "CMAKE_BUILD_TYPE": "Debug",
+ "ENABLE_CPPCHECK": "ON",
+ "ENABLE_CLANG_TIDY": "ON",
+ "ENABLE_INCLUDE_WHAT_YOU_USE": "ON"
+ }
+ },
+ {
+ "name": "unixlike-clang-20-debug-static-analysis",
+ "displayName": "Clang 20 Debug - Static Analysis",
+ "description": "Target Unix-like OS with the Clang 20 compiler, debug build type",
+ "inherits": "unixlike-clang-20-debug",
+ "cacheVariables": {
+ "CMAKE_C_COMPILER": "clang-20",
+ "CMAKE_CXX_COMPILER": "clang++-20",
+ "CMAKE_BUILD_TYPE": "Debug",
+ "ENABLE_CPPCHECK": "ON",
+ "ENABLE_CLANG_TIDY": "ON",
+ "ENABLE_INCLUDE_WHAT_YOU_USE": "ON"
+ }
+ },
{
"name": "gcc-arm-debug",
"displayName": "GCC ARM Debug",
@@ -425,6 +649,24 @@
"NOT_ON_C3I": "1",
"CONFIGURE_QT": "1"
}
+ },
+ {
+ "name": "clang-18-qt",
+ "displayName": "Clang 18 QT",
+ "inherits": "conf-unixlike-common",
+ "cacheVariables": {
+ "CMAKE_C_COMPILER": "clang-18",
+ "CMAKE_CXX_COMPILER": "clang++-18",
+ "CPP_STARTER_USE_SML": "OFF",
+ "CPP_STARTER_USE_BOOST_BEAST": "OFF",
+ "CPP_STARTER_USE_CROW": "OFF",
+ "CPP_STARTER_USE_CPPZMQ_PROTO": "OFF",
+ "CPP_STARTER_USE_QT": "ON"
+ },
+ "environment": {
+ "NOT_ON_C3I": "1",
+ "CONFIGURE_QT": "1"
+ }
}
],
"buildPresets": [
@@ -478,6 +720,26 @@
"displayName": "Linux GCC 12 Release",
"configurePreset": "unixlike-gcc-12-release"
},
+ {
+ "name": "build-unixlike-gcc-13-debug",
+ "displayName": "Linux GCC 13 Debug",
+ "configurePreset": "unixlike-gcc-13-debug"
+ },
+ {
+ "name": "build-unixlike-gcc-13-release",
+ "displayName": "Linux GCC 13 Release",
+ "configurePreset": "unixlike-gcc-13-release"
+ },
+ {
+ "name": "build-unixlike-gcc-14-debug",
+ "displayName": "Linux GCC 14 Debug",
+ "configurePreset": "unixlike-gcc-14-debug"
+ },
+ {
+ "name": "build-unixlike-gcc-14-release",
+ "displayName": "Linux GCC 14 Release",
+ "configurePreset": "unixlike-gcc-14-release"
+ },
{
"name": "build-unixlike-clang-12-debug",
"displayName": "Linux Clang 12 Debug",
@@ -518,6 +780,56 @@
"displayName": "Linux Clang 15 Release",
"configurePreset": "unixlike-clang-15-release"
},
+ {
+ "name": "build-unixlike-clang-16-debug",
+ "displayName": "Linux Clang 16 Debug",
+ "configurePreset": "unixlike-clang-16-debug"
+ },
+ {
+ "name": "build-unixlike-clang-16-release",
+ "displayName": "Linux Clang 16 Release",
+ "configurePreset": "unixlike-clang-16-release"
+ },
+ {
+ "name": "build-unixlike-clang-17-debug",
+ "displayName": "Linux Clang 17 Debug",
+ "configurePreset": "unixlike-clang-17-debug"
+ },
+ {
+ "name": "build-unixlike-clang-17-release",
+ "displayName": "Linux Clang 17 Release",
+ "configurePreset": "unixlike-clang-17-release"
+ },
+ {
+ "name": "build-unixlike-clang-18-debug",
+ "displayName": "Linux Clang 18 Debug",
+ "configurePreset": "unixlike-clang-18-debug"
+ },
+ {
+ "name": "build-unixlike-clang-18-release",
+ "displayName": "Linux Clang 18 Release",
+ "configurePreset": "unixlike-clang-18-release"
+ },
+ {
+ "name": "build-unixlike-clang-19-debug",
+ "displayName": "Linux Clang 19 Debug",
+ "configurePreset": "unixlike-clang-19-debug"
+ },
+ {
+ "name": "build-unixlike-clang-19-release",
+ "displayName": "Linux Clang 19 Release",
+ "configurePreset": "unixlike-clang-19-release"
+ },
+ {
+ "name": "build-unixlike-clang-20-debug",
+ "displayName": "Linux Clang 20 Debug",
+ "configurePreset": "unixlike-clang-20-debug"
+ },
+ {
+ "name": "build-unixlike-clang-20-release",
+ "displayName": "Linux Clang 20 Release",
+ "configurePreset": "unixlike-clang-20-release"
+ },
{
"name": "build-win32-gcc-x64-mingw-debug",
"displayName": "Windows GCC MinGW Debug",
@@ -533,6 +845,31 @@
"displayName": "Linux Clang 15 Debug Static Analysis",
"configurePreset": "unixlike-clang-15-debug-static-analysis"
},
+ {
+ "name": "build-unixlike-clang-16-debug-static-analysis",
+ "displayName": "Linux Clang 16 Debug Static Analysis",
+ "configurePreset": "unixlike-clang-15-debug-static-analysis"
+ },
+ {
+ "name": "build-unixlike-clang-17-debug-static-analysis",
+ "displayName": "Linux Clang 17 Debug Static Analysis",
+ "configurePreset": "unixlike-clang-17-debug-static-analysis"
+ },
+ {
+ "name": "build-unixlike-clang-18-debug-static-analysis",
+ "displayName": "Linux Clang 18 Debug Static Analysis",
+ "configurePreset": "unixlike-clang-18-debug-static-analysis"
+ },
+ {
+ "name": "build-unixlike-clang-19-debug-static-analysis",
+ "displayName": "Linux Clang 19 Debug Static Analysis",
+ "configurePreset": "unixlike-clang-19-debug-static-analysis"
+ },
+ {
+ "name": "build-unixlike-clang-20-debug-static-analysis",
+ "displayName": "Linux Clang 20 Debug Static Analysis",
+ "configurePreset": "unixlike-clang-20-debug-static-analysis"
+ },
{
"name": "build-gcc-arm-debug",
"displayName": "Linux GCC ARM Debug",
@@ -567,6 +904,11 @@
"name": "build-clang-15-qt",
"displayName": "Linux Clang 15 QT",
"configurePreset": "clang-15-qt"
+ },
+ {
+ "name": "build-clang-18-qt",
+ "displayName": "Linux Clang 18 QT",
+ "configurePreset": "clang-18-qt"
}
],
"testPresets": [
@@ -654,6 +996,30 @@
"inherits": "test-common",
"configurePreset": "unixlike-gcc-12-release"
},
+ {
+ "name": "test-unixlike-gcc-13-debug",
+ "displayName": "Linux GCC 13 Debug",
+ "inherits": "test-common",
+ "configurePreset": "unixlike-gcc-13-debug"
+ },
+ {
+ "name": "test-unixlike-gcc-13-release",
+ "displayName": "Linux GCC 13 Release",
+ "inherits": "test-common",
+ "configurePreset": "unixlike-gcc-13-release"
+ },
+ {
+ "name": "test-unixlike-gcc-14-debug",
+ "displayName": "Linux GCC 14 Debug",
+ "inherits": "test-common",
+ "configurePreset": "unixlike-gcc-14-debug"
+ },
+ {
+ "name": "test-unixlike-gcc-14-release",
+ "displayName": "Linux GCC 14 Release",
+ "inherits": "test-common",
+ "configurePreset": "unixlike-gcc-14-release"
+ },
{
"name": "test-unixlike-clang-12-debug",
"displayName": "Linux Clang 10 Debug",
@@ -702,6 +1068,66 @@
"inherits": "test-common",
"configurePreset": "unixlike-clang-15-release"
},
+ {
+ "name": "test-unixlike-clang-16-debug",
+ "displayName": "Linux Clang 16 Debug",
+ "inherits": "test-common",
+ "configurePreset": "unixlike-clang-16-debug"
+ },
+ {
+ "name": "test-unixlike-clang-16-release",
+ "displayName": "Linux Clang 16 Release",
+ "inherits": "test-common",
+ "configurePreset": "unixlike-clang-16-release"
+ },
+ {
+ "name": "test-unixlike-clang-17-debug",
+ "displayName": "Linux Clang 17 Debug",
+ "inherits": "test-common",
+ "configurePreset": "unixlike-clang-17-debug"
+ },
+ {
+ "name": "test-unixlike-clang-17-release",
+ "displayName": "Linux Clang 17 Release",
+ "inherits": "test-common",
+ "configurePreset": "unixlike-clang-17-release"
+ },
+ {
+ "name": "test-unixlike-clang-18-debug",
+ "displayName": "Linux Clang 18 Debug",
+ "inherits": "test-common",
+ "configurePreset": "unixlike-clang-18-debug"
+ },
+ {
+ "name": "test-unixlike-clang-18-release",
+ "displayName": "Linux Clang 18 Release",
+ "inherits": "test-common",
+ "configurePreset": "unixlike-clang-18-release"
+ },
+ {
+ "name": "test-unixlike-clang-19-debug",
+ "displayName": "Linux Clang 19 Debug",
+ "inherits": "test-common",
+ "configurePreset": "unixlike-clang-19-debug"
+ },
+ {
+ "name": "test-unixlike-clang-19-release",
+ "displayName": "Linux Clang 19 Release",
+ "inherits": "test-common",
+ "configurePreset": "unixlike-clang-19-release"
+ },
+ {
+ "name": "test-unixlike-clang-20-debug",
+ "displayName": "Linux Clang 20 Debug",
+ "inherits": "test-common",
+ "configurePreset": "unixlike-clang-20-debug"
+ },
+ {
+ "name": "test-unixlike-clang-20-release",
+ "displayName": "Linux Clang 20 Release",
+ "inherits": "test-common",
+ "configurePreset": "unixlike-clang-20-release"
+ },
{
"name": "test-win32-gcc-x64-mingw-debug",
"displayName": "Windows MinGW GCC Debug",
@@ -745,6 +1171,12 @@
"displayName": "Linux Clang 15 QT",
"inherits": "test-common",
"configurePreset": "clang-15-qt"
+ },
+ {
+ "name": "test-clang-18-qt",
+ "displayName": "Linux Clang 18 QT",
+ "inherits": "test-common",
+ "configurePreset": "clang-18-qt"
}
]
}
diff --git a/README.md b/README.md
index 536e370..ef34315 100644
--- a/README.md
+++ b/README.md
@@ -31,7 +31,7 @@ See [cppreference.com](https://en.cppreference.com/w/cpp/compiler_support)
to see which features are supported by each compiler.
The following compilers should work:
- * [gcc 7+](https://gcc.gnu.org/)
+ * [gcc 10+](https://gcc.gnu.org/)
Install command
@@ -48,7 +48,7 @@ The following compilers should work:
brew install gcc
- * [clang 6+](https://clang.llvm.org/)
+ * [clang 12+](https://clang.llvm.org/)
Install command
@@ -238,6 +238,10 @@ The output looks like this:
"unixlike-gcc-11-release" - GCC 11 Release
"unixlike-gcc-12-debug" - GCC 12 Debug
"unixlike-gcc-12-release" - GCC 12 Release
+ "unixlike-gcc-13-debug" - GCC 13 Debug
+ "unixlike-gcc-13-release" - GCC 13 Release
+ "unixlike-gcc-14-debug" - GCC 14 Debug
+ "unixlike-gcc-14-release" - GCC 14 Release
"unixlike-clang-12-debug" - Clang 12 Debug
"unixlike-clang-12-release" - Clang 12 Release
"unixlike-clang-13-debug" - Clang 13 Debug
@@ -246,6 +250,14 @@ The output looks like this:
"unixlike-clang-14-release" - Clang 14 Release
"unixlike-clang-15-debug" - Clang 15 Debug
"unixlike-clang-15-release" - Clang 15 Release
+ "unixlike-clang-16-debug" - Clang 16 Debug
+ "unixlike-clang-16-release" - Clang 16 Release
+ "unixlike-clang-17-debug" - Clang 17 Debug
+ "unixlike-clang-17-release" - Clang 17 Release
+ "unixlike-clang-18-debug" - Clang 18 Debug
+ "unixlike-clang-18-release" - Clang 18 Release
+ "unixlike-clang-19-debug" - Clang 19 Debug
+ "unixlike-clang-19-release" - Clang 19 Release
Choose a configuration which is suitable and use following command for example.
@@ -271,6 +283,43 @@ For example:
cmake --preset test-unixlike-clang-15-debug
+## Possible option
+
+| Option | Comment | Default |
+| ------- | -------- | -------- |
+| ENABLE_PCH | Enable Precompiled Headers | OFF |
+| _**Static analyzers**_ |
+| ENABLE_CPPCHECK | Enable static analysis with cppcheck | OFF |
+| ENABLE_CLANG_TIDY | Enable static analysis with clang-tidy | OFF |
+| ENABLE_INCLUDE_WHAT_YOU_USE | Enable static analysis with include-what-you-use | OFF |
+| _**Tooling**_ |
+| ENABLE_CACHE | Enable cache if available | ON |
+| ENABLE_DOXYGEN | Enable doxygen doc builds of source | OFF |
+| _**Sanitizers**_ |
+| ENABLE_SANITIZER_UNDEFINED_BEHAVIOR | Enable undefined behavior sanitizer | OFF |
+| ENABLE_SANITIZER_THREAD | Enable thread sanitizer | OFF |
+| ENABLE_SANITIZER_MEMORY | Enable memory sanitizer | OFF |
+| ENABLE_SANITIZER_ADDRESS | Enable address sanitizer | OFF |
+| ENABLE_SANITIZER_LEAK | Enable leak sanitizer | OFF |
+| _**Others**_ |
+| ENABLE_COVERAGE | Enable coverage reporting for gcc/clang | OFF |
+| ENABLE_IPO | Enable Interprocedural Optimization, aka Link Time Optimization (LTO) | OFF |
+| WARNINGS_AS_ERRORS | Treat compiler warnings as errors | ON |
+| BUILD_SHARED_LIBS | Enable compilation of shared libraries | OFF |
+| ENABLE_TESTING | Enable Test Builds | ON |
+| ENABLE_FUZZING | Enable Fuzzing Builds | OFF |
+| _**Examples**_ |
+| CPP_STARTER_USE_SML | Enable compilation of SML sample | OFF |
+| CPP_STARTER_USE_BOOST_BEAST | Enable compilation of boost beast sample | OFF |
+| CPP_STARTER_USE_CROW | Enable compilation of crow sample | OFF |
+| CPP_STARTER_USE_CPPZMQ_PROTO | Enable compilation of protobuf and cppzmq sample | OFF |
+| CPP_STARTER_USE_EMBEDDED_TOOLCHAIN | Enable compilation of an example cortex m4 project | OFF |
+| CPP_STARTER_USE_QT | Enable compilation of an example QT project | | OFF |
+| _**Test frameworks**_ |
+| CPP_STARTER_USE_CATCH2 | Enable compilation of an example test project using catch2 | ON |
+| CPP_STARTER_USE_GTEST | Enable compilation of an example test project using googletest | ON |
+
+
## Troubleshooting
### Update Conan
diff --git a/cmake/Options.cmake b/cmake/Options.cmake
index ef44bbc..466553a 100644
--- a/cmake/Options.cmake
+++ b/cmake/Options.cmake
@@ -36,3 +36,7 @@ OPTION(CPP_STARTER_USE_CROW "Enable compilation of crow sample" OFF)
OPTION(CPP_STARTER_USE_CPPZMQ_PROTO "Enable compilation of protobuf and cppzmq sample" OFF)
OPTION(CPP_STARTER_USE_EMBEDDED_TOOLCHAIN "Enable compilation of an example cortex m4 project" OFF)
OPTION(CPP_STARTER_USE_QT "Enable compilation of an example QT project" OFF)
+
+# test frameworks
+OPTION(CPP_STARTER_USE_CATCH2 "Enable compilation of an example test project using catch2" ON)
+OPTION(CPP_STARTER_USE_GTEST "Enable compilation of an example test project using googletest" ON)
diff --git a/cmake/arm-cortex-gnu/ArmCortexGnuToolchain.cmake b/cmake/arm-cortex-gnu/ArmCortexGnuToolchain.cmake
index 6e35f05..a674b41 100644
--- a/cmake/arm-cortex-gnu/ArmCortexGnuToolchain.cmake
+++ b/cmake/arm-cortex-gnu/ArmCortexGnuToolchain.cmake
@@ -1,5 +1,5 @@
SET(TARGET_TRIPLET "arm-none-eabi")
-SET(ARM_COMPILER_VERSION 12.2.rel1)
+SET(ARM_COMPILER_VERSION 14.2.rel1)
SET(ARM_COMPILER_PATH /opt/arm-gnu-toolchain-${ARM_COMPILER_VERSION}-x86_64-${TARGET_TRIPLET}/bin)
# Without that flag CMake is not able to pass test compilation check
SET(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
diff --git a/conanfile.py b/conanfile.py
index 3839670..ea3dcea 100644
--- a/conanfile.py
+++ b/conanfile.py
@@ -1,6 +1,5 @@
import os
-import conans.model.requires
from conan import ConanFile
from conan.tools.cmake import CMakeToolchain
@@ -10,22 +9,29 @@ class HelloConan(ConanFile):
generators = 'CMakeDeps', 'CMakeToolchain'
default_options = {'fmt/*:header_only': True, 'spdlog/*:header_only': True, 'qt/*:with_fontconfig': False}
- def configure(self):
- cmake = CMakeToolchain(self)
- cmake.user_presets_path = None
+ def requirements(self):
if self.settings.get_safe('arch') == 'armv7':
- self.requires = conans.model.requires.Requirements(['fmt/11.0.2', 'sml/1.1.11'])
+ self.requires('fmt/11.1.3')
+ self.requires('sml/1.1.11')
return
+ self.requires('catch2/3.8.0')
+ self.requires('gtest/1.15.0')
+ self.requires('docopt.cpp/0.6.3')
+ self.requires('spdlog/1.15.0')
if os.getenv("CONFIGURE_QT") == '1':
- self.requires = conans.model.requires.Requirements(['catch2/3.7.0', 'docopt.cpp/0.6.3', 'gtest/1.15.0',
- 'qt/6.7.1', 'spdlog/1.14.1'])
+ self.requires('qt/6.7.3')
else:
- requirement = ['catch2/3.7.0', 'gtest/1.15.0', 'docopt.cpp/0.6.3',
- 'spdlog/1.14.1', 'sml/1.1.11', 'nlohmann_json/3.11.3',
- 'boost/1.83.0', 'crowcpp-crow/1.2.0', 'cppzmq/4.10.0',
- 'protobuf/5.27.0']
- self.requires = conans.model.requires.Requirements(requirement)
+ self.requires('sml/1.1.11')
+ self.requires('nlohmann_json/3.11.3')
+ self.requires('boost/1.87.0')
+ self.requires('crowcpp-crow/1.2.0')
+ self.requires('cppzmq/4.10.0')
+ self.requires('protobuf/5.29.3')
+
+ def configure(self):
+ cmake = CMakeToolchain(self)
+ cmake.user_presets_path = None
def build(self):
cmake = CMakeToolchain(self)
diff --git a/docker/Dockerfile b/docker/Dockerfile
index f51b5f5..ef7c623 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile
@@ -2,11 +2,11 @@
# Build and test environment for CI
# =================================
-FROM ubuntu:23.04 as cpp-docker-common
+FROM ubuntu:24.04 as cpp-docker-common
ARG DEBIAN_FRONTEND=noninteractive
-ARG CLANG_COMPILER_VERSION=15
-ARG CMAKE_VERSION=3.28.3
+ARG CLANG_COMPILER_VERSION=19
+ARG CMAKE_VERSION=4.0.0
ENV PATH="${PATH}:/cmake-${CMAKE_VERSION}-linux-x86_64/bin/:"
RUN apt-get update && apt-get -y dist-upgrade && apt-get -y install --fix-missing \
@@ -50,7 +50,6 @@ RUN mkdir iwyu && cd iwyu \
&& cd ../.. \
&& rm -rf iwyu
-
# =================================
# DEV environment for local machine
# =================================
@@ -70,10 +69,6 @@ RUN groupadd -f -g 1000 ${DEV_USER} && \
echo "${DEV_USER}:${DEV_USER}" | chpasswd && \
echo "${DEV_USER} ALL=(ALL:ALL) ALL" >> /etc/sudoers
-# fix "Missing privilege separation directory" error in SSHD
-# see: https://bugs.launchpad.net/ubuntu/+source/openssh/+bug/45234
-RUN chmod 0755 /var/run/sshd
-
COPY ccache.conf /etc/.
USER ${DEV_USER}
diff --git a/docker/docker-compose-ci.yml b/docker/docker-compose-ci.yml
index 89f0f79..e4b8d0c 100644
--- a/docker/docker-compose-ci.yml
+++ b/docker/docker-compose-ci.yml
@@ -1,5 +1,3 @@
-version: '3'
-
services:
ssh:
security_opt: # options needed for gdb debugging
diff --git a/docker/docker-compose-dev.yml b/docker/docker-compose-dev.yml
index 97ed820..8c4fbf3 100644
--- a/docker/docker-compose-dev.yml
+++ b/docker/docker-compose-dev.yml
@@ -1,5 +1,3 @@
-version: '3'
-
services:
ssh:
security_opt: # options needed for gdb debugging
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 8a24693..5844961 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -1,2 +1,7 @@
-ADD_SUBDIRECTORY(catch2)
-ADD_SUBDIRECTORY(gtest)
+IF(CPP_STARTER_USE_CATCH2)
+ ADD_SUBDIRECTORY(catch2)
+ENDIF()
+
+IF(CPP_STARTER_USE_GTEST)
+ ADD_SUBDIRECTORY(gtest)
+ENDIF()