From 62840265784bbbfbc2d6028a5f9ae81bf888f2a0 Mon Sep 17 00:00:00 2001
From: Christoph Alt <christoph.alt@fau.de>
Date: Thu, 6 Mar 2025 16:07:39 +0100
Subject: [PATCH] moved the rest of the compiler specific parts to the extra
 files

---
 CMakeLists.txt                           | 32 +++---------------------
 cmake/compileroptions/Clang.cmake        | 26 +++++++++++++++++++
 cmake/compileroptions/FujitsuClang.cmake | 21 +++++++++++-----
 cmake/compileroptions/IntelLLVM.cmake    | 28 ++++++++++++++++++++-
 cmake/compileroptions/NEC.cmake          |  7 ++++++
 5 files changed, 78 insertions(+), 36 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 41bca4153..2f254adfe 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -707,7 +707,7 @@ endif()
 
 option ( WALBERLA_THREAD_SAFE_LOGGING "Enables/Disables thread-safe logging" ON )
 
-if ( WALBERLA_BUILD_WITH_OPENMP )
+if ( WALBERLA_BUILD_WITH_OPENMP AND NOT OpenMP_FOUND )
     if( APPLE AND EXISTS /opt/local/lib/libomp AND EXISTS /opt/local/include/libomp ) # find libomp from MacPorts
         set( CMAKE_FRAMEWORK_PATH /opt/local/lib/libomp )
         set( CMAKE_INCLUDE_PATH /opt/local/include/libomp )
@@ -721,24 +721,7 @@ if ( WALBERLA_BUILD_WITH_OPENMP )
             include_directories( ${OpenMP_CXX_INCLUDE_DIRS} )
         endif()
     else()
-        #workarounds
-        if ( WALBERLA_CXX_COMPILER_IS_NEC )
-            message( STATUS "Enabling OpenMP workaround for NEC")
-            add_flag ( CMAKE_C_FLAGS   "-Popenmp" )
-            add_flag ( CMAKE_CXX_FLAGS "-Popenmp" )
-        else()
-            message(FATAL_ERROR "Could NOT enable OpenMP")
-        endif()
-    endif()
-
-    if( WALBERLA_CXX_COMPILER_IS_CLANG OR WALBERLA_CXX_COMPILER_IS_INTELLLVM )
-       # check for bug in combination with OpenMP and sign conversion https://bugs.llvm.org/show_bug.cgi?id=48387
-       try_compile( WALBERLA_CLANG_OPENMP_BUG "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/cmake/TestClangOpenMPBug.cpp"
-             COMPILE_DEFINITIONS -Werror )
-       if( NOT ${WALBERLA_CLANG_OPENMP_BUG} )
-          message( WARNING "Setting -Wno-sign-conversion due to a compiler bug in LLVM (https://bugs.llvm.org/show_bug.cgi?id=48387)" )
-          add_flag( CMAKE_CXX_FLAGS "-Wno-sign-conversion" )
-       endif()
+         message(FATAL_ERROR "Could NOT enable OpenMP")
     endif()
 endif()
 ############################################################################################################################
@@ -838,24 +821,15 @@ endif ( )
 ############################################################################################################################
 
 
-if ( WALBERLA_BUILD_WITH_LIKWID_MARKERS )
+if ( WALBERLA_BUILD_WITH_LIKWID_MARKERS AND NOT LIKWID_FOUND )
     find_library( LIKWID_LIB likwid HINTS $ENV{LIKWID_LIBDIR} $ENV{LIKWID_ROOT}/lib )
     find_path( LIKWID_INCLUDE_DIR likwid.h HINTS $ENV{LIKWID_INCDIR} $ENV{LIKWID_ROOT}/include )
 
-    # For some reason, these turned out to be necessary when building with likwid on Fugaku
-    if ( WALBERLA_CXX_COMPILER_IS_FUJITSUCLANG )
-        find_library( LIKWIDLUA_LIB NAMES likwid-lua HINTS $ENV{LIKWID_LIBDIR} $ENV{LIKWID_ROOT}/lib )
-        find_library( LIKWIDHWLOC_LIB NAMES likwid-hwloc HINTS $ENV{LIKWID_LIBDIR} $ENV{LIKWID_ROOT}/lib )
-    endif()
-
     if ( LIKWID_LIB AND LIKWID_INCLUDE_DIR)
         set( LIKWID_FOUND 1)
         include_directories( ${LIKWID_INCLUDE_DIR})
         add_definitions ( "-DLIKWID_PERFMON" )
         list ( APPEND SERVICE_LIBS ${LIKWID_LIB} )
-        if( WALBERLA_CXX_COMPILER_IS_FUJITSUCLANG )
-            list ( APPEND SERVICE_LIBS ${LIKWIDLUA_LIB} ${LIKWIDHWLOC_LIB} )
-        endif()
     else()
         message(WARNING "likwid marker library not found. Set environment variable LIKWID_ROOT")
         set ( WALBERLA_BUILD_WITH_LIKWID_MARKERS OFF CACHE BOOL "Compile in markers for likwid-perfctr" FORCE )
diff --git a/cmake/compileroptions/Clang.cmake b/cmake/compileroptions/Clang.cmake
index 317ffe9c5..f18ccfcf3 100644
--- a/cmake/compileroptions/Clang.cmake
+++ b/cmake/compileroptions/Clang.cmake
@@ -54,4 +54,30 @@ endif()
 
 if ( WALBERLA_SANITIZE_UNDEFINED )
    add_flag( CMAKE_CXX_FLAGS "-fsanitize=undefined")
+endif()
+
+if ( WALBERLA_BUILD_WITH_OPENMP )
+    if( APPLE AND EXISTS /opt/local/lib/libomp AND EXISTS /opt/local/include/libomp ) # find libomp from MacPorts
+        set( CMAKE_FRAMEWORK_PATH /opt/local/lib/libomp )
+        set( CMAKE_INCLUDE_PATH /opt/local/include/libomp )
+    endif()
+    find_package( OpenMP )
+    if (OpenMP_FOUND)
+        add_flag ( CMAKE_C_FLAGS   "${OpenMP_C_FLAGS}" )
+        add_flag ( CMAKE_CXX_FLAGS "${OpenMP_CXX_FLAGS}" )
+        list ( APPEND SERVICE_LIBS ${OpenMP_CXX_LIBRARIES} )
+        if( OpenMP_CXX_INCLUDE_DIRS )
+            include_directories( ${OpenMP_CXX_INCLUDE_DIRS} )
+        endif()
+    else()
+         message(FATAL_ERROR "Could NOT enable OpenMP")
+    endif()
+
+       # check for bug in combination with OpenMP and sign conversion https://bugs.llvm.org/show_bug.cgi?id=48387
+       try_compile( WALBERLA_CLANG_OPENMP_BUG "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/cmake/TestClangOpenMPBug.cpp"
+             COMPILE_DEFINITIONS -Werror )
+       if( NOT ${WALBERLA_CLANG_OPENMP_BUG} )
+          message( WARNING "Setting -Wno-sign-conversion due to a compiler bug in LLVM (https://bugs.llvm.org/show_bug.cgi?id=48387)" )
+          add_flag( CMAKE_CXX_FLAGS "-Wno-sign-conversion" )
+       endif()
 endif()
\ No newline at end of file
diff --git a/cmake/compileroptions/FujitsuClang.cmake b/cmake/compileroptions/FujitsuClang.cmake
index 330fa0b5d..f710b9a34 100644
--- a/cmake/compileroptions/FujitsuClang.cmake
+++ b/cmake/compileroptions/FujitsuClang.cmake
@@ -6,12 +6,21 @@ set( CMAKE_C_FLAGS_DEBUGOPTIMIZED   "${CMAKE_C_FLAGS_DEBUGOPTIMIZED} -O3" )
 set( CMAKE_CXX_FLAGS_DEBUGOPTIMIZED "${CMAKE_CXX_FLAGS_DEBUGOPTIMIZED} -O3" )
 
 if ( WALBERLA_BUILD_WITH_LIKWID_MARKERS )
+    find_library( LIKWID_LIB likwid HINTS $ENV{LIKWID_LIBDIR} $ENV{LIKWID_ROOT}/lib )
+    find_path( LIKWID_INCLUDE_DIR likwid.h HINTS $ENV{LIKWID_INCDIR} $ENV{LIKWID_ROOT}/include )
 
-   # For some reason, these turned out to be necessary when building with likwid on Fugaku
-   find_library( LIKWIDLUA_LIB NAMES likwid-lua HINTS $ENV{LIKWID_LIBDIR} $ENV{LIKWID_ROOT}/lib )
-   find_library( LIKWIDHWLOC_LIB NAMES likwid-hwloc HINTS $ENV{LIKWID_LIBDIR} $ENV{LIKWID_ROOT}/lib )
+    # For some reason, these turned out to be necessary when building with likwid on Fugaku
+     find_library( LIKWIDLUA_LIB NAMES likwid-lua HINTS $ENV{LIKWID_LIBDIR} $ENV{LIKWID_ROOT}/lib )
+     find_library( LIKWIDHWLOC_LIB NAMES likwid-hwloc HINTS $ENV{LIKWID_LIBDIR} $ENV{LIKWID_ROOT}/lib )
 
-   if ( LIKWID_LIB AND LIKWID_INCLUDE_DIR)
-      list ( APPEND SERVICE_LIBS ${LIKWIDLUA_LIB} ${LIKWIDHWLOC_LIB} )
-   endif()
+    if ( LIKWID_LIB AND LIKWID_INCLUDE_DIR)
+        set( LIKWID_FOUND 1 )
+        include_directories( ${LIKWID_INCLUDE_DIR})
+        add_definitions ( "-DLIKWID_PERFMON" )
+        list ( APPEND SERVICE_LIBS ${LIKWID_LIB} )
+            list ( APPEND SERVICE_LIBS ${LIKWIDLUA_LIB} ${LIKWIDHWLOC_LIB} )
+    else()
+        message(WARNING "likwid marker library not found. Set environment variable LIKWID_ROOT")
+        set ( WALBERLA_BUILD_WITH_LIKWID_MARKERS OFF CACHE BOOL "Compile in markers for likwid-perfctr" FORCE )
+    endif()
 endif()
\ No newline at end of file
diff --git a/cmake/compileroptions/IntelLLVM.cmake b/cmake/compileroptions/IntelLLVM.cmake
index 32cec3b97..4fb4783aa 100644
--- a/cmake/compileroptions/IntelLLVM.cmake
+++ b/cmake/compileroptions/IntelLLVM.cmake
@@ -6,4 +6,30 @@ if ( NOT WALBERLA_BUILD_WITH_FASTMATH )
 endif()
 
 set( CMAKE_C_FLAGS_DEBUGOPTIMIZED   "${CMAKE_C_FLAGS_DEBUGOPTIMIZED} -O3" )
-set( CMAKE_CXX_FLAGS_DEBUGOPTIMIZED "${CMAKE_CXX_FLAGS_DEBUGOPTIMIZED} -O3" )
\ No newline at end of file
+set( CMAKE_CXX_FLAGS_DEBUGOPTIMIZED "${CMAKE_CXX_FLAGS_DEBUGOPTIMIZED} -O3" )
+
+if ( WALBERLA_BUILD_WITH_OPENMP )
+    if( APPLE AND EXISTS /opt/local/lib/libomp AND EXISTS /opt/local/include/libomp ) # find libomp from MacPorts
+        set( CMAKE_FRAMEWORK_PATH /opt/local/lib/libomp )
+        set( CMAKE_INCLUDE_PATH /opt/local/include/libomp )
+    endif()
+    find_package( OpenMP )
+    if (OpenMP_FOUND)
+        add_flag ( CMAKE_C_FLAGS   "${OpenMP_C_FLAGS}" )
+        add_flag ( CMAKE_CXX_FLAGS "${OpenMP_CXX_FLAGS}" )
+        list ( APPEND SERVICE_LIBS ${OpenMP_CXX_LIBRARIES} )
+        if( OpenMP_CXX_INCLUDE_DIRS )
+            include_directories( ${OpenMP_CXX_INCLUDE_DIRS} )
+        endif()
+    else()
+         message(FATAL_ERROR "Could NOT enable OpenMP")
+    endif()
+
+       # check for bug in combination with OpenMP and sign conversion https://bugs.llvm.org/show_bug.cgi?id=48387
+       try_compile( WALBERLA_CLANG_OPENMP_BUG "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/cmake/TestClangOpenMPBug.cpp"
+             COMPILE_DEFINITIONS -Werror )
+       if( NOT ${WALBERLA_CLANG_OPENMP_BUG} )
+          message( WARNING "Setting -Wno-sign-conversion due to a compiler bug in LLVM (https://bugs.llvm.org/show_bug.cgi?id=48387)" )
+          add_flag( CMAKE_CXX_FLAGS "-Wno-sign-conversion" )
+       endif()
+endif()
\ No newline at end of file
diff --git a/cmake/compileroptions/NEC.cmake b/cmake/compileroptions/NEC.cmake
index 05ae8cccb..17ec77e04 100644
--- a/cmake/compileroptions/NEC.cmake
+++ b/cmake/compileroptions/NEC.cmake
@@ -47,3 +47,10 @@ if( WALBERLA_CXX_COMPILER_IS_NEC )
    configure_file ( ${walberla_BINARY_DIR}/CMakeFiles/src/sys/stream.h   ${walberla_BINARY_DIR}/src/sys/stream.h   COPYONLY )
    configure_file ( ${walberla_BINARY_DIR}/CMakeFiles/src/sys/strsubr.h  ${walberla_BINARY_DIR}/src/sys/strsubr.h  COPYONLY )
 endif()
+
+
+if ( WALBERLA_BUILD_WITH_OPENMP )
+   message( STATUS "Enabling OpenMP workaround for NEC")
+   add_flag ( CMAKE_C_FLAGS   "-Popenmp" )
+   add_flag ( CMAKE_CXX_FLAGS "-Popenmp" )
+endif()
\ No newline at end of file
-- 
GitLab