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()