CMakeLists.txt 9.38 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)
Uldis Locans's avatar
Uldis Locans committed
82
   FIND_PACKAGE(DKS 1.1.1 REQUIRED HINTS $ENV{DKS_PREFIX} $ENV{DKS_DIR} $ENV{DKS})
83
   set (DKS_VERSION_OPAL \"${DKS_VERSION}\")
84
   MESSAGE (STATUS "Found DKS version: ${DKS_VERSION}")
85 86
   MESSAGE (STATUS "Found DKS library: ${DKS_LIBRARY}")
   MESSAGE (STATUS "Found DKS include dir: ${DKS_INCLUDE_DIR}")
kraus's avatar
kraus committed
87
   SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DDKS_MPI")
88 89

   ### OpenCL compiler flags ###
90
   #SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -lOpenCL -pthread -DDKS_OPENCL")
91 92

   ### CUDA compiler flags ###
93
   SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DDKS_CUDA")
94

95
   ### if any accelerator enabled set flag to use DKS ###
96
   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 121 122 123
IF (USE_H5HUT2)
	SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DUSE_H5HUT2")
ENDIF (USE_H5HUT2)

124 125
IF (ENABLE_AMR)
    MESSAGE (STATUS "Enable AMR_SOLVER    " ${ENABLE_AMR})
126
    #ENABLE_LANGUAGE (Fortran)
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
frey_m's avatar
frey_m committed
151
if (NOT ${HOSTNAME_BASE} MATCHES "edison" AND NOT ${HOSTNAME_BASE} MATCHES "cori" AND 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
    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}")

161
    if (NOT ${MPI_CXX_COMPILER} STREQUAL ${Trilinos_CXX_COMPILER} )
gsell's avatar
gsell committed
162 163 164 165 166 167 168 169 170
        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}")
171
        message (FATAL  "")
gsell's avatar
gsell committed
172 173
    endif ()
endif ()
174

frey_m's avatar
frey_m committed
175

176
IF (DBG_SCALARFIELD)
gsell's avatar
gsell committed
177 178
    MESSAGE (STATUS "\nWrite scalar rho_m field is enabled ")
    SET (CMAKE_CXX_FLAGS "-DDBG_SCALARFIELD ${CMAKE_CXX_FLAGS}")
179 180 181
ENDIF (DBG_SCALARFIELD)

IF (DBG_STENCIL)
gsell's avatar
gsell committed
182 183
    MESSAGE (STATUS "\nWrite stencil is enabled ")
    SET (CMAKE_CXX_FLAGS "-DDBG_STENCIL ${CMAKE_CXX_FLAGS}")
184 185
ENDIF (DBG_STENCIL)

186
IF (AMR_YT_DUMP AND ENABLE_AMR)
187
    MESSAGE (STATUS "\nWrite AMR field data in yt format is enabled ")
188
    SET (CMAKE_CXX_FLAGS "-DAMR_YT_DUMP ${CMAKE_CXX_FLAGS}")
189
ENDIF (AMR_YT_DUMP AND ENABLE_AMR)
190

191
IF (AMR_PYTHON_DUMP AND ENABLE_AMR)
192 193
    MESSAGE (STATUS "\nWrite AMR grids and particles is enabled ")
    SET (CMAKE_CXX_FLAGS "-DAMR_PYTHON_DUMP ${CMAKE_CXX_FLAGS}")
194
ENDIF (AMR_PYTHON_DUMP AND ENABLE_AMR)
195

196
IF (BUILD_LIBOPAL)
gsell's avatar
gsell committed
197
    MESSAGE (STATUS "\nBuilding OPAL library")
198 199
ENDIF (BUILD_LIBOPAL)

200 201 202 203
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
204
	)
205
ENDIF (NO_FIELD_ASSIGN_OPTIMIZATION)
gsell's avatar
gsell committed
206

kraus's avatar
kraus committed
207 208 209 210 211 212 213 214 215
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
    )
    SET (OPAL_WC_REVISION \"${GIT_OUT}\")
kraus's avatar
kraus committed
216
ELSE()
kraus's avatar
kraus committed
217
    MESSAGE (STATUS "could not find git")
kraus's avatar
kraus committed
218 219 220
    SET (OPAL_WC_REVISION \"\")
ENDIF()

kraus's avatar
kraus committed
221
SET (IPPL_USED_FROM_OPAL "TRUE")
adelmann's avatar
adelmann committed
222

gsell's avatar
gsell committed
223
ADD_SUBDIRECTORY (ippl)
adelmann's avatar
adelmann committed
224 225
ADD_SUBDIRECTORY (opt-pilot)

gsell's avatar
gsell committed
226
ADD_SUBDIRECTORY (src)
227
ADD_SUBDIRECTORY (tools)
228 229

IF (BUILD_OPAL_UNIT_TESTS)
230
     ADD_SUBDIRECTORY(tests)
adelmann's avatar
adelmann committed
231
ENDIF (BUILD_OPAL_UNIT_TESTS)
232

233
# make variables visible in other CMakeLists files
234 235 236
set(OPAL_CXX_FLAGS ${OPAL_CXX_FLAGS}
         CACHE INTERNAL "" FORCE
)
237

238 239
set(OPAL_LIBS ${OPAL_LIBS}
         CACHE INTERNAL "" FORCE
Uldis Locans's avatar
Uldis Locans committed
240
)
241 242 243 244 245 246 247 248 249 250 251

# configure file
configure_file (
  ${CMAKE_CURRENT_SOURCE_DIR}/cmake/${PROJECT_NAME}Config.cmake.in
  ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config_install.cmake
)

install (
  FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config_install.cmake
  DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/cmake/${PROJECT_NAME}"
  RENAME ${PROJECT_NAME}Config.cmake
252
)