diff --git a/CMakeLists.txt b/CMakeLists.txt index ca6d0df1c8b00617041e5994e9bf4a2903ddbf12..640161747aa1efc9146900a5c0c27d0e17cdc874 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,53 +1,26 @@ +##################### +### OGS-6 Project ### +##################### + # Specify minimum CMake version cmake_minimum_required(VERSION 2.6) # Project name project( OGS-6 ) -# Set cmake module path -SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} - "${CMAKE_SOURCE_DIR}/scripts/cmake/cmake" - "${CMAKE_SOURCE_DIR}/scripts/cmake") - -INCLUDE(GetCompilerInfoString) - -# Finds -FIND_PACKAGE(OpenMP) -IF(OPENMP_FOUND) - SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") -ENDIF() - -### For GNU C/CXX -IF(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_GNUCC) - get_gcc_version(GCC_VERSION) - IF( NOT CMAKE_BUILD_TYPE STREQUAL "Debug" ) - MESSAGE(STATUS "Set GCC release flags") - IF(APPLE AND GCC_VERSION VERSION_LESS "4.3" AND NOT "${CMAKE_GENERATOR}" STREQUAL "Xcode" ) - # -march=native does not work here when on normal gcc compiler - # see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33144 - SET(CMAKE_CXX_FLAGS "-O3 -mtune=native -msse4.2 -DNDEBUG") - ELSE() - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -march=native -mtune=native -msse4.2 -DNDEBUG") - ENDIF() - ENDIF() - # -g - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated -Wall -Wextra -fno-nonansi-builtins") - ADD_DEFINITIONS( - -DGCC - ) -ENDIF(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_GNUCC) +### CMake includes ### +INCLUDE(scripts/cmake/CMakeSetup.cmake) +INCLUDE(scripts/cmake/CompilerSetup.cmake) +INCLUDE(scripts/cmake/Find.cmake) -IF (${CMAKE_C_COMPILER} MATCHES "icc.*$" OR ${CMAKE_CXX_COMPILER} MATCHES "icpc.*$") - IF( NOT CMAKE_BUILD_TYPE STREQUAL "Debug" ) - MESSAGE(STATUS "Set Intel release flags") - SET(CMAKE_CXX_FLAGS "-O3 -DNDEBUG") - ENDIF() - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated -Wall") - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -openmp") -ENDIF(${CMAKE_C_COMPILER} MATCHES "icc.*$" OR ${CMAKE_CXX_COMPILER} MATCHES -"icpc.*$") +############### +### Options ### +############### +# Profiling +IF((CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_GNUCC) AND GPROF_PATH) + OPTION(OGS_PROFILE "Enables compiling with flags set for profiling with gprof." OFF) +ENDIF() # GCC AND GPROF_PATH # Set build directories SET( EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin ) diff --git a/scripts/cmake/CMakeSetup.cmake b/scripts/cmake/CMakeSetup.cmake new file mode 100644 index 0000000000000000000000000000000000000000..0deb262cf768e6e66beecba97eda144ea824c8b6 --- /dev/null +++ b/scripts/cmake/CMakeSetup.cmake @@ -0,0 +1,18 @@ +# Set additional CMake modules path +SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} + "${CMAKE_SOURCE_DIR}/scripts/cmake/cmake" + "${CMAKE_SOURCE_DIR}/scripts/cmake") + +# Load addional modules +INCLUDE(UseBackportedModules) +INCLUDE(OptionRequires) +INCLUDE(CppcheckTargets) +INCLUDE(GetCompilerInfoString) + +# Suppress warning on setting policies +CMAKE_POLICY(SET CMP0011 OLD) + +# Suppress warning on add_subdirectory(dir) where dir contains no CMakeLists.txt +IF (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 2.7) + CMAKE_POLICY(SET CMP0014 OLD) +ENDIF () diff --git a/scripts/cmake/CompilerSetup.cmake b/scripts/cmake/CompilerSetup.cmake new file mode 100644 index 0000000000000000000000000000000000000000..a8beb71af657177de51e4cdfe038e6c6f0cda4e7 --- /dev/null +++ b/scripts/cmake/CompilerSetup.cmake @@ -0,0 +1,61 @@ +INCLUDE(ResetConfigurations) # To Debug, Release, RelWithDbgInfo +INCLUDE(SetDefaultBuildType) +SET_DEFAULT_BUILD_TYPE(Debug) +INCLUDE(MSVCMultipleProcessCompile) # /MP switch (multi processor) for VS + +### GNU C/CXX compiler +IF(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_GNUCC) + get_gcc_version(GCC_VERSION) + IF( NOT CMAKE_BUILD_TYPE STREQUAL "Debug" ) + MESSAGE(STATUS "Set GCC release flags") + IF(APPLE AND GCC_VERSION VERSION_LESS "4.3" AND NOT "${CMAKE_GENERATOR}" STREQUAL "Xcode" ) + # -march=native does not work here when on normal gcc compiler + # see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33144 + SET(CMAKE_CXX_FLAGS "-O3 -mtune=native -msse4.2 -DNDEBUG") + ELSE() + SET(CMAKE_CXX_FLAGS "-O3 -march=native -mtune=native -msse4.2 -DNDEBUG") + ENDIF() + ENDIF() + # -g + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated -Wall -Wextra -fno-nonansi-builtins") + ADD_DEFINITIONS( -DGCC ) +ENDIF(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_GNUCC) + +### Intel compiler +IF (${CMAKE_C_COMPILER} MATCHES "icc.*$" OR ${CMAKE_CXX_COMPILER} MATCHES "icpc.*$") + IF( NOT CMAKE_BUILD_TYPE STREQUAL "Debug" ) + MESSAGE(STATUS "Set Intel release flags") + SET(CMAKE_CXX_FLAGS "-O3 -DNDEBUG") + ENDIF() + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated -Wall") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -openmp") +ENDIF(${CMAKE_C_COMPILER} MATCHES "icc.*$" OR ${CMAKE_CXX_COMPILER} MATCHES +"icpc.*$") + +# 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(CMAKE_CXX_COMPILER MATCHES "!clang") + SET(PROFILE_FLAGS "${PROFILE_FLAGS} -fno-inline-functions-called-once -fno-optimize-sibling-calls") + ENDIF() + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${PROFILE_FLAGS}") +ENDIF (OGS_PROFILE) + +### Windows +IF (WIN32) + ## For Visual Studio compiler + IF (MSVC) + ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS + -D_CRT_XNONSTDC_NO_WARNINGS) + # Sets warning level 3 and ignores some warnings + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3 /wd4290 /wd4267") + # cygwin + ELSE (MSVC) + MESSAGE (STATUS "Might be GCC under cygwin.") + ADD_DEFINITIONS( -DGCC ) + ENDIF (MSVC) +ENDIF (WIN32) diff --git a/scripts/cmake/Find.cmake b/scripts/cmake/Find.cmake new file mode 100644 index 0000000000000000000000000000000000000000..68d15c85434b6d0b52444be3defb428c1e1176b6 --- /dev/null +++ b/scripts/cmake/Find.cmake @@ -0,0 +1,26 @@ +###################### +### Find tools ### +###################### + +# Find dot tool from graphviz +FIND_PROGRAM(DOT_TOOL_PATH dot DOC "Dot tool from graphviz") + +# Find doxygen +FIND_PACKAGE(Doxygen) + +# Find gnu profiler gprof +FIND_PROGRAM(GPROF_PATH gprof DOC "GNU profiler gprof") + +FIND_PACKAGE(cppcheck) + + +###################### +### Find libraries ### +###################### + +FIND_PACKAGE(OpenMP) +IF(OPENMP_FOUND) + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") +ENDIF() +