diff --git a/ThirdParty/vtkdiff b/ThirdParty/vtkdiff index bc683ea5cc89717aef513c73b87b63b7d008c829..099e83e7a1b94dc9901e6875acadbb3b5464ab75 160000 --- a/ThirdParty/vtkdiff +++ b/ThirdParty/vtkdiff @@ -1 +1 @@ -Subproject commit bc683ea5cc89717aef513c73b87b63b7d008c829 +Subproject commit 099e83e7a1b94dc9901e6875acadbb3b5464ab75 diff --git a/scripts/cmake/CCacheSetup.cmake b/scripts/cmake/CCacheSetup.cmake index 9e2f080ac6ce92a184901e940d39b776f6de4516..a6f982ab13107adc8e3bc4b3dbbc065199fc4b6e 100644 --- a/scripts/cmake/CCacheSetup.cmake +++ b/scripts/cmake/CCacheSetup.cmake @@ -20,7 +20,7 @@ set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache) set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache) if(COMPILER_IS_CLANG) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Qunused-arguments") + add_compile_options(-Qunused-arguments) endif() if($ENV{TRAVIS}) diff --git a/scripts/cmake/ClangSanitizer.cmake b/scripts/cmake/ClangSanitizer.cmake index ef9b7b29f039c02a25a43b526b3fddba6fb72671..fc94bb039f74a6b465873626f1beec26263f9c72 100644 --- a/scripts/cmake/ClangSanitizer.cmake +++ b/scripts/cmake/ClangSanitizer.cmake @@ -15,5 +15,5 @@ if(OGS_UNDEFINED_BEHAVIOR_SANITIZER) endif() if(DEFINED SANITIZE_FLAG_VALUE) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=${SANITIZE_FLAG_VALUE} ${ADDITIONAL_FLAGS}") + add_compile_options(-fsanitize=${SANITIZE_FLAG_VALUE} ${ADDITIONAL_FLAGS}) endif() diff --git a/scripts/cmake/CompilerSetup.cmake b/scripts/cmake/CompilerSetup.cmake index 047de1148f7b8deb0a2e63c5ea7162e9073502bc..fe6a9672d88884cbcf509b343863ef8ae9704f44 100644 --- a/scripts/cmake/CompilerSetup.cmake +++ b/scripts/cmake/CompilerSetup.cmake @@ -1,8 +1,3 @@ -include(ResetConfigurations) # To Debug, Release, RelWithDebInfo -include(DisableCompilerFlag) -include(MSVCMultipleProcessCompile) # /MP switch (multi processor) for VS -set(CMAKE_OSX_ARCHITECTURES "x86_64") - # C++ standard setup set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED ON) @@ -16,7 +11,6 @@ if(OGS_USE_PCH) endif() # Set compiler helper variables - if(${CMAKE_CXX_COMPILER_ID} MATCHES "Clang") set(COMPILER_IS_CLANG TRUE CACHE INTERNAL "") elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") @@ -36,129 +30,99 @@ if(BUILD_SHARED_LIBS) set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE) endif() -if(OGS_ENABLE_AVX2) - set(CPU_FLAGS "-mavx2 -march=core-avx2") -elseif(OGS_CPU_ARCHITECTURE STREQUAL "generic") - set(CPU_FLAGS "-mtune=generic") -else() - set(CPU_FLAGS "-march=${OGS_CPU_ARCHITECTURE}") -endif() - -### GNU C/CXX compiler -if(COMPILER_IS_GCC) - if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.9") - message(FATAL_ERROR "GCC minimum required version is 4.9! You are \ - using ${CMAKE_CXX_COMPILER_VERSION}.") - endif() +### GNU-like compiler +if(COMPILER_IS_GCC OR COMPILER_IS_CLANG OR COMPILER_IS_INTEL) if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug") - message(STATUS "Set GCC release flags") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -DNDEBUG") - else() + message(STATUS "Set release compiler flags") + add_compile_options(-O3) + elseif(NOT STL_NO_DEBUG) # Enable assertions in STL in debug mode. - if(NOT STL_NO_DEBUG) - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} \ - -D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_ASSERT \ - -D_GLIBCXX_DEBUG_PEDASSERT -D_GLIBCXX_DEBUG_VERIFY") - endif() - endif() - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CPU_FLAGS} -Wno-deprecated -Wall \ - -Wextra -fext-numeric-literals") -endif() # COMPILER_IS_GCC - -### Clang -if(COMPILER_IS_CLANG) - if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "3.5") - message(FATAL_ERROR "Aborting: Clang 3.5 is required! Found version \ - ${CMAKE_CXX_COMPILER_VERSION}") + add_compile_options( + -D_GLIBCXX_DEBUG + -D_GLIBCXX_DEBUG_ASSERT + -D_GLIBCXX_DEBUG_PEDASSERT + -D_GLIBCXX_DEBUG_VERIFY + ) endif() - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CPU_FLAGS} -Wall \ - -Wno-c++98-compat-pedantic") - if(CMAKE_BUILD_TYPE STREQUAL "Debug") - # Enable assertions in STL in debug mode. - if(NOT STL_NO_DEBUG) - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} \ - -D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_ASSERT \ - -D_GLIBCXX_DEBUG_PEDASSERT -D_GLIBCXX_DEBUG_VERIFY") + add_compile_options( + -Wall + -Wextra + -Wno-c++98-compat-pedantic + -DOPENMP_LOOP_TYPE=unsigned + ) + + # Profiling + if(OGS_PROFILE) + if(NOT CMAKE_BUILD_TYPE STREQUAL "Release") + message(STATUS "When using profiling you should set CMAKE_BUILD_TYPE \ + to Release.") endif() + set(PROFILE_FLAGS "-pg -fno-omit-frame-pointer -O2 -DNDEBUG") + # clang compiler does not know the following flags + if(NOT COMPILER_IS_CLANG) + set(PROFILE_FLAGS "${PROFILE_FLAGS} -fno-inline-functions-called-once \ + -fno-optimize-sibling-calls") + endif() + add_compile_options(${PROFILE_ARGS}) endif() - include(ClangSanitizer) -endif() # COMPILER_IS_CLANG - -### Intel compiler -if(COMPILER_IS_INTEL) - if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug") - message(STATUS "Set Intel release flags") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -DNDEBUG") + if(OGS_ENABLE_AVX2) + set(CPU_FLAGS "-mavx2 -march=core-avx2") + elseif(OGS_CPU_ARCHITECTURE STREQUAL "generic") + set(CPU_FLAGS "-mtune=generic") + else() + set(CPU_FLAGS "-march=${OGS_CPU_ARCHITECTURE}") endif() - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -xHOST") -endif() # COMPILER_IS_INTEL -# Profiling -if(OGS_PROFILE) - if(NOT CMAKE_BUILD_TYPE STREQUAL "Release") - message(STATUS "When using profiling you should set CMAKE_BUILD_TYPE \ - to Release.") - endif() - set(PROFILE_FLAGS "-pg -fno-omit-frame-pointer -O2 -DNDEBUG") - # clang compiler does not know the following flags - if(NOT COMPILER_IS_CLANG) - set(PROFILE_FLAGS "${PROFILE_FLAGS} -fno-inline-functions-called-once \ - -fno-optimize-sibling-calls") + if(COMPILER_IS_GCC) + if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.9") + message(FATAL_ERROR "GCC minimum required version is 4.9! You are \ + using ${CMAKE_CXX_COMPILER_VERSION}.") + endif() + add_compile_options(-fext-numeric-literals) endif() - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${PROFILE_FLAGS}") -endif() -### Windows -if(WIN32) - ## For Visual Studio compiler - if(MSVC) - if(OGS_CPU_ARCHITECTURE STREQUAL "native") - set(CPU_FLAGS "/favor:blend") - else() - set(CPU_FLAGS "/favor:${OGS_CPU_ARCHITECTURE}") + if(COMPILER_IS_CLANG) + if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "3.5") + message(FATAL_ERROR "Aborting: Clang 3.5 is required! Found version \ + ${CMAKE_CXX_COMPILER_VERSION}") endif() - if(OGS_ENABLE_AVX2) - set(CPU_FLAGS "${CPU_FLAGS} /arch:AVX2") - endif() - add_definitions( - -D_CRT_SECURE_NO_WARNINGS - -D_CRT_NONSTDC_NO_WARNINGS - -D_CRT_XNONSTDC_NO_WARNINGS - -D__restrict__=__restrict # this fixes #5 - # This fixes compile errors with - # std::numeric_limits<T>::min() / max() - -DNOMINMAX - ) - # Sets warning level 3 and ignores some warnings - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CPU_FLAGS} /W3 /wd4290 \ - /wd4267 /wd4996 /bigobj") - set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} \ - /ZI /Od /Ob0") - set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /ignore:4099") + include(ClangSanitizer) + endif() - DisableCompilerFlag(DEBUG /RTC1) - # cygwin - else() - if(CMAKE_CROSSCOMPILING) - message(STATUS "Crosscompiling for Windows with MinGW.") - else() - message(STATUS "Might be GCC under cygwin.") - endif() + if(COMPILER_IS_INTEL) + # Use highest instruction set available on the compilation host processor + add_compile_options(-xHOST) endif() endif() -# Missing OpenMP 3.0 implementation fix for Windows, this fixes #6 if(MSVC) - add_definitions(-DOPENMP_LOOP_TYPE=int) -else() - add_definitions(-DOPENMP_LOOP_TYPE=unsigned) + if(OGS_CPU_ARCHITECTURE STREQUAL "native") + set(CPU_FLAGS "/favor:blend") + else() + set(CPU_FLAGS "/favor:${OGS_CPU_ARCHITECTURE}") + endif() + if(OGS_ENABLE_AVX2) + set(CPU_FLAGS "${CPU_FLAGS} /arch:AVX2") + endif() + add_compile_options( + /MP # multi-core compilation + /W3 + /wd4290 /wd4267 /wd4996 + /bigobj + -DOPENMP_LOOP_TYPE=int # Missing OpenMP 3.0 implementation fix for Windows, this fixes #6 + -D_CRT_SECURE_NO_WARNINGS + -D_CRT_NONSTDC_NO_WARNINGS + -D_CRT_XNONSTDC_NO_WARNINGS + -D__restrict__=__restrict # this fixes #5 + # This fixes compile errors with + # std::numeric_limits<T>::min() / max() + -DNOMINMAX + ) + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /ignore:4099") endif() -# Set additional user-given compiler flags. The given flags must follow the -# preceding cxx flags definition in order to override earlier flags, e.g. for -# optimization. -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OGS_CXX_FLAGS}") - -# Copy CXX to C flags. To have these flags in C libraries (e.g. metis) too. -set(CMAKE_C_FLAGS "${CMAKE_CXX_FLAGS}") +add_compile_options( + ${OGS_CXX_FLAGS} # user-given, CMake-option + ${CPU_FLAGS} +) diff --git a/scripts/cmake/Find.cmake b/scripts/cmake/Find.cmake index 9c1491e33ad39fff9d499a1e0266ce9e26eeac5e..0aa57a7b1bf7226764b053cfbe297953e6744b79 100644 --- a/scripts/cmake/Find.cmake +++ b/scripts/cmake/Find.cmake @@ -88,8 +88,7 @@ endif() # OGS_NO_EXTERNAL_LIBS find_package(OpenMP QUIET) if(OPENMP_FOUND) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") + add_compile_options(${OpenMP_CXX_FLAGS}) message(STATUS "OpenMP enabled.") endif()