CMakeLists.txt 6.5 KB
Newer Older
Kirill Terekhov's avatar
Kirill Terekhov committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
cmake_minimum_required (VERSION 2.6)
project (INMOST)
set(SOURCE solver.cpp 
           solver_ani.cpp 
           solver_petsc.cpp 
           partitioner.cpp 
           algorithm.cpp 
           geometry.cpp 
           iterator.cpp
           storage.cpp
           eset.cpp
           mesh_file.cpp
           timer.cpp
           face.cpp
           edge.cpp
           mesh.cpp
           node.cpp
           cell.cpp
           tag.cpp
           element.cpp
           mesh_parallel.cpp
           modify.cpp
Kirill Terekhov's avatar
Kirill Terekhov committed
23
24
25
           earray.cpp
           comparator.cpp
           autodiff.cpp)
Kirill Terekhov's avatar
Kirill Terekhov committed
26
27
28
29
30
31
32
33
34
35
set(HEADER inmost.h
           inmost_options_cmake.h
           inmost_common.h
           inmost_mesh.h
           inmost_solver.h
           inmost_partitioner.h
           inmost_autodiff.h
           container.hpp
           io.hpp
           solver_ilu2.hpp
Kirill Terekhov's avatar
Kirill Terekhov committed
36
           solver_ddpqiluc2.hpp
Kirill Terekhov's avatar
Kirill Terekhov committed
37
38
39
40
41
42
43
44
45
           solver_bcgsl.hpp
           solver_prototypes.hpp)




add_library(inmost STATIC ${SOURCE} ${HEADER})

option(USE_MPI "Compile with MPI support" ON)
Kirill Terekhov's avatar
Fixes    
Kirill Terekhov committed
46
47
option(USE_MPI_P2P "Use MPI point to point functionality, may be faster with hardware support" ON)
option(USE_MPI_FILE "Use MPI extension to work with files, may save a lot of memory" ON)
Kirill Terekhov's avatar
Fixes    
Kirill Terekhov committed
48
option(USE_MPI2 "Use MPI-2 extensions, useful if your MPI library warns you to use new functions" ON)
Kirill Terekhov's avatar
Kirill Terekhov committed
49
50
51
52
53
54
55
56
57
58
59
60
61
option(USE_OMP "Compile with OpenMP support (experimental)" OFF)

option(USE_MESH "Compile mesh capabilities" ON)
option(USE_SOLVER "Compile solver capabilities" ON)
option(USE_PARTITIONER "Compile partitioner capabilities" ON)
option(USE_AUTODIFF "Compile automatic differentiation capabilities" ON)
option(TEST_FORTRAN_ANI3D "Test for fortran availibility to compile ANI3D lib" OFF)
option(COMPILE_EXAMPLES "Compile examples" OFF)
option(COMPILE_PROJECTS "Compile projects" OFF)
option(COMPILE_TESTS "Compile some tests" OFF)

option(USE_PARTITIONER_PARMETIS "Use ParMetis partitioner" OFF)
option(USE_PARTITIONER_ZOLTAN "Use Zoltan partitioner" OFF)
Kirill Terekhov's avatar
Kirill Terekhov committed
62
63
option(USE_SOLVER_PETSC "Use PETSc solvers" OFF)
option(USE_SOLVER_TRILINOS "Use Trilinos solvers" OFF)
Kirill Terekhov's avatar
Kirill Terekhov committed
64
option(USE_AUTODIFF_OPENCL "Use OpenCL for automatic differentiation (under work)" OFF)
Kirill Terekhov's avatar
Kirill Terekhov committed
65
option(USE_AUTODIFF_ASMJIT "Use AsmJit for automatic differentiation" OFF)
Kirill Terekhov's avatar
Kirill Terekhov committed
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
option(USE_AUTODIFF_EXPRESSION_TEMPLATES "Use c++ expression templates for automatic differentiation" OFF)

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake_find/")


if(TEST_FORTRAN_ANI3D)
	add_subdirectory(ILU2)
	if(ANI3D_AVAILIBLE)
		option(USE_SOLVER_ANI "Compile with ANI3D sequential solvers" OFF)
	else()
		option(USE_SOLVER_ANI "Compile with ANI3D sequential solvers" ON)
	endif()
endif()


if(USE_MPI)
	find_package(MPI)
	if(NOT MPI_FOUND)
Kirill Terekhov's avatar
Fixes    
Kirill Terekhov committed
84
		set(USE_MPI OFF)
Kirill Terekhov's avatar
Kirill Terekhov committed
85
86
87
		message("MPI NOT FOUND")
	else()
		include_directories(${MPI_INCLUDE_PATH})
Kirill Terekhov's avatar
Fixes    
Kirill Terekhov committed
88
		set(USE_MPI ON)
Kirill Terekhov's avatar
Kirill Terekhov committed
89
90
91
92
93
94
95
96
97
98
99
		set_target_properties(inmost PROPERTIES COMPILE_FLAGS "${MPI_COMPILE_FLAGS}")
		message("MPI FOUND")
	endif()
endif()

if(USE_OMP)
	find_package(OpenMP)
	if (OPENMP_FOUND)
		set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
		set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
	else()
Kirill Terekhov's avatar
Fixes    
Kirill Terekhov committed
100
		set(USE_OMP OFF)
Kirill Terekhov's avatar
Kirill Terekhov committed
101
102
103
104
105
106
	endif()
endif()

if(USE_PARTITIONER_PARMETIS)
	find_package(ParMETIS)
	if(NOT PARMETIS_FOUND)
Kirill Terekhov's avatar
Fixes    
Kirill Terekhov committed
107
		set(USE_PARTITIONER_PARMETIS OFF)
Kirill Terekhov's avatar
Kirill Terekhov committed
108
109
110
		message("PARMETIS NOT FOUND")
	else()
		include_directories(${PARMETIS_INCLUDE_DIR})
Kirill Terekhov's avatar
Kirill Terekhov committed
111
		include_directories(${METIS_INCLUDE_DIR})
Kirill Terekhov's avatar
Fixes    
Kirill Terekhov committed
112
		set(USE_PARTITIONER_PARMETIS ON)
Kirill Terekhov's avatar
Kirill Terekhov committed
113
114
115
116
117
118
119
120
		message("PARMETIS FOUND")
	endif()
endif()


if(USE_PARTITIONER_ZOLTAN)
	find_package(ZOLTAN)
	if(NOT ZOLTAN_FOUND)
Kirill Terekhov's avatar
Fixes    
Kirill Terekhov committed
121
		set(USE_PARTITIONER_ZOLTAN OFF)
Kirill Terekhov's avatar
Kirill Terekhov committed
122
123
		message("ZOLTAN NOT FOUND")
	else()
124
		include_directories(${ZOLTAN_INCLUDE_DIR})
Kirill Terekhov's avatar
Kirill Terekhov committed
125
		include_directories(${ZOLTAN_INCLUDE_DIRS})
Kirill Terekhov's avatar
Fixes    
Kirill Terekhov committed
126
		set(USE_PARTITIONER_ZOLTAN ON)
Kirill Terekhov's avatar
Kirill Terekhov committed
127
128
129
130
131
132
133
		message("ZOLTAN FOUND")
	endif()
endif()

if(USE_SOLVER_PETSC)
	find_package(PETSc)
	if(NOT PETSC_FOUND)
Kirill Terekhov's avatar
Fixes    
Kirill Terekhov committed
134
		set(USE_SOLVER_PETSC OFF)
Kirill Terekhov's avatar
Kirill Terekhov committed
135
136
137
		message("PETSC NOT FOUND")
	else()
		include_directories(${PETSC_INCLUDES})
Kirill Terekhov's avatar
Fixes    
Kirill Terekhov committed
138
		set(USE_SOLVER_PETSC ON)
Kirill Terekhov's avatar
Kirill Terekhov committed
139
140
141
142
143
144
145
		message("PETSC FOUND")
		add_definitions(${PETSC_DEFINITIONS})
		#message(${PETSC_LIBRARIES})
	endif()
endif()


Kirill Terekhov's avatar
Kirill Terekhov committed
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
if(USE_SOLVER_TRILINOS)
	set(CMAKE_PREFIX_PATH ${TRILINOS_PATH} ${CMAKE_PREFIX_PATH})
	find_package(Trilinos PATHS ${TRILINOS_PATH}/lib/cmake/Trilinos ${TRILINOS_PATH})
	if(NOT Trilinos_FOUND)
		set(USE_SOLVER_TRILINOS OFF)
		message("Trilinos NOT FOUND")
	else()

		MESSAGE("\nFound Trilinos!  Here are the details: ")
		MESSAGE("   Trilinos_DIR = ${Trilinos_DIR}")
		MESSAGE("   Trilinos_VERSION = ${Trilinos_VERSION}")
		MESSAGE("   Trilinos_PACKAGE_LIST = ${Trilinos_PACKAGE_LIST}")
		MESSAGE("   Trilinos_LIBRARIES = ${Trilinos_LIBRARIES}")
		MESSAGE("   Trilinos_INCLUDE_DIRS = ${Trilinos_INCLUDE_DIRS}")
		MESSAGE("   Trilinos_LIBRARY_DIRS = ${Trilinos_LIBRARY_DIRS}")
		MESSAGE("   Trilinos_TPL_LIST = ${Trilinos_TPL_LIST}")
		MESSAGE("   Trilinos_TPL_INCLUDE_DIRS = ${Trilinos_TPL_INCLUDE_DIRS}")
		MESSAGE("   Trilinos_TPL_LIBRARIES = ${Trilinos_TPL_LIBRARIES}")
		MESSAGE("   Trilinos_TPL_LIBRARY_DIRS = ${Trilinos_TPL_LIBRARY_DIRS}")
		MESSAGE("   Trilinos_BUILD_SHARED_LIBS = ${Trilinos_BUILD_SHARED_LIBS}")
		MESSAGE("End of Trilinos details\n")

		include_directories(${Trilinos_INCLUDE_DIRS})
		include_directories(${Trilinos_TPL_INCLUDE_DIRS})
		link_directories(${Trilinos_LIBRARY_DIRS})
		link_directories(${Trilinos_TPL_LIBRARY_DIRS})


		set(USE_SOLVER_TRILINOS ON)
		message("Trilinos FOUND")
	endif()
endif()


Kirill Terekhov's avatar
Kirill Terekhov committed
180
181
182
if(USE_AUTODIFF_OPENCL)
	find_package(OpenCL)
	if(OPENCL_FOUND)
Kirill Terekhov's avatar
Fixes    
Kirill Terekhov committed
183
		set(USE_AUTODIFF_OPENCL ON)
Kirill Terekhov's avatar
Kirill Terekhov committed
184
185
		include_directories(${OPENCL_INCLUDE_DIRS})
	else()
Kirill Terekhov's avatar
Fixes    
Kirill Terekhov committed
186
		set(USE_AUTODIFF_OPENCL OFF)
Kirill Terekhov's avatar
Kirill Terekhov committed
187
188
189
190
191
		message("OpenCL not found")
	endif()
endif()

if(USE_AUTODIFF_ASMJIT)
Kirill Terekhov's avatar
Fixes    
Kirill Terekhov committed
192
	set(ASMJIT_STATIC TRUE)
Kirill Terekhov's avatar
Kirill Terekhov committed
193
194
195
196
197
198
199
200
201
202
203
204
	include("AsmJit/CMakeLists.txt")	
	include_directories("${ASMJIT_INC_DIR}/asmjit")
	target_link_libraries(inmost asmjit)
endif()

if(USE_AUTODIFF_EXPRESSION_TEMPLATES)
	if(MSVC)
		set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj")
	endif()
endif()


Kirill Terekhov's avatar
Kirill Terekhov committed
205
206
207
208
209
210
211
212
if(MSVC)
  if(USE_SOLVER_TRILINOS)
    message("Putting workaround for Visual Studio that allow to use Trilinos Release libraries in Debug mode")
    message("Note that this workaround may affect your debugging experience, you may want to debug without Trilinos")
    add_definitions(-D_ITERATOR_DEBUG_LEVEL=0)
  endif()
endif()

Kirill Terekhov's avatar
Kirill Terekhov committed
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
configure_file("inmost_options_cmake.h" "${PROJECT_BINARY_DIR}/inmost_options.h")
include_directories("${PROJECT_BINARY_DIR}")

if(COMPILE_EXAMPLES)
add_subdirectory(examples)
endif(COMPILE_EXAMPLES)

if(COMPILE_PROJECTS)
add_subdirectory(projects)
endif(COMPILE_PROJECTS)

if(COMPILE_TESTS)
add_subdirectory(tests)
endif(COMPILE_TESTS)