From b250b7a3e0c9385d3f73e6b496d4f6cf7886f22c Mon Sep 17 00:00:00 2001 From: Lars Bilke <lars.bilke@ufz.de> Date: Fri, 6 Jan 2012 15:01:16 +0100 Subject: [PATCH] Introduced Find cmake script and enabled OGS_PROFILE option. --- CMakeLists.txt | 19 ++++++++++++------- scripts/cmake/CompilerSetup.cmake | 27 ++++++++++++++++----------- scripts/cmake/Find.cmake | 26 ++++++++++++++++++++++++++ 3 files changed, 54 insertions(+), 18 deletions(-) create mode 100644 scripts/cmake/Find.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 5d2b49da461..640161747aa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,3 +1,7 @@ +##################### +### OGS-6 Project ### +##################### + # Specify minimum CMake version cmake_minimum_required(VERSION 2.6) @@ -7,15 +11,16 @@ project( OGS-6 ) ### CMake includes ### INCLUDE(scripts/cmake/CMakeSetup.cmake) INCLUDE(scripts/cmake/CompilerSetup.cmake) +INCLUDE(scripts/cmake/Find.cmake) -# 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() - +############### +### 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/CompilerSetup.cmake b/scripts/cmake/CompilerSetup.cmake index 927dfcbde3d..a8beb71af65 100644 --- a/scripts/cmake/CompilerSetup.cmake +++ b/scripts/cmake/CompilerSetup.cmake @@ -3,7 +3,7 @@ INCLUDE(SetDefaultBuildType) SET_DEFAULT_BUILD_TYPE(Debug) INCLUDE(MSVCMultipleProcessCompile) # /MP switch (multi processor) for VS -### GNU C/CXX +### 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" ) @@ -19,16 +19,9 @@ IF(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_GNUCC) # -g SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated -Wall -Wextra -fno-nonansi-builtins") ADD_DEFINITIONS( -DGCC ) - IF (OGS_PROFILE) - IF( NOT CMAKE_BUILD_TYPE STREQUAL "Release" ) - MESSAGE(Warning "When using profiling you should set CMAKE_BUILD_TYPE to Release.") - ENDIF() - SET(PROFILE_FLAGS "-pg -fno-omit-frame-pointer -O2 -DNDEBUG -fno-inline-functions-called-once -fno-optimize-sibling-calls") - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${PROFILE_FLAGS}") - ENDIF (OGS_PROFILE) ENDIF(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_GNUCC) -### Intel +### 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") @@ -39,6 +32,19 @@ IF (${CMAKE_C_COMPILER} MATCHES "icc.*$" OR ${CMAKE_CXX_COMPILER} MATCHES "icpc. 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 @@ -47,10 +53,9 @@ IF (WIN32) -D_CRT_XNONSTDC_NO_WARNINGS) # Sets warning level 3 and ignores some warnings SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3 /wd4290 /wd4267") - SET(GCC OFF) # cygwin ELSE (MSVC) MESSAGE (STATUS "Might be GCC under cygwin.") - SET(GCC ON) + ADD_DEFINITIONS( -DGCC ) ENDIF (MSVC) ENDIF (WIN32) diff --git a/scripts/cmake/Find.cmake b/scripts/cmake/Find.cmake new file mode 100644 index 00000000000..68d15c85434 --- /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() + -- GitLab