Skip to content
Snippets Groups Projects
Commit b2a3b880 authored by Dominik Thoennes's avatar Dominik Thoennes
Browse files

Merge branch 'cmake_refactor' into 'master'

CMake refactoring

See merge request walberla/walberla!718
parents 65fcc780 60d07471
No related branches found
No related tags found
No related merge requests found
...@@ -25,12 +25,12 @@ ...@@ -25,12 +25,12 @@
## ##
############################################################################################################################ ############################################################################################################################
CMAKE_MINIMUM_REQUIRED (VERSION 3.14) CMAKE_MINIMUM_REQUIRED (VERSION 3.24)
PROJECT ( walberla ) 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 ) include ( waLBerlaFunctions )
...@@ -176,11 +176,6 @@ if( CMAKE_CXX_COMPILER MATCHES "icpc" OR CMAKE_CXX_COMPILER_ARG1 MATCHES "icpc" ...@@ -176,11 +176,6 @@ if( CMAKE_CXX_COMPILER MATCHES "icpc" OR CMAKE_CXX_COMPILER_ARG1 MATCHES "icpc"
ENDIF(XILD) ENDIF(XILD)
MARK_AS_ADVANCED(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" ) 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 # 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" ) add_flag ( CMAKE_CXX_FLAGS "-D_GLIBCXX_USE_CXX11_ABI=0" )
...@@ -193,6 +188,7 @@ mark_as_advanced ( WALBERLA_CXX_COMPILER_IS_INTEL ) ...@@ -193,6 +188,7 @@ mark_as_advanced ( WALBERLA_CXX_COMPILER_IS_INTEL )
# Check for Gnu compiler # Check for Gnu compiler
if ( CMAKE_COMPILER_IS_GNUCXX AND NOT WALBERLA_CXX_COMPILER_IS_INTEL ) if ( CMAKE_COMPILER_IS_GNUCXX AND NOT WALBERLA_CXX_COMPILER_IS_INTEL )
option ( WALBERLA_CXX_COMPILER_IS_GNU "Use gnu compiler" ON ) option ( WALBERLA_CXX_COMPILER_IS_GNU "Use gnu compiler" ON )
include(GNU)
else() else()
option ( WALBERLA_CXX_COMPILER_IS_GNU "Use gnu compiler" OFF ) option ( WALBERLA_CXX_COMPILER_IS_GNU "Use gnu compiler" OFF )
endif() endif()
...@@ -201,6 +197,7 @@ mark_as_advanced ( WALBERLA_CXX_COMPILER_IS_GNU ) ...@@ -201,6 +197,7 @@ mark_as_advanced ( WALBERLA_CXX_COMPILER_IS_GNU )
# Check for Visual Studio # Check for Visual Studio
if ( MSVC ) if ( MSVC )
option ( WALBERLA_CXX_COMPILER_IS_MSVC "Use Visual Studio compiler" ON ) option ( WALBERLA_CXX_COMPILER_IS_MSVC "Use Visual Studio compiler" ON )
include( MSVC )
else() else()
option ( WALBERLA_CXX_COMPILER_IS_MSVC "Use Visual Studio compiler" OFF ) option ( WALBERLA_CXX_COMPILER_IS_MSVC "Use Visual Studio compiler" OFF )
endif() endif()
...@@ -209,21 +206,15 @@ mark_as_advanced ( WALBERLA_CXX_COMPILER_IS_MSVC ) ...@@ -209,21 +206,15 @@ mark_as_advanced ( WALBERLA_CXX_COMPILER_IS_MSVC )
# Check for IBM compiler # Check for IBM compiler
if( CMAKE_CXX_COMPILER MATCHES "xlc" OR CMAKE_CXX_COMPILER_ARG1 MATCHES "xlc" ) if( CMAKE_CXX_COMPILER MATCHES "xlc" OR CMAKE_CXX_COMPILER_ARG1 MATCHES "xlc" )
option ( WALBERLA_CXX_COMPILER_IS_IBM "Use IBM compiler" ON ) option ( WALBERLA_CXX_COMPILER_IS_IBM "Use IBM compiler" ON )
include(IBM)
else() else()
option ( WALBERLA_CXX_COMPILER_IS_IBM "Use IBM compiler" OFF ) option ( WALBERLA_CXX_COMPILER_IS_IBM "Use IBM compiler" OFF )
endif() endif()
mark_as_advanced ( WALBERLA_CXX_COMPILER_IS_IBM ) 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" ) 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 ) option ( WALBERLA_CXX_COMPILER_IS_CLANG "Use clang compiler" ON )
include(Clang)
else() else()
option ( WALBERLA_CXX_COMPILER_IS_CLANG "Use clang compiler" OFF ) option ( WALBERLA_CXX_COMPILER_IS_CLANG "Use clang compiler" OFF )
endif() endif()
...@@ -232,21 +223,16 @@ mark_as_advanced ( WALBERLA_CXX_COMPILER_IS_CLANG ) ...@@ -232,21 +223,16 @@ mark_as_advanced ( WALBERLA_CXX_COMPILER_IS_CLANG )
# Check for Cray compiler # Check for Cray compiler
if( CMAKE_CXX_COMPILER_ID MATCHES Cray ) if( CMAKE_CXX_COMPILER_ID MATCHES Cray )
option ( WALBERLA_CXX_COMPILER_IS_CRAY "Use Cray compiler" ON ) option ( WALBERLA_CXX_COMPILER_IS_CRAY "Use Cray compiler" ON )
include(Cray)
else() else()
option ( WALBERLA_CXX_COMPILER_IS_CRAY "Use Cray compiler" OFF ) option ( WALBERLA_CXX_COMPILER_IS_CRAY "Use Cray compiler" OFF )
endif() endif()
mark_as_advanced ( WALBERLA_CXX_COMPILER_IS_CRAY ) 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 # Check for Fujitsu compiler
if( CMAKE_CXX_COMPILER_ID MATCHES FujitsuClang ) if( CMAKE_CXX_COMPILER_ID MATCHES FujitsuClang )
option ( WALBERLA_CXX_COMPILER_IS_FUJITSUCLANG "Use FujitsuClang compiler" ON ) option ( WALBERLA_CXX_COMPILER_IS_FUJITSUCLANG "Use FujitsuClang compiler" ON )
include(FujitsuClang)
else() else()
option ( WALBERLA_CXX_COMPILER_IS_FUJITSUCLANG "Use FujitsuClang compiler" OFF ) option ( WALBERLA_CXX_COMPILER_IS_FUJITSUCLANG "Use FujitsuClang compiler" OFF )
endif() endif()
...@@ -264,6 +250,7 @@ mark_as_advanced ( WALBERLA_CXX_COMPILER_IS_MPI_WRAPPER ) ...@@ -264,6 +250,7 @@ mark_as_advanced ( WALBERLA_CXX_COMPILER_IS_MPI_WRAPPER )
# Check for intel llvm compiler # Check for intel llvm compiler
if( CMAKE_CXX_COMPILER MATCHES "icpx" OR CMAKE_CXX_COMPILER_ARG1 MATCHES "icpx" ) if( CMAKE_CXX_COMPILER MATCHES "icpx" OR CMAKE_CXX_COMPILER_ARG1 MATCHES "icpx" )
option ( WALBERLA_CXX_COMPILER_IS_INTELLLVM "Use Intel LLVM compiler" ON ) option ( WALBERLA_CXX_COMPILER_IS_INTELLLVM "Use Intel LLVM compiler" ON )
include(IntelLLVM)
else() else()
option ( WALBERLA_CXX_COMPILER_IS_INTELLLVM "Use Intel LLVM compiler" OFF ) option ( WALBERLA_CXX_COMPILER_IS_INTELLLVM "Use Intel LLVM compiler" OFF )
endif() endif()
...@@ -279,194 +266,7 @@ mark_as_advanced ( WALBERLA_CXX_COMPILER_IS_INTELLLVM ) ...@@ -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 # Xcode generator disables -isystem flag, even though current versions of Xcode support it
if(CMAKE_GENERATOR STREQUAL "Xcode") if(CMAKE_GENERATOR STREQUAL "Xcode")
...@@ -475,19 +275,6 @@ if(CMAKE_GENERATOR STREQUAL "Xcode") ...@@ -475,19 +275,6 @@ if(CMAKE_GENERATOR STREQUAL "Xcode")
endif() 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 # disable Xcode 7.3+ linker deduplication pass to speed up linking in debug mode
#if ( APPLE ) #if ( APPLE )
# execute_process( COMMAND ${CMAKE_LINKER} -v OUTPUT_VARIABLE LINKER_VERSION ERROR_VARIABLE LINKER_VERSION ) # execute_process( COMMAND ${CMAKE_LINKER} -v OUTPUT_VARIABLE LINKER_VERSION ERROR_VARIABLE LINKER_VERSION )
...@@ -506,97 +293,6 @@ endif() ...@@ -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 ## Python
...@@ -649,12 +345,9 @@ endif() ...@@ -649,12 +345,9 @@ endif()
## ##
############################################################################################################################# #############################################################################################################################
if ( WALBERLA_BUILD_WITH_PYTHON ) if ( WALBERLA_BUILD_WITH_PYTHON )
if(WALBERLA_CXX_COMPILER_IS_INTEL) if (NOT DEFINED PYBIND11_MINIMUM_VERSION)
# Intel C++17 support introduced in 2.6.2 (https://github.com/pybind/pybind11/pull/2729) set(PYBIND11_MINIMUM_VERSION "2.6.0")
set(PYBIND11_MINIMUM_VERSION "2.6.2") endif()
else()
set(PYBIND11_MINIMUM_VERSION "2.6.0")
endif()
execute_process(COMMAND ${Python_EXECUTABLE} -c "import pybind11; print(pybind11._version.__version__)" execute_process(COMMAND ${Python_EXECUTABLE} -c "import pybind11; print(pybind11._version.__version__)"
OUTPUT_VARIABLE pybind11_VERSION ERROR_QUIET RESULT_VARIABLE pybind11_VERSION_RESULT) OUTPUT_VARIABLE pybind11_VERSION ERROR_QUIET RESULT_VARIABLE pybind11_VERSION_RESULT)
...@@ -730,24 +423,6 @@ if ( Threads_FOUND ) ...@@ -730,24 +423,6 @@ if ( Threads_FOUND )
endif() 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 ## MPI
...@@ -920,22 +595,6 @@ set( CMAKE_MODULE_LINKER_FLAGS_DEBUGOPTIMIZED ${CMAKE_MODULE_LINKER_FLAGS_DEBUG} ...@@ -920,22 +595,6 @@ set( CMAKE_MODULE_LINKER_FLAGS_DEBUGOPTIMIZED ${CMAKE_MODULE_LINKER_FLAGS_DEBUG}
set_property(GLOBAL PROPERTY DEBUG_CONFIGURATIONS Debug DebugOptimized) 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 set(CMAKE_C_FLAGS_DEBUGOPTIMIZED ${CMAKE_C_FLAGS_DEBUGOPTIMIZED} CACHE STRING
"Flags used by the compiler during DebugOptimized builds") "Flags used by the compiler during DebugOptimized builds")
set(CMAKE_CXX_FLAGS_DEBUGOPTIMIZED ${CMAKE_CXX_FLAGS_DEBUGOPTIMIZED} CACHE STRING set(CMAKE_CXX_FLAGS_DEBUGOPTIMIZED ${CMAKE_CXX_FLAGS_DEBUGOPTIMIZED} CACHE STRING
...@@ -977,7 +636,7 @@ endif() ...@@ -977,7 +636,7 @@ endif()
option ( WALBERLA_THREAD_SAFE_LOGGING "Enables/Disables thread-safe logging" ON ) 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 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_FRAMEWORK_PATH /opt/local/lib/libomp )
set( CMAKE_INCLUDE_PATH /opt/local/include/libomp ) set( CMAKE_INCLUDE_PATH /opt/local/include/libomp )
...@@ -991,30 +650,7 @@ if ( WALBERLA_BUILD_WITH_OPENMP ) ...@@ -991,30 +650,7 @@ if ( WALBERLA_BUILD_WITH_OPENMP )
include_directories( ${OpenMP_CXX_INCLUDE_DIRS} ) include_directories( ${OpenMP_CXX_INCLUDE_DIRS} )
endif() endif()
else() else()
#workarounds message(FATAL_ERROR "Could NOT enable OpenMP")
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" )
endif() endif()
endif() endif()
############################################################################################################################ ############################################################################################################################
...@@ -1059,11 +695,6 @@ if ( WALBERLA_BUILD_WITH_CUDA ) ...@@ -1059,11 +695,6 @@ if ( WALBERLA_BUILD_WITH_CUDA )
endif ( ) endif ( )
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)) 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. # CUDA < 11 does not support C++17. std::experimental::any works with C++14, unlike std::any.
set(CMAKE_CUDA_STANDARD 14) set(CMAKE_CUDA_STANDARD 14)
...@@ -1112,35 +743,6 @@ endif ( ) ...@@ -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 ## Likwid Marker API
...@@ -1148,24 +750,15 @@ endif() ...@@ -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_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 ) 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) if ( LIKWID_LIB AND LIKWID_INCLUDE_DIR)
set( LIKWID_FOUND 1) set( LIKWID_FOUND 1)
include_directories( ${LIKWID_INCLUDE_DIR}) include_directories( ${LIKWID_INCLUDE_DIR})
add_definitions ( "-DLIKWID_PERFMON" ) add_definitions ( "-DLIKWID_PERFMON" )
list ( APPEND SERVICE_LIBS ${LIKWID_LIB} ) list ( APPEND SERVICE_LIBS ${LIKWID_LIB} )
if( WALBERLA_CXX_COMPILER_IS_FUJITSUCLANG )
list ( APPEND SERVICE_LIBS ${LIKWIDLUA_LIB} ${LIKWIDHWLOC_LIB} )
endif()
else() else()
message(WARNING "likwid marker library not found. Set environment variable LIKWID_ROOT") 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 ) set ( WALBERLA_BUILD_WITH_LIKWID_MARKERS OFF CACHE BOOL "Compile in markers for likwid-perfctr" FORCE )
...@@ -1192,38 +785,15 @@ endif ( ) ...@@ -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 # Treat warnings as errors
if ( WARNING_ERROR ) if ( WARNING_ERROR )
if( WALBERLA_CXX_COMPILER_IS_GNU OR WALBERLA_CXX_COMPILER_IS_INTEL OR WALBERLA_CXX_COMPILER_IS_CLANG ) set (CMAKE_COMPILE_WARNING_AS_ERROR ON)
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()
endif ( ) 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 ## Half precision
...@@ -1285,33 +855,6 @@ endif() ...@@ -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 # Subdirectories
...@@ -1355,4 +898,4 @@ waLBerla_export() ...@@ -1355,4 +898,4 @@ waLBerla_export()
############################################################################################################################ ############################################################################################################################
waLBerla_link_files_to_builddir( .clang-tidy ) waLBerla_link_files_to_builddir( .clang-tidy )
add_subdirectory( utilities ) add_subdirectory( utilities )
\ No newline at end of file
#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;
}
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
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()
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
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
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
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
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
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
...@@ -23,23 +23,13 @@ ...@@ -23,23 +23,13 @@
#include "waLBerlaDefinitions.h" #include "waLBerlaDefinitions.h"
#ifndef WALBERLA_USE_STD_EXPERIMENTAL_FILESYSTEM
#include <filesystem> #include <filesystem>
#else
#define _LIBCPP_NO_EXPERIMENTAL_DEPRECATION_WARNING_FILESYSTEM
#include <experimental/filesystem>
#endif
namespace walberla { namespace walberla {
namespace filesystem { namespace filesystem {
#ifndef WALBERLA_USE_STD_EXPERIMENTAL_FILESYSTEM
using namespace std::filesystem; using namespace std::filesystem;
#else
using namespace std::experimental::filesystem;
#endif
} }
} }
\ No newline at end of file
...@@ -47,13 +47,14 @@ __global__ void SetParticleVelocities(walberla::gpu::FieldAccessor< uint_t > nOv ...@@ -47,13 +47,14 @@ __global__ void SetParticleVelocities(walberla::gpu::FieldAccessor< uint_t > nOv
particleVelocitiesField.set(blockIdx_uint3, threadIdx_uint3); particleVelocitiesField.set(blockIdx_uint3, threadIdx_uint3);
// Cell center is needed in order to compute the particle velocity at this WF point // 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), const real_t cellCenter[] = { real_t(blockStart.x + (threadIdx.x + real_t(0.5)) * dx),
(blockStart.z + (blockIdx.y + 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 // Compute the particle velocity at the cell center for all overlapping particles
for (uint_t p = 0; p < nOverlappingParticlesField.get(); p++) 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], getVelocityAtWFPoint(particleVelocityAtWFPoint, &linearVelocities[idxField.get(p) * 3],
&angularVelocities[idxField.get(p) * 3], &positions[idxField.get(p) * 3], cellCenter); &angularVelocities[idxField.get(p) * 3], &positions[idxField.get(p) * 3], cellCenter);
particleVelocitiesField.get(p * 3 + 0) = particleVelocityAtWFPoint[0]; particleVelocitiesField.get(p * 3 + 0) = particleVelocityAtWFPoint[0];
...@@ -78,8 +79,9 @@ __global__ void ReduceParticleForces(walberla::gpu::FieldAccessor< uint_t > nOve ...@@ -78,8 +79,9 @@ __global__ void ReduceParticleForces(walberla::gpu::FieldAccessor< uint_t > nOve
particleForcesField.set(blockIdx_uint3, threadIdx_uint3); particleForcesField.set(blockIdx_uint3, threadIdx_uint3);
// Cell center is needed in order to compute the particle velocity at this WF point // 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), const real_t cellCenter[] = { real_t(blockStart.x + (threadIdx.x + real_t(0.5)) * dx),
(blockStart.z + (blockIdx.y + 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 // Reduce the forces for all overlapping particles
for (uint_t p = 0; p < nOverlappingParticlesField.get(); p++) for (uint_t p = 0; p < nOverlappingParticlesField.get(); p++)
...@@ -98,4 +100,4 @@ __global__ void ReduceParticleForces(walberla::gpu::FieldAccessor< uint_t > nOve ...@@ -98,4 +100,4 @@ __global__ void ReduceParticleForces(walberla::gpu::FieldAccessor< uint_t > nOve
} // namespace gpu } // namespace gpu
} // namespace psm } // namespace psm
} // namespace lbm_mesapd_coupling } // namespace lbm_mesapd_coupling
} // namespace walberla } // namespace walberla
\ No newline at end of file
...@@ -53,7 +53,6 @@ ...@@ -53,7 +53,6 @@
#cmakedefine WALBERLA_CXX_COMPILER_IS_MSVC #cmakedefine WALBERLA_CXX_COMPILER_IS_MSVC
#cmakedefine WALBERLA_CXX_COMPILER_IS_CLANG #cmakedefine WALBERLA_CXX_COMPILER_IS_CLANG
#cmakedefine WALBERLA_USE_STD_EXPERIMENTAL_FILESYSTEM
#cmakedefine WALBERLA_USE_STD_EXPERIMENTAL_ANY #cmakedefine WALBERLA_USE_STD_EXPERIMENTAL_ANY
#cmakedefine WALBERLA_BUILD_WITH_BACKTRACE #cmakedefine WALBERLA_BUILD_WITH_BACKTRACE
#ifdef WALBERLA_BUILD_WITH_BACKTRACE #ifdef WALBERLA_BUILD_WITH_BACKTRACE
...@@ -112,4 +111,4 @@ ...@@ -112,4 +111,4 @@
#define WALBERLA_PUBLIC #define WALBERLA_PUBLIC
#define WALBERLA_PRIVATE #define WALBERLA_PRIVATE
#endif #endif
#define WALBERLA_PROTECTED WALBERLA_PUBLIC #define WALBERLA_PROTECTED WALBERLA_PUBLIC
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment