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