Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ElmerCSC
GitHub Repository: ElmerCSC/elmerfem
Path: blob/devel/fem/src/CMakeLists.txt
3203 views
1
# For the installer process we need a single directory
2
# where we put all module files
3
SET(CMAKE_Fortran_MODULE_DIRECTORY
4
${PROJECT_BINARY_DIR}/fmodules CACHE PATH "Directory for Fortran modules")
5
6
ADD_SUBDIRECTORY(binio)
7
ADD_SUBDIRECTORY(modules)
8
ADD_SUBDIRECTORY(view3d)
9
ADD_SUBDIRECTORY(viewaxis)
10
11
IF(WITH_MPI)
12
SET(ELMERSOLVER_OUTPUT_NAME "ElmerSolver_mpi")
13
ELSE()
14
SET(ELMERSOLVER_OUTPUT_NAME "ElmerSolver")
15
ENDIF()
16
17
SET(prefix "${CMAKE_INSTALL_PREFIX}")
18
19
SET(solverlib_SOURCES AddrFunc.F90 NavierStokes.F90 NavierStokesGeneral.F90
20
NavierStokesCylindrical.F90 Lists.F90
21
DiffuseConvectiveAnisotropic.F90 LoadMod.F90
22
DiffuseConvectiveGeneralAnisotropic.F90 PElementMaps.F90
23
PElementBase.F90 ElementDescription.F90 Integration.F90 ListMatrixArray.F90
24
ModelDescription.F90 GeneralUtils.F90 Stress.F90 StressGeneral.F90
25
LinearAlgebra.F90 CoordinateSystems.F90 ListMatrix.F90 CRSMatrix.F90
26
BandMatrix.F90 BandwidthOptimize.F90 BlockSolve.F90
27
MaterialModels.F90 DirectSolve.F90 IterSolve.F90
28
IterativeMethods.F90 TimeIntegrate.F90 Types.F90 SolveBand.F90
29
ElementUtils.F90 Radiation.F90 fft.c Load.c Differentials.F90
30
FreeSurface.F90
31
Walls.F90 SolverUtils.F90 SolveSBand.F90 CPUTime.c Interpolation.F90
32
MainUtils.F90 Adaptive.F90 EigenSolve.F90 HashTable.F90
33
MeshUtils.F90 SaveUtils.F90 SParIterGlobals.F90 SParIterComm.F90
34
SParIterPrecond.F90 SParIterSolver.F90 Messages.F90 Multigrid.F90
35
Smoothers.F90 ClusteringMethods.F90 ParallelUtils.F90
36
ParallelEigenSolve.F90 solve_cmplx.F90 solve_real.F90 MGPrec.F90
37
DefUtils.F90 MeshPartition.F90 MeshRemeshing.F90 CutFEMUtils.F90
38
RadiationFactors.F90 f_stubs.c
39
ExchangeCorrelations.F90 SolveHypre.c amgx.c rocalution.cpp SolverActivate_x.F90
40
SolveTrilinos.cxx SolveSuperLU.c
41
umf4_f77wrapper.c VankaCreate.F90 ParticleUtils.F90 Feti.F90
42
cholmod.c InterpolateMeshToMesh.F90 InterpVarToVar.F90
43
LinearForms.F90 H1Basis.F90 CircuitUtils.F90 BackwardError.F90
44
ElmerSolver.F90 MagnetoDynamicsUtils.F90 LumpingUtils.F90
45
ZirkaHysteresis.F90 SolidMechanicsUtils.F90 MatrixAssembly.F90
46
OptimizationUtils.F90 MeshGenerate.F90)
47
48
#SET_PROPERTY(SOURCE MaxwellAxiS.F90 PROPERTY
49
# COMPILE_DEFINITIONS FULL_INDUCTION)
50
51
IF(WITH_EXTOPTIM)
52
LIST(APPEND solverlib_SOURCES minpack.F90 minpack_kinds.F90
53
PowellOptBobyqa.F90 PowellOptNewuoa.F90)
54
SET(HAVE_EXTOPTIM TRUE)
55
ENDIF()
56
57
IF(WITH_LUA)
58
INCLUDE_DIRECTORIES(${LUA_INCLUDE_DIR})
59
LIST(APPEND solverlib_SOURCES Lua.F90 elmer_lua_iface.c)
60
INSTALL(DIRECTORY lua-scripts DESTINATION share/elmersolver/
61
PATTERN lua-scripts/*.lua)
62
FILE(GLOB DEFAULT_LUA_SCRIPTS "lua-scripts/*.lua")
63
FILE(COPY ${DEFAULT_LUA_SCRIPTS} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/share/elmersolver/lua-scripts/)
64
ELSE()
65
LIST(APPEND solverlib_SOURCES Lua.F90)
66
ENDIF()
67
68
IF(HAVE_FETI4I)
69
LIST(APPEND solverlib_SOURCES ${FETI4I_INTERFACE_SOURCE})
70
ENDIF()
71
72
#FILE(GLOB SRC_FILES *.src)
73
#FOREACH(FNAME ${SRC_FILES})
74
#GET_FILENAME_COMPONENT(BASENAME ${FNAME} NAME_WE)
75
#ADD_CUSTOM_COMMAND(
76
#OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${BASENAME}.F90
77
#COMMAND ${CMAKE_COMMAND} -E copy ${FNAME}
78
#${CMAKE_CURRENT_BINARY_DIR}/${BASENAME}.F90
79
#DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${BASENAME}.src
80
#)
81
#ENDFOREACH()
82
83
INCLUDE_DIRECTORIES("${CMAKE_BINARY_DIR}/fem/src")
84
INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/fhutiter/src")
85
INCLUDE_DIRECTORIES("${CMAKE_CURRENT_BINARY_DIR}/binio")
86
INCLUDE_DIRECTORIES("${PROJECT_BINARY_DIR}/fhutiter/src")
87
88
IF(WITH_Trilinos)
89
IF(NOT Epetra_INCLUDE_DIRS)
90
GET_TARGET_PROPERTY(Epetra_INCLUDE_DIRS Epetra::epetra INTERFACE_INCLUDE_DIRECTORIES)
91
ENDIF()
92
IF(NOT ML_INCLUDE_DIRS)
93
GET_TARGET_PROPERTY(ML_INCLUDE_DIRS ML::ml INTERFACE_INCLUDE_DIRECTORIES)
94
ENDIF()
95
INCLUDE_DIRECTORIES("${Epetra_INCLUDE_DIRS}")
96
INCLUDE_DIRECTORIES("${ML_INCLUDE_DIRS}")
97
ENDIF()
98
99
# Extract additional compile flags
100
GET_DIRECTORY_PROPERTY( ELMER_CDEFS COMPILE_DEFINITIONS )
101
FOREACH( d ${ELMER_CDEFS} )
102
SET(ELMER_F90FLAGS "${ELMER_F90FLAGS} -D${d}")
103
ENDFOREACH()
104
105
106
# Extract compile flags arising from build type
107
IF(CMAKE_BUILD_TYPE)
108
STRING(TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_UPCASE)
109
SET(ELMER_F90FLAGS "${ELMER_F90FLAGS} ${CMAKE_Fortran_FLAGS_${CMAKE_BUILD_TYPE_UPCASE}}")
110
MARK_AS_ADVANCED(CMAKE_BUILD_TYPE_UPCASE)
111
ENDIF(CMAKE_BUILD_TYPE)
112
113
# Output elmerf90 and elmerld
114
SET(HAVE_ELMERICE "FALSE")
115
IF(WITH_ElmerIce)
116
SET(HAVE_ELMERICE "TRUE")
117
ENDIF()
118
119
IF(WIN32)
120
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/elmerf90.bat.in.cmake
121
${CMAKE_CURRENT_BINARY_DIR}/elmerf90.bat)
122
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/elmerld.bat.in.cmake
123
${CMAKE_CURRENT_BINARY_DIR}/elmerld.bat)
124
ENDIF()
125
126
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/elmerf90-nosh.in.cmake
127
${CMAKE_CURRENT_BINARY_DIR}/elmerf90-nosh)
128
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/elmerf90.in.cmake
129
${CMAKE_CURRENT_BINARY_DIR}/elmerf90)
130
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/elmerld.in.cmake
131
${CMAKE_CURRENT_BINARY_DIR}/elmerld)
132
133
# Create pkg-config file if requested and place it under ${PKGCONFIG_PC_PATH}
134
# Defaults: PKGCONFIG_PC_PATH = ${CMAKE_INSTALL_PREFIX}/share/pkgconfig
135
IF(CREATE_PKGCONFIG_FILE)
136
SET(PKGCONFIG_PC_PATH "${CMAKE_INSTALL_PREFIX}/share/pkgconfig"
137
CACHE PATH "Path where to install elmer pkg-config file")
138
CONFIGURE_FILE(elmer.pc.cmake elmer.pc @ONLY)
139
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/elmer.pc
140
DESTINATION ${PKGCONFIG_PC_PATH})
141
ENDIF(CREATE_PKGCONFIG_FILE)
142
143
# Copy elements.def and SOLVER.KEYWORDS (to enable testing)
144
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/elements.def
145
${CMAKE_CURRENT_BINARY_DIR}/elements.def COPYONLY)
146
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/SOLVER.KEYWORDS
147
${CMAKE_CURRENT_BINARY_DIR}/SOLVER.KEYWORDS COPYONLY)
148
149
IF (NOT MPI_FOUND)
150
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/mpif_stub.h ${CMAKE_CURRENT_BINARY_DIR}/mpif.h COPYONLY)
151
# add path to stub header to dummy import target
152
target_include_directories(Elmer::MPI_Fortran INTERFACE ${CMAKE_CURRENT_BINARY_DIR})
153
ENDIF()
154
155
ADD_LIBRARY(mpi_stubs SHARED mpif_stubs.F90)
156
ADD_LIBRARY(elmersolver SHARED ${solverlib_SOURCES})
157
SET_TARGET_PROPERTIES(mpi_stubs
158
PROPERTIES LINKER_LANGUAGE Fortran)
159
SET_TARGET_PROPERTIES(elmersolver
160
PROPERTIES LINKER_LANGUAGE Fortran)
161
162
#We want MMG & Zoltan in the RPATH (if found), but given how many other
163
#components use ELMERSOLVER_RPATH_STRING, it seemed best to make
164
#a local copy just for ElmerSolver and libelmersolver
165
SET(ELMERSOLVER_RPATH_STRING_MOD "${ELMERSOLVER_RPATH_STRING}")
166
IF(HAVE_MMG)
167
TARGET_LINK_LIBRARIES(elmersolver ${MMG_LIBRARY})
168
SET(ELMERSOLVER_RPATH_STRING_MOD "${ELMERSOLVER_RPATH_STRING_MOD}:${MMG_LIBDIR}")
169
SET(ELMERLIB_RPATH_STRING "${ELMERLIB_RPATH_STRING}:${MMG_LIBDIR}")
170
#TODO - add to RPath
171
ENDIF()
172
173
IF(HAVE_PARMMG)
174
TARGET_LINK_LIBRARIES(elmersolver ${PARMMG_LIBRARY})
175
SET(ELMERSOLVER_RPATH_STRING_MOD "${ELMERSOLVER_RPATH_STRING_MOD}:${PARMMG_LIBDIR}")
176
SET(ELMERLIB_RPATH_STRING "${ELMERLIB_RPATH_STRING}:${PARMMG_LIBDIR}")
177
#TODO - add to RPath
178
ENDIF()
179
180
IF(HAVE_ZOLTAN)
181
IF(USE_SYSTEM_ZOLTAN)
182
TARGET_LINK_LIBRARIES(elmersolver Zoltan::zoltan)
183
ELSE()
184
ADD_DEPENDENCIES(elmersolver zoltan)
185
TARGET_LINK_LIBRARIES(elmersolver ${ZOLTAN_LIBRARY})
186
ENDIF()
187
IF(Zoltan_ENABLE_ParMETIS)
188
TARGET_LINK_LIBRARIES(elmersolver ${ParMetis_LIBRARIES})
189
ENDIF()
190
# SET(ELMERSOLVER_RPATH_STRING_MOD "${ELMERSOLVER_RPATH_STRING_MOD}/:${ZOLTAN_LIBDIR}")
191
# SET(ELMERLIB_RPATH_STRING "${ELMERLIB_RPATH_STRING}/:${ZOLTAN_LIBDIR}")
192
ENDIF()
193
194
# ElmerSolver libraries
195
SET(ELMERSOLVER_LIBRARIES matc fhuti binio arpack)
196
197
IF(UMFPACK_FOUND)
198
# external implementation of UMFPACK
199
LIST(APPEND ELMERSOLVER_LIBRARIES ${UMFPACK_LIBRARIES})
200
201
TARGET_INCLUDE_DIRECTORIES(elmersolver PRIVATE ${UMFPACK_INCLUDE_DIR})
202
#LIST(APPEND ELMERSOLVER_LIBRARIES ${UMFPACK_LIBRARIES})
203
#TARGET_LINK_LIBRARIES(elmersolver "${UMFPACK_LIBRARIES}")
204
ELSE()
205
# bundled UMFPACK
206
LIST(APPEND ELMERSOLVER_LIBRARIES umfpack amd)
207
TARGET_INCLUDE_DIRECTORIES(elmersolver PRIVATE ${PROJECT_SOURCE_DIR}/umfpack/src/umfpack/include)
208
ENDIF()
209
210
LIST(APPEND ELMERSOLVER_LIBRARIES
211
${LAPACK_LIBRARIES} ${BLAS_LIBRARIES}
212
${CMAKE_DL_LIBS})
213
214
IF(WITH_LUA)
215
LIST(APPEND ELMERSOLVER_LIBRARIES ${LUA_LIBRARIES})
216
ENDIF()
217
218
219
ADD_EXECUTABLE(Solver_TGT Solver.F90)
220
SET_TARGET_PROPERTIES(Solver_TGT PROPERTIES OUTPUT_NAME "${ELMERSOLVER_OUTPUT_NAME}")
221
222
IF(NOT(WIN32))
223
MESSAGE(STATUS " ELMERSOLVER_RPATH_STRING_MOD " ${ELMERSOLVER_RPATH_STRING_MOD})
224
MESSAGE(STATUS " ELMERLIB_RPATH_STRING " ${ELMERLIB_RPATH_STRING})
225
226
SET_TARGET_PROPERTIES(Solver_TGT PROPERTIES INSTALL_RPATH "${ELMERSOLVER_RPATH_STRING_MOD}")
227
SET_TARGET_PROPERTIES(elmersolver PROPERTIES INSTALL_RPATH "${ELMERLIB_RPATH_STRING}")
228
ENDIF()
229
230
IF(NOT(WITH_MPI))
231
TARGET_LINK_LIBRARIES(elmersolver mpi_stubs ${ELMERSOLVER_LIBRARIES})
232
TARGET_LINK_LIBRARIES(Solver_TGT elmersolver)
233
ENDIF()
234
235
IF(WITH_MPI)
236
#ADD_LIBRARY(elmersolver_mpi SHARED ${solverlib_SOURCES})
237
238
# Add parpack and possibly others
239
IF(Mumps_LIBRARIES)
240
INCLUDE_DIRECTORIES(${Mumps_INCLUDE_DIR})
241
# Link to SCALAPACK implicitly
242
LIST(APPEND ELMERSOLVER_LIBRARIES ${Mumps_LIBRARIES})
243
ELSEIF(MKL_CPARDISO_FOUND)
244
# Mumps includes SCALAPACK, but it is needed with CPARDISO
245
LIST(APPEND ELMERSOLVER_LIBRARIES ${SCALAPACK_LIBRARIES})
246
ENDIF()
247
248
IF(Hypre_LIBRARIES)
249
LIST(APPEND ELMERSOLVER_LIBRARIES Elmer::MPI_C ${Hypre_LIBRARIES})
250
ENDIF()
251
252
IF(NETCDF_LIBRARIES)
253
LIST(APPEND ELMERSOLVER_LIBRARIES ${NETCDF_LIBRARIES})
254
IF(PHDF5_LIBRARIES)
255
LIST(APPEND ELMERSOLVER_LIBRARIES ${PHDF5_LIBRARIES})
256
ENDIF()
257
ENDIF()
258
259
IF(FETI4I_LIBRARIES)
260
LIST(APPEND ELMERSOLVER_LIBRARIES ${FETI4I_LIBRARIES})
261
ENDIF()
262
263
IF(XIOS_LIBRARIES)
264
LIST(APPEND ELMERSOLVER_LIBRARIES ${XIOS_LIBRARIES})
265
ENDIF()
266
267
# Executable
268
TARGET_LINK_LIBRARIES(Solver_TGT Elmer::MPI_Fortran elmersolver ${ELMERSOLVER_LIBRARIES})
269
270
# Library object
271
TARGET_LINK_LIBRARIES(elmersolver Elmer::MPI_Fortran ${ELMERSOLVER_LIBRARIES} parpack)
272
273
SET(SERIAL_SOLVER_FILEPATH "${CMAKE_INSTALL_PREFIX}/bin/ElmerSolver")
274
SET(MPI_SOLVER_FILEPATH "${CMAKE_INSTALL_PREFIX}/bin/${ELMERSOLVER_OUTPUT_NAME}")
275
ENDIF()
276
277
IF(MPI_Fortran_HAVE_F90_MODULE)
278
TARGET_COMPILE_DEFINITIONS(elmersolver PRIVATE ELMER_HAVE_MPI_MODULE)
279
ELSE()
280
# Either the header from an actual MPI implementation or the replacement stub
281
TARGET_COMPILE_DEFINITIONS(elmersolver PRIVATE ELMER_HAVE_MPIF_HEADER)
282
ENDIF()
283
IF(WITH_ROCALUTION)
284
TARGET_LINK_LIBRARIES(elmersolver roc::rocalution)
285
ENDIF()
286
287
IF(WITH_AMGX)
288
TARGET_LINK_LIBRARIES(elmersolver Elmer::MPI_C "${AMGX_LIBRARY};${CUDA_LIBRARIES}")
289
TARGET_INCLUDE_DIRECTORIES(elmersolver PRIVATE "${CUDA_INCLUDE_DIRS}")
290
ENDIF()
291
292
IF(WITH_Trilinos)
293
TARGET_LINK_LIBRARIES(elmersolver Elmer::MPI_CXX "${Trilinos_LIBRARIES};${ML_LIBRARIES};${Epetra_LIBRARIES};${Teuchos_LIBRARIES}")
294
ENDIF()
295
296
IF (WITH_CHOLMOD)
297
SET(CURR_CFLAGS "-DHAVE_CHOLMOD")
298
TARGET_INCLUDE_DIRECTORIES(elmersolver PRIVATE "${CHOLMOD_INCLUDE_DIR};${SPQR_INCLUDE_DIR}")
299
TARGET_LINK_LIBRARIES(elmersolver "${CHOLMOD_LIBRARIES};${SPQR_LIBRARIES}")
300
ENDIF()
301
302
# elmersolver -library
303
#TARGET_LINK_LIBRARIES(elmersolver ${ELMERSOLVER_LIBRARIES})
304
305
## ElmerSolver serial
306
#IF(NOT(NO_SERIAL_BINARY))
307
#TARGET_LINK_LIBRARIES(elmersolver mpi_stubs ${ELMERSOLVER_LIBRARIES})
308
#TARGET_LINK_LIBRARIES(ElmerSolver elmersolver)
309
#ENDIF()
310
311
# ElmerSolver
312
#ADD_EXECUTABLE(ElmerSolver Solver.F90)
313
#TARGET_LINK_LIBRARIES(ElmerSolver ${ELMERSOLVER_LIBRARIES}
314
#mpi_stubs)
315
316
# ViewFactors
317
ADD_EXECUTABLE(ViewFactors ViewFactors.F90)
318
SET_TARGET_PROPERTIES(ViewFactors PROPERTIES LINKER_LANGUAGE Fortran)
319
# TARGET_INCLUDE_DIRECTORIES(ViewFactors PUBLIC ${CMAKE_BINARY_DIR}/fem/src/view3d)
320
# TARGET_INCLUDE_DIRECTORIES(ViewFactors PUBLIC ${CMAKE_BINARY_DIR}/fem/src/viewfactors)
321
# FIND_LIBRARY(VIEW3D_LIBRARIES PATHS ${CMAKE_CURRENT_BINARY_DIR}/view3d)
322
# FIND_LIBRARY(VIEWAXIS_LIBRARIES PATHS ${CMAKE_CURRENT_BINARY_DIR}/viewaxis)
323
TARGET_LINK_LIBRARIES(ViewFactors view3d viewaxis elmersolver)
324
INSTALL(TARGETS ViewFactors RUNTIME DESTINATION "bin")
325
326
IF(NOT(WIN32))
327
SET_TARGET_PROPERTIES(ViewFactors PROPERTIES INSTALL_RPATH "${ELMERSOLVER_RPATH_STRING}")
328
ENDIF()
329
330
# Radiators
331
ADD_EXECUTABLE(Radiators Radiators.F90)
332
SET_TARGET_PROPERTIES(Radiators PROPERTIES LINKER_LANGUAGE Fortran)
333
# TARGET_INCLUDE_DIRECTORIES(Radiators PUBLIC ${CMAKE_BINARY_DIR}/fem/src/view3d)
334
# TARGET_INCLUDE_DIRECTORIES(Radiators PUBLIC ${CMAKE_BINARY_DIR}/fem/src/viewfactors)
335
# FIND_LIBRARY(VIEW3D_LIBRARIES PATHS ${CMAKE_CURRENT_BINARY_DIR}/view3d)
336
# FIND_LIBRARY(VIEWAXIS_LIBRARIES PATHS ${CMAKE_CURRENT_BINARY_DIR}/viewaxis)
337
TARGET_LINK_LIBRARIES(Radiators view3d viewaxis elmersolver)
338
INSTALL(TARGETS Radiators RUNTIME DESTINATION "bin")
339
340
IF(NOT(WIN32))
341
SET_TARGET_PROPERTIES(Radiators PROPERTIES INSTALL_RPATH "${ELMERSOLVER_RPATH_STRING}")
342
ENDIF()
343
344
345
# Installation rules
346
INSTALL(FILES elements.def SOLVER.KEYWORDS DESTINATION "share/elmersolver/lib")
347
348
349
IF(NOT(WIN32))
350
IF(WITH_MPI)
351
INSTALL(TARGETS Solver_TGT elmersolver RUNTIME DESTINATION "bin"
352
LIBRARY DESTINATION "${ELMER_INSTALL_LIB_DIR}")
353
INSTALL(TARGETS Solver_TGT RUNTIME DESTINATION "bin"
354
LIBRARY DESTINATION "${ELMER_INSTALL_LIB_DIR}")
355
ELSE()
356
INSTALL(TARGETS Solver_TGT elmersolver mpi_stubs RUNTIME DESTINATION "bin"
357
LIBRARY DESTINATION "${ELMER_INSTALL_LIB_DIR}")
358
ENDIF()
359
ELSE()
360
INSTALL(TARGETS elmersolver mpi_stubs RUNTIME DESTINATION "${ELMER_INSTALL_LIB_DIR}"
361
LIBRARY DESTINATION "${ELMER_INSTALL_LIB_DIR}")
362
INSTALL(TARGETS Solver_TGT elmersolver mpi_stubs RUNTIME DESTINATION "bin"
363
LIBRARY DESTINATION "${ELMER_INSTALL_LIB_DIR}")
364
ENDIF()
365
366
IF(WIN32)
367
INSTALL(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/elmerf90.bat DESTINATION "bin")
368
INSTALL(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/elmerld.bat DESTINATION "bin")
369
ENDIF()
370
INSTALL(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/elmerf90 DESTINATION "bin")
371
INSTALL(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/elmerld DESTINATION "bin")
372
373
374
INSTALL(DIRECTORY ${CMAKE_Fortran_MODULE_DIRECTORY}/.
375
DESTINATION "share/elmersolver/include")
376
377
IF(WITH_MPI)
378
IF(NOT(WIN32))
379
# INSTALL(CODE "
380
# EXECUTE_PROCESS(COMMAND \${CMAKE_COMMAND} -E create_symlink ElmerSolver_mpi ElmerSolver
381
# WORKING_DIRECTORY \${CMAKE_INSTALL_PREFIX}/bin)")
382
ADD_CUSTOM_TARGET(elmersolver_link ALL COMMAND ${CMAKE_COMMAND} -E create_symlink ElmerSolver_mpi ElmerSolver)
383
ADD_DEPENDENCIES(elmersolver_link Solver_TGT)
384
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/ElmerSolver DESTINATION "bin")
385
ELSE()
386
INSTALL(CODE "EXECUTE_PROCESS(COMMAND \${CMAKE_COMMAND} -E copy
387
\${CMAKE_INSTALL_PREFIX}/bin/ElmerSolver_mpi.exe
388
\${CMAKE_INSTALL_PREFIX}/bin/ElmerSolver.exe)")
389
ENDIF()
390
ENDIF()
391
392
393
394