CMakeLists.txt 7.11 KB
Newer Older
1
CMAKE_MINIMUM_REQUIRED (VERSION 2.8.10)
2 3
PROJECT (OPAL)
SET (OPAL_VERSION_MAJOR 1)
gsell's avatar
gsell committed
4
SET (OPAL_VERSION_MINOR 3.0)
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
MESSAGE (STATUS "Build type is: " ${CMAKE_BUILD_TYPE})
gsell's avatar
gsell committed
14
MESSAGE (STATUS "CMAKE_CXX_COMPILER: ${CMAKE_CXX_COMPILER}")
15

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

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

gsell's avatar
gsell committed
24 25
FIND_PACKAGE (MPI REQUIRED)

26 27
FIND_PACKAGE (IPPL REQUIRED HINTS $ENV{IPPL_PREFIX} $ENV{IPPL_DIR} $ENV{IPPL})
MESSAGE (STATUS "Found IPPL library: ${IPPL_LIBRARY}")
28 29 30 31 32
MESSAGE (STATUS "Found IPPL include dir: ${IPPL_INCLUDE_DIR}")

FIND_PACKAGE (H5Hut REQUIRED)
FIND_PACKAGE (HDF5 REQUIRED)
FIND_PACKAGE (GSL REQUIRED)
33

gsell's avatar
gsell committed
34 35
set (BOOSTROOT $ENV{BOOST_DIR})
find_package (Boost 1.55.0 REQUIRED)
36 37 38 39
if (Boost_INCLUDE_DIRS)
    message (STATUS "Found boost include dir: ${Boost_INCLUDE_DIR}")
    include_directories (${Boost_INCLUDE_DIRS})
endif ()
40 41

# Handle options
42 43
OPTION (ENABLE_AMR_SOLVER "Enable BoxLib based AMR solver" OFF)

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

46 47 48
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
49

50 51 52
OPTION (NOCPLUSPLUS11_FOREACH "Disable C++11 foreach support" OFF)
OPTION (NOCPLUSPLUS11_NULLPTR "Disable C++11 nullptr support" OFF)

53 54
OPTION (NO_FIELD_ASSIGN_OPTIMIZATION "Disable compiler optimization of IPPL field assignment" OFF)

gsell's avatar
gsell committed
55
if (ENABLE_AMR_SOLVER)
gsell's avatar
gsell committed
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
    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
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107

    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}")

    if (NOT ${CMAKE_CXX_COMPILER} STREQUAL ${Trilinos_CXX_COMPILER} )
        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}")
    endif ()
endif ()
108

109
IF (DBG_SCALARFIELD)
gsell's avatar
gsell committed
110 111
    MESSAGE (STATUS "\nWrite scalar rho_m field is enabled ")
    SET (CMAKE_CXX_FLAGS "-DDBG_SCALARFIELD ${CMAKE_CXX_FLAGS}")
112 113 114
ENDIF (DBG_SCALARFIELD)

IF (DBG_STENCIL)
gsell's avatar
gsell committed
115 116
    MESSAGE (STATUS "\nWrite stencil is enabled ")
    SET (CMAKE_CXX_FLAGS "-DDBG_STENCIL ${CMAKE_CXX_FLAGS}")
117 118 119
ENDIF (DBG_STENCIL)

IF (BUILD_LIBOPAL)
gsell's avatar
gsell committed
120
    MESSAGE (STATUS "\nBuilding OPAL library")
121 122 123 124 125 126
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
127
	)
128
ENDIF (NOCPLUSPLUS11_FOREACH)
129

130 131 132 133
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
134
	)
135
ENDIF (NOCPLUSPLUS11_NULLPTR)
136

137 138 139 140
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
141
	)
142
ENDIF (NO_FIELD_ASSIGN_OPTIMIZATION)
gsell's avatar
gsell committed
143

kraus's avatar
kraus committed
144
# compiler dependent flags
145 146 147
message (STATUS "The C++ compiler identification is: ${CMAKE_CXX_COMPILER_ID}")
message (STATUS "The C++ compiler version is: ${CMAKE_CXX_COMPILER_VERSION}")
if ( ${CMAKE_CXX_COMPILER_ID} STREQUAL "Intel" )
gsell's avatar
gsell committed
148 149
    add_definitions (-diag-disable 383 -diag-disable 981)
    
150
elseif (${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang")
gsell's avatar
gsell committed
151 152
    add_definitions (-Wall -Werror -Wsign-compare -Wunused-variable -Warray-bounds -DIPPL_RESTRICT_BUG)
    
153
elseif (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU")
gsell's avatar
gsell committed
154 155
    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")
156

gsell's avatar
gsell committed
157 158 159
    elseif (${CMAKE_CXX_COMPILER_VERSION} VERSION_GREATER "4.7.2")
	add_definitions (-Wall -Werror -Wno-reorder -Wno-unused-local-typedefs -Werror=unused-variable -std=c++11)
    endif ()
160
else ()
gsell's avatar
gsell committed
161
    message (STATUS "Unknown C++ compiler. Please use the GNU or Intel compiler, IF you are having problems.")
162
endif ()
163

kraus's avatar
kraus committed
164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188
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()

189 190
ADD_SUBDIRECTORY (classic/5.0/src)
ADD_SUBDIRECTORY (src)