diff --git a/CMakeLists.txt b/CMakeLists.txt index b7ae62b8bfaaf8928ef294ad46b80d58cc6ee31c..6dc1f16be759678b27714296f51eb3adc57bbd27 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,12 +25,12 @@ ## ############################################################################################################################ -CMAKE_MINIMUM_REQUIRED (VERSION 3.14) +CMAKE_MINIMUM_REQUIRED (VERSION 3.24) PROJECT ( walberla ) -set ( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${walberla_SOURCE_DIR}/cmake ) +set ( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${walberla_SOURCE_DIR}/cmake ${walberla_SOURCE_DIR}/cmake/compileroptions ) include ( waLBerlaFunctions ) @@ -176,11 +176,6 @@ if( CMAKE_CXX_COMPILER MATCHES "icpc" OR CMAKE_CXX_COMPILER_ARG1 MATCHES "icpc" ENDIF(XILD) MARK_AS_ADVANCED(XILD) - if( CMAKE_VERSION VERSION_LESS 3.11.0 ) - set( CMAKE_CXX17_STANDARD_COMPILE_OPTION "-std=c++17" ) - set( CMAKE_TRY_COMPILE_PLATFORM_VARIABLES CMAKE_CXX17_STANDARD_COMPILE_OPTION ) - add_flag ( CMAKE_CXX_FLAGS ${CMAKE_CXX${CMAKE_CXX_STANDARD}_STANDARD_COMPILE_OPTION} ) - endif() if( CMAKE_CXX_COMPILER_VERSION VERSION_LESS "19.0.5" ) # std::filesystem uses ABI tags, which don't work 19.0.2 but do in 19.0.5 add_flag ( CMAKE_CXX_FLAGS "-D_GLIBCXX_USE_CXX11_ABI=0" ) @@ -193,6 +188,7 @@ mark_as_advanced ( WALBERLA_CXX_COMPILER_IS_INTEL ) # Check for Gnu compiler if ( CMAKE_COMPILER_IS_GNUCXX AND NOT WALBERLA_CXX_COMPILER_IS_INTEL ) option ( WALBERLA_CXX_COMPILER_IS_GNU "Use gnu compiler" ON ) + include(GNU) else() option ( WALBERLA_CXX_COMPILER_IS_GNU "Use gnu compiler" OFF ) endif() @@ -201,6 +197,7 @@ mark_as_advanced ( WALBERLA_CXX_COMPILER_IS_GNU ) # Check for Visual Studio if ( MSVC ) option ( WALBERLA_CXX_COMPILER_IS_MSVC "Use Visual Studio compiler" ON ) + include( MSVC ) else() option ( WALBERLA_CXX_COMPILER_IS_MSVC "Use Visual Studio compiler" OFF ) endif() @@ -209,21 +206,15 @@ mark_as_advanced ( WALBERLA_CXX_COMPILER_IS_MSVC ) # Check for IBM compiler if( CMAKE_CXX_COMPILER MATCHES "xlc" OR CMAKE_CXX_COMPILER_ARG1 MATCHES "xlc" ) option ( WALBERLA_CXX_COMPILER_IS_IBM "Use IBM compiler" ON ) + include(IBM) else() option ( WALBERLA_CXX_COMPILER_IS_IBM "Use IBM compiler" OFF ) endif() mark_as_advanced ( WALBERLA_CXX_COMPILER_IS_IBM ) -# Check for NEC SX compiler -if( CMAKE_CXX_COMPILER MATCHES "/sxc" OR CMAKE_CXX_COMPILER_ARG1 MATCHES "/sxc" OR CMAKE_CXX_COMPILER MATCHES "/sxmpic" OR CMAKE_CXX_COMPILER_ARG1 MATCHES "/sxmpic" ) - option ( WALBERLA_CXX_COMPILER_IS_NEC "Use NEC compiler" ON ) -else() - option ( WALBERLA_CXX_COMPILER_IS_NEC "Use NEC compiler" OFF ) -endif() -mark_as_advanced ( WALBERLA_CXX_COMPILER_IS_NEC ) - if( CMAKE_CXX_COMPILER MATCHES "clang" OR CMAKE_CXX_COMPILER_ARG1 MATCHES "clang" OR CMAKE_CXX_COMPILER MATCHES "hipcc" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" ) option ( WALBERLA_CXX_COMPILER_IS_CLANG "Use clang compiler" ON ) + include(Clang) else() option ( WALBERLA_CXX_COMPILER_IS_CLANG "Use clang compiler" OFF ) endif() @@ -232,21 +223,16 @@ mark_as_advanced ( WALBERLA_CXX_COMPILER_IS_CLANG ) # Check for Cray compiler if( CMAKE_CXX_COMPILER_ID MATCHES Cray ) option ( WALBERLA_CXX_COMPILER_IS_CRAY "Use Cray compiler" ON ) + include(Cray) else() option ( WALBERLA_CXX_COMPILER_IS_CRAY "Use Cray compiler" OFF ) endif() mark_as_advanced ( WALBERLA_CXX_COMPILER_IS_CRAY ) -if( CMAKE_CXX_COMPILER MATCHES "pgc\\+\\+" OR CMAKE_CXX_COMPILER_ARG1 MATCHES "pgc\\+\\+" ) - option ( WALBERLA_CXX_COMPILER_IS_PGI "Use PGI compiler" ON ) -else() - option ( WALBERLA_CXX_COMPILER_IS_PGI "Use PGI compiler" OFF ) -endif() -mark_as_advanced ( WALBERLA_CXX_COMPILER_IS_PGI ) - # Check for Fujitsu compiler if( CMAKE_CXX_COMPILER_ID MATCHES FujitsuClang ) option ( WALBERLA_CXX_COMPILER_IS_FUJITSUCLANG "Use FujitsuClang compiler" ON ) + include(FujitsuClang) else() option ( WALBERLA_CXX_COMPILER_IS_FUJITSUCLANG "Use FujitsuClang compiler" OFF ) endif() @@ -264,6 +250,7 @@ mark_as_advanced ( WALBERLA_CXX_COMPILER_IS_MPI_WRAPPER ) # Check for intel llvm compiler if( CMAKE_CXX_COMPILER MATCHES "icpx" OR CMAKE_CXX_COMPILER_ARG1 MATCHES "icpx" ) option ( WALBERLA_CXX_COMPILER_IS_INTELLLVM "Use Intel LLVM compiler" ON ) + include(IntelLLVM) else() option ( WALBERLA_CXX_COMPILER_IS_INTELLLVM "Use Intel LLVM compiler" OFF ) endif() @@ -279,194 +266,7 @@ mark_as_advanced ( WALBERLA_CXX_COMPILER_IS_INTELLLVM ) ## ############################################################################################################################ -# Profile guided optimization -if ( WALBERLA_PROFILE_GENERATE ) - if( WALBERLA_CXX_COMPILER_IS_INTEL ) - add_flag( CMAKE_CXX_FLAGS "-prof-gen" ) - file( MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/profile" ) - add_flag( CMAKE_CXX_FLAGS "-prof-dir${CMAKE_BINARY_DIR}/profile" ) - elseif( WALBERLA_CXX_COMPILER_IS_GNU ) - add_flag( CMAKE_CXX_FLAGS "-fprofile-generate" ) - elseif( WALBERLA_CXX_COMPILER_IS_MSVC ) - add_flag ( CMAKE_CXX_FLAGS "/GL" ) - add_flag ( CMAKE_MODULE_LINKER_FLAGS "/LTCG:PGINSTRUMENT" ) - add_flag ( CMAKE_SHARED_LINKER_FLAGS "/LTCG:PGINSTRUMENT" ) - add_flag ( CMAKE_EXE_LINKER_FLAGS "/LTCG:PGINSTRUMENT" ) - endif() -endif() - -if ( WALBERLA_PROFILE_USE ) - if( WALBERLA_CXX_COMPILER_IS_INTEL ) - add_flag( CMAKE_CXX_FLAGS "-prof-use" ) - add_flag( CMAKE_CXX_FLAGS "-prof-dir${CMAKE_BINARY_DIR}/profile" ) - elseif( WALBERLA_CXX_COMPILER_IS_GNU ) - add_flag( CMAKE_CXX_FLAGS "-fprofile-use" ) - elseif( WALBERLA_CXX_COMPILER_IS_MSVC ) - add_flag ( CMAKE_CXX_FLAGS "/GL" ) - add_flag ( CMAKE_MODULE_LINKER_FLAGS "/LTCG:PGOPTIMIZE" ) - add_flag ( CMAKE_SHARED_LINKER_FLAGS "/LTCG:PGOPTIMIZE" ) - add_flag ( CMAKE_EXE_LINKER_FLAGS "/LTCG:PGOPTIMIZE" ) - endif() -endif() - -# common flags for intel and g++ -if ( NOT WARNING_DISABLE AND ( WALBERLA_CXX_COMPILER_IS_GNU OR WALBERLA_CXX_COMPILER_IS_INTEL ) ) - add_flag ( CMAKE_CXX_FLAGS "-Wall -Wconversion -Wshadow" ) -endif() - -# C++ language features for NEC compiler -if( WALBERLA_CXX_COMPILER_IS_NEC ) - set( CMAKE_CXX${CMAKE_CXX_STANDARD}_STANDARD_COMPILE_OPTION "-Kcpp${CMAKE_CXX_STANDARD}" ) - set( CMAKE_TRY_COMPILE_PLATFORM_VARIABLES CMAKE_CXX${CMAKE_CXX_STANDARD}_STANDARD_COMPILE_OPTION ) - add_flag ( CMAKE_CXX_FLAGS "${CMAKE_CXX${CMAKE_CXX_STANDARD}_STANDARD_COMPILE_OPTION} -Krtti -Kexceptions -size_t64 -Kgcc" ) - add_flag ( CMAKE_CXX_FLAGS "-D__BIG_ENDIAN -D__BYTE_ORDER=__BIG_ENDIAN" ) - add_flag ( CMAKE_CXX_FLAGS "-Tnoauto,used" ) - add_flag ( CMAKE_EXE_LINKER_FLAGS "-Wl,-h,muldefs" ) - add_flag ( CMAKE_C_FLAGS "-size_t64 -Kgcc" ) - add_flag ( CMAKE_C_FLAGS "-D__BIG_ENDIAN -D__BYTE_ORDER=__BIG_ENDIAN" ) - add_flag ( CMAKE_C_FLAGS "-DSQLITE_OMIT_WAL -DHAVE_UTIME -DTHREADSAFE=0" ) - set( CMAKE_RANLIB /bin/true ) - set( CMAKE_SKIP_BUILD_RPATH TRUE ) - set( CMAKE_C_FLAGS_DEBUGOPTIMIZED "-Chopt -g" ) - set( CMAKE_C_FLAGS_DEBUG "-Cdebug -g" ) - set( CMAKE_CXX_FLAGS_DEBUGOPTIMIZED "-Chopt -g" ) - set( CMAKE_CXX_FLAGS_DEBUG "-Cdebug -g" ) -endif() - -# Fixes linker errors with IBM compiler -if( WALBERLA_CXX_COMPILER_IS_IBM ) - add_flag ( CMAKE_CXX_FLAGS "-qpic=large" ) -endif() -# Fixes linker errors with Cray compiler -if( WALBERLA_CXX_COMPILER_IS_CRAY ) - add_flag ( CMAKE_EXE_LINKER_FLAGS "-dynamic -L/opt/gcc/4.9.3/snos/lib64" ) -endif() - -# Silences compiler and linker warnings and information with the IBM compiler -if( WALBERLA_CXX_COMPILER_IS_IBM ) - add_flag ( CMAKE_CXX_FLAGS "-qsuppress=1586-267" ) # 1586-267 (I) Inlining of specified subprogram failed due to the presence of a C++ exception handler - add_flag ( CMAKE_CXX_FLAGS "-qsuppress=1586-266" ) # 1586-266 (I) Inlining of specified subprogram failed due to the presence of a global label - add_flag ( CMAKE_CXX_FLAGS "-qsuppress=1500-030" ) # 1500-030: (I) INFORMATION: [...] Additional optimization may be attained by recompiling and specifying MAXMEM option with a value greater than 8192. - add_flag ( CMAKE_C_FLAGS "-qsuppress=1500-030" ) # 1500-030: (I) INFORMATION: [...] Additional optimization may be attained by recompiling and specifying MAXMEM option with a value greater than 8192. -endif() - -# Silences compiler and linker warnings and information with the Cray compiler -if( WALBERLA_CXX_COMPILER_IS_CRAY ) - set( CMAKE_INCLUDE_SYSTEM_FLAG_CXX "-isystem " ) - add_flag ( CMAKE_CXX_FLAGS "-h nomessage=1" ) # CC-1 The source file does not end with a new-line character. - add_flag ( CMAKE_C_FLAGS "-DSQLITE_HAVE_ISNAN" ) # SQLite will not work correctly with the -ffast-math option of GCC. - add_flag ( CMAKE_CXX_FLAGS "-DSQLITE_HAVE_ISNAN" ) # SQLite will not work correctly with the -ffast-math option of GCC. -endif() - -# Silences compiler and linker warnings and information with the PGI compiler -if( WALBERLA_CXX_COMPILER_IS_PGI ) - add_flag ( CMAKE_CXX_FLAGS "--display_error_number" ) - add_flag ( CMAKE_C_FLAGS "--display_error_number" ) - if( CMAKE_VERSION VERSION_LESS "3.19" ) - # https://github.com/Kitware/CMake/commit/52eee1938919deb59cc2b51d44f365f0d9a418e5 - set( CMAKE_CXX${CMAKE_CXX_STANDARD}_STANDARD_COMPILE_OPTION "--c++${CMAKE_CXX_STANDARD}" ) - endif() - add_flag ( CMAKE_CXX_FLAGS "--diag_suppress=1" ) # last line of file ends without a newline - add_flag ( CMAKE_CXX_FLAGS "--diag_suppress=111" ) # statement is unreachable - add_flag ( CMAKE_C_FLAGS "--diag_suppress=111" ) # statement is unreachable - add_flag ( CMAKE_C_FLAGS "--diag_suppress=550" ) # variable [...] was set but never used - add_flag ( CMAKE_C_FLAGS "--diag_suppress=191" ) # type qualifier is meaningless on cast type -endif() - -# architecture optimization -if( WALBERLA_OPTIMIZE_FOR_LOCALHOST ) - if( WALBERLA_CXX_COMPILER_IS_GNU OR WALBERLA_CXX_COMPILER_IS_INTEL OR WALBERLA_CXX_COMPILER_IS_CLANG ) - if(( CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" ) AND CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "arm64" ) - # no -march=native available on this compiler, but there is currently only one such processor - else() - add_flag ( CMAKE_CXX_FLAGS "-march=native" ) - add_flag ( CMAKE_C_FLAGS "-march=native" ) - endif() - - if( WALBERLA_CXX_COMPILER_IS_INTEL ) - add_flag ( CMAKE_CXX_FLAGS "-xhost" ) - add_flag ( CMAKE_C_FLAGS "-xhost" ) - endif() - - if( EXISTS "/proc/sys/abi/sve_default_vector_length" ) - file( READ "/proc/sys/abi/sve_default_vector_length" SVE_LENGTH_BYTES ) - string(STRIP "${SVE_LENGTH_BYTES}" SVE_LENGTH_BYTES) - math(EXPR SVE_LENGTH "${SVE_LENGTH_BYTES} * 8") - add_flag ( CMAKE_CXX_FLAGS "-msve-vector-bits=${SVE_LENGTH}" ) - add_flag ( CMAKE_C_FLAGS "-msve-vector-bits=${SVE_LENGTH}" ) - endif() - endif() -endif() - -# warning flags -if( WALBERLA_CXX_COMPILER_IS_INTEL ) - # system headers are also supported by intel, but cmake does not recognize that - set( CMAKE_INCLUDE_SYSTEM_FLAG_CXX "-isystem " ) - add_flag ( CMAKE_CXX_FLAGS "-wd2928,2504,2259,1682,597" ) - # disable icc/icpc deprecation warning - add_flag ( CMAKE_CXX_FLAGS "-diag-disable=10441" ) -elseif( WALBERLA_CXX_COMPILER_IS_GNU ) - add_flag ( CMAKE_CXX_FLAGS "-Wfloat-equal -Wextra" ) -elseif( WALBERLA_CXX_COMPILER_IS_NEC ) - add_flag ( CMAKE_CXX_FLAGS "-wall" ) -endif() - -if ( WARNING_PEDANTIC AND WALBERLA_CXX_COMPILER_IS_GNU ) - add_flag ( CMAKE_CXX_FLAGS "-pedantic" ) -endif ( ) - - # omit deprecated warnings -if( NOT WARNING_DEPRECATED) - if( WALBERLA_CXX_COMPILER_IS_INTEL ) - add_flag( CMAKE_CXX_FLAGS "-wd1478" ) # Disable compiler warning # 1478: "declared as deprecated" - elseif( WALBERLA_CXX_COMPILER_IS_GNU OR WALBERLA_CXX_COMPILER_IS_CLANG ) - add_flag ( CMAKE_CXX_FLAGS "-Wno-deprecated-declarations") - endif() -endif() - - -if ( WALBERLA_CXX_COMPILER_IS_CLANG OR WALBERLA_CXX_COMPILER_IS_FUJITSUCLANG ) - add_flag ( CMAKE_CXX_FLAGS "-Wall -Wconversion -Wshadow -Wno-c++11-extensions -Qunused-arguments" ) -endif ( ) - -if( WALBERLA_CXX_COMPILER_IS_GNU OR WALBERLA_CXX_COMPILER_IS_INTEL OR WALBERLA_CXX_COMPILER_IS_CLANG ) - if ( WALBERLA_STL_BOUNDS_CHECKS ) - add_definitions ( "-D_GLIBCXX_DEBUG" ) - add_definitions ( "-D_LIBCPP_DEBUG=1" ) - endif() -endif() - -# Omit maybe-uninitialized for gcc 12 for now. Check if it is a bug or a real problem: -if( WALBERLA_CXX_COMPILER_IS_GNU AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "12.0" ) - add_flag( CMAKE_CXX_FLAGS "-Wno-maybe-uninitialized" ) -endif() - -# GCC 12 reports a "array bounds" warning at UniformBufferedScheme.h:297 (error: array subscript 26 is above array bounds of) -# when e.g. compiling the GhostLayerCommTest. -# Since this is most probably a bug in GCC disable the warning for now -if( WALBERLA_CXX_COMPILER_IS_GNU AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "12.0" ) - add_flag( CMAKE_CXX_FLAGS "-Wno-array-bounds" ) -endif() - -#fastmath -if ( WALBERLA_BUILD_WITH_FASTMATH ) - if ( WALBERLA_CXX_COMPILER_IS_INTEL ) - add_flag( CMAKE_CXX_FLAGS "-fp-model fast=2 -no-prec-sqrt -no-prec-div" ) - endif() - - if ( WALBERLA_CXX_COMPILER_IS_GNU OR WALBERLA_CXX_COMPILER_IS_CLANG ) - add_flag( CMAKE_CXX_FLAGS "-ffast-math") - endif() - - if( WALBERLA_CXX_COMPILER_IS_MSVC ) - add_flag( CMAKE_CXX_FLAGS "/fp:fast" ) - endif() -else() - if( WALBERLA_CXX_COMPILER_IS_INTELLLVM ) - add_flag( CMAKE_CXX_FLAGS "-fp-model=precise") - endif() -endif() # Xcode generator disables -isystem flag, even though current versions of Xcode support it if(CMAKE_GENERATOR STREQUAL "Xcode") @@ -475,19 +275,6 @@ if(CMAKE_GENERATOR STREQUAL "Xcode") endif() -#GCC 5+ ABI selection -if( WALBERLA_CXX_COMPILER_IS_GNU ) - if( NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0.0 ) - option ( WALBERLA_USE_CPP11_ABI "On GCC 5+ use the C++11 ABI" ON ) - if( WALBERLA_USE_CPP11_ABI ) - add_flag( CMAKE_CXX_FLAGS "-D_GLIBCXX_USE_CXX11_ABI=1" ) - else() - add_flag( CMAKE_CXX_FLAGS "-D_GLIBCXX_USE_CXX11_ABI=0" ) - endif() - endif() -endif() - - # disable Xcode 7.3+ linker deduplication pass to speed up linking in debug mode #if ( APPLE ) # execute_process( COMMAND ${CMAKE_LINKER} -v OUTPUT_VARIABLE LINKER_VERSION ERROR_VARIABLE LINKER_VERSION ) @@ -506,97 +293,6 @@ endif() ############################################################################################################################ - -############################################################################################################################ -## -## Find newer C++ libraries, which may only be available in std::experimental on some compilers -## -############################################################################################################################ - -try_compile( WALBERLA_USE_STD_FILESYSTEM "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/cmake/TestStdFilesystem.cpp" - COMPILE_DEFINITIONS -DWALBERLA_USE_STD_FILESYSTEM COPY_FILE "${CMAKE_CURRENT_BINARY_DIR}/TestStdFilesystem" OUTPUT_VARIABLE TRY_COMPILE_OUTPUT) -if( WALBERLA_USE_STD_FILESYSTEM ) - # detect https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90050 by checking whether it segfaults - execute_process( COMMAND "${CMAKE_CURRENT_BINARY_DIR}/TestStdFilesystem" OUTPUT_QUIET RESULT_VARIABLE WALBERLA_STD_FILESYSTEM_WORKS ) -endif() -if( WALBERLA_USE_STD_FILESYSTEM AND WALBERLA_STD_FILESYSTEM_WORKS EQUAL 0 ) - message( STATUS "Found std::filesystem") -else() - try_compile( WALBERLA_USE_STD_EXPERIMENTAL_FILESYSTEM "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/cmake/TestStdFilesystem.cpp" - COMPILE_DEFINITIONS -DWALBERLA_USE_STD_EXPERIMENTAL_FILESYSTEM OUTPUT_VARIABLE TRY_COMPILE_OUTPUT) - if( WALBERLA_USE_STD_EXPERIMENTAL_FILESYSTEM ) - message( STATUS "Found std::experimental::filesystem") - endif() - if( NOT WALBERLA_CXX_COMPILER_IS_MSVC AND NOT WALBERLA_USE_STD_EXPERIMENTAL_FILESYSTEM ) - unset( WALBERLA_USE_STD_EXPERIMENTAL_FILESYSTEM CACHE ) - try_compile( WALBERLA_USE_STD_EXPERIMENTAL_FILESYSTEM "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/cmake/TestStdFilesystem.cpp" - COMPILE_DEFINITIONS -DWALBERLA_USE_STD_EXPERIMENTAL_FILESYSTEM LINK_LIBRARIES stdc++fs OUTPUT_VARIABLE TRY_COMPILE_OUTPUT) - if( WALBERLA_USE_STD_EXPERIMENTAL_FILESYSTEM ) - message( STATUS "Found std::experimental::filesystem in libstdc++fs") - list ( APPEND SERVICE_LIBS -lstdc++fs ) - endif() - endif() - if( NOT WALBERLA_CXX_COMPILER_IS_MSVC AND NOT WALBERLA_USE_STD_EXPERIMENTAL_FILESYSTEM ) - unset( WALBERLA_USE_STD_EXPERIMENTAL_FILESYSTEM CACHE ) - try_compile( WALBERLA_USE_STD_EXPERIMENTAL_FILESYSTEM "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/cmake/TestStdFilesystem.cpp" - COMPILE_DEFINITIONS -DWALBERLA_USE_STD_EXPERIMENTAL_FILESYSTEM LINK_LIBRARIES c++experimental OUTPUT_VARIABLE TRY_COMPILE_OUTPUT) - if( WALBERLA_USE_STD_EXPERIMENTAL_FILESYSTEM ) - message( STATUS "Found std::experimental::filesystem in libc++experimental") - list ( APPEND SERVICE_LIBS -lc++experimental ) - endif() - endif() - if( NOT WALBERLA_USE_STD_EXPERIMENTAL_FILESYSTEM AND NOT WALBERLA_USE_STD_FILESYSTEM) - message( WARNING ${TRY_COMPILE_OUTPUT} ) - message( FATAL_ERROR "Neither std::filesystem nor std::experimental::filesystem are available" ) - endif() -endif() - -############################################################################################################################ -## -## Visual Studio Setup -## -############################################################################################################################ -if ( WALBERLA_CXX_COMPILER_IS_MSVC ) - string( REGEX REPLACE "[/-]W[0-4]" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} ) # remove default warning flags - - option ( WALBERLA_GROUP_PROJECTS "Flag if the projects are grouped or in a flat hierarchy" ON ) - option ( WALBERLA_GROUP_FILES "Flag if the files are grouped or in a flat hierarchy" ON ) - set_property ( GLOBAL PROPERTY USE_FOLDERS ${WALBERLA_GROUP_PROJECTS} ) - - option ( WALBERLA_VS_MULTI_PROCESS_BUILD "Use the /mp option for VS builds" ON ) - if( WALBERLA_VS_MULTI_PROCESS_BUILD ) - add_flag ( CMAKE_CXX_FLAGS "-MP" ) # enable multi-threaded compiling - endif() - - add_definitions ( "-DNOMINMAX" ) # Disable Min/Max-Macros - add_definitions ( "-D_WIN32_WINNT=0x501" ) # Minimum Windows versions is Windows XP - add_definitions ( "-DWINVER=0x501" ) # Minimum Windows versions is Windows XP - add_definitions ( "-D_CRT_SECURE_NO_WARNINGS" ) # disable warnings promoting Microsoft's security enhanced CRT - add_definitions ( "-D_SCL_SECURE_NO_WARNINGS" ) # disable warnings triggered by Microsoft's checked iterators - add_flag ( CMAKE_CXX_FLAGS "-W4" ) # set warning level to maximum - add_flag ( CMAKE_CXX_FLAGS "-bigobj" ) # enable big object files - add_flag ( CMAKE_CXX_FLAGS "-wd4127" ) # disable compiler warning C4127: "conditional expression is constant" - add_flag ( CMAKE_CXX_FLAGS "-wd4512" ) # disable compiler warning C4512: "assignment operator could not be generated" - add_flag ( CMAKE_CXX_FLAGS "-wd4913" ) # disable compiler warning C4512: "user defined binary operator ',' exists but - # no overload could convert all operands, default built-in binary operator ',' - # used" - add_flag ( CMAKE_CXX_FLAGS "-wd4702" ) # disable compiler warning C4702: "unreachable code" - add_flag ( CMAKE_CXX_FLAGS "-wd4505" ) # disable compiler warning C4505: "unreferenced local function has been removed" - add_flag ( CMAKE_CXX_FLAGS "-wd4503" ) # disable compiler warning C4503: "'identifier' : decorated name length exceeded, name was truncated" - - if ( WARNING_ERROR ) - add_flag ( CMAKE_CXX_FLAGS "-WX" ) # Treat warnings as errors - endif ( ) - - if( NOT WARNING_DEPRECATED) - add_definitions( "-D_CRT_SECURE_NO_DEPRECATE" ) - add_definitions( "-D_SCL_SECURE_NO_DEPRECATE" ) - add_flag ( CMAKE_CXX_FLAGS "-wd4996" ) # Disable compiler warning C4996: "declared as deprecated" - endif() - -endif ( ) -############################################################################################################################ - ############################################################################################################################ ## ## Python @@ -649,12 +345,9 @@ endif() ## ############################################################################################################################# if ( WALBERLA_BUILD_WITH_PYTHON ) - if(WALBERLA_CXX_COMPILER_IS_INTEL) - # Intel C++17 support introduced in 2.6.2 (https://github.com/pybind/pybind11/pull/2729) - set(PYBIND11_MINIMUM_VERSION "2.6.2") - else() - set(PYBIND11_MINIMUM_VERSION "2.6.0") - endif() + if (NOT DEFINED PYBIND11_MINIMUM_VERSION) + set(PYBIND11_MINIMUM_VERSION "2.6.0") + endif() execute_process(COMMAND ${Python_EXECUTABLE} -c "import pybind11; print(pybind11._version.__version__)" OUTPUT_VARIABLE pybind11_VERSION ERROR_QUIET RESULT_VARIABLE pybind11_VERSION_RESULT) @@ -730,24 +423,6 @@ if ( Threads_FOUND ) endif() - -############################################################################################################################ -## -## backtrace may be in a separate library -## -############################################################################################################################ - -if ( NOT WIN32 AND (WALBERLA_CXX_COMPILER_IS_GNU OR WALBERLA_CXX_COMPILER_IS_INTEL OR WALBERLA_CXX_COMPILER_IS_CLANG)) - find_package ( Backtrace QUIET ) - if ( Backtrace_FOUND ) - list ( APPEND SERVICE_LIBS ${Backtrace_LIBRARIES} ) - set ( WALBERLA_BUILD_WITH_BACKTRACE ON ) - set ( WALBERLA_BACKTRACE_HEADER ${Backtrace_HEADER} ) - endif ( Backtrace_FOUND ) -endif() - - - ############################################################################################################################ ## ## MPI @@ -920,22 +595,6 @@ set( CMAKE_MODULE_LINKER_FLAGS_DEBUGOPTIMIZED ${CMAKE_MODULE_LINKER_FLAGS_DEBUG} set_property(GLOBAL PROPERTY DEBUG_CONFIGURATIONS Debug DebugOptimized) -if ( WALBERLA_CXX_COMPILER_IS_MSVC ) - string(REPLACE "/Od" "/O2" CMAKE_C_FLAGS_DEBUGOPTIMIZED ${CMAKE_C_FLAGS_DEBUGOPTIMIZED}) - string(REPLACE "/Ob0" "/Ob2" CMAKE_C_FLAGS_DEBUGOPTIMIZED ${CMAKE_C_FLAGS_DEBUGOPTIMIZED}) - string(REPLACE "/RTC1" "" CMAKE_C_FLAGS_DEBUGOPTIMIZED ${CMAKE_C_FLAGS_DEBUGOPTIMIZED}) - string(REPLACE "/Od" "/O2" CMAKE_CXX_FLAGS_DEBUGOPTIMIZED ${CMAKE_CXX_FLAGS_DEBUGOPTIMIZED}) - string(REPLACE "/Ob0" "/Ob2" CMAKE_CXX_FLAGS_DEBUGOPTIMIZED ${CMAKE_CXX_FLAGS_DEBUGOPTIMIZED}) - string(REPLACE "/RTC1" "" CMAKE_CXX_FLAGS_DEBUGOPTIMIZED ${CMAKE_CXX_FLAGS_DEBUGOPTIMIZED}) -elseif( WALBERLA_CXX_COMPILER_IS_GNU - OR WALBERLA_CXX_COMPILER_IS_INTEL - OR WALBERLA_CXX_COMPILER_IS_CLANG - OR WALBERLA_CXX_COMPILER_IS_INTELLLVM - OR WALBERLA_CXX_COMPILER_IS_FUJITSUCLANG ) - set( CMAKE_C_FLAGS_DEBUGOPTIMIZED "${CMAKE_C_FLAGS_DEBUGOPTIMIZED} -O3" ) - set( CMAKE_CXX_FLAGS_DEBUGOPTIMIZED "${CMAKE_CXX_FLAGS_DEBUGOPTIMIZED} -O3" ) -endif() - set(CMAKE_C_FLAGS_DEBUGOPTIMIZED ${CMAKE_C_FLAGS_DEBUGOPTIMIZED} CACHE STRING "Flags used by the compiler during DebugOptimized builds") set(CMAKE_CXX_FLAGS_DEBUGOPTIMIZED ${CMAKE_CXX_FLAGS_DEBUGOPTIMIZED} CACHE STRING @@ -977,7 +636,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 ) @@ -991,30 +650,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() - endif() - -else() - if ( WALBERLA_CXX_COMPILER_IS_CRAY ) - add_flag ( CMAKE_C_FLAGS "-h noomp" ) - add_flag ( CMAKE_CXX_FLAGS "-h noomp" ) + message(FATAL_ERROR "Could NOT enable OpenMP") endif() endif() ############################################################################################################################ @@ -1059,11 +695,6 @@ if ( WALBERLA_BUILD_WITH_CUDA ) endif ( ) endif ( ) -# old nvcc compilers and newer stdlibc++ are incompatible. This needs to be checked! -if (WALBERLA_STL_BOUNDS_CHECKS AND WALBERLA_BUILD_WITH_CODEGEN AND WALBERLA_BUILD_WITH_CUDA AND CMAKE_CUDA_COMPILER_VERSION VERSION_LESS "11.0" AND WALBERLA_CXX_COMPILER_IS_GNU AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS "9.0") - message(FATAL_ERROR "WALBERLA_STL_BOUNDS_CHECKS is not compatible with your CUDA compiler") -endif() - if (WALBERLA_BUILD_WITH_CUDA AND (CMAKE_CUDA_COMPILER_VERSION VERSION_LESS "11.0" OR CMAKE_VERSION VERSION_LESS 3.18.0)) # CUDA < 11 does not support C++17. std::experimental::any works with C++14, unlike std::any. set(CMAKE_CUDA_STANDARD 14) @@ -1112,35 +743,6 @@ endif ( ) -############################################################################################################################ -## -## Testing Coverage -## -############################################################################################################################ -if (WALBERLA_BUILD_WITH_GCOV AND CMAKE_COMPILER_IS_GNUCXX ) - add_flag ( CMAKE_CXX_FLAGS "--coverage" ) -endif() -############################################################################################################################ - - - -############################################################################################################################ -## -## Profiling with gprof -## -############################################################################################################################ - -if ( WALBERLA_BUILD_WITH_GPROF ) - if ( WALBERLA_CXX_COMPILER_IS_INTEL ) - add_flag ( CMAKE_CXX_FLAGS "-pg" ) - add_flag ( CMAKE_EXE_LINKER_FLAGS "-pg" ) - elseif ( WALBERLA_CXX_COMPILER_IS_GNU OR WALBERLA_CXX_COMPILER_IS_CLANG ) - add_flag ( CMAKE_CXX_FLAGS "-pg" ) - endif() -endif() -############################################################################################################################ - - ############################################################################################################################ ## ## Likwid Marker API @@ -1148,24 +750,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 ) @@ -1192,38 +785,15 @@ endif ( ) ############################################################################################################################ ## -## Some more compiler flags that need to happen after any try_compile (e.g. inside FindMPI) +## Some more compiler flags that need to happen after any try_compile (e.g. inside FindMPI) (not sure if still true) ## ############################################################################################################################ # Treat warnings as errors if ( WARNING_ERROR ) - if( WALBERLA_CXX_COMPILER_IS_GNU OR WALBERLA_CXX_COMPILER_IS_INTEL OR WALBERLA_CXX_COMPILER_IS_CLANG ) - add_flag ( CMAKE_CXX_FLAGS "-pedantic-errors -Werror" ) - elseif( WALBERLA_CXX_COMPILER_IS_MSVC ) - add_flag ( CMAKE_CXX_FLAGS "/WX" ) - elseif ( WALBERLA_CXX_COMPILER_IS_CRAY ) - add_flag ( CMAKE_CXX_FLAGS "-h error_on_warning" ) - endif() + set (CMAKE_COMPILE_WARNING_AS_ERROR ON) endif ( ) -############################################################################################################################ -## -## Sanitizer -## -############################################################################################################################ -if ( WALBERLA_SANITIZE_ADDRESS ) - if ( WALBERLA_CXX_COMPILER_IS_GNU OR WALBERLA_CXX_COMPILER_IS_CLANG ) - add_flag( CMAKE_CXX_FLAGS "-fsanitize=address") - endif() -endif() - -if ( WALBERLA_SANITIZE_UNDEFINED ) - if ( WALBERLA_CXX_COMPILER_IS_GNU OR WALBERLA_CXX_COMPILER_IS_CLANG ) - add_flag( CMAKE_CXX_FLAGS "-fsanitize=undefined") - endif() -endif() - ############################################################################################################################ ## ## Half precision @@ -1285,33 +855,6 @@ endif() - -############################################################################################################################ -# -# Fix compiler bugs -# -############################################################################################################################ - -# The NEC SX has a few issues in its standard library headers -if( WALBERLA_CXX_COMPILER_IS_NEC ) - file( WRITE ${walberla_BINARY_DIR}/CMakeFiles/src/math.h "#include_next <math.h>\n#undef fpclassify\n#undef signbit\n#undef isfinite\n#undef isinf\n#undef isnan\n#undef isnormal\n#undef isgreater\n#undef isgreaterequal\n#undef isless\n#undef islessequal\n#undef islessgreater\n#undef isunordered\n") - file( WRITE ${walberla_BINARY_DIR}/CMakeFiles/src/sys/types.h "#define uint_t SX_UINT_T\n#include \"/SX/usr/include/sys/types.h\" \n#undef uint_t\n") - file( WRITE ${walberla_BINARY_DIR}/CMakeFiles/src/sys/acl.h "#define uint_t SX_UINT_T\n#include \"/SX/usr/include/sys/acl.h\" \n#undef uint_t\n") - file( WRITE ${walberla_BINARY_DIR}/CMakeFiles/src/sys/if_ehcpl.h "#define uint_t SX_UINT_T\n#include \"/SX/usr/include/sys/if_ehcpl.h\"\n#undef uint_t\n") - file( WRITE ${walberla_BINARY_DIR}/CMakeFiles/src/sys/ptms.h "#define uint_t SX_UINT_T\n#include \"/SX/usr/include/sys/ptms.h\" \n#undef uint_t\n") - file( WRITE ${walberla_BINARY_DIR}/CMakeFiles/src/sys/stream.h "#define uint_t SX_UINT_T\n#include \"/SX/usr/include/sys/stream.h\" \n#undef uint_t\n") - file( WRITE ${walberla_BINARY_DIR}/CMakeFiles/src/sys/strsubr.h "#define uint_t SX_UINT_T\n#include \"/SX/usr/include/sys/strsubr.h\" \n#undef uint_t\n") - configure_file ( ${walberla_BINARY_DIR}/CMakeFiles/src/math.h ${walberla_BINARY_DIR}/src/math.h COPYONLY ) - configure_file ( ${walberla_BINARY_DIR}/CMakeFiles/src/sys/types.h ${walberla_BINARY_DIR}/src/sys/types.h COPYONLY ) - configure_file ( ${walberla_BINARY_DIR}/CMakeFiles/src/sys/acl.h ${walberla_BINARY_DIR}/src/sys/acl.h COPYONLY ) - configure_file ( ${walberla_BINARY_DIR}/CMakeFiles/src/sys/if_ehcpl.h ${walberla_BINARY_DIR}/src/sys/if_ehcpl.h COPYONLY ) - configure_file ( ${walberla_BINARY_DIR}/CMakeFiles/src/sys/ptms.h ${walberla_BINARY_DIR}/src/sys/ptms.h COPYONLY ) - 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() - - - ############################################################################################################################ # # Subdirectories @@ -1355,4 +898,4 @@ waLBerla_export() ############################################################################################################################ waLBerla_link_files_to_builddir( .clang-tidy ) -add_subdirectory( utilities ) +add_subdirectory( utilities ) \ No newline at end of file diff --git a/cmake/TestStdFilesystem.cpp b/cmake/TestStdFilesystem.cpp deleted file mode 100644 index 1caf5057db6c1253635b8810e2a7792bd56d249f..0000000000000000000000000000000000000000 --- a/cmake/TestStdFilesystem.cpp +++ /dev/null @@ -1,16 +0,0 @@ -#include <iostream> -#if defined(WALBERLA_USE_STD_FILESYSTEM) -#include <filesystem> -#elif defined(WALBERLA_USE_STD_EXPERIMENTAL_FILESYSTEM) -#include <experimental/filesystem> -#endif - -int main() { -#if defined(WALBERLA_USE_STD_FILESYSTEM) - std::filesystem::path p("/tmp/test.txt"); -#elif defined(WALBERLA_USE_STD_EXPERIMENTAL_FILESYSTEM) - std::experimental::filesystem::path p("/tmp/test.txt"); -#endif - std::cout << p.extension().string() << std::endl; - return 0; -} diff --git a/cmake/compileroptions/Clang.cmake b/cmake/compileroptions/Clang.cmake new file mode 100644 index 0000000000000000000000000000000000000000..d45f2c0353f1ac0f8a42de0363f31f539c8cdf7c --- /dev/null +++ b/cmake/compileroptions/Clang.cmake @@ -0,0 +1,108 @@ +message(STATUS "Setting Clang specific compiler options") + +if(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") + set(_apple_clang_minimal_version 11.0.0) + if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${_apple_clang_minimal_version}) + message(FATAL_ERROR "Clang version must be at least ${_apple_clang_minimal_version}!") + endif() +else() + set(_clang_minimal_version 7) + if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${_clang_minimal_version}) + message(FATAL_ERROR "Clang version must be at least ${_clang_minimal_version}!") + endif() +endif() + +if(WALBERLA_OPTIMIZE_FOR_LOCALHOST) + + if((CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" OR CMAKE_CXX_COMPILER_ID + STREQUAL "Clang") + AND CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "arm64") + # no -march=native available on this compiler, but there is currently only + # one such processor + else() + add_flag(CMAKE_CXX_FLAGS "-march=native") + add_flag(CMAKE_C_FLAGS "-march=native") + endif() + + if(EXISTS "/proc/sys/abi/sve_default_vector_length") + file(READ "/proc/sys/abi/sve_default_vector_length" SVE_LENGTH_BYTES) + string(STRIP "${SVE_LENGTH_BYTES}" SVE_LENGTH_BYTES) + math(EXPR SVE_LENGTH "${SVE_LENGTH_BYTES} * 8") + add_flag(CMAKE_CXX_FLAGS "-msve-vector-bits=${SVE_LENGTH}") + add_flag(CMAKE_C_FLAGS "-msve-vector-bits=${SVE_LENGTH}") + endif() +endif() + +if(NOT WARNING_DEPRECATED) + add_flag(CMAKE_CXX_FLAGS "-Wno-deprecated-declarations") +endif() + +add_flag(CMAKE_CXX_FLAGS + "-Wall -Wconversion -Wshadow -Wno-c++11-extensions -Qunused-arguments") + +if(WALBERLA_STL_BOUNDS_CHECKS) + add_definitions("-D_GLIBCXX_DEBUG") + add_definitions("-D_LIBCPP_DEBUG=1") +endif() + +if(WALBERLA_BUILD_WITH_FASTMATH) + add_flag(CMAKE_CXX_FLAGS "-ffast-math") +endif() + +if(NOT WIN32) + find_package(Backtrace QUIET) + if(Backtrace_FOUND) + list(APPEND SERVICE_LIBS ${Backtrace_LIBRARIES}) + set(WALBERLA_BUILD_WITH_BACKTRACE ON) + set(WALBERLA_BACKTRACE_HEADER ${Backtrace_HEADER}) + endif(Backtrace_FOUND) +endif() + +set(CMAKE_C_FLAGS_DEBUGOPTIMIZED "${CMAKE_C_FLAGS_DEBUGOPTIMIZED} -O3") +set(CMAKE_CXX_FLAGS_DEBUGOPTIMIZED "${CMAKE_CXX_FLAGS_DEBUGOPTIMIZED} -O3") + +if(WALBERLA_BUILD_WITH_GPROF) + add_flag(CMAKE_CXX_FLAGS "-pg") +endif() + +if(WALBERLA_SANITIZE_ADDRESS) + add_flag(CMAKE_CXX_FLAGS "-fsanitize=address") +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/Cray.cmake b/cmake/compileroptions/Cray.cmake new file mode 100644 index 0000000000000000000000000000000000000000..c8476f64d8f254b9342341d3b1e60a964c873c95 --- /dev/null +++ b/cmake/compileroptions/Cray.cmake @@ -0,0 +1,31 @@ +message(STATUS "Setting Cray specific compiler options") + +set(_cray_minimal_version 9) +if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${_cray_minimal_version}) + message(FATAL_ERROR "Cray version must be at least ${_cray_minimal_version}!") +endif() + +# Fixes linker errors with Cray compiler +add_flag(CMAKE_EXE_LINKER_FLAGS "-dynamic -L/opt/gcc/4.9.3/snos/lib64") + +# Silences compiler and linker warnings and information with the Cray compiler +set(CMAKE_INCLUDE_SYSTEM_FLAG_CXX "-isystem ") +add_flag(CMAKE_CXX_FLAGS "-h nomessage=1") # CC-1 The source file does not + # end with a new-line character. +add_flag(CMAKE_C_FLAGS "-DSQLITE_HAVE_ISNAN") # SQLite will not work correctly + # with the -ffast-math option of + # GCC. +add_flag(CMAKE_CXX_FLAGS "-DSQLITE_HAVE_ISNAN") # SQLite will not work correctly + # with the -ffast-math option of + # GCC. + +if(NOT WALBERLA_BUILD_WITH_OPENMP) + add_flag(CMAKE_C_FLAGS "-h noomp") + add_flag(CMAKE_CXX_FLAGS "-h noomp") +endif() + +# Treat warnings as errors leaving it since it is not supported by +# COMPILE_WARNING_AS_ERROR (cmake 3.24) +if(WARNING_ERROR) + add_flag(CMAKE_CXX_FLAGS "-h error_on_warning") +endif() diff --git a/cmake/compileroptions/FujitsuClang.cmake b/cmake/compileroptions/FujitsuClang.cmake new file mode 100644 index 0000000000000000000000000000000000000000..feb790871d52fa317c87e59a174beff9d39d4bc5 --- /dev/null +++ b/cmake/compileroptions/FujitsuClang.cmake @@ -0,0 +1,45 @@ +message(STATUS "Setting FujitsuClang specific compiler options") + +set(_clang_minimal_version 7) +if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${_clang_minimal_version}) + message(FATAL_ERROR "Clang version must be at least ${_clang_minimal_version}!") +endif() + +add_flag(CMAKE_CXX_FLAGS + "-Wall -Wconversion -Wshadow -Wno-c++11-extensions -Qunused-arguments") + +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) + + 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/GNU.cmake b/cmake/compileroptions/GNU.cmake new file mode 100644 index 0000000000000000000000000000000000000000..1e1e81b690f7fb4508b3770cb17aec7dbe2b3faf --- /dev/null +++ b/cmake/compileroptions/GNU.cmake @@ -0,0 +1,110 @@ +message(STATUS "Setting GNU specific compiler options") + +set(_gcc_minimal_version 8) +if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${_gcc_minimal_version}) + message(FATAL_ERROR "GCC version must be at least ${_gcc_minimal_version}!") +endif() + +# Profile guided optimization +if(WALBERLA_PROFILE_GENERATE) + add_flag(CMAKE_CXX_FLAGS "-fprofile-generate") +endif() +if(WALBERLA_PROFILE_USE) + add_flag(CMAKE_CXX_FLAGS "-fprofile-use") +endif() + +# common flags for g++ +if(NOT WARNING_DISABLE) + add_flag(CMAKE_CXX_FLAGS "-Wall -Wconversion -Wshadow") +endif() + +# architecture optimization +if(WALBERLA_OPTIMIZE_FOR_LOCALHOST) + add_flag(CMAKE_CXX_FLAGS "-march=native") +endif() + +if(EXISTS "/proc/sys/abi/sve_default_vector_length") + file(READ "/proc/sys/abi/sve_default_vector_length" SVE_LENGTH_BYTES) + string(STRIP "${SVE_LENGTH_BYTES}" SVE_LENGTH_BYTES) + math(EXPR SVE_LENGTH "${SVE_LENGTH_BYTES} * 8") + add_flag(CMAKE_CXX_FLAGS "-msve-vector-bits=${SVE_LENGTH}") + add_flag(CMAKE_C_FLAGS "-msve-vector-bits=${SVE_LENGTH}") +endif() + +# Warning flags +add_flag(CMAKE_CXX_FLAGS "-Wfloat-equal -Wextra") + +if(WARNING_PEDANTIC) + add_flag(CMAKE_CXX_FLAGS "-pedantic") +endif() + +# omit deprecated warnings +if(NOT WARNING_DEPRECATED) + add_flag(CMAKE_CXX_FLAGS "-Wno-deprecated-declarations") +endif() + +if(WALBERLA_STL_BOUNDS_CHECKS) + add_definitions("-D_GLIBCXX_DEBUG") + add_definitions("-D_LIBCPP_DEBUG=1") +endif() + +if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "12.0") + # Omit maybe-uninitialized for gcc 12 for now. Check if it is a bug or a real + # problem: + add_flag(CMAKE_CXX_FLAGS "-Wno-maybe-uninitialized") + # GCC 12 reports a "array bounds" warning at UniformBufferedScheme.h:297 + # (error: array subscript 26 is above array bounds of) when e.g. compiling the + # GhostLayerCommTest. Since this is most probably a bug in GCC disable the + # warning for now + add_flag(CMAKE_CXX_FLAGS "-Wno-array-bounds") +endif() + +if(WALBERLA_BUILD_WITH_FASTMATH) + add_flag(CMAKE_CXX_FLAGS "-ffast-math") +endif() + +if(NOT WIN32) + find_package(Backtrace QUIET) + if(Backtrace_FOUND) + list(APPEND SERVICE_LIBS ${Backtrace_LIBRARIES}) + set(WALBERLA_BUILD_WITH_BACKTRACE ON) + set(WALBERLA_BACKTRACE_HEADER ${Backtrace_HEADER}) + endif(Backtrace_FOUND) +endif() + +set(CMAKE_C_FLAGS_DEBUGOPTIMIZED "${CMAKE_C_FLAGS_DEBUGOPTIMIZED} -O3") +set(CMAKE_CXX_FLAGS_DEBUGOPTIMIZED "${CMAKE_CXX_FLAGS_DEBUGOPTIMIZED} -O3") + +# old nvcc compilers and newer stdlibc++ are incompatible. This needs to be +# checked! +if(WALBERLA_STL_BOUNDS_CHECKS + AND WALBERLA_BUILD_WITH_CODEGEN + AND WALBERLA_BUILD_WITH_CUDA + AND CMAKE_CUDA_COMPILER_VERSION VERSION_LESS "11.0" + AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS "9.0") + message( + FATAL_ERROR + "WALBERLA_STL_BOUNDS_CHECKS is not compatible with your CUDA compiler") +endif() + +if(WALBERLA_BUILD_WITH_GPROF) + add_flag(CMAKE_CXX_FLAGS "-pg") +endif() + +if(WALBERLA_SANITIZE_ADDRESS) + add_flag(CMAKE_CXX_FLAGS "-fsanitize=address") +endif() + +if(WALBERLA_SANITIZE_UNDEFINED) + add_flag(CMAKE_CXX_FLAGS "-fsanitize=undefined") +endif() + +# ############################################################################## +# +# Testing Coverage +# +# ############################################################################## +if(WALBERLA_BUILD_WITH_GCOV AND CMAKE_COMPILER_IS_GNUCXX) + add_flag(CMAKE_CXX_FLAGS "--coverage") +endif() +# ############################################################################## \ No newline at end of file diff --git a/cmake/compileroptions/IBM.cmake b/cmake/compileroptions/IBM.cmake new file mode 100644 index 0000000000000000000000000000000000000000..6c475c84f9cf1e453b3d6767c5ee660d56cd9a9c --- /dev/null +++ b/cmake/compileroptions/IBM.cmake @@ -0,0 +1,30 @@ +message(STATUS "Setting IBM specific compiler options") + +set(_ibm_minimal_version 17.1.1) +if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${_ibm_minimal_version}) + message(FATAL_ERROR "IBM compiler version must be at least ${_ibm_minimal_version}!") +endif() + +# Fixes linker errors with IBM compiler +add_flag(CMAKE_CXX_FLAGS "-qpic=large") + +# Silences compiler and linker warnings and information with the IBM compiler +add_flag(CMAKE_CXX_FLAGS "-qsuppress=1586-267") # 1586-267 (I) Inlining of + # specified subprogram failed + # due to the presence of a C++ + # exception handler +add_flag(CMAKE_CXX_FLAGS "-qsuppress=1586-266") # 1586-266 (I) Inlining of + # specified subprogram failed + # due to the presence of a + # global label +add_flag(CMAKE_CXX_FLAGS "-qsuppress=1500-030") # 1500-030: (I) INFORMATION: + # [...] Additional optimization + # may be attained by recompiling + # and specifying MAXMEM option + # with a value greater than + # 8192. +add_flag(CMAKE_C_FLAGS "-qsuppress=1500-030") # 1500-030: (I) INFORMATION: [...] + # Additional optimization may be + # attained by recompiling and + # specifying MAXMEM option with a + # value greater than 8192. \ No newline at end of file diff --git a/cmake/compileroptions/Intel.cmake b/cmake/compileroptions/Intel.cmake new file mode 100644 index 0000000000000000000000000000000000000000..b70664a0521b03484ad4267f85b22022873e7b3f --- /dev/null +++ b/cmake/compileroptions/Intel.cmake @@ -0,0 +1,80 @@ +message(STATUS "Setting Intel specific compiler options") + +set(_intel_minimal_version 19.0.0) +if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${_intel_minimal_version}) + message(FATAL_ERROR "IBM compiler version must be at least ${_intel_minimal_version}!") +endif() + +if(WALBERLA_PROFILE_GENERATE) + add_flag(CMAKE_CXX_FLAGS "-prof-gen") + file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/profile") + add_flag(CMAKE_CXX_FLAGS "-prof-dir${CMAKE_BINARY_DIR}/profile") +endif() + +if(WALBERLA_PROFILE_USE) + add_flag(CMAKE_CXX_FLAGS "-prof-use") + add_flag(CMAKE_CXX_FLAGS "-prof-dir${CMAKE_BINARY_DIR}/profile") +endif() + +# common flags for intel and g++ +if(NOT WARNING_DISABLE) + add_flag(CMAKE_CXX_FLAGS "-Wall -Wconversion -Wshadow") +endif() + +# architecture optimization +if(WALBERLA_OPTIMIZE_FOR_LOCALHOST) + add_flag(CMAKE_CXX_FLAGS "-march=native") + add_flag(CMAKE_C_FLAGS "-march=native") + + add_flag(CMAKE_CXX_FLAGS "-xhost") + add_flag(CMAKE_C_FLAGS "-xhost") + + if(EXISTS "/proc/sys/abi/sve_default_vector_length") + file(READ "/proc/sys/abi/sve_default_vector_length" SVE_LENGTH_BYTES) + string(STRIP "${SVE_LENGTH_BYTES}" SVE_LENGTH_BYTES) + math(EXPR SVE_LENGTH "${SVE_LENGTH_BYTES} * 8") + add_flag(CMAKE_CXX_FLAGS "-msve-vector-bits=${SVE_LENGTH}") + add_flag(CMAKE_C_FLAGS "-msve-vector-bits=${SVE_LENGTH}") + endif() +endif() + +# system headers are also supported by intel, but cmake does not recognize that +set(CMAKE_INCLUDE_SYSTEM_FLAG_CXX "-isystem ") +add_flag(CMAKE_CXX_FLAGS "-wd2928,2504,2259,1682,597") +# disable icc/icpc deprecation warning +add_flag(CMAKE_CXX_FLAGS "-diag-disable=10441") + +# omit deprecated warnings +if(NOT WARNING_DEPRECATED) + add_flag(CMAKE_CXX_FLAGS "-wd1478") # Disable compiler warning # 1478: + # "declared as deprecated" +endif() + +if(WALBERLA_STL_BOUNDS_CHECKS) + add_definitions("-D_GLIBCXX_DEBUG") + add_definitions("-D_LIBCPP_DEBUG=1") +endif() + +if(WALBERLA_BUILD_WITH_FASTMATH) + add_flag(CMAKE_CXX_FLAGS "-fp-model fast=2 -no-prec-sqrt -no-prec-div") +endif() + +if(NOT WIN32) + find_package(Backtrace QUIET) + if(Backtrace_FOUND) + list(APPEND SERVICE_LIBS ${Backtrace_LIBRARIES}) + set(WALBERLA_BUILD_WITH_BACKTRACE ON) + set(WALBERLA_BACKTRACE_HEADER ${Backtrace_HEADER}) + endif(Backtrace_FOUND) +endif() + +set(CMAKE_C_FLAGS_DEBUGOPTIMIZED "${CMAKE_C_FLAGS_DEBUGOPTIMIZED} -O3") +set(CMAKE_CXX_FLAGS_DEBUGOPTIMIZED "${CMAKE_CXX_FLAGS_DEBUGOPTIMIZED} -O3") + +if(WALBERLA_BUILD_WITH_GPROF) + add_flag(CMAKE_CXX_FLAGS "-pg") + add_flag(CMAKE_EXE_LINKER_FLAGS "-pg") +endif() + +# Intel C++17 support introduced in 2.6.2 (https://github.com/pybind/pybind11/pull/2729) +set(PYBIND11_MINIMUM_VERSION "2.6.2") \ No newline at end of file diff --git a/cmake/compileroptions/IntelLLVM.cmake b/cmake/compileroptions/IntelLLVM.cmake new file mode 100644 index 0000000000000000000000000000000000000000..03d41f83dd8811f86143b7ff50912ef9d1d2cc8f --- /dev/null +++ b/cmake/compileroptions/IntelLLVM.cmake @@ -0,0 +1,48 @@ +message(STATUS "Setting IntelLLVM specific compiler options") + +set(_intel_llvm_minimal_version 2021.0) +if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${_intel_llvm_minimal_version}) + message(FATAL_ERROR "IBM compiler version must be at least ${_intel_llvm_minimal_version}!") +endif() + +# fastmath +if(NOT WALBERLA_BUILD_WITH_FASTMATH) + add_flag(CMAKE_CXX_FLAGS "-fp-model=precise") +endif() + +set(CMAKE_C_FLAGS_DEBUGOPTIMIZED "${CMAKE_C_FLAGS_DEBUGOPTIMIZED} -O3") +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/MSVC.cmake b/cmake/compileroptions/MSVC.cmake new file mode 100644 index 0000000000000000000000000000000000000000..bbf7de29598edbb63e7e7aa6894230bc8487e033 --- /dev/null +++ b/cmake/compileroptions/MSVC.cmake @@ -0,0 +1,85 @@ +message(STATUS "Setting MSVC specific compiler options") + +set(_msvc_minimal_version 19.11) +if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${_msvc_minimal_version}) + message(FATAL_ERROR "MSVC version must be at least ${_msvc_minimal_version}!") +endif() + +if(WALBERLA_PROFILE_GENERATE) + add_flag(CMAKE_CXX_FLAGS "/GL") + add_flag(CMAKE_MODULE_LINKER_FLAGS "/LTCG:PGINSTRUMENT") + add_flag(CMAKE_SHARED_LINKER_FLAGS "/LTCG:PGINSTRUMENT") + add_flag(CMAKE_EXE_LINKER_FLAGS "/LTCG:PGINSTRUMENT") +endif() + +if(WALBERLA_PROFILE_USE) + add_flag(CMAKE_CXX_FLAGS "/GL") + add_flag(CMAKE_MODULE_LINKER_FLAGS "/LTCG:PGOPTIMIZE") + add_flag(CMAKE_SHARED_LINKER_FLAGS "/LTCG:PGOPTIMIZE") + add_flag(CMAKE_EXE_LINKER_FLAGS "/LTCG:PGOPTIMIZE") +endif() + +if(WALBERLA_BUILD_WITH_FASTMATH) + add_flag(CMAKE_CXX_FLAGS "/fp:fast") +endif() + +string(REGEX REPLACE "[/-]W[0-4]" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} +)# remove default warning flags + +option(WALBERLA_GROUP_PROJECTS + "Flag if the projects are grouped or in a flat hierarchy" ON) +option(WALBERLA_GROUP_FILES + "Flag if the files are grouped or in a flat hierarchy" ON) +set_property(GLOBAL PROPERTY USE_FOLDERS ${WALBERLA_GROUP_PROJECTS}) + +option(WALBERLA_VS_MULTI_PROCESS_BUILD "Use the /mp option for VS builds" ON) +if(WALBERLA_VS_MULTI_PROCESS_BUILD) + add_flag(CMAKE_CXX_FLAGS "-MP") # enable multi-threaded compiling +endif() + +add_definitions("-DNOMINMAX") # Disable Min/Max-Macros +add_definitions("-D_WIN32_WINNT=0x501") # Minimum Windows versions is Windows XP +add_definitions("-DWINVER=0x501") # Minimum Windows versions is Windows XP +add_definitions("-D_CRT_SECURE_NO_WARNINGS") # disable warnings promoting + # Microsoft's security enhanced CRT +add_definitions("-D_SCL_SECURE_NO_WARNINGS") # disable warnings triggered by + # Microsoft's checked iterators +add_flag(CMAKE_CXX_FLAGS "-W4") # set warning level to maximum +add_flag(CMAKE_CXX_FLAGS "-bigobj") # enable big object files +add_flag(CMAKE_CXX_FLAGS "-wd4127") # disable compiler warning C4127: + # "conditional expression is constant" +add_flag(CMAKE_CXX_FLAGS "-wd4512") # disable compiler warning C4512: + # "assignment operator could not be + # generated" +add_flag(CMAKE_CXX_FLAGS "-wd4913") # disable compiler warning C4512: "user + # defined binary operator ',' exists but +# no overload could convert all operands, default built-in binary operator ',' +# used" +add_flag(CMAKE_CXX_FLAGS "-wd4702") # disable compiler warning C4702: + # "unreachable code" +add_flag(CMAKE_CXX_FLAGS "-wd4505") # disable compiler warning C4505: + # "unreferenced local function has been + # removed" +add_flag(CMAKE_CXX_FLAGS "-wd4503") # disable compiler warning C4503: + # "'identifier' : decorated name length + # exceeded, name was truncated" + +if(NOT WARNING_DEPRECATED) + add_definitions("-D_CRT_SECURE_NO_DEPRECATE") + add_definitions("-D_SCL_SECURE_NO_DEPRECATE") + add_flag(CMAKE_CXX_FLAGS "-wd4996") # Disable compiler warning C4996: + # "declared as deprecated" +endif() + +string(REPLACE "/Od" "/O2" CMAKE_C_FLAGS_DEBUGOPTIMIZED + ${CMAKE_C_FLAGS_DEBUGOPTIMIZED}) +string(REPLACE "/Ob0" "/Ob2" CMAKE_C_FLAGS_DEBUGOPTIMIZED + ${CMAKE_C_FLAGS_DEBUGOPTIMIZED}) +string(REPLACE "/RTC1" "" CMAKE_C_FLAGS_DEBUGOPTIMIZED + ${CMAKE_C_FLAGS_DEBUGOPTIMIZED}) +string(REPLACE "/Od" "/O2" CMAKE_CXX_FLAGS_DEBUGOPTIMIZED + ${CMAKE_CXX_FLAGS_DEBUGOPTIMIZED}) +string(REPLACE "/Ob0" "/Ob2" CMAKE_CXX_FLAGS_DEBUGOPTIMIZED + ${CMAKE_CXX_FLAGS_DEBUGOPTIMIZED}) +string(REPLACE "/RTC1" "" CMAKE_CXX_FLAGS_DEBUGOPTIMIZED + ${CMAKE_CXX_FLAGS_DEBUGOPTIMIZED}) \ No newline at end of file diff --git a/src/core/Filesystem.h b/src/core/Filesystem.h index beaf77ad00e28335681dff0a85df599709a0f59d..bd3537242266d5747c6554fa89dc85bd6b187d54 100644 --- a/src/core/Filesystem.h +++ b/src/core/Filesystem.h @@ -23,23 +23,13 @@ #include "waLBerlaDefinitions.h" -#ifndef WALBERLA_USE_STD_EXPERIMENTAL_FILESYSTEM #include <filesystem> -#else -#define _LIBCPP_NO_EXPERIMENTAL_DEPRECATION_WARNING_FILESYSTEM -#include <experimental/filesystem> -#endif - namespace walberla { namespace filesystem { -#ifndef WALBERLA_USE_STD_EXPERIMENTAL_FILESYSTEM using namespace std::filesystem; -#else -using namespace std::experimental::filesystem; -#endif } -} +} \ No newline at end of file diff --git a/src/lbm_mesapd_coupling/partially_saturated_cells_method/codegen/PSMWrapperKernels.cu b/src/lbm_mesapd_coupling/partially_saturated_cells_method/codegen/PSMWrapperKernels.cu index 9aacf68d450bc8a6dbd2f8c5288f6116eaed2e0b..880eebf128f36fc21918f19ad32eea27565452af 100644 --- a/src/lbm_mesapd_coupling/partially_saturated_cells_method/codegen/PSMWrapperKernels.cu +++ b/src/lbm_mesapd_coupling/partially_saturated_cells_method/codegen/PSMWrapperKernels.cu @@ -47,13 +47,14 @@ __global__ void SetParticleVelocities(walberla::gpu::FieldAccessor< uint_t > nOv particleVelocitiesField.set(blockIdx_uint3, threadIdx_uint3); // Cell center is needed in order to compute the particle velocity at this WF point - const real_t cellCenter[] = { (blockStart.x + (threadIdx.x + 0.5) * dx), (blockStart.y + (blockIdx.x + 0.5) * dx), - (blockStart.z + (blockIdx.y + 0.5) * dx) }; + const real_t cellCenter[] = { real_t(blockStart.x + (threadIdx.x + real_t(0.5)) * dx), + real_t(blockStart.y + (blockIdx.x + real_t(0.5)) * dx), + real_t(blockStart.z + (blockIdx.y + real_t(0.5)) * dx) }; // Compute the particle velocity at the cell center for all overlapping particles for (uint_t p = 0; p < nOverlappingParticlesField.get(); p++) { - real_t particleVelocityAtWFPoint[] = { 0.0, 0.0, 0.0 }; + real_t particleVelocityAtWFPoint[] = { real_t(0.0), real_t(0.0), real_t(0.0) }; getVelocityAtWFPoint(particleVelocityAtWFPoint, &linearVelocities[idxField.get(p) * 3], &angularVelocities[idxField.get(p) * 3], &positions[idxField.get(p) * 3], cellCenter); particleVelocitiesField.get(p * 3 + 0) = particleVelocityAtWFPoint[0]; @@ -78,8 +79,9 @@ __global__ void ReduceParticleForces(walberla::gpu::FieldAccessor< uint_t > nOve particleForcesField.set(blockIdx_uint3, threadIdx_uint3); // Cell center is needed in order to compute the particle velocity at this WF point - const real_t cellCenter[] = { (blockStart.x + (threadIdx.x + 0.5) * dx), (blockStart.y + (blockIdx.x + 0.5) * dx), - (blockStart.z + (blockIdx.y + 0.5) * dx) }; + const real_t cellCenter[] = { real_t(blockStart.x + (threadIdx.x + real_t(0.5)) * dx), + real_t(blockStart.y + (blockIdx.x + real_t(0.5)) * dx), + real_t(blockStart.z + (blockIdx.y + real_t(0.5)) * dx) }; // Reduce the forces for all overlapping particles for (uint_t p = 0; p < nOverlappingParticlesField.get(); p++) @@ -98,4 +100,4 @@ __global__ void ReduceParticleForces(walberla::gpu::FieldAccessor< uint_t > nOve } // namespace gpu } // namespace psm } // namespace lbm_mesapd_coupling -} // namespace walberla +} // namespace walberla \ No newline at end of file diff --git a/src/waLBerlaDefinitions.in.h b/src/waLBerlaDefinitions.in.h index 2eb38e021025c9767b9d6ea39e1961d5322f0731..eddebea1d7206c381977d276f76fe4295e6ede6a 100644 --- a/src/waLBerlaDefinitions.in.h +++ b/src/waLBerlaDefinitions.in.h @@ -53,7 +53,6 @@ #cmakedefine WALBERLA_CXX_COMPILER_IS_MSVC #cmakedefine WALBERLA_CXX_COMPILER_IS_CLANG -#cmakedefine WALBERLA_USE_STD_EXPERIMENTAL_FILESYSTEM #cmakedefine WALBERLA_USE_STD_EXPERIMENTAL_ANY #cmakedefine WALBERLA_BUILD_WITH_BACKTRACE #ifdef WALBERLA_BUILD_WITH_BACKTRACE @@ -112,4 +111,4 @@ #define WALBERLA_PUBLIC #define WALBERLA_PRIVATE #endif -#define WALBERLA_PROTECTED WALBERLA_PUBLIC +#define WALBERLA_PROTECTED WALBERLA_PUBLIC \ No newline at end of file