diff --git a/cmake/compileroptions/Clang.cmake b/cmake/compileroptions/Clang.cmake index 1b59e426f30fc86807a79fd6c48d2d9fed04f90f..4bba387b204dce3ae9112cde362ed77656aca722 100644 --- a/cmake/compileroptions/Clang.cmake +++ b/cmake/compileroptions/Clang.cmake @@ -1,94 +1,106 @@ message(STATUS "Setting Clang specific compiler options") -if (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") - if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 11.0.0) - message(FATAL_ERROR "Clang version must be at least 11!") - endif() + +if(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") + if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 11.0.0) + message(FATAL_ERROR "Clang version must be at least 11!") + endif() else() - if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7) - message(FATAL_ERROR "Clang version must be at least 7!") -endif() + if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7) + message(FATAL_ERROR "Clang version must be at least 7!") + endif() endif() +if(WALBERLA_OPTIMIZE_FOR_LOCALHOST) -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(( 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() + 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") +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" ) +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" ) +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") +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 ) +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" ) +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" ) +if(WALBERLA_BUILD_WITH_GPROF) + add_flag(CMAKE_CXX_FLAGS "-pg") endif() -if ( WALBERLA_SANITIZE_ADDRESS ) - add_flag( CMAKE_CXX_FLAGS "-fsanitize=address") +if(WALBERLA_SANITIZE_ADDRESS) + add_flag(CMAKE_CXX_FLAGS "-fsanitize=address") endif() -if ( WALBERLA_SANITIZE_UNDEFINED ) - add_flag( CMAKE_CXX_FLAGS "-fsanitize=undefined") +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() +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 + # 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() diff --git a/cmake/compileroptions/Cray.cmake b/cmake/compileroptions/Cray.cmake index 54613d141710ca95e84b0dd5405a4dff44030020..95b88979463b19e3cb2e8550b5564e4ebba4bdcf 100644 --- a/cmake/compileroptions/Cray.cmake +++ b/cmake/compileroptions/Cray.cmake @@ -1,27 +1,26 @@ message(STATUS "Setting Cray specific compiler options") # 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() +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 -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() +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 ) - if ( WALBERLA_CXX_COMPILER_IS_CRAY ) - add_flag ( CMAKE_C_FLAGS "-h noomp" ) - add_flag ( CMAKE_CXX_FLAGS "-h noomp" ) - endif() +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 ( ) \ No newline at end of file +# 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 index f710b9a34c605ca0c44d02b3b34a953d652a798c..0d7f9282feafa4e3c779af867dcfeba4372ec5e1 100644 --- a/cmake/compileroptions/FujitsuClang.cmake +++ b/cmake/compileroptions/FujitsuClang.cmake @@ -1,26 +1,40 @@ message(STATUS "Setting FujitsuClang specific compiler options") -add_flag ( CMAKE_CXX_FLAGS "-Wall -Wconversion -Wshadow -Wno-c++11-extensions -Qunused-arguments" ) +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" ) +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 ) +if(WALBERLA_BUILD_WITH_LIKWID_MARKERS) + find_library(LIKWID_LIB likwid HINTS $ENV{LIKWID_LIBDIR} + $ENV{LIKWID_ROOT}/lib) + find_path(LIKWID_INCLUDE_DIR likwid.h HINTS $ENV{LIKWID_INCDIR} + $ENV{LIKWID_ROOT}/include) - # For some reason, these turned out to be necessary when building with likwid on Fugaku - find_library( LIKWIDLUA_LIB NAMES likwid-lua HINTS $ENV{LIKWID_LIBDIR} $ENV{LIKWID_ROOT}/lib ) - find_library( LIKWIDHWLOC_LIB NAMES likwid-hwloc HINTS $ENV{LIKWID_LIBDIR} $ENV{LIKWID_ROOT}/lib ) + # For some reason, these turned out to be necessary when building with likwid + # on Fugaku + find_library( + LIKWIDLUA_LIB + NAMES likwid-lua + HINTS $ENV{LIKWID_LIBDIR} $ENV{LIKWID_ROOT}/lib) + find_library( + LIKWIDHWLOC_LIB + NAMES likwid-hwloc + HINTS $ENV{LIKWID_LIBDIR} $ENV{LIKWID_ROOT}/lib) - if ( LIKWID_LIB AND LIKWID_INCLUDE_DIR) - 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 + 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() diff --git a/cmake/compileroptions/GNU.cmake b/cmake/compileroptions/GNU.cmake index f991232943170dfe4719353e15492e85c4c66991..b9839cf450d17037458f9440d6ffb7cdce2111cd 100644 --- a/cmake/compileroptions/GNU.cmake +++ b/cmake/compileroptions/GNU.cmake @@ -1,101 +1,109 @@ message(STATUS "Setting GNU specific compiler options") -if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8) - message(FATAL_ERROR "GCC version must be at least 8!") +if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8) + message(FATAL_ERROR "GCC version must be at least 8!") endif() # Profile guided optimization -if ( WALBERLA_PROFILE_GENERATE ) - add_flag( CMAKE_CXX_FLAGS "-fprofile-generate" ) +if(WALBERLA_PROFILE_GENERATE) + add_flag(CMAKE_CXX_FLAGS "-fprofile-generate") endif() -if ( WALBERLA_PROFILE_USE ) - add_flag( CMAKE_CXX_FLAGS "-fprofile-use" ) +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" ) +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" ) +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}" ) +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 ( ) +add_flag(CMAKE_CXX_FLAGS "-Wfloat-equal -Wextra") - # omit deprecated warnings -if( NOT WARNING_DEPRECATED) - add_flag ( CMAKE_CXX_FLAGS "-Wno-deprecated-declarations") - endif() +if(WARNING_PEDANTIC) + add_flag(CMAKE_CXX_FLAGS "-pedantic") +endif() -if ( WALBERLA_STL_BOUNDS_CHECKS ) - add_definitions ( "-D_GLIBCXX_DEBUG" ) - add_definitions ( "-D_LIBCPP_DEBUG=1" ) +# omit deprecated warnings +if(NOT WARNING_DEPRECATED) + add_flag(CMAKE_CXX_FLAGS "-Wno-deprecated-declarations") 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" ) +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") +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 (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 ) +if(WALBERLA_BUILD_WITH_FASTMATH) + add_flag(CMAKE_CXX_FLAGS "-ffast-math") endif() -set( CMAKE_C_FLAGS_DEBUGOPTIMIZED "${CMAKE_C_FLAGS_DEBUGOPTIMIZED} -O3" ) -set( CMAKE_CXX_FLAGS_DEBUGOPTIMIZED "${CMAKE_CXX_FLAGS_DEBUGOPTIMIZED} -O3" ) +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() -# 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") +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" ) +if(WALBERLA_BUILD_WITH_GPROF) + add_flag(CMAKE_CXX_FLAGS "-pg") endif() -if ( WALBERLA_SANITIZE_ADDRESS ) - add_flag( CMAKE_CXX_FLAGS "-fsanitize=address") +if(WALBERLA_SANITIZE_ADDRESS) + add_flag(CMAKE_CXX_FLAGS "-fsanitize=address") endif() -if ( WALBERLA_SANITIZE_UNDEFINED ) - add_flag( CMAKE_CXX_FLAGS "-fsanitize=undefined") +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" ) +# ############################################################################## +# +# 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 index eb9e3bce5362bfb1939260b42b0506e3367dc01b..ca76321c31b16b673f035ee5f9de028daae1ed79 100644 --- a/cmake/compileroptions/IBM.cmake +++ b/cmake/compileroptions/IBM.cmake @@ -1,18 +1,20 @@ message(STATUS "Setting IBM specific compiler options") -if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 17.1.1) - message(FATAL_ERROR "IBM compiler version must be at least 17.1.1!") +if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 17.1.1) + message(FATAL_ERROR "IBM compiler version must be at least 17.1.1!") endif() # Fixes linker errors with IBM compiler -if( WALBERLA_CXX_COMPILER_IS_IBM ) - add_flag ( CMAKE_CXX_FLAGS "-qpic=large" ) -endif() +add_flag(CMAKE_CXX_FLAGS "-qpic=large") # 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() \ No newline at end of file +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. diff --git a/cmake/compileroptions/Intel.cmake b/cmake/compileroptions/Intel.cmake index b47d31b49eb91dacea1224e17c048f1bb47f4fd0..f8ca96287408c0cedf6159914503ec520cc2980a 100644 --- a/cmake/compileroptions/Intel.cmake +++ b/cmake/compileroptions/Intel.cmake @@ -1,72 +1,72 @@ message(STATUS "Setting Intel specific compiler options") -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" ) +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" ) +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" ) +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" ) +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" ) + 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() + 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" ) +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" ) +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" +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" ) +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" ) +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 ) +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" ) +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() \ No newline at end of file +if(WALBERLA_BUILD_WITH_GPROF) + add_flag(CMAKE_CXX_FLAGS "-pg") + add_flag(CMAKE_EXE_LINKER_FLAGS "-pg") +endif() diff --git a/cmake/compileroptions/IntelLLVM.cmake b/cmake/compileroptions/IntelLLVM.cmake index 4fb4783aa3b0ce727893ec315fa6efbf4cc66fc2..82bdd400c63f21342dd57eca18de1d4bee027fdc 100644 --- a/cmake/compileroptions/IntelLLVM.cmake +++ b/cmake/compileroptions/IntelLLVM.cmake @@ -1,35 +1,43 @@ message(STATUS "Setting IntelLLVM specific compiler options") -#fastmath -if ( NOT WALBERLA_BUILD_WITH_FASTMATH ) - add_flag( CMAKE_CXX_FLAGS "-fp-model=precise") +# 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" ) +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") +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 + # 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() diff --git a/cmake/compileroptions/MSVC.cmake b/cmake/compileroptions/MSVC.cmake index f904e8d1dad6d5569f05ab926e5cdfdba815b429..4bd400df5401d37623e66e61706b1a1919e59a0c 100644 --- a/cmake/compileroptions/MSVC.cmake +++ b/cmake/compileroptions/MSVC.cmake @@ -1,66 +1,84 @@ message(STATUS "Setting MSVC specific compiler options") -if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.11) - message(FATAL_ERROR "MSVC version must be at least 19.11!") +if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.11) + message(FATAL_ERROR "MSVC version must be at least 19.11!") 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" ) +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" ) +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" ) +if(WALBERLA_BUILD_WITH_FASTMATH) + add_flag(CMAKE_CXX_FLAGS "/fp:fast") endif() -if ( WALBERLA_CXX_COMPILER_IS_MSVC ) - string( REGEX REPLACE "[/-]W[0-4]" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} ) # remove default warning flags +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_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" +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() - 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() +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" -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() -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}) +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}) diff --git a/cmake/compileroptions/NEC.cmake b/cmake/compileroptions/NEC.cmake index 17ec77e04d8b326d2dc478dc4c41bb61ad878e1e..0fff82a93c0849459199f30c9975a91d3c46bd1e 100644 --- a/cmake/compileroptions/NEC.cmake +++ b/cmake/compileroptions/NEC.cmake @@ -1,56 +1,81 @@ message(STATUS "Setting NEC specific compiler options") # 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() - -if( WALBERLA_CXX_COMPILER_IS_NEC ) - add_flag ( CMAKE_CXX_FLAGS "-wall" ) -endif() +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") +add_flag(CMAKE_CXX_FLAGS "-wall") -############################################################################################################################ +# ############################################################################## # # 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() - +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) -if ( WALBERLA_BUILD_WITH_OPENMP ) - message( STATUS "Enabling OpenMP workaround for NEC") - add_flag ( CMAKE_C_FLAGS "-Popenmp" ) - add_flag ( CMAKE_CXX_FLAGS "-Popenmp" ) -endif() \ No newline at end of file +if(WALBERLA_BUILD_WITH_OPENMP) + message(STATUS "Enabling OpenMP workaround for NEC") + add_flag(CMAKE_C_FLAGS "-Popenmp") + add_flag(CMAKE_CXX_FLAGS "-Popenmp") +endif() diff --git a/cmake/compileroptions/PGI.cmake b/cmake/compileroptions/PGI.cmake index 10e444da374de5fd4fb5c9e3dcfd43d3ab15051b..2f2e38078582d6526154248a2ba1a815bbe5cb57 100644 --- a/cmake/compileroptions/PGI.cmake +++ b/cmake/compileroptions/PGI.cmake @@ -1,16 +1,18 @@ message(STATUS "Setting Cray specific compiler options") # 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() \ No newline at end of file +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