CMakeLists.txt 8.41 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 ()

gsell's avatar
gsell committed
47

gsell's avatar
gsell committed
48 49 50 51 52 53 54
#FIND_PACKAGE (IPPL REQUIRED HINTS $ENV{IPPL_PREFIX} $ENV{IPPL_DIR} $ENV{IPPL})
#MESSAGE (STATUS "Found IPPL library: ${IPPL_LIBRARY}")
#MESSAGE (STATUS "Found IPPL include dir: ${IPPL_INCLUDE_DIR}")
SET(IPPL_CMAKE_CXX_FLAGS "-DIPPL_LINUX -DIPPL_STRINGSTREAM -std=c++1y -DIPPL_MPI -DMPICH_SKIP_MPICXX -DIPPL_GCC -DIPPL_DONT_POOL -DIPPL_USE_XDIV_RNG -DIPPL_NO_STRINGSTREAM -DPETE_BITWISE_COPY -DIPPL_HAS_TEMPLATED_COMPLEX -DIPPL_USE_STANDARD_HEADERS -DIPPL_USE_PARTIAL_SPECIALIZATION -DIPPL_STDSTL -DIPPL_LONGLONG -DWITH_BRICK -DnoCOMP_GNUOLD -Drestrict=__restrict__ -DNOCTAssert ")
set (IPPL_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ippl/src")
set (IPPL_LIBRARY_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ippl/src")
set (IPPL_LIBRARY "ippl")
55 56 57 58

FIND_PACKAGE (H5Hut REQUIRED)
FIND_PACKAGE (HDF5 REQUIRED)
FIND_PACKAGE (GSL REQUIRED)
59

gsell's avatar
gsell committed
60
set (BOOSTROOT $ENV{BOOST_DIR})
61 62 63 64
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)
65 66
if (Boost_INCLUDE_DIRS)
    message (STATUS "Found boost include dir: ${Boost_INCLUDE_DIR}")
67 68
    message (STATUS "Found boost library dir: ${Boost_LIBRARY_DIR}")
    message (STATUS "Found boost libraries: ${Boost_LIBRARIES}")
69 70
    include_directories (${Boost_INCLUDE_DIRS})
endif ()
71 72

# Handle options
73 74
OPTION (ENABLE_AMR_SOLVER "Enable BoxLib based AMR solver" OFF)

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

77 78 79
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
80

81 82 83
OPTION (NOCPLUSPLUS11_FOREACH "Disable C++11 foreach support" OFF)
OPTION (NOCPLUSPLUS11_NULLPTR "Disable C++11 nullptr support" OFF)

84 85
OPTION (NO_FIELD_ASSIGN_OPTIMIZATION "Disable compiler optimization of IPPL field assignment" OFF)

gsell's avatar
gsell committed
86
if (ENABLE_AMR_SOLVER)
gsell's avatar
gsell committed
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
    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
113 114 115 116 117 118 119 120 121 122 123 124 125 126

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

127
    if (NOT ${MPI_CXX_COMPILER} STREQUAL ${Trilinos_CXX_COMPILER} )
gsell's avatar
gsell committed
128 129 130 131 132 133 134 135 136
        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}")
137
        message (FATAL  "")
gsell's avatar
gsell committed
138 139
    endif ()
endif ()
140

141
IF (DBG_SCALARFIELD)
gsell's avatar
gsell committed
142 143
    MESSAGE (STATUS "\nWrite scalar rho_m field is enabled ")
    SET (CMAKE_CXX_FLAGS "-DDBG_SCALARFIELD ${CMAKE_CXX_FLAGS}")
144 145 146
ENDIF (DBG_SCALARFIELD)

IF (DBG_STENCIL)
gsell's avatar
gsell committed
147 148
    MESSAGE (STATUS "\nWrite stencil is enabled ")
    SET (CMAKE_CXX_FLAGS "-DDBG_STENCIL ${CMAKE_CXX_FLAGS}")
149 150 151
ENDIF (DBG_STENCIL)

IF (BUILD_LIBOPAL)
gsell's avatar
gsell committed
152
    MESSAGE (STATUS "\nBuilding OPAL library")
153 154 155 156 157 158
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
159
	)
160
ENDIF (NOCPLUSPLUS11_FOREACH)
161

162 163 164 165
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
166
	)
167
ENDIF (NOCPLUSPLUS11_NULLPTR)
168

169 170 171 172
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
173
	)
174
ENDIF (NO_FIELD_ASSIGN_OPTIMIZATION)
gsell's avatar
gsell committed
175

kraus's avatar
kraus committed
176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200
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
201
ADD_SUBDIRECTORY (ippl)
202
ADD_SUBDIRECTORY (classic/5.0/src)
gsell's avatar
gsell committed
203
ADD_SUBDIRECTORY (src)
204 205 206 207 208 209 210 211 212 213

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)

ENDIF (BUILD_OPAL_UNIT_TESTS)