CMakeLists.txt 9.62 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 9.0)
5 6 7 8
set (PACKAGE \"opal\")
set (PACKAGE_BUGREPORT \"opal@lists.psi.ch\")
set (PACKAGE_NAME \"OPAL\")
set (PACKAGE_TARNAME \"opal\")
9
set (PACKAGE_VERSION "${OPAL_VERSION_MAJOR}.${OPAL_VERSION_MINOR}")
10
set (PACKAGE_VERSION_STR "\"${PACKAGE_VERSION}\"")
11 12
STRING (REGEX REPLACE "\\.([0-9])\\." ".0\\1." PACKAGE_VERSION ${PACKAGE_VERSION})
STRING (REGEX REPLACE "\\.([0-9])$" ".0\\1" PACKAGE_VERSION ${PACKAGE_VERSION})
13
STRING (REGEX REPLACE "\\." "" PACKAGE_VERSION ${PACKAGE_VERSION})
gsell's avatar
gsell committed
14

15
IF (NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
16 17 18
    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
19
	)
20
ENDIF (NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
gsell's avatar
gsell committed
21

22 23 24

CMAKE_HOST_SYSTEM_INFORMATION(RESULT HOSTNAME QUERY HOSTNAME)

25
MESSAGE (STATUS "Build type is: " ${CMAKE_BUILD_TYPE})
26
MESSAGE (STATUS "Host OS System: ${CMAKE_HOST_SYSTEM}")
27
MESSAGE (STATUS "Hostname:  ${HOSTNAME}")
28

29
# Select flags.
30 31
SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 -g ")
SET (CMAKE_CXX_FLAGS_RELEASE "-O3")
32
SET (CMAKE_CXX_FLAGS_DEBUG  "-O0 -g")
gsell's avatar
gsell committed
33

34 35 36
# Resolve all library dependencies
SET (CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/CMakeModules")

37 38 39 40 41 42 43 44
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" )
45
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -diag-disable 383 -diag-disable 981 -std=c++11")
46

47
elseif (${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang")
48
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Werror -Wsign-compare -Wunused-variable -Warray-bounds -DIPPL_RESTRICT_BUG -std=c++11")
49

50 51
elseif (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU")
    if (${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS "4.7.3")
52
        message (FATAL_ERROR "To build OPAL you need GCC version 4.7.3 or greater")
53
    endif ()
54 55
    # Warning flags, -Wno-unused-local-typedefs is needed for boost versions below 1.59
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-unused-local-typedefs -Werror=unused-variable -std=c++11")
56 57 58 59
else ()
    message (STATUS "Unknown C++ compiler. Please use the GNU or Intel compiler, IF you are having problems.")
endif ()

60 61 62
FIND_PACKAGE (H5Hut REQUIRED)
FIND_PACKAGE (HDF5 REQUIRED)
FIND_PACKAGE (GSL REQUIRED)
63

gsell's avatar
gsell committed
64
set (BOOSTROOT $ENV{BOOST_DIR})
65 66 67
set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_MULTITHREADED OFF)
set(Boost_USE_STATIC_RUNTIME OFF)
68
find_package (Boost 1.55.0 REQUIRED COMPONENTS filesystem system iostreams regex)
69 70
if (Boost_INCLUDE_DIRS)
    message (STATUS "Found boost include dir: ${Boost_INCLUDE_DIR}")
71 72
    message (STATUS "Found boost library dir: ${Boost_LIBRARY_DIR}")
    message (STATUS "Found boost libraries: ${Boost_LIBRARIES}")
73 74
    include_directories (${Boost_INCLUDE_DIRS})
endif ()
75

76 77

### Uldis Locans 2014.09.05 ###
Uldis Locans's avatar
Uldis Locans committed
78
OPTION (ENABLE_DKS "Enable DKS" OFF)
79 80

### Load DKS package ###
81
IF (ENABLE_DKS)
gsell's avatar
gsell committed
82 83 84 85 86 87
    FIND_PACKAGE(DKS 1.1.1 REQUIRED HINTS $ENV{DKS_PREFIX} $ENV{DKS_DIR} $ENV{DKS})
    set (DKS_VERSION_OPAL \"${DKS_VERSION}\")
    MESSAGE (STATUS "Found DKS version: ${DKS_VERSION}")
    MESSAGE (STATUS "Found DKS library: ${DKS_LIBRARY}")
    MESSAGE (STATUS "Found DKS include dir: ${DKS_INCLUDE_DIR}")
    SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DDKS_MPI")
88

gsell's avatar
gsell committed
89 90
    ### OpenCL compiler flags ###
    #SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -lOpenCL -pthread -DDKS_OPENCL")
91

gsell's avatar
gsell committed
92 93
    ### CUDA compiler flags ###
    SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DDKS_CUDA")
94

gsell's avatar
gsell committed
95 96
    ### if any accelerator enabled set flag to use DKS ###
    SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DIPPL_DKS -DIPPL_DKS_CUDA -DOPAL_DKS")
97
ENDIF (ENABLE_DKS)
98 99
### END DKS part ###

100
# Handle options
101
OPTION (ENABLE_AMR "Enable AMReX based AMR solver" OFF)
102

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

105 106
OPTION (DBG_SCALARFIELD "Enable dump of scalar field rho_m" OFF)
OPTION (DBG_STENCIL "Dump stencil of iterative solver in matlab format" OFF)
107
OPTION (AMR_YT_DUMP "Dump AMR field data to yt readable format" OFF)
108
OPTION (AMR_PYTHON_DUMP "Dump AMR grids and particles" OFF)
109
OPTION (BUILD_LIBOPAL "Enable building the OPAL library" OFF)
gsell's avatar
gsell committed
110

111 112
OPTION (NO_FIELD_ASSIGN_OPTIMIZATION "Disable compiler optimization of IPPL field assignment" OFF)

113 114
OPTION (BUILD_OPAL_UNIT_TESTS "Unit tests" OFF)

115 116 117 118 119
IF (BUILD_OPAL_UNIT_TESTS)
    FIND_PACKAGE (GTest REQUIRED)
    SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DWITH_UNIT_TESTS")
ENDIF (BUILD_OPAL_UNIT_TESTS)

gsell's avatar
gsell committed
120
IF (USE_H5HUT2)
gsell's avatar
gsell committed
121
    SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DUSE_H5HUT2")
gsell's avatar
gsell committed
122 123
ENDIF (USE_H5HUT2)

124 125
IF (ENABLE_AMR)
    MESSAGE (STATUS "Enable AMR_SOLVER    " ${ENABLE_AMR})
126

gsell's avatar
gsell committed
127 128
    find_package (AMReX CONFIG REQUIRED
        HINTS $ENV{AMREX_HOME}/cmake $ENV{AMREX_DIR}/cmake $ENV{AMREX_PREFIX}/cmake)
129

130 131 132 133
    MESSAGE (STATUS "Found AMReX include dir: ${AMREX_INCLUDE_DIR}")
    MESSAGE (STATUS "Found AMReX library dir: ${AMREX_LIBRARY_DIR}")
    MESSAGE (STATUS "Found AMReX libraries: ${AMREX_LIBRARIES}")
    MESSAGE (STATUS "AMReX built with: ${AMREX_DEFINES}")
134

135 136 137
    # We need to replace the quotes of the AMREX_GIT_VERSION flag in AMREX_DEFINES
    # otherwise IpplVersions.h complains
    STRING(REPLACE "\"" "'" AMREX_DEFINES ${AMREX_DEFINES})
138

139 140
    SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DENABLE_AMR ${AMREX_DEFINES}")
    SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-variable -Wno-unused-but-set-variable -Wno-maybe-uninitialized")
141

142
ENDIF (ENABLE_AMR)
gsell's avatar
gsell committed
143

144 145 146 147 148 149 150
# remove digits from hostname: edison03 -> edison
STRING(REGEX MATCH "[^0-9]*" HOSTNAME_BASE "${HOSTNAME}")

# In case of Edison and Cori the find_package(Trilinos) gives the wrong
# Trilinos_TPL_LIBRARIES, instead of cray-tpsl/16.07.1 it uses
# cray-tpsl/16.06.1 libraries -> Linker error.
# We can avoid this issue by not going into the if-statement
gsell's avatar
gsell committed
151
IF (ENABLE_SAAMG_SOLVER)
152
    MESSAGE (STATUS "Enable SAAMG_SOLVER  " ${ENABLE_SAAMG_SOLVER})
gsell's avatar
gsell committed
153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178
    IF (NOT (
                ${HOSTNAME_BASE} MATCHES "edison" OR
                ${HOSTNAME_BASE} MATCHES "cori"))
        
        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 ${MPI_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}")
            message (FATAL  "")
        ENDIF ()
    ENDIF ()
ENDIF ()
frey_m's avatar
frey_m committed
179

180
IF (DBG_SCALARFIELD)
gsell's avatar
gsell committed
181 182
    MESSAGE (STATUS "\nWrite scalar rho_m field is enabled ")
    SET (CMAKE_CXX_FLAGS "-DDBG_SCALARFIELD ${CMAKE_CXX_FLAGS}")
183 184 185
ENDIF (DBG_SCALARFIELD)

IF (DBG_STENCIL)
gsell's avatar
gsell committed
186 187
    MESSAGE (STATUS "\nWrite stencil is enabled ")
    SET (CMAKE_CXX_FLAGS "-DDBG_STENCIL ${CMAKE_CXX_FLAGS}")
188 189
ENDIF (DBG_STENCIL)

190
IF (AMR_YT_DUMP AND ENABLE_AMR)
191
    MESSAGE (STATUS "\nWrite AMR field data in yt format is enabled ")
192
    SET (CMAKE_CXX_FLAGS "-DAMR_YT_DUMP ${CMAKE_CXX_FLAGS}")
193
ENDIF (AMR_YT_DUMP AND ENABLE_AMR)
194

195
IF (AMR_PYTHON_DUMP AND ENABLE_AMR)
196 197
    MESSAGE (STATUS "\nWrite AMR grids and particles is enabled ")
    SET (CMAKE_CXX_FLAGS "-DAMR_PYTHON_DUMP ${CMAKE_CXX_FLAGS}")
198
ENDIF (AMR_PYTHON_DUMP AND ENABLE_AMR)
199

200
IF (BUILD_LIBOPAL)
gsell's avatar
gsell committed
201
    MESSAGE (STATUS "\nBuilding OPAL library")
202 203
ENDIF (BUILD_LIBOPAL)

204 205 206 207
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
208
	)
209
ENDIF (NO_FIELD_ASSIGN_OPTIMIZATION)
gsell's avatar
gsell committed
210

kraus's avatar
kraus committed
211 212 213 214 215 216 217
INCLUDE(FindGit)
IF(GIT_FOUND)
    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
gsell's avatar
gsell committed
218
        )
kraus's avatar
kraus committed
219
    SET (OPAL_WC_REVISION \"${GIT_OUT}\")
kraus's avatar
kraus committed
220
ELSE()
kraus's avatar
kraus committed
221
    MESSAGE (STATUS "could not find git")
kraus's avatar
kraus committed
222 223 224
    SET (OPAL_WC_REVISION \"\")
ENDIF()

kraus's avatar
kraus committed
225
SET (IPPL_USED_FROM_OPAL "TRUE")
adelmann's avatar
adelmann committed
226

gsell's avatar
gsell committed
227
ADD_SUBDIRECTORY (ippl)
adelmann's avatar
adelmann committed
228 229
ADD_SUBDIRECTORY (opt-pilot)

gsell's avatar
gsell committed
230
ADD_SUBDIRECTORY (src)
231
ADD_SUBDIRECTORY (tools)
232 233

IF (BUILD_OPAL_UNIT_TESTS)
gsell's avatar
gsell committed
234
    ADD_SUBDIRECTORY(tests)
adelmann's avatar
adelmann committed
235
ENDIF (BUILD_OPAL_UNIT_TESTS)
236

237
# make variables visible in other CMakeLists files
238
set(OPAL_CXX_FLAGS ${OPAL_CXX_FLAGS}
gsell's avatar
gsell committed
239 240
    CACHE INTERNAL "" FORCE
    )
241

242
set(OPAL_LIBS ${OPAL_LIBS}
gsell's avatar
gsell committed
243 244
    CACHE INTERNAL "" FORCE
    )
245 246 247

# configure file
configure_file (
gsell's avatar
gsell committed
248 249 250
    ${CMAKE_CURRENT_SOURCE_DIR}/cmake/${PROJECT_NAME}Config.cmake.in
    ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config_install.cmake
    )
251 252

install (
gsell's avatar
gsell committed
253 254 255 256 257 258 259 260 261 262 263
    FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config_install.cmake
    DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/cmake/${PROJECT_NAME}"
    RENAME ${PROJECT_NAME}Config.cmake
    )

# vi: set et ts=4 sw=4 sts=4:
# Local Variables:
# mode:cmake
# cmake-tab-width: 4
# indent-tabs-mode:nil
# End: