forked from wareHHOuse/diskpp
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
224 lines (187 loc) · 7.29 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
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
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
cmake_minimum_required(VERSION 3.18 FATAL_ERROR)
project(diskpp)
include(CheckLanguage)
if ( WIN32 )
message(FATAL_ERROR "Sorry, Windows is not supported.")
endif()
# project version
set(diskpp_VERSION_MAJOR 0)
set(diskpp_VERSION_MINOR 0)
set(diskpp_VERSION_PATCH 0)
# Additional modules path for cmake
set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
include(safeguards)
include(agmg)
include(Tools)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
######################################################################
## Helpers for compiler identification
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
set(COMPILER_IS_CLANG TRUE)
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
set(COMPILER_IS_GNU TRUE)
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
set(COMPILER_IS_INTEL)
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "PGI")
set(COMPILER_IS_PGI)
endif ()
if (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
cmake_host_system_information(RESULT OSVER QUERY OS_RELEASE)
if(OSVER VERSION_LESS "10.14")
message(FATAL_ERROR "DiSk++ depends on libraries that use C++17 \
features available starting with Mac OS X 10.14. You should \
either upgrade your system or use a compiler different than \
AppleClang.")
endif()
endif()
######################################################################
## Package: MUMPS solver
find_package(MUMPS COMPONENTS SEQ)
if (MUMPS_FOUND)
set(LINK_LIBS ${LINK_LIBS} MUMPS::MUMPS)
add_definitions(-DHAVE_MUMPS)
set(HAVE_MUMPS TRUE)
else()
set(HAVE_MUMPS FALSE)
endif()
######################################################################
## Package: Threading support
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
if (COMPILER_IS_CLANG OR COMPILER_IS_INTEL OR COMPILER_IS_GNU)
set(LINK_LIBS ${LINK_LIBS} Threads::Threads)
endif()
######################################################################
## Package: Intel MKL support - To be made optional
find_package(MKL REQUIRED)
if (MKL_FOUND)
include_directories(${MKL_INCLUDE_DIRS})
set(LINK_LIBS ${LINK_LIBS} ${MKL_LIBRARIES})
set(HAVE_INTEL_MKL TRUE)
add_definitions(-DHAVE_INTEL_MKL)
endif()
######################################################################
## Package: LLNL Silo library support - To be made optional
find_package(SILO REQUIRED)
#if (SILO_FOUND)
include_directories("${SILO_INCLUDE_DIRS}")
set(LINK_LIBS ${LINK_LIBS} ${SILO_LIBRARIES})
set(HAVE_SILO TRUE)
add_definitions(-DHAVE_SILO)
#endif()
######################################################################
## Package: HDF5 Support - To be made optional
find_package(HDF5 REQUIRED)
include_directories(${HDF5_INCLUDE_DIRS})
set(LINK_LIBS ${LINK_LIBS} ${HDF5_LIBRARIES})
set(HAVE_HDF5 TRUE)
######################################################################
## Package: Lua language support
find_package(Lua REQUIRED)
include_directories("${LUA_INCLUDE_DIR}")
set(LINK_LIBS ${LINK_LIBS} ${LUA_LIBRARIES})
######################################################################
## Package: GMSH
find_library(GMSH_LIB gmsh)
find_path(GMSH_INC gmsh.h)
if(GMSH_LIB AND GMSH_INC)
set(LINK_LIBS ${LINK_LIBS} ${GMSH_LIB})
include_directories(${GMSH_INC})
set(HAVE_GMSH TRUE)
add_definitions(-DHAVE_GMSH)
set(HAVE_GMSH TRUE)
else()
set(GMSH_DIR "/opt/uliege/gmsh" CACHE PATH "GMSH install path")
if (DEFINED ENV{GMSH_DIR})
set (GMSH_DIR $ENV{GMSH_DIR})
endif()
if (GMSH_DIR STREQUAL "" OR NOT EXISTS ${GMSH_DIR})
message(STATUS "GMSH not found")
set(HAVE_GMSH FALSE)
else()
set(LINK_LIBS ${LINK_LIBS} gmsh)
include_directories(${GMSH_DIR}/include)
link_directories(${GMSH_DIR}/lib)
set(HAVE_GMSH TRUE)
add_definitions(-DHAVE_GMSH)
set(HAVE_GMSH TRUE)
endif()
endif()
######################################################################
## Package: MGIS support
find_package(MFrontGenericInterface)
if (MFrontGenericInterface_FOUND)
message(STATUS "MGIS found")
# include_directories(${MGIS_INCLUDE_DIRS})
set(LINK_LIBS ${LINK_LIBS} mgis::MFrontGenericInterface)
set(HAVE_MGIS TRUE)
add_definitions(-DHAVE_MGIS)
else()
message(STATUS "MGIS not found")
set(HAVE_MGIS FALSE)
endif()
######################################################################
## Optimization: Prefer 512 bit vectors on certain architectures.
## See https://reviews.llvm.org/D67259 for more info
option(OPT_PREFER_512bit "Prefer 512 bit vectors with AVX512 (Clang > 10 & GCC)" OFF)
if (OPT_PREFER_512bit)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mprefer-vector-width=512")
endif()
######################################################################
## Optimization: Disallow denormals and activate -ffast-math (violates IEEE754)
option(OPT_AGGRESSIVE_FP "Enable DAZ, FTZ and -ffast-math" ON)
if (OPT_AGGRESSIVE_FP)
add_definitions(-DDISALLOW_DENORMALS)
if (COMPILER_IS_CLANG OR COMPILER_IS_GNU)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffast-math")
endif()
endif()
######################################################################
## Optimization: Enable vectorizer output
option(OPT_VECTORIZER_REMARKS "Enable vectorizer remarks" OFF)
if (OPT_VECTORIZER_REMARKS)
if (COMPILER_IS_CLANG)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Rpass=loop-vectorize")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Rpass-missed=loop-vectorize")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Rpass-analysis=loop-vectorize")
endif()
if (CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -qopt-report-phase=vec -qopt-report=2")
endif()
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopt-info-vec-optimized")
endif()
if (CMAKE_CXX_COMPILER_ID STREQUAL "PGI")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Minfo")
endif()
endif()
######################################################################
## Compiler settings: Settings for different build types
set(CMAKE_CXX_FLAGS_DEBUG "-g -fsanitize=address -fpermissive")
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -march=native -g -fpermissive -DNDEBUG")
set(CMAKE_CXX_FLAGS_RELEASEASSERT "-O3 -march=native -g -fpermissive")
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated-anon-enum-enum-conversion")
set(UP_EIGEN_DIR "${CMAKE_CURRENT_SOURCE_DIR}/contrib/eigen")
if ( EXISTS ${UP_EIGEN_DIR} AND IS_DIRECTORY ${UP_EIGEN_DIR} )
include_directories(${UP_EIGEN_DIR})
else ( EXISTS ${UP_EIGEN_DIR} AND IS_DIRECTORY ${UP_EIGEN_DIR} )
find_package(Eigen3 REQUIRED)
include_directories(${EIGEN3_INCLUDE_DIR})
endif ( EXISTS ${UP_EIGEN_DIR} AND IS_DIRECTORY ${UP_EIGEN_DIR} )
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})
include_directories("${PROJECT_SOURCE_DIR}")
include_directories(core contrib)
SET(SOL2_BUILD_LUA OFF CACHE BOOL "Override sol2 build lua option")
add_subdirectory(contrib/sol2)
include_directories(contrib/sol2/include)
include_directories(contrib/sol2/single)
add_subdirectory(contrib)
add_subdirectory(core)
add_subdirectory(utils)
add_subdirectory(doc)
add_library(diskpp SHARED ${diskpp_source})
set(LINK_LIBS "${LINK_LIBS}" diskpp)
install(TARGETS diskpp LIBRARY DESTINATION lib)
install(DIRECTORY meshes DESTINATION share)
add_subdirectory(apps)