CMakeLists.txt 7.69 KB
Newer Older
1
CMAKE_MINIMUM_REQUIRED (VERSION 2.8.10)
2 3
PROJECT (OPAL)
SET (OPAL_VERSION_MAJOR 1)
4
SET (OPAL_VERSION_MINOR 3.99)
gsell's avatar
gsell committed
5

6
IF (NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
7 8 9
    SET (CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING
        "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel."
        FORCE
gsell's avatar
gsell committed
10
	)
11
ENDIF (NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
gsell's avatar
gsell committed
12

13 14
MESSAGE (STATUS "Build type is: " ${CMAKE_BUILD_TYPE})

15
# Select flags.
16 17
SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 -g ")
SET (CMAKE_CXX_FLAGS_RELEASE "-O3")
18
SET (CMAKE_CXX_FLAGS_DEBUG  "-O0 -g")
gsell's avatar
gsell committed
19

20 21 22
# Resolve all library dependencies
SET (CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/CMakeModules")

23 24 25 26 27 28 29 30
find_package (MPI REQUIRED)
message (STATUS "The C++ compiler identification is: ${CMAKE_CXX_COMPILER_ID}")
message (STATUS "The C++ compiler version is: ${CMAKE_CXX_COMPILER_VERSION}")
message (STATUS "The MPI C++ compiler is: ${MPI_CXX_COMPILER}")
message (STATUS "The underlying C++ compiler is: ${CMAKE_CXX_COMPILER}")

# compiler dependent flags
if ( ${CMAKE_CXX_COMPILER_ID} STREQUAL "Intel" )
gsell's avatar
gsell committed
31
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -diag-disable 383 -diag-disable 981")
32

33
elseif (${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang")
gsell's avatar
gsell committed
34
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Werror -Wsign-compare -Wunused-variable -Warray-bounds -DIPPL_RESTRICT_BUG")
35

36 37 38 39 40
elseif (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU")
    if (${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS "4.7.3")
	message (FATAL_ERROR "To build OPAL you need GCC version 4.7.3 or greater")

    elseif (${CMAKE_CXX_COMPILER_VERSION} VERSION_GREATER "4.7.2")
gsell's avatar
gsell committed
41
	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Werror -Wno-reorder -Wno-unused-local-typedefs -Werror=unused-variable -std=c++11")
42 43 44 45 46
    endif ()
else ()
    message (STATUS "Unknown C++ compiler. Please use the GNU or Intel compiler, IF you are having problems.")
endif ()

47 48 49
FIND_PACKAGE (H5Hut REQUIRED)
FIND_PACKAGE (HDF5 REQUIRED)
FIND_PACKAGE (GSL REQUIRED)
50

gsell's avatar
gsell committed
51
set (BOOSTROOT $ENV{BOOST_DIR})
52 53 54 55
set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_MULTITHREADED OFF)
set(Boost_USE_STATIC_RUNTIME OFF)
find_package (Boost 1.55.0 COMPONENTS  regex filesystem system)
56 57
if (Boost_INCLUDE_DIRS)
    message (STATUS "Found boost include dir: ${Boost_INCLUDE_DIR}")
58 59
    message (STATUS "Found boost library dir: ${Boost_LIBRARY_DIR}")
    message (STATUS "Found boost libraries: ${Boost_LIBRARIES}")
60 61
    include_directories (${Boost_INCLUDE_DIRS})
endif ()
62 63

# Handle options
64 65
OPTION (ENABLE_AMR_SOLVER "Enable BoxLib based AMR solver" OFF)

66
OPTION (ENABLE_SAAMG_SOLVER "Enable iteartive SA-AMG-PCG self field solver" OFF)
gsell's avatar
gsell committed
67

68 69 70
OPTION (DBG_SCALARFIELD "Enable dump of scalar field rho_m" OFF)
OPTION (DBG_STENCIL "Dump stencil of iterative solver in matlab format" OFF)
OPTION (BUILD_LIBOPAL "Enable building the OPAL library" OFF)
gsell's avatar
gsell committed
71

72 73 74
OPTION (NOCPLUSPLUS11_FOREACH "Disable C++11 foreach support" OFF)
OPTION (NOCPLUSPLUS11_NULLPTR "Disable C++11 nullptr support" OFF)

75 76
OPTION (NO_FIELD_ASSIGN_OPTIMIZATION "Disable compiler optimization of IPPL field assignment" OFF)

gsell's avatar
gsell committed
77
if (ENABLE_AMR_SOLVER)
gsell's avatar
gsell committed
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
    message (STATUS "----> Enable AMR")

    find_package (CCSE REQUIRED HINTS $ENV{CCSE_INCLUDE_DIRS} $ENV{CCSE_LIBRARY_DIR})
    include ($ENV{BOXLIB_HOME}/Tools/CMake/CCSEOptions.cmake)

    set (BL_SPACEDIM 3 CACHE INT "Dimension of BoxLib build")
    set (ENABLE_MPI 1 CACHE INT "Enable build with MPI")
    set (ENABLE_OpenMP 0 CACHE INT "Enable build with OpenMP")
    set (BL_PRECISION "DOUBLE" CACHE INT "Precision of BoxLib build")
    set (BL_USE_PARTICLES 1 CACHE INT "Include Particles classes in BoxLib build")
    set (ENABLE_PROFILING 0 CACHE INT "Include profiling information in BoxLib build")
    set (ENABLE_BACKTRACE 1 CACHE INT "Include backtrace information in BoxLib build")
    set (CMAKE_CXX_FLAGS "-Wno-sign-compare -DHAVE_AMR_SOLVER -DTULIN ${CMAKE_CXX_FLAGS}")
    set (CCSE_INCLUDE_DIRS $ENV{CCSE_INCLUDE_DIRS})
    set (CCSE_LIBRARY_DIR $ENV{CCSE_LIBRARY_DIR})

    set(CCSE_LIBRARIES box_camrdata;cboxlib;cfboxlib;fboxlib)
    foreach (L ${CCSE_LIBRARIES})
        find_library(CCSE_LIBRARY
            NAMES ${L}
            HINTS ${CCSE_LIBRARY_DIR}
            NO_DEFAULT_PATH)

        if ( NOT CCSE_LIBRARY )
            message(SEND_ERROR "Cannot locate CCSE library: ${L}")
        endif()
gsell's avatar
gsell committed
104 105 106 107 108 109 110 111 112 113 114 115 116 117

    endforeach()
    message (STATUS "----> Enable AMR done")
endif (ENABLE_AMR_SOLVER)

if (ENABLE_SAAMG_SOLVER OR ENABLE_AMR_SOLVER)
    find_package (Trilinos REQUIRED HINTS $ENV{TRILINOS_PREFIX} $ENV{TRILINOS_DIR} $ENV{TRILINOS})

    message (STATUS "Found Trilinos: ${Trilinos_DIR}")
    message (STATUS "      Trilinos version: ${Trilinos_VERSION}")
    message (STATUS "      Trilinos package list: ${Trilinos_PACKAGE_LIST}")
    message (STATUS "      Trilinos libraries: ${Trilinos_LIBRARIES}")
    message (STATUS "      Trilinos TPL libraries: ${Trilinos_TPL_LIBRARIES}")

118
    if (NOT ${MPI_CXX_COMPILER} STREQUAL ${Trilinos_CXX_COMPILER} )
gsell's avatar
gsell committed
119 120 121 122 123 124 125 126 127
        message (STATUS "Compiler mismatch:")
        message (STATUS "        Trilinos was compiled with:")
        message (STATUS "            ${Trilinos_C_COMPILER}")
        message (STATUS "            ${Trilinos_CXX_COMPILER}")
        message (STATUS "            ${Trilinos_Fortran_COMPILER}")
        message (STATUS "        You are using:")
        message (STATUS "            ${CMAKE_C_COMPILER}")
        message (STATUS "            ${CMAKE_CXX_COMPILER}")
        message (STATUS "            ${CMAKE_Fortran_COMPILER}")
128
        message (FATAL  "")
gsell's avatar
gsell committed
129 130
    endif ()
endif ()
131

132
IF (DBG_SCALARFIELD)
gsell's avatar
gsell committed
133 134
    MESSAGE (STATUS "\nWrite scalar rho_m field is enabled ")
    SET (CMAKE_CXX_FLAGS "-DDBG_SCALARFIELD ${CMAKE_CXX_FLAGS}")
135 136 137
ENDIF (DBG_SCALARFIELD)

IF (DBG_STENCIL)
gsell's avatar
gsell committed
138 139
    MESSAGE (STATUS "\nWrite stencil is enabled ")
    SET (CMAKE_CXX_FLAGS "-DDBG_STENCIL ${CMAKE_CXX_FLAGS}")
140 141 142
ENDIF (DBG_STENCIL)

IF (BUILD_LIBOPAL)
gsell's avatar
gsell committed
143
    MESSAGE (STATUS "\nBuilding OPAL library")
144 145 146 147 148 149
ENDIF (BUILD_LIBOPAL)

IF (NOCPLUSPLUS11_FOREACH)
    MESSAGE (STATUS "\nBuilding OPAL without c++11 foreach support")
    SET (CMAKE_CXX_FLAGS
        "-DOPAL_NOCPLUSPLUS11_FOREACH ${CMAKE_CXX_FLAGS}"
gsell's avatar
gsell committed
150
	)
151
ENDIF (NOCPLUSPLUS11_FOREACH)
152

153 154 155 156
IF (NOCPLUSPLUS11_NULLPTR)
    MESSAGE (STATUS "\nBuilding OPAL without c++11 nullptr support")
    SET (CMAKE_CXX_FLAGS
        "-DOPAL_NOCPLUSPLUS11_NULLPTR ${CMAKE_CXX_FLAGS}"
gsell's avatar
gsell committed
157
	)
158
ENDIF (NOCPLUSPLUS11_NULLPTR)
159

160 161 162 163
IF (NO_FIELD_ASSIGN_OPTIMIZATION)
    MESSAGE (STATUS "\nCompiler will not try to optimize field assignment")
    SET (CMAKE_CXX_FLAGS
        "-DdontOPTIMIZE_FIELD_ASSIGNMENT ${CMAKE_CXX_FLAGS}"
gsell's avatar
gsell committed
164
	)
165
ENDIF (NO_FIELD_ASSIGN_OPTIMIZATION)
gsell's avatar
gsell committed
166

kraus's avatar
kraus committed
167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191
INCLUDE(FindSubversion)
IF(Subversion_SVN_EXECUTABLE)

    EXECUTE_PROCESS(COMMAND ${Subversion_SVN_EXECUTABLE} info ${CMAKE_CURRENT_SOURCE_DIR}
        OUTPUT_VARIABLE OPAL_WC_INFO
        ERROR_VARIABLE Subversion_svn_info_error
        RESULT_VARIABLE Subversion_svn_info_result
        OUTPUT_STRIP_TRAILING_WHITESPACE)

    IF(${Subversion_svn_info_result} EQUAL 0)
        Subversion_WC_INFO(${CMAKE_CURRENT_SOURCE_DIR} OPAL)
    ELSE()
        SET (OPAL_WC_REVISION 0)
        EXECUTE_PROCESS(
            WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
            COMMAND git rev-parse HEAD
            OUTPUT_VARIABLE GIT_OUT OUTPUT_STRIP_TRAILING_WHITESPACE
            )
        SET (OPAL_WC_REVISION \"${GIT_OUT}\")
    ENDIF()
ELSE()
    MESSAGE (STATUS "could not find subversion")
    SET (OPAL_WC_REVISION \"\")
ENDIF()

gsell's avatar
gsell committed
192
ADD_SUBDIRECTORY (ippl)
193
ADD_SUBDIRECTORY (classic/5.0/src)
gsell's avatar
gsell committed
194
ADD_SUBDIRECTORY (src)
195 196 197 198 199 200 201 202 203

IF (BUILD_OPAL_UNIT_TESTS)
    FIND_PACKAGE (GTest REQUIRED)

    # touch CMakeLists to force cmake to redo the glob for new test source files
    # otherwise cmake does not detect new source files
    EXECUTE_PROCESS(COMMAND touch ${CMAKE_CURRENT_SOURCE_DIR}/tests/CMakeLists.txt)
    ADD_SUBDIRECTORY(tests)

204
ENDIF (BUILD_OPAL_UNIT_TESTS)