From 47d5a0ca2a440cf7df5c3b3afde54e010c34636b Mon Sep 17 00:00:00 2001 From: Anton Semenov Date: Sat, 4 Apr 2026 16:47:46 +0300 Subject: [PATCH 01/29] trying to give build system a bit more freedom (removed libc++ requirement) --- .github/workflows/cmake-multi-platform.yml | 6 ++++-- CMakePresets.json | 5 +---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/.github/workflows/cmake-multi-platform.yml b/.github/workflows/cmake-multi-platform.yml index a8c2af3..a1a540a 100644 --- a/.github/workflows/cmake-multi-platform.yml +++ b/.github/workflows/cmake-multi-platform.yml @@ -4,7 +4,7 @@ name: CMake on multiple platforms on: push: - branches: [ "master" ] + branches: [ "master", "feature/*" ] pull_request: branches: [ "master" ] @@ -55,7 +55,9 @@ jobs: if: matrix.os == 'ubuntu-latest' run: | sudo apt-get update - sudo apt-get install -y libc++-dev libc++abi-dev libgl1-mesa-dev libxi-dev libxcursor-dev + sudo apt-get install -y clang-18 libstdc++-13-dev libgl1-mesa-dev libxi-dev libxcursor-dev + sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-18 100 + sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-18 100 - name: Configure CMake run: > diff --git a/CMakePresets.json b/CMakePresets.json index b4c30c5..e7a3cbd 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -41,10 +41,7 @@ "installDir": "${sourceDir}/out/build-clang/install/${presetName}", "cacheVariables": { "CMAKE_C_COMPILER": "clang", - "CMAKE_CXX_COMPILER": "clang++", - "CMAKE_CXX_FLAGS": "-stdlib=libc++", - "CMAKE_EXE_LINKER_FLAGS": "-stdlib=libc++ -lc++ -lc++abi", - "CMAKE_SHARED_LINKER_FLAGS": "-stdlib=libc++ -lc++ -lc++abi" + "CMAKE_CXX_COMPILER": "clang++" }, "environment": { "CXXFLAGS": "", From b1f414c88b2bdb86b2833e2f553aeecb8cf8ee58 Mon Sep 17 00:00:00 2001 From: Anton Semenov Date: Sat, 4 Apr 2026 17:16:46 +0300 Subject: [PATCH 02/29] Using setup-cpp action instead of manual commands --- .github/workflows/cmake-multi-platform.yml | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/.github/workflows/cmake-multi-platform.yml b/.github/workflows/cmake-multi-platform.yml index a1a540a..120512f 100644 --- a/.github/workflows/cmake-multi-platform.yml +++ b/.github/workflows/cmake-multi-platform.yml @@ -50,14 +50,20 @@ jobs: if: matrix.os == 'windows-latest' uses: ilammy/msvc-dev-cmd@v1.13.0 - - name: Install dependencies (Ubuntu) if: matrix.os == 'ubuntu-latest' run: | sudo apt-get update - sudo apt-get install -y clang-18 libstdc++-13-dev libgl1-mesa-dev libxi-dev libxcursor-dev - sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-18 100 - sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-18 100 + sudo apt-get install -y libgl1-mesa-dev libxi-dev libxcursor-dev + + - name: Setup Cpp (Ubuntu) + if: matrix.os == 'ubuntu-latest' + uses: aminya/setup-cpp@v1 + with: + compiler: llvm + cmake: true + ninja: true + vcpkg: true - name: Configure CMake run: > From f69e0ae976f953b3900f905b216d7e2037823cf6 Mon Sep 17 00:00:00 2001 From: Anton Semenov Date: Sat, 4 Apr 2026 17:24:01 +0300 Subject: [PATCH 03/29] Added cxx_std_23 feature to CMake --- 3rd_party/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/3rd_party/CMakeLists.txt b/3rd_party/CMakeLists.txt index 59fedea..412bb24 100644 --- a/3rd_party/CMakeLists.txt +++ b/3rd_party/CMakeLists.txt @@ -3,6 +3,7 @@ cmake_minimum_required (VERSION 3.30) find_package(IMGUI REQUIRED CONFIG) add_library(third_party_libs) +target_compile_features(third_party_libs PUBLIC cxx_std_23) target_include_directories(third_party_libs PUBLIC sokol) target_link_libraries(third_party_libs PUBLIC imgui::imgui) target_compile_definitions(third_party_libs PUBLIC SOKOL_GLCORE) @@ -31,6 +32,7 @@ endif() find_package(nlohmann_json CONFIG REQUIRED) add_library(nlohmann_json_adapter) +target_compile_features(nlohmann_json_adapter PUBLIC cxx_std_23) target_link_libraries(nlohmann_json_adapter PUBLIC nlohmann_json::nlohmann_json) target_sources(nlohmann_json_adapter PUBLIC FILE_SET CXX_MODULES From c9a832d20e311811253605149274899aad3a0827 Mon Sep 17 00:00:00 2001 From: Anton Semenov Date: Sat, 4 Apr 2026 17:35:51 +0300 Subject: [PATCH 04/29] workflow file: moving cmake and ninja install back to the apt-get --- .github/workflows/cmake-multi-platform.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/cmake-multi-platform.yml b/.github/workflows/cmake-multi-platform.yml index 120512f..a175b12 100644 --- a/.github/workflows/cmake-multi-platform.yml +++ b/.github/workflows/cmake-multi-platform.yml @@ -54,7 +54,7 @@ jobs: if: matrix.os == 'ubuntu-latest' run: | sudo apt-get update - sudo apt-get install -y libgl1-mesa-dev libxi-dev libxcursor-dev + sudo apt-get install -y cmake ninja-build libgl1-mesa-dev libxi-dev libxcursor-dev - name: Setup Cpp (Ubuntu) if: matrix.os == 'ubuntu-latest' @@ -62,8 +62,6 @@ jobs: with: compiler: llvm cmake: true - ninja: true - vcpkg: true - name: Configure CMake run: > From 8b6a8bd092941626e20a9279d7db359c47cea32e Mon Sep 17 00:00:00 2001 From: Anton Semenov Date: Sat, 4 Apr 2026 17:47:42 +0300 Subject: [PATCH 05/29] added -fmodules to clang --- CMakePresets.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CMakePresets.json b/CMakePresets.json index e7a3cbd..f3764c0 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -41,7 +41,10 @@ "installDir": "${sourceDir}/out/build-clang/install/${presetName}", "cacheVariables": { "CMAKE_C_COMPILER": "clang", - "CMAKE_CXX_COMPILER": "clang++" + "CMAKE_CXX_COMPILER": "clang++", + "CMAKE_CXX_FLAGS": "-fmodules", + "CMAKE_EXE_LINKER_FLAGS": "-fmodules", + "CMAKE_SHARED_LINKER_FLAGS": "-fmodules" }, "environment": { "CXXFLAGS": "", From 1dfad5e968d2b3e404395d2413a3bce5caa0720e Mon Sep 17 00:00:00 2001 From: Anton Semenov Date: Sat, 4 Apr 2026 18:02:52 +0300 Subject: [PATCH 06/29] add gcc to test --- .github/workflows/cmake-multi-platform.yml | 9 ++++--- CMakePresets.json | 31 ++++++++++++++++++++++ 2 files changed, 37 insertions(+), 3 deletions(-) diff --git a/.github/workflows/cmake-multi-platform.yml b/.github/workflows/cmake-multi-platform.yml index a175b12..bce61cb 100644 --- a/.github/workflows/cmake-multi-platform.yml +++ b/.github/workflows/cmake-multi-platform.yml @@ -18,7 +18,7 @@ jobs: matrix: os: [ubuntu-latest, windows-latest] - cmake_preset: [cl-x64-debug, cl-x64-release, clang-x64-release] + cmake_preset: [cl-x64-debug, cl-x64-release, clang-x64-release, gcc-x64-release] include: - os: windows-latest cmake_preset: cl-x64-debug @@ -26,9 +26,13 @@ jobs: cmake_preset: cl-x64-release - os: ubuntu-latest cmake_preset: clang-x64-release + - os: ubuntu-latest + cmake_preset: gcc-x64-release exclude: - os: windows-latest cmake_preset: clang-x64-release + - os: windows-latest + cmake_preset: gcc-x64-release - os: ubuntu-latest cmake_preset: cl-x64-debug - os: ubuntu-latest @@ -60,8 +64,7 @@ jobs: if: matrix.os == 'ubuntu-latest' uses: aminya/setup-cpp@v1 with: - compiler: llvm - cmake: true + compiler: llvm-21 gcc-15 - name: Configure CMake run: > diff --git a/CMakePresets.json b/CMakePresets.json index f3764c0..dfc50fe 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -51,6 +51,25 @@ "PATH": "/usr/bin:$penv{PATH}" } }, + { + "name": "base-gcc", + "inherits": "base", + "hidden": true, + "generator": "GCC", + "binaryDir": "${sourceDir}/out/build-clang/${presetName}", + "installDir": "${sourceDir}/out/build-clang/install/${presetName}", + "cacheVariables": { + "CMAKE_C_COMPILER": "gcc", + "CMAKE_CXX_COMPILER": "g++", + "CMAKE_CXX_FLAGS": "-fmodules", + "CMAKE_EXE_LINKER_FLAGS": "-fmodules", + "CMAKE_SHARED_LINKER_FLAGS": "-fmodules" + }, + "environment": { + "CXXFLAGS": "", + "PATH": "/usr/bin:$penv{PATH}" + } + }, { "name": "cl-x64-debug", "displayName": "MSVC x64 Debug", @@ -92,6 +111,18 @@ "cacheVariables": { "CMAKE_BUILD_TYPE": "Release" } + }, + { + "name": "gcc-x64-release", + "displayName": "GCC x64 Release", + "inherits": "base-gcc", + "architecture": { + "value": "x64", + "strategy": "external" + }, + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Release" + } } ] } From 153d454f3fcb6dd2aa9f8651861e7ca94726a290 Mon Sep 17 00:00:00 2001 From: Anton Semenov Date: Sat, 4 Apr 2026 18:10:15 +0300 Subject: [PATCH 07/29] fixed compiler setting at Setup-cpp call --- .github/workflows/cmake-multi-platform.yml | 2 +- CMakePresets.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/cmake-multi-platform.yml b/.github/workflows/cmake-multi-platform.yml index bce61cb..87f4286 100644 --- a/.github/workflows/cmake-multi-platform.yml +++ b/.github/workflows/cmake-multi-platform.yml @@ -64,7 +64,7 @@ jobs: if: matrix.os == 'ubuntu-latest' uses: aminya/setup-cpp@v1 with: - compiler: llvm-21 gcc-15 + compiler: ${{ case(contains(matrix.cmake_preset, 'clang'), 'llvm-21', 'gcc-15')}} - name: Configure CMake run: > diff --git a/CMakePresets.json b/CMakePresets.json index dfc50fe..c431d98 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -55,7 +55,7 @@ "name": "base-gcc", "inherits": "base", "hidden": true, - "generator": "GCC", + "generator": "Ninja", "binaryDir": "${sourceDir}/out/build-clang/${presetName}", "installDir": "${sourceDir}/out/build-clang/install/${presetName}", "cacheVariables": { From 632becb8162aeeb925e3837438219b3d3f845336 Mon Sep 17 00:00:00 2001 From: Anton Semenov Date: Sat, 4 Apr 2026 18:26:45 +0300 Subject: [PATCH 08/29] common parameters at CMakePresets moved to base preset --- CMakePresets.json | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/CMakePresets.json b/CMakePresets.json index c431d98..f66afb6 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -4,6 +4,9 @@ { "name": "base", "hidden": true, + "generator": "Ninja", + "binaryDir": "${sourceDir}/out/build/${presetName}", + "installDir": "${sourceDir}/out/install/${presetName}", "cacheVariables": { "CMAKE_TOOLCHAIN_FILE": { "type": "FILEPATH", @@ -16,9 +19,6 @@ "name": "base-cl", "inherits": "base", "hidden": true, - "generator": "Ninja", - "binaryDir": "${sourceDir}/out/build/${presetName}", - "installDir": "${sourceDir}/out/install/${presetName}", "cacheVariables": { "CMAKE_C_COMPILER": "cl.exe", "CMAKE_CXX_COMPILER": "cl.exe" @@ -36,9 +36,6 @@ "name": "base-clang", "inherits": "base", "hidden": true, - "generator": "Ninja", - "binaryDir": "${sourceDir}/out/build-clang/${presetName}", - "installDir": "${sourceDir}/out/build-clang/install/${presetName}", "cacheVariables": { "CMAKE_C_COMPILER": "clang", "CMAKE_CXX_COMPILER": "clang++", @@ -55,9 +52,6 @@ "name": "base-gcc", "inherits": "base", "hidden": true, - "generator": "Ninja", - "binaryDir": "${sourceDir}/out/build-clang/${presetName}", - "installDir": "${sourceDir}/out/build-clang/install/${presetName}", "cacheVariables": { "CMAKE_C_COMPILER": "gcc", "CMAKE_CXX_COMPILER": "g++", From a87b76f6d6dcdc751c00159df00e45f8d5c173b1 Mon Sep 17 00:00:00 2001 From: Anton Semenov Date: Sat, 4 Apr 2026 18:27:09 +0300 Subject: [PATCH 09/29] try to add -fmodules-ts to CMake --- CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 45d1006..b655dfa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,6 +7,9 @@ if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") set(CMAKE_CXX_EXTENSIONS OFF) else() set(CMAKE_CXX_EXTENSIONS ON) # probably need to support modules on clang + if (CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU") + add_compile_options(-fmodules-ts) + endif() endif() if(CMAKE_VERSION VERSION_GREATER_EQUAL "4.1.0") From 7b28d92eb2bdf0dedce755d7af4ed55091cdde68 Mon Sep 17 00:00:00 2001 From: Anton Semenov Date: Sat, 4 Apr 2026 18:37:39 +0300 Subject: [PATCH 10/29] removed target_compile_features(cxx_std_23) - seems unused --- 3rd_party/CMakeLists.txt | 2 -- 1 file changed, 2 deletions(-) diff --git a/3rd_party/CMakeLists.txt b/3rd_party/CMakeLists.txt index 412bb24..59fedea 100644 --- a/3rd_party/CMakeLists.txt +++ b/3rd_party/CMakeLists.txt @@ -3,7 +3,6 @@ cmake_minimum_required (VERSION 3.30) find_package(IMGUI REQUIRED CONFIG) add_library(third_party_libs) -target_compile_features(third_party_libs PUBLIC cxx_std_23) target_include_directories(third_party_libs PUBLIC sokol) target_link_libraries(third_party_libs PUBLIC imgui::imgui) target_compile_definitions(third_party_libs PUBLIC SOKOL_GLCORE) @@ -32,7 +31,6 @@ endif() find_package(nlohmann_json CONFIG REQUIRED) add_library(nlohmann_json_adapter) -target_compile_features(nlohmann_json_adapter PUBLIC cxx_std_23) target_link_libraries(nlohmann_json_adapter PUBLIC nlohmann_json::nlohmann_json) target_sources(nlohmann_json_adapter PUBLIC FILE_SET CXX_MODULES From d03f3b0ba392927a58350975e58f945a4e2b2482 Mon Sep 17 00:00:00 2001 From: Anton Semenov Date: Sun, 5 Apr 2026 11:49:13 +0300 Subject: [PATCH 11/29] a step backward: will clang work with libc++? --- .github/workflows/cmake-multi-platform.yml | 2 +- CMakeLists.txt | 3 --- CMakePresets.json | 6 +++--- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/.github/workflows/cmake-multi-platform.yml b/.github/workflows/cmake-multi-platform.yml index 87f4286..0923a1d 100644 --- a/.github/workflows/cmake-multi-platform.yml +++ b/.github/workflows/cmake-multi-platform.yml @@ -58,7 +58,7 @@ jobs: if: matrix.os == 'ubuntu-latest' run: | sudo apt-get update - sudo apt-get install -y cmake ninja-build libgl1-mesa-dev libxi-dev libxcursor-dev + sudo apt-get install -y libc++-dev libc++abi-dev libgl1-mesa-dev libxi-dev libxcursor-dev - name: Setup Cpp (Ubuntu) if: matrix.os == 'ubuntu-latest' diff --git a/CMakeLists.txt b/CMakeLists.txt index b655dfa..45d1006 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,9 +7,6 @@ if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") set(CMAKE_CXX_EXTENSIONS OFF) else() set(CMAKE_CXX_EXTENSIONS ON) # probably need to support modules on clang - if (CMAKE_CXX_COMPILER_ID MATCHES "Clang|GNU") - add_compile_options(-fmodules-ts) - endif() endif() if(CMAKE_VERSION VERSION_GREATER_EQUAL "4.1.0") diff --git a/CMakePresets.json b/CMakePresets.json index f66afb6..dcf9eec 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -39,9 +39,9 @@ "cacheVariables": { "CMAKE_C_COMPILER": "clang", "CMAKE_CXX_COMPILER": "clang++", - "CMAKE_CXX_FLAGS": "-fmodules", - "CMAKE_EXE_LINKER_FLAGS": "-fmodules", - "CMAKE_SHARED_LINKER_FLAGS": "-fmodules" + "CMAKE_CXX_FLAGS": "-stdlib=libc++", + "CMAKE_EXE_LINKER_FLAGS": "-stdlib=libc++ -lc++ -lc++abi", + "CMAKE_SHARED_LINKER_FLAGS": "-stdlib=libc++ -lc++ -lc++abi" }, "environment": { "CXXFLAGS": "", From cad3d57f8eaae7b17e1ad9e4d0780df6edeca1a2 Mon Sep 17 00:00:00 2001 From: Anton Semenov Date: Sun, 5 Apr 2026 12:50:36 +0300 Subject: [PATCH 12/29] CMake: added CMAKE_CXX_STANDARD_REQUIRED, disabled CMAKE_CXX_EXTENSIONS for GCC --- CMakeLists.txt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 45d1006..72b9bc0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,9 +1,10 @@ cmake_minimum_required (VERSION 3.30) set(CMAKE_CXX_STANDARD 23) +set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_SCAN_FOR_MODULES ON) -if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") +if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC|GNU") set(CMAKE_CXX_EXTENSIONS OFF) else() set(CMAKE_CXX_EXTENSIONS ON) # probably need to support modules on clang @@ -23,6 +24,8 @@ endif() set(CMAKE_CXX_MODULE_STD ON) +message("Cmake version is ${CMAKE_VERSION}") + # Enable Hot Reload for MSVC compilers if supported. if (POLICY CMP0141) cmake_policy(SET CMP0141 NEW) From 6dba7139b0b70b768756c4bd391602430e366805 Mon Sep 17 00:00:00 2001 From: Anton Semenov Date: Sun, 5 Apr 2026 12:54:41 +0300 Subject: [PATCH 13/29] added cmake 4.1 to setup-cpp config --- .github/workflows/cmake-multi-platform.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/cmake-multi-platform.yml b/.github/workflows/cmake-multi-platform.yml index 0923a1d..abaf688 100644 --- a/.github/workflows/cmake-multi-platform.yml +++ b/.github/workflows/cmake-multi-platform.yml @@ -65,6 +65,7 @@ jobs: uses: aminya/setup-cpp@v1 with: compiler: ${{ case(contains(matrix.cmake_preset, 'clang'), 'llvm-21', 'gcc-15')}} + cmake: 4.3.0 - name: Configure CMake run: > From 9921fb31136a3b3c0d1985e5e8cd453e3a37f1c9 Mon Sep 17 00:00:00 2001 From: Anton Semenov Date: Sun, 5 Apr 2026 13:05:00 +0300 Subject: [PATCH 14/29] CMake: provided CMAKE_EXPERIMENTAL_CXX_IMPORT_STD gate for 4.3.0 --- CMakeLists.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 72b9bc0..0d23e88 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,7 +10,9 @@ else() set(CMAKE_CXX_EXTENSIONS ON) # probably need to support modules on clang endif() -if(CMAKE_VERSION VERSION_GREATER_EQUAL "4.1.0") +if(CMAKE_VERSION VERSION_GREATER_EQUAL "4.3.0") + set(CMAKE_EXPERIMENTAL_CXX_IMPORT_STD "451f2fe2-a8a2-47c3-bc32-94786d8fc91b") +elseif(CMAKE_VERSION VERSION_GREATER_EQUAL "4.1.0") set(CMAKE_EXPERIMENTAL_CXX_IMPORT_STD "d0edc3af-4c50-42ea-a356-e2862fe7a444") elseif(CMAKE_VERSION VERSION_GREATER_EQUAL "4.0.0") set(CMAKE_EXPERIMENTAL_CXX_IMPORT_STD "a9e1cf81-9932-4810-974b-6eccaf14e457") From ab122dd9d76bda2a47db539ad529d65d9fed4c9e Mon Sep 17 00:00:00 2001 From: Anton Semenov Date: Sun, 5 Apr 2026 13:10:22 +0300 Subject: [PATCH 15/29] added -fmodules-ts to gcc preset --- CMakePresets.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakePresets.json b/CMakePresets.json index dcf9eec..465c2c2 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -55,9 +55,9 @@ "cacheVariables": { "CMAKE_C_COMPILER": "gcc", "CMAKE_CXX_COMPILER": "g++", - "CMAKE_CXX_FLAGS": "-fmodules", - "CMAKE_EXE_LINKER_FLAGS": "-fmodules", - "CMAKE_SHARED_LINKER_FLAGS": "-fmodules" + "CMAKE_CXX_FLAGS": "-fmodules -fmodules-ts", + "CMAKE_EXE_LINKER_FLAGS": "-fmodules -fmodules-ts", + "CMAKE_SHARED_LINKER_FLAGS": "-fmodules -fmodules-ts" }, "environment": { "CXXFLAGS": "", From f8b0e367f01a6bc79453a33e047521767410a5e4 Mon Sep 17 00:00:00 2001 From: Anton Semenov Date: Sun, 5 Apr 2026 14:38:27 +0300 Subject: [PATCH 16/29] trying out CMake 4.2.0 --- .github/workflows/cmake-multi-platform.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cmake-multi-platform.yml b/.github/workflows/cmake-multi-platform.yml index abaf688..18aaf79 100644 --- a/.github/workflows/cmake-multi-platform.yml +++ b/.github/workflows/cmake-multi-platform.yml @@ -65,7 +65,7 @@ jobs: uses: aminya/setup-cpp@v1 with: compiler: ${{ case(contains(matrix.cmake_preset, 'clang'), 'llvm-21', 'gcc-15')}} - cmake: 4.3.0 + cmake: 4.2.0 - name: Configure CMake run: > From ac1f6b0789859963cdfa0314ec2fea42efc53403 Mon Sep 17 00:00:00 2001 From: Anton Semenov Date: Sun, 5 Apr 2026 14:43:30 +0300 Subject: [PATCH 17/29] and last ninja --- .github/workflows/cmake-multi-platform.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/cmake-multi-platform.yml b/.github/workflows/cmake-multi-platform.yml index 18aaf79..66fcce1 100644 --- a/.github/workflows/cmake-multi-platform.yml +++ b/.github/workflows/cmake-multi-platform.yml @@ -66,6 +66,7 @@ jobs: with: compiler: ${{ case(contains(matrix.cmake_preset, 'clang'), 'llvm-21', 'gcc-15')}} cmake: 4.2.0 + ninja: 1.13.2 - name: Configure CMake run: > From e0d00fbbb253827a5fc424850fa80b0830990759 Mon Sep 17 00:00:00 2001 From: Anton Semenov Date: Sun, 5 Apr 2026 15:08:26 +0300 Subject: [PATCH 18/29] CMake: move CMAKE_CXX_MODULE_STD after project declaration --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0d23e88..fd2ec26 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,8 +24,6 @@ else() message("CMake version is too old to support C++ modules. Please update CMake to at least 3.30.0.") endif() -set(CMAKE_CXX_MODULE_STD ON) - message("Cmake version is ${CMAKE_VERSION}") # Enable Hot Reload for MSVC compilers if supported. @@ -39,5 +37,7 @@ project(GromadaEditor LANGUAGES CXX ) +set(CMAKE_CXX_MODULE_STD ON) + add_subdirectory(3rd_party/) add_subdirectory(src/) \ No newline at end of file From afb8c1946016bf88da5389ddff0e095b9d57251d Mon Sep 17 00:00:00 2001 From: Anton Semenov Date: Sun, 5 Apr 2026 15:29:38 +0300 Subject: [PATCH 19/29] added debug checks in workflow --- .github/workflows/cmake-multi-platform.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/cmake-multi-platform.yml b/.github/workflows/cmake-multi-platform.yml index 66fcce1..96adcfb 100644 --- a/.github/workflows/cmake-multi-platform.yml +++ b/.github/workflows/cmake-multi-platform.yml @@ -68,6 +68,12 @@ jobs: cmake: 4.2.0 ninja: 1.13.2 + - name: Debug checks (Ubuntu) + if: matrix.os == 'ubuntu-latest' + run: | + g++ --version + g++ -v -x c++ -E - < /dev/null + - name: Configure CMake run: > cmake --preset ${{ matrix.cmake_preset }} From 79abcf445793512dbc3795eaf701ae15bf0219fc Mon Sep 17 00:00:00 2001 From: Anton Semenov Date: Mon, 13 Apr 2026 16:40:45 +0300 Subject: [PATCH 20/29] build: using setupcpp --- .github/workflows/cmake-multi-platform.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/cmake-multi-platform.yml b/.github/workflows/cmake-multi-platform.yml index 3490b92..a7352c2 100644 --- a/.github/workflows/cmake-multi-platform.yml +++ b/.github/workflows/cmake-multi-platform.yml @@ -54,7 +54,7 @@ jobs: if: matrix.os == 'ubuntu-latest' uses: aminya/setup-cpp@v1 with: - llvm: 19 + compiler: llvm-19 cmake: true ninja: true @@ -63,6 +63,8 @@ jobs: run: | sudo apt-get update sudo apt-get install -y libgl1-mesa-dev libxi-dev libxcursor-dev + sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-19 100 + sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-19 100 - name: Configure CMake run: > From e00f41224c0feea360ad073dd21ede44babc9570 Mon Sep 17 00:00:00 2001 From: Anton Semenov Date: Mon, 13 Apr 2026 16:55:35 +0300 Subject: [PATCH 21/29] partial applying of a changes from a feature/build_update branch --- CMakeLists.txt | 7 +++++-- CMakePresets.json | 19 ++++++++----------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 45d1006..bb19e27 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,15 +1,18 @@ cmake_minimum_required (VERSION 3.30) set(CMAKE_CXX_STANDARD 23) +set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_SCAN_FOR_MODULES ON) -if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") +if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC|GNU") set(CMAKE_CXX_EXTENSIONS OFF) else() set(CMAKE_CXX_EXTENSIONS ON) # probably need to support modules on clang endif() -if(CMAKE_VERSION VERSION_GREATER_EQUAL "4.1.0") +if(CMAKE_VERSION VERSION_GREATER_EQUAL "4.3.0") + set(CMAKE_EXPERIMENTAL_CXX_IMPORT_STD "451f2fe2-a8a2-47c3-bc32-94786d8fc91b") +elseif(CMAKE_VERSION VERSION_GREATER_EQUAL "4.1.0") set(CMAKE_EXPERIMENTAL_CXX_IMPORT_STD "d0edc3af-4c50-42ea-a356-e2862fe7a444") elseif(CMAKE_VERSION VERSION_GREATER_EQUAL "4.0.0") set(CMAKE_EXPERIMENTAL_CXX_IMPORT_STD "a9e1cf81-9932-4810-974b-6eccaf14e457") diff --git a/CMakePresets.json b/CMakePresets.json index 07ea925..211378a 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -2,19 +2,19 @@ "version": 3, "configurePresets": [ { - "name": "base", - "hidden": true, - "cacheVariables": { - "CMAKE_POLICY_VERSION_MINIMUM": "3.5" - } + "name": "base", + "hidden": true, + "generator": "Ninja", + "binaryDir": "${sourceDir}/out/build/${presetName}", + "installDir": "${sourceDir}/out/install/${presetName}", + "cacheVariables": { + "CMAKE_POLICY_VERSION_MINIMUM": "3.5" + } }, { "name": "base-cl", "inherits": "base", "hidden": true, - "generator": "Ninja", - "binaryDir": "${sourceDir}/out/build/${presetName}", - "installDir": "${sourceDir}/out/install/${presetName}", "cacheVariables": { "CMAKE_C_COMPILER": "cl.exe", "CMAKE_CXX_COMPILER": "cl.exe" @@ -32,9 +32,6 @@ "name": "base-clang", "inherits": "base", "hidden": true, - "generator": "Ninja", - "binaryDir": "${sourceDir}/out/build-clang/${presetName}", - "installDir": "${sourceDir}/out/build-clang/install/${presetName}", "cacheVariables": { "CMAKE_C_COMPILER": "clang", "CMAKE_CXX_COMPILER": "clang++", From 64caf368d1628803eb4ae308ba15c92f797f58d3 Mon Sep 17 00:00:00 2001 From: Anton Semenov Date: Mon, 13 Apr 2026 17:03:36 +0300 Subject: [PATCH 22/29] llvm version pushed to 20 --- .github/workflows/cmake-multi-platform.yml | 4 +--- CMakePresets.json | 8 +++++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/cmake-multi-platform.yml b/.github/workflows/cmake-multi-platform.yml index a7352c2..71d5439 100644 --- a/.github/workflows/cmake-multi-platform.yml +++ b/.github/workflows/cmake-multi-platform.yml @@ -54,7 +54,7 @@ jobs: if: matrix.os == 'ubuntu-latest' uses: aminya/setup-cpp@v1 with: - compiler: llvm-19 + compiler: llvm-20 cmake: true ninja: true @@ -63,8 +63,6 @@ jobs: run: | sudo apt-get update sudo apt-get install -y libgl1-mesa-dev libxi-dev libxcursor-dev - sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-19 100 - sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-19 100 - name: Configure CMake run: > diff --git a/CMakePresets.json b/CMakePresets.json index 211378a..6ff04a1 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -82,9 +82,11 @@ "value": "x64", "strategy": "external" }, - "cacheVariables": { - "CMAKE_BUILD_TYPE": "Release" - } + "cacheVariables": { + "CMAKE_C_COMPILER": "clang-20", + "CMAKE_CXX_COMPILER": "clang++-20", + "CMAKE_BUILD_TYPE": "Release" + } } ] } From ba1af3c9b9c20b312b49560f243870911ba97667 Mon Sep 17 00:00:00 2001 From: Anton Semenov Date: Mon, 13 Apr 2026 17:25:40 +0300 Subject: [PATCH 23/29] made CI output dir same as at Cmake preset --- .github/workflows/cmake-multi-platform.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cmake-multi-platform.yml b/.github/workflows/cmake-multi-platform.yml index 71d5439..4f19c20 100644 --- a/.github/workflows/cmake-multi-platform.yml +++ b/.github/workflows/cmake-multi-platform.yml @@ -44,7 +44,7 @@ jobs: id: strings shell: bash run: | - echo "build-output-dir=${{ github.workspace }}/build" >> "$GITHUB_OUTPUT" + echo "build-output-dir=${{ github.workspace }}/out/build/${{ matrix.cmake_preset }}" >> "$GITHUB_OUTPUT" - name: Enable Developer Command Prompt (Windows) if: matrix.os == 'windows-latest' From 8c2a1cf4bb498a45ca825d4c221feebe981ce769 Mon Sep 17 00:00:00 2001 From: Anton Semenov Date: Mon, 13 Apr 2026 17:39:41 +0300 Subject: [PATCH 24/29] gcc and clang versions was synchronized with presets --- .github/workflows/cmake-multi-platform.yml | 2 +- CMakePresets.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/cmake-multi-platform.yml b/.github/workflows/cmake-multi-platform.yml index 92ecdbf..441755b 100644 --- a/.github/workflows/cmake-multi-platform.yml +++ b/.github/workflows/cmake-multi-platform.yml @@ -58,7 +58,7 @@ jobs: if: matrix.os == 'ubuntu-latest' uses: aminya/setup-cpp@v1 with: - compiler: ${{ case(contains(matrix.cmake_preset, 'clang'), 'llvm-21', 'gcc-15')}} + compiler: ${{ case(contains(matrix.cmake_preset, 'clang'), 'llvm-21', 'gcc-16')}} cmake: 4.2.0 ninja: 1.13.2 diff --git a/CMakePresets.json b/CMakePresets.json index 1ffb2d0..45bf307 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -99,8 +99,8 @@ "strategy": "external" }, "cacheVariables": { - "CMAKE_C_COMPILER": "clang-20", - "CMAKE_CXX_COMPILER": "clang++-20", + "CMAKE_C_COMPILER": "clang-21", + "CMAKE_CXX_COMPILER": "clang++-21", "CMAKE_BUILD_TYPE": "Release" } }, From 1dd96da7151313c2279214ddb4e1880adf0e3db7 Mon Sep 17 00:00:00 2001 From: Anton Semenov Date: Mon, 13 Apr 2026 21:13:32 +0300 Subject: [PATCH 25/29] fixed clang build --- .github/workflows/cmake-multi-platform.yml | 2 +- CMakeLists.txt | 3 +-- CMakePresets.json | 4 ++-- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/.github/workflows/cmake-multi-platform.yml b/.github/workflows/cmake-multi-platform.yml index 441755b..2830cf1 100644 --- a/.github/workflows/cmake-multi-platform.yml +++ b/.github/workflows/cmake-multi-platform.yml @@ -58,7 +58,7 @@ jobs: if: matrix.os == 'ubuntu-latest' uses: aminya/setup-cpp@v1 with: - compiler: ${{ case(contains(matrix.cmake_preset, 'clang'), 'llvm-21', 'gcc-16')}} + compiler: ${{ case(contains(matrix.cmake_preset, 'clang'), 'llvm-20', 'gcc-16')}} cmake: 4.2.0 ninja: 1.13.2 diff --git a/CMakeLists.txt b/CMakeLists.txt index fd2ec26..d028242 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,6 +3,7 @@ cmake_minimum_required (VERSION 3.30) set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_SCAN_FOR_MODULES ON) +set(CMAKE_CXX_MODULE_STD ON) if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC|GNU") set(CMAKE_CXX_EXTENSIONS OFF) @@ -37,7 +38,5 @@ project(GromadaEditor LANGUAGES CXX ) -set(CMAKE_CXX_MODULE_STD ON) - add_subdirectory(3rd_party/) add_subdirectory(src/) \ No newline at end of file diff --git a/CMakePresets.json b/CMakePresets.json index 45bf307..1ffb2d0 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -99,8 +99,8 @@ "strategy": "external" }, "cacheVariables": { - "CMAKE_C_COMPILER": "clang-21", - "CMAKE_CXX_COMPILER": "clang++-21", + "CMAKE_C_COMPILER": "clang-20", + "CMAKE_CXX_COMPILER": "clang++-20", "CMAKE_BUILD_TYPE": "Release" } }, From 1ef7f1eccbc5c8faee64bb45e5e0733c4b3ecf76 Mon Sep 17 00:00:00 2001 From: Anton Semenov Date: Wed, 15 Jul 2026 22:02:57 +0300 Subject: [PATCH 26/29] another try --- .github/workflows/cmake-multi-platform.yml | 4 ++-- CMakePresets.json | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/cmake-multi-platform.yml b/.github/workflows/cmake-multi-platform.yml index 2830cf1..3845027 100644 --- a/.github/workflows/cmake-multi-platform.yml +++ b/.github/workflows/cmake-multi-platform.yml @@ -4,7 +4,7 @@ name: CMake on multiple platforms on: push: - branches: [ "master", "feature/*" ] + branches: [ "master" ] # "feature/*" pull_request: branches: [ "master" ] @@ -58,7 +58,7 @@ jobs: if: matrix.os == 'ubuntu-latest' uses: aminya/setup-cpp@v1 with: - compiler: ${{ case(contains(matrix.cmake_preset, 'clang'), 'llvm-20', 'gcc-16')}} + compiler: ${{ case(contains(matrix.cmake_preset, 'clang'), 'llvm-20.0.0', 'gcc-16.0.0')}} cmake: 4.2.0 ninja: 1.13.2 diff --git a/CMakePresets.json b/CMakePresets.json index 1ffb2d0..26c6c84 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -51,9 +51,9 @@ "cacheVariables": { "CMAKE_C_COMPILER": "gcc", "CMAKE_CXX_COMPILER": "g++", - "CMAKE_CXX_FLAGS": "-fmodules -fmodules-ts", - "CMAKE_EXE_LINKER_FLAGS": "-fmodules -fmodules-ts", - "CMAKE_SHARED_LINKER_FLAGS": "-fmodules -fmodules-ts" + "CMAKE_CXX_FLAGS": "-fmodules", + "CMAKE_EXE_LINKER_FLAGS": "-fmodules", + "CMAKE_SHARED_LINKER_FLAGS": "-fmodules" }, "environment": { "CXXFLAGS": "", From c4c15a7ba11f3b7aa3e05af3cf91990677d2e33a Mon Sep 17 00:00:00 2001 From: Anton Semenov Date: Wed, 15 Jul 2026 22:35:28 +0300 Subject: [PATCH 27/29] returned "gcc-16", --compile-std-module --- .github/workflows/cmake-multi-platform.yml | 2 +- CMakePresets.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/cmake-multi-platform.yml b/.github/workflows/cmake-multi-platform.yml index 3845027..6e3917d 100644 --- a/.github/workflows/cmake-multi-platform.yml +++ b/.github/workflows/cmake-multi-platform.yml @@ -58,7 +58,7 @@ jobs: if: matrix.os == 'ubuntu-latest' uses: aminya/setup-cpp@v1 with: - compiler: ${{ case(contains(matrix.cmake_preset, 'clang'), 'llvm-20.0.0', 'gcc-16.0.0')}} + compiler: ${{ case(contains(matrix.cmake_preset, 'clang'), 'llvm-20.0.0', 'gcc-16')}} cmake: 4.2.0 ninja: 1.13.2 diff --git a/CMakePresets.json b/CMakePresets.json index 26c6c84..26c26d6 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -51,7 +51,7 @@ "cacheVariables": { "CMAKE_C_COMPILER": "gcc", "CMAKE_CXX_COMPILER": "g++", - "CMAKE_CXX_FLAGS": "-fmodules", + "CMAKE_CXX_FLAGS": "-fmodules --compile-std-module", "CMAKE_EXE_LINKER_FLAGS": "-fmodules", "CMAKE_SHARED_LINKER_FLAGS": "-fmodules" }, From 404d1f4201b5d050465d7c5326d3aca1534e95e3 Mon Sep 17 00:00:00 2001 From: Anton Semenov Date: Wed, 15 Jul 2026 22:53:03 +0300 Subject: [PATCH 28/29] an attempt to fix "Could NOT find Threads" error for GCC --- CMakePresets.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CMakePresets.json b/CMakePresets.json index 26c26d6..a9c726d 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -53,7 +53,9 @@ "CMAKE_CXX_COMPILER": "g++", "CMAKE_CXX_FLAGS": "-fmodules --compile-std-module", "CMAKE_EXE_LINKER_FLAGS": "-fmodules", - "CMAKE_SHARED_LINKER_FLAGS": "-fmodules" + "CMAKE_SHARED_LINKER_FLAGS": "-fmodules", + "CMAKE_THREAD_LIBS_INIT": "-lpthread", + "Threads_FOUND": "TRUE" }, "environment": { "CXXFLAGS": "", From f5baaa2ca5236408bf492a7c954c9d3b8c817abc Mon Sep 17 00:00:00 2001 From: Anton Semenov Date: Wed, 15 Jul 2026 23:09:54 +0300 Subject: [PATCH 29/29] CMAKE_CXX_STDLIB_MODULES_JSON ? --- CMakePresets.json | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakePresets.json b/CMakePresets.json index a9c726d..113e56d 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -54,6 +54,7 @@ "CMAKE_CXX_FLAGS": "-fmodules --compile-std-module", "CMAKE_EXE_LINKER_FLAGS": "-fmodules", "CMAKE_SHARED_LINKER_FLAGS": "-fmodules", + "CMAKE_CXX_STDLIB_MODULES_JSON": "/usr/include/c++/16/libstdc++.modules.json", "CMAKE_THREAD_LIBS_INIT": "-lpthread", "Threads_FOUND": "TRUE" },