diff --git a/CMakeLists.txt b/CMakeLists.txt index 41bca41534aacb4901cee9cdfd4da411bce00c4f..2f254adfe59b6b11872766b85ceee8897309fb84 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 317ffe9c50377dd2afed350141cf7f51cc5c621a..f18ccfcf3bb34735fbf6b191a42939779ecdb147 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 330fa0b5dea08932fa0d43dfbd4082b641c4cf4c..f710b9a34c605ca0c44d02b3b34a953d652a798c 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 32cec3b97719a1800080023dd61fdc5f08193271..4fb4783aa3b0ce727893ec315fa6efbf4cc66fc2 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 05ae8cccb5b00e4fcb71e9a08b8ef2af37cb1217..17ec77e04d8b326d2dc478dc4c41bb61ad878e1e 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