From d4b9dd013a9c8e7f3b474452b7c326b99c0bd4a7 Mon Sep 17 00:00:00 2001 From: Nesterov Alexander Date: Tue, 24 Jun 2025 18:37:12 +0200 Subject: [PATCH 1/7] cmake: use modern OpenMP on MSVC --- cmake/openmp.cmake | 6 ++++++ modules/core/CMakeLists.txt | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/cmake/openmp.cmake b/cmake/openmp.cmake index c2e2725ab..076b22b0d 100644 --- a/cmake/openmp.cmake +++ b/cmake/openmp.cmake @@ -1,6 +1,12 @@ find_package(OpenMP) if(OpenMP_FOUND) include_directories(${OpenMP_C_INCLUDE_DIRS} ${OpenMP_CXX_INCLUDE_DIRS}) + + if(MSVC) + string(REPLACE "/openmp" "/openmp:llvm" OpenMP_C_FLAGS "${OpenMP_C_FLAGS}") + string(REPLACE "/openmp" "/openmp:llvm" OpenMP_CXX_FLAGS "${OpenMP_CXX_FLAGS}") + endif() + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") set(CMAKE_EXE_LINKER_FLAGS diff --git a/modules/core/CMakeLists.txt b/modules/core/CMakeLists.txt index de8ae2c29..c0ee79bdc 100644 --- a/modules/core/CMakeLists.txt +++ b/modules/core/CMakeLists.txt @@ -44,6 +44,10 @@ target_link_libraries(${exec_func_lib} PUBLIC gtest gtest_main) target_link_libraries(${exec_func_lib} PUBLIC Threads::Threads) find_package(OpenMP REQUIRED) +if(MSVC) + string(REPLACE "/openmp" "/openmp:llvm" OpenMP_C_FLAGS "${OpenMP_C_FLAGS}") + string(REPLACE "/openmp" "/openmp:llvm" OpenMP_CXX_FLAGS "${OpenMP_CXX_FLAGS}") +endif() target_link_libraries(${exec_func_lib} PUBLIC ${OpenMP_libomp_LIBRARY} OpenMP::OpenMP_CXX) From adc1d33f1d2dc422fce167b7250013cc95a901a4 Mon Sep 17 00:00:00 2001 From: Nesterov Alexander Date: Tue, 24 Jun 2025 18:44:50 +0200 Subject: [PATCH 2/7] Adjust MSVC OpenMP configuration --- cmake/openmp.cmake | 11 +++++------ modules/core/CMakeLists.txt | 4 ---- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/cmake/openmp.cmake b/cmake/openmp.cmake index 076b22b0d..7bb56334a 100644 --- a/cmake/openmp.cmake +++ b/cmake/openmp.cmake @@ -1,12 +1,11 @@ +if(MSVC) + set(OpenMP_C_FLAGS "/openmp:llvm" CACHE STRING "OpenMP C flags" FORCE) + set(OpenMP_CXX_FLAGS "/openmp:llvm" CACHE STRING "OpenMP CXX flags" FORCE) +endif() + find_package(OpenMP) if(OpenMP_FOUND) include_directories(${OpenMP_C_INCLUDE_DIRS} ${OpenMP_CXX_INCLUDE_DIRS}) - - if(MSVC) - string(REPLACE "/openmp" "/openmp:llvm" OpenMP_C_FLAGS "${OpenMP_C_FLAGS}") - string(REPLACE "/openmp" "/openmp:llvm" OpenMP_CXX_FLAGS "${OpenMP_CXX_FLAGS}") - endif() - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") set(CMAKE_EXE_LINKER_FLAGS diff --git a/modules/core/CMakeLists.txt b/modules/core/CMakeLists.txt index c0ee79bdc..de8ae2c29 100644 --- a/modules/core/CMakeLists.txt +++ b/modules/core/CMakeLists.txt @@ -44,10 +44,6 @@ target_link_libraries(${exec_func_lib} PUBLIC gtest gtest_main) target_link_libraries(${exec_func_lib} PUBLIC Threads::Threads) find_package(OpenMP REQUIRED) -if(MSVC) - string(REPLACE "/openmp" "/openmp:llvm" OpenMP_C_FLAGS "${OpenMP_C_FLAGS}") - string(REPLACE "/openmp" "/openmp:llvm" OpenMP_CXX_FLAGS "${OpenMP_CXX_FLAGS}") -endif() target_link_libraries(${exec_func_lib} PUBLIC ${OpenMP_libomp_LIBRARY} OpenMP::OpenMP_CXX) From c98be98271f537801d02148490d9bc16341677ee Mon Sep 17 00:00:00 2001 From: Nesterov Alexander Date: Tue, 24 Jun 2025 18:54:36 +0200 Subject: [PATCH 3/7] force OpenMP 5 detection on MSVC --- cmake/openmp.cmake | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cmake/openmp.cmake b/cmake/openmp.cmake index 7bb56334a..29cdfc57a 100644 --- a/cmake/openmp.cmake +++ b/cmake/openmp.cmake @@ -1,6 +1,9 @@ if(MSVC) set(OpenMP_C_FLAGS "/openmp:llvm" CACHE STRING "OpenMP C flags" FORCE) set(OpenMP_CXX_FLAGS "/openmp:llvm" CACHE STRING "OpenMP CXX flags" FORCE) + # Pretend Clang-style OpenMP 5.0 support so CMake reports a newer version + set(OpenMP_C_SPEC_DATE 201811 CACHE STRING "OpenMP C specification date" FORCE) + set(OpenMP_CXX_SPEC_DATE 201811 CACHE STRING "OpenMP CXX specification date" FORCE) endif() find_package(OpenMP) From f31d3c484059e4dd220889081d4433eb275876f0 Mon Sep 17 00:00:00 2001 From: Nesterov Alexander Date: Tue, 24 Jun 2025 19:17:07 +0200 Subject: [PATCH 4/7] Update openmp.cmake --- cmake/openmp.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/openmp.cmake b/cmake/openmp.cmake index 29cdfc57a..15cd32aa1 100644 --- a/cmake/openmp.cmake +++ b/cmake/openmp.cmake @@ -1,4 +1,4 @@ -if(MSVC) +if(MSVC AND NOT (CMAKE_CXX_COMPILER_ID MATCHES "Clang")) set(OpenMP_C_FLAGS "/openmp:llvm" CACHE STRING "OpenMP C flags" FORCE) set(OpenMP_CXX_FLAGS "/openmp:llvm" CACHE STRING "OpenMP CXX flags" FORCE) # Pretend Clang-style OpenMP 5.0 support so CMake reports a newer version From 5e1404e376d45b641997188bb0581f09b2c6ae7b Mon Sep 17 00:00:00 2001 From: Nesterov Alexander Date: Wed, 25 Jun 2025 10:07:24 +0200 Subject: [PATCH 5/7] Update openmp.cmake --- cmake/openmp.cmake | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/cmake/openmp.cmake b/cmake/openmp.cmake index 15cd32aa1..0b3ba19a3 100644 --- a/cmake/openmp.cmake +++ b/cmake/openmp.cmake @@ -1,9 +1,17 @@ if(MSVC AND NOT (CMAKE_CXX_COMPILER_ID MATCHES "Clang")) - set(OpenMP_C_FLAGS "/openmp:llvm" CACHE STRING "OpenMP C flags" FORCE) - set(OpenMP_CXX_FLAGS "/openmp:llvm" CACHE STRING "OpenMP CXX flags" FORCE) + set(OpenMP_C_FLAGS + "/openmp:llvm" + CACHE STRING "OpenMP C flags" FORCE) + set(OpenMP_CXX_FLAGS + "/openmp:llvm" + CACHE STRING "OpenMP CXX flags" FORCE) # Pretend Clang-style OpenMP 5.0 support so CMake reports a newer version - set(OpenMP_C_SPEC_DATE 201811 CACHE STRING "OpenMP C specification date" FORCE) - set(OpenMP_CXX_SPEC_DATE 201811 CACHE STRING "OpenMP CXX specification date" FORCE) + set(OpenMP_C_SPEC_DATE + 201811 + CACHE STRING "OpenMP C specification date" FORCE) + set(OpenMP_CXX_SPEC_DATE + 201811 + CACHE STRING "OpenMP CXX specification date" FORCE) endif() find_package(OpenMP) From d33e5fc801c74ca6ace0be1a1a24f39f93ca7fb4 Mon Sep 17 00:00:00 2001 From: Nesterov Alexander Date: Wed, 25 Jun 2025 10:09:20 +0200 Subject: [PATCH 6/7] Update openmp.cmake From d2a84bdc248caea0d865f62041ce4e2d83af2a4f Mon Sep 17 00:00:00 2001 From: Nesterov Alexander Date: Wed, 25 Jun 2025 10:13:31 +0200 Subject: [PATCH 7/7] Update openmp.cmake --- cmake/openmp.cmake | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/cmake/openmp.cmake b/cmake/openmp.cmake index 0b3ba19a3..3b88922ff 100644 --- a/cmake/openmp.cmake +++ b/cmake/openmp.cmake @@ -1,16 +1,16 @@ if(MSVC AND NOT (CMAKE_CXX_COMPILER_ID MATCHES "Clang")) - set(OpenMP_C_FLAGS - "/openmp:llvm" + set(OpenMP_C_FLAGS + "/openmp:llvm" CACHE STRING "OpenMP C flags" FORCE) - set(OpenMP_CXX_FLAGS - "/openmp:llvm" + set(OpenMP_CXX_FLAGS + "/openmp:llvm" CACHE STRING "OpenMP CXX flags" FORCE) # Pretend Clang-style OpenMP 5.0 support so CMake reports a newer version - set(OpenMP_C_SPEC_DATE - 201811 + set(OpenMP_C_SPEC_DATE + 201811 CACHE STRING "OpenMP C specification date" FORCE) - set(OpenMP_CXX_SPEC_DATE - 201811 + set(OpenMP_CXX_SPEC_DATE + 201811 CACHE STRING "OpenMP CXX specification date" FORCE) endif()