From 7105903ca2ff084c99e651a28dc61fd600b52f58 Mon Sep 17 00:00:00 2001 From: Lars Bilke Date: Mon, 23 Jul 2018 22:31:11 +0200 Subject: [PATCH 1/4] [CMake] Run Qt moc & uic just on Qt-related targets. --- Applications/DataExplorer/CMakeLists.txt | 4 ++++ Applications/Utils/OGSFileConverter/CMakeLists.txt | 11 ++++++----- scripts/cmake/Find.cmake | 3 --- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/Applications/DataExplorer/CMakeLists.txt b/Applications/DataExplorer/CMakeLists.txt index 931bc8fc7f5..7c13d24f4e9 100644 --- a/Applications/DataExplorer/CMakeLists.txt +++ b/Applications/DataExplorer/CMakeLists.txt @@ -29,6 +29,10 @@ include_directories( ${CMAKE_CURRENT_BINARY_DIR}/NetCdfDialog/NetCdfDialogLib_autogen/include ) +set(CMAKE_AUTOMOC TRUE) +set(CMAKE_AUTOUIC TRUE) +set(CMAKE_AUTORCC TRUE) + # Add subprojects add_subdirectory(Base) add_subdirectory(DataView/StratView) diff --git a/Applications/Utils/OGSFileConverter/CMakeLists.txt b/Applications/Utils/OGSFileConverter/CMakeLists.txt index 13c0c664e62..15ec84709ea 100644 --- a/Applications/Utils/OGSFileConverter/CMakeLists.txt +++ b/Applications/Utils/OGSFileConverter/CMakeLists.txt @@ -11,13 +11,9 @@ include_directories( ${CMAKE_CURRENT_BINARY_DIR}/OGSFileConverterLib_autogen/include ) -file(GLOB_RECURSE UIS *.ui) -source_group("UI Files" FILES ${UIS}) - add_library(OGSFileConverterLib ${SOURCES} ${HEADERS} - ${UIS} ) target_link_libraries(OGSFileConverterLib PUBLIC QtBase MathLib @@ -31,7 +27,12 @@ target_link_libraries(OGSFileConverter ApplicationsFileIO ) -set_property(TARGET OGSFileConverter PROPERTY FOLDER "Utilities") +set_target_properties(OGSFileConverter OGSFileConverterLib + PROPERTIES + FOLDER "Utilities" + AUTOMOC ON + AUTOUIC ON +) if(OGS_USE_PCH) cotire(OGSFileConverter) diff --git a/scripts/cmake/Find.cmake b/scripts/cmake/Find.cmake index 6530e929ff7..9c1491e33ad 100644 --- a/scripts/cmake/Find.cmake +++ b/scripts/cmake/Find.cmake @@ -103,9 +103,6 @@ if(OGS_BUILD_GUI) endif() find_package(Qt5 5.2 REQUIRED ${QT_MODULES}) cmake_policy(SET CMP0020 NEW) - set(CMAKE_AUTOMOC TRUE) - set(CMAKE_AUTOUIC TRUE) - set(CMAKE_AUTORCC TRUE) if(CMAKE_CROSSCOMPILING) find_package(PkgConfig REQUIRED) pkg_check_modules(QT_XML_DEPS REQUIRED Xml) From ed50d9a5e8e9f32c9caefe79f812628b1f665769 Mon Sep 17 00:00:00 2001 From: Lars Bilke Date: Mon, 23 Jul 2018 22:31:48 +0200 Subject: [PATCH 2/4] [CMake] Fixed a compile warning. --- MathLib/CMakeLists.txt | 4 +++- MathLib/ODE/CVodeSolver.cpp | 5 ----- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/MathLib/CMakeLists.txt b/MathLib/CMakeLists.txt index eb98729936b..94282ed2e8f 100644 --- a/MathLib/CMakeLists.txt +++ b/MathLib/CMakeLists.txt @@ -6,7 +6,9 @@ APPEND_SOURCE_FILES(SOURCES InterpolationAlgorithms) APPEND_SOURCE_FILES(SOURCES Integration) APPEND_SOURCE_FILES(SOURCES LinAlg) APPEND_SOURCE_FILES(SOURCES LinAlg/Dense) -APPEND_SOURCE_FILES(SOURCES ODE) +if(CVODE_FOUND) + APPEND_SOURCE_FILES(SOURCES ODE) +endif() APPEND_SOURCE_FILES(SOURCES Nonlinear) if(OGS_USE_EIGEN) diff --git a/MathLib/ODE/CVodeSolver.cpp b/MathLib/ODE/CVodeSolver.cpp index 425620e1cbd..658d44e4963 100644 --- a/MathLib/ODE/CVodeSolver.cpp +++ b/MathLib/ODE/CVodeSolver.cpp @@ -6,9 +6,6 @@ * http://www.opengeosys.org/project/license * */ - -#ifdef CVODE_FOUND - #include "CVodeSolver.h" #include @@ -362,5 +359,3 @@ CVodeSolver::~CVodeSolver() = default; } // namespace ODE } // namespace MathLib - -#endif // CVODE_FOUND From 72e65ecc1f080868885f067980e75d663282e3c2 Mon Sep 17 00:00:00 2001 From: Lars Bilke Date: Mon, 23 Jul 2018 22:34:29 +0200 Subject: [PATCH 3/4] [CMake] Switched to target_compile_options() instead of CXX_FLAGS. Simplified CompilerSetup.cmake a bit. --- ThirdParty/vtkdiff | 2 +- scripts/cmake/CCacheSetup.cmake | 2 +- scripts/cmake/ClangSanitizer.cmake | 2 +- scripts/cmake/CompilerSetup.cmake | 192 ++++++++++++----------------- scripts/cmake/Find.cmake | 3 +- 5 files changed, 82 insertions(+), 119 deletions(-) diff --git a/ThirdParty/vtkdiff b/ThirdParty/vtkdiff index bc683ea5cc8..099e83e7a1b 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 9e2f080ac6c..a6f982ab131 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 ef9b7b29f03..fc94bb039f7 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 047de1148f7..fe6a9672d88 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::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::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 9c1491e33ad..0aa57a7b1bf 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() From 9a5bc7be6381d005078bcb9c501ce01a7b8f89ef Mon Sep 17 00:00:00 2001 From: Lars Bilke Date: Thu, 26 Jul 2018 10:10:43 +0200 Subject: [PATCH 4/4] [CMake] Fixed OpenMP linking. --- scripts/cmake/Find.cmake | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/scripts/cmake/Find.cmake b/scripts/cmake/Find.cmake index 0aa57a7b1bf..9d856a1263d 100644 --- a/scripts/cmake/Find.cmake +++ b/scripts/cmake/Find.cmake @@ -86,10 +86,11 @@ if(OGS_NO_EXTERNAL_LIBS) return() endif() # OGS_NO_EXTERNAL_LIBS -find_package(OpenMP QUIET) +find_package(OpenMP) if(OPENMP_FOUND) - add_compile_options(${OpenMP_CXX_FLAGS}) - message(STATUS "OpenMP enabled.") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}") endif() find_package(Metis QUIET)