forked from precice/precice
-
Notifications
You must be signed in to change notification settings - Fork 0
/
CMakeLists.txt
609 lines (509 loc) · 17.4 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
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
cmake_minimum_required (VERSION 3.10.2)
project(preCICE VERSION 2.3.0 LANGUAGES CXX)
set(preCICE_SOVERSION ${preCICE_VERSION_MAJOR})
#
# Overview of this configuration
#
# PREAMBLE
# Setup Options
# Find Mandatory Dependencies
# Find Configurable Dependencies
# Configuration of Target precice
# Configuration of Target binprecice
# Configuration of Target testprecice
# Install Targets for precice
# CPack
#
#
# PREAMBLE
#
# Make our cmake modules visible to CMake
list (APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")
list (APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/modules")
include(CheckCXX11Library)
include(CopyTargetProperty)
include(XSDKMacros)
include(Validation)
# CMake Policies
# CMP0074: find_package() uses <PackageName>_ROOT variables.
if(POLICY CMP0074)
cmake_policy(SET CMP0074 NEW)
endif()
# CMP0075 Include file check macros honor CMAKE_REQUIRED_LIBRARIES
if(POLICY CMP0075)
cmake_policy(SET CMP0075 NEW)
endif()
#
# Setup Options
#
if(NOT CMAKE_BUILD_TYPE)
message(WARNING "You did not specify a CMAKE_BUILD_TYPE.
We will assume you asked for a Debug build.")
set(CMAKE_BUILD_TYPE Debug CACHE STRING "The type of this build" FORCE)
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS Debug Release RelWithDebInfo MinSizeRel)
endif()
option(PRECICE_MPICommunication "Enables MPI-based communication and running coupling tests." ON)
option(PRECICE_PETScMapping "Enable use of the PETSc linear algebra library." ON)
option(PRECICE_PythonActions "Python support" ON)
option(PRECICE_Packages "Configure package generation." ON)
option(PRECICE_InstallTest "Add test binary and necessary files to install target." OFF)
option(BUILD_SHARED_LIBS "Build shared instead of static libraries" ON)
option(BUILD_TESTING "Build tests" ON)
option(PRECICE_ALWAYS_VALIDATE_LIBS "Validate libraries even after the validatation succeeded." OFF)
option(PRECICE_ENABLE_C "Enable the native C bindings" ON)
option(PRECICE_ENABLE_FORTRAN "Enable the native Fortran bindings" ON)
xsdk_tpl_option_override(PRECICE_MPICommunication TPL_ENABLE_MPI)
xsdk_tpl_option_override(PRECICE_PETScMapping TPL_ENABLE_PETSC)
xsdk_tpl_option_override(PRECICE_PythonActions TPL_ENABLE_PYTHON)
if(PRECICE_PETScMapping AND NOT PRECICE_MPICommunication)
message(FATAL_ERROR "Please enable MPI to use PETSC.")
endif()
set(PRECICE_CTEST_MPI_FLAGS "" CACHE STRING "Add additional flags to mpiexec for running tests via CTest.")
include(XSDKOptions)
# Print information about this configuration
include(PrintHelper)
print_configuration(
ADDITIONAL
"PRECICE_Packages;Configure package generation"
"PRECICE_InstallTest;Install tests/testfiles"
"PRECICE_CTEST_MPI_FLAGS;Additional CTest MPI Flags"
)
print_empty()
include(FeatureSummary)
add_feature_info(MPICommunication PRECICE_MPICommunication
"Enables the MPI communication back-end.
This enables the MPI communication back-end which is highly recommended on multi-node systems.
See the documentation of the CMake module FindMPI to control its functionality.
This feature can be enabled/disabled by setting the PRECICE_MPICommunication CMake option.
")
add_feature_info(PETScMapping PRECICE_PETScMapping
"Enables the PETSc-powered radial basic function mappings.
This enables the PETSc-based variant of radial basis function mappings which can run in parallel,
also across different compute nodes. This is highly recommended for large cases running in parallel.
This feature can be enabled/disabled by setting the PRECICE_PETScMapping CMake option.
Requires MPICommunication.
")
add_feature_info(PythonActions PRECICE_PythonActions
"Enables the support for user-defined python actions.
preCICE allows to manipulate coupling data at runtime using configurable actions.
This feature enables the support for user-defined actions written in Python based on numpy.
This feature can be enabled/disabled by setting the PRECICE_PythonActions CMake option.
")
add_feature_info(CBindings PRECICE_ENABLE_C
"Enables the native C bindings.
preCICE provides native bindings for C, which are compiled into the library.
This feature enables the compilation and installation of the bindings into the library.
Note that we strongly recommend to compile with C bindings enabled for compatibility reasons.
This feature can be enabled/disabled by setting the PRECICE_ENABLE_C CMake option.
")
add_feature_info(FortranBindings PRECICE_ENABLE_FORTRAN
"Enables the native Fortran bindings.
preCICE provides native bindings for Fortran, which are compiled into the library.
This feature enables the compilation and installation of the bindings into the library.
Note that we strongly recommend to compile with Fortran bindings enabled for compatibility reasons.
This feature can be enabled/disabled by setting the PRECICE_ENABLE_FORTRAN CMake option.
")
feature_summary(WHAT ENABLED_FEATURES DESCRIPTION "=== ENABLED FEATURES ===" QUIET_ON_EMPTY)
feature_summary(WHAT DISABLED_FEATURES DESCRIPTION "=== DISABLED FEATURES ===" QUIET_ON_EMPTY)
#
# Find Mandatory Dependencies
#
print_section("DEPENDENCIES")
find_package (Threads REQUIRED)
if(TPL_ENABLE_BOOST)
xsdk_tpl_require(BOOST BOOST_ROOT)
# Use BOOST_ROOT to set the directory
set(Boost_NO_SYSTEM_PATHS ON CACHE BOOL "" FORCE)
unset(ENV{BOOST_ROOT})
endif()
find_package(Boost 1.65.1 REQUIRED
COMPONENTS filesystem log log_setup program_options system thread unit_test_framework
)
# Eigen
if(TPL_ENABLE_EIGEN3)
# Use EIGEN3_ROOT to set the directory
xsdk_tpl_require(EIGEN3 EIGEN3_INCLUDE_DIR)
endif()
find_package(Eigen3 3.2 REQUIRED)
precice_validate_eigen()
# LibXML2
if(TPL_ENABLE_LIBXML2)
xsdk_tpl_require(LIBXML2 LIBXML2_LIBRARIES LIBXML2_INCLUDE_DIRS)
endif()
find_package(LibXml2 REQUIRED)
precice_validate_libxml2()
# nlohmann/JSON
if(TPL_ENABLE_JSON)
xsdk_tpl_require(JSON JSON_INCLUDE_DIR)
add_library(JSON INTERFACE IMPORTED)
set_property(TARGET JSON PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${JSON_INCLUDE_DIR}")
else()
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/json)
endif()
precice_validate_json()
# libfmt
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/fmt)
precice_validate_fmtlib()
#
# Find Configurable Dependencies
#
# Option: PRECICE_MPICommunication
if (PRECICE_MPICommunication)
set(MPI_DETERMINE_LIBRARY_VERSION ON) # Try to detect the library vendor
find_package(MPI REQUIRED)
message(STATUS "MPI Version: ${MPI_CXX_LIBRARY_VERSION_STRING}")
# We need to disable the MPIPorts tests in case we detect Open MPI
if(MPI_CXX_LIBRARY_VERSION_STRING MATCHES "Open MPI")
set(PRECICE_MPI_OPENMPI TRUE CACHE BOOL "Is the MPI implementation OpenMPI?" FORCE)
mark_as_advanced(PRECICE_MPI_OPENMPI)
endif()
endif()
# Option: PETSC
if (PRECICE_PETScMapping)
if (TPL_ENABLE_PETSC)
xsdk_tpl_require(PETSC PETSC_DIR PETSC_ARCH)
# PETSc detection uses primarily these ENVs
endif()
find_package(PETSc 3.12 REQUIRED)
# No validation required as PETSc does this internally
else()
message(STATUS "PETSc support disabled")
endif()
# Option Python
if (PRECICE_PythonActions)
if (TPL_ENABLE_PYTHON)
xsdk_tpl_require(PYTHON PYTHON_LIBRARY PYTHON_INCLUDE_DIR NumPy_INCLUDE_DIR)
find_package(PythonLibs REQUIRED)
# Override NumPy
# TODO: Incorporate into the FindNumPy module
set(NumPy_FOUND True CACHE BOOL "NumPy found?" FORCE)
if(NOT TARGET NumPy::NumPy)
add_library(NumPy::NumPy INTERFACE IMPORTED)
set_property(TARGET NumPy::NumPy PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${NumPy_INCLUDE_DIR}")
endif()
else()
if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.14")
find_package(Python3 REQUIRED COMPONENTS Development NumPy)
else()
# Required for Ubuntu 18.04 LTS
find_package(PythonLibs REQUIRED)
find_package(NumPy REQUIRED)
if(PYTHONLIBS_VERSION_STRING VERSION_LESS 3)
message(FATAL_ERROR "Python 2 is not supported (found ${PYTHONLIBS_VERSION_STRING})")
endif()
endif()
endif()
precice_validate_libpython()
precice_validate_numpy()
else()
message(STATUS "Python support disabled")
endif()
#
# Configuration of Target precice
#
print_empty()
print_section("TARGETS & PACKAGES")
# Add a dummy to silence add_library warning for cmake < 3.11.
set(preCICE_DUMMY "")
if(CMAKE_VERSION VERSION_LESS "3.11")
set(preCICE_DUMMY "${CMAKE_CURRENT_BINARY_DIR}/dummy.cpp")
if(NOT EXISTS "${preCICE_DUMMY}")
file(WRITE "${preCICE_DUMMY}" "")
endif()
endif()
# Add precice as an empty target
add_library(precice ${preCICE_DUMMY})
set_target_properties(precice PROPERTIES
# precice is a C++14 project
CXX_STANDARD 14
CXX_STANDARD_REQUIRED Yes
CXX_EXTENSIONS No
VERSION ${preCICE_VERSION}
SOVERSION ${preCICE_SOVERSION}
)
# Setup Boost
target_compile_definitions(precice PRIVATE BOOST_ALL_DYN_LINK BOOST_ASIO_ENABLE_OLD_SERVICES BOOST_GEOMETRY_DISABLE_DEPRECATED_03_WARNING)
target_link_libraries(precice PRIVATE
Boost::boost
Boost::filesystem
Boost::log
Boost::log_setup
Boost::program_options
Boost::system
Boost::thread
Boost::unit_test_framework
)
if(UNIX OR APPLE OR MINGW)
target_compile_definitions(precice PRIVATE _GNU_SOURCE)
target_link_libraries(precice PRIVATE ${CMAKE_DL_LIBS})
endif()
# Setup Eigen3
target_link_libraries(precice PRIVATE Eigen3::Eigen)
target_compile_definitions(precice PRIVATE "$<$<CONFIG:DEBUG>:EIGEN_INITIALIZE_MATRICES_BY_NAN>")
# Setup LIBXML2
target_include_directories(precice PRIVATE ${LIBXML2_INCLUDE_DIR})
target_link_libraries(precice PRIVATE ${LIBXML2_LIBRARIES})
# Setup JSON
target_link_libraries(precice PRIVATE JSON fmt-header-only)
# Setup MPI
if (PRECICE_MPICommunication)
target_link_libraries(precice PRIVATE MPI::MPI_CXX)
else()
target_compile_definitions(precice PRIVATE PRECICE_NO_MPI)
endif()
# Setup PETSC
if (PRECICE_PETScMapping AND PRECICE_MPICommunication)
target_link_libraries(precice PRIVATE PETSc::PETSc)
else()
target_compile_definitions(precice PRIVATE PRECICE_NO_PETSC)
endif()
# Option Python
if (PRECICE_PythonActions)
if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.14")
target_link_libraries(precice PRIVATE Python3::NumPy Python3::Python)
else()
# Required for Ubuntu 18.04 LTS
target_link_libraries(precice PRIVATE NumPy::NumPy)
target_include_directories(precice PRIVATE ${PYTHON_INCLUDE_DIRS})
target_link_libraries(precice PRIVATE ${PYTHON_LIBRARIES})
endif()
target_compile_definitions(precice PRIVATE NPY_NO_DEPRECATED_API=NPY_1_7_API_VERSION)
else()
target_compile_definitions(precice PRIVATE PRECICE_NO_PYTHON)
endif()
# File Configuration
include(GenerateVersionInformation)
include(${CMAKE_CURRENT_LIST_DIR}/cmake/DetectGitRevision.cmake)
configure_file("${PROJECT_SOURCE_DIR}/src/precice/impl/versions.hpp.in" "${PROJECT_BINARY_DIR}/src/precice/impl/versions.hpp" @ONLY)
# Includes Configuration
target_include_directories(precice PUBLIC
$<BUILD_INTERFACE:${preCICE_SOURCE_DIR}/src>
$<BUILD_INTERFACE:${preCICE_BINARY_DIR}/src>
$<INSTALL_INTERFACE:include>
)
# Sources Configuration
include(${CMAKE_CURRENT_LIST_DIR}/src/sources.cmake)
#
# Configuration of Target binprecice
#
add_executable(binprecice "src/drivers/main.cpp")
target_link_libraries(binprecice
PRIVATE
precice
)
set_target_properties(binprecice PROPERTIES
# precice is a C++14 project
CXX_STANDARD 14
CXX_STANDARD_REQUIRED Yes
CXX_EXTENSIONS No
)
#
# Configuration of Target testprecice
#
IF (BUILD_TESTING)
add_executable(testprecice "src/testing/main.cpp")
target_link_libraries(testprecice
PRIVATE
Threads::Threads
precice
Eigen3::Eigen
fmt-header-only
Boost::boost
Boost::filesystem
Boost::log
Boost::log_setup
Boost::program_options
Boost::system
Boost::thread
Boost::unit_test_framework
)
set_target_properties(testprecice PROPERTIES
# precice is a C++14 project
CXX_STANDARD 14
CXX_STANDARD_REQUIRED Yes
CXX_EXTENSIONS No
)
target_include_directories(testprecice PRIVATE
${preCICE_SOURCE_DIR}/src
${preCICE_SOURCE_DIR}/tests
)
# Copy needed properties from the lib to the executatble. This is necessary as
# this executable uses the library source, not only the interface.
copy_target_property(precice testprecice COMPILE_DEFINITIONS)
copy_target_property(precice testprecice COMPILE_OPTIONS)
# Testprecice fully depends on MPI and PETSc.
if(PRECICE_MPICommunication)
target_link_libraries(testprecice PRIVATE MPI::MPI_CXX)
endif()
if(PRECICE_MPICommunication AND PRECICE_PETScMapping)
target_link_libraries(testprecice PRIVATE PETSc::PETSc)
endif()
message(STATUS "Including test sources")
# Test Sources Configuration
include(${CMAKE_CURRENT_LIST_DIR}/src/tests.cmake)
include(${CMAKE_CURRENT_LIST_DIR}/tests/tests.cmake)
else(BUILD_TESTING)
message(STATUS "Excluding test sources")
endif(BUILD_TESTING)
# Include Native C Bindings
if (PRECICE_ENABLE_C)
# include(${CMAKE_CURRENT_LIST_DIR}/extras/bindings/c/CMakeLists.txt)
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/extras/bindings/c)
endif()
# Include Native Fortran Bindings
if (PRECICE_ENABLE_FORTRAN)
# include((${CMAKE_CURRENT_LIST_DIR}/extras/bindings/fortran/CMakeLists.txt)
add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/extras/bindings/fortran)
endif()
#
# Install Targets for precice
#
# Setup General Install for:
# precice - the library
# binprecice - the precice binary
include(GNUInstallDirs)
install(TARGETS precice binprecice
EXPORT preciceTargets
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/precice
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/precice
)
if(BUILD_TESTING AND PRECICE_InstallTest)
# Install the testprecice target
install(TARGETS testprecice
EXPORT preciceTargets
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
# Install the resources necessary for the tests
install(DIRECTORY src
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/precice
FILES_MATCHING
PATTERN "*.xml"
)
install(DIRECTORY src/action/tests/
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/precice/src/action/tests
FILES_MATCHING
PATTERN "*.py"
)
endif()
# Install examples
install(DIRECTORY examples
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/precice
PATTERN ".gitignore" EXCLUDE
)
# Export the Targets to install
install(EXPORT preciceTargets
FILE preciceTargets.cmake
NAMESPACE precice::
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/precice
)
# Generate a Package Config File for precice
include(CMakePackageConfigHelpers)
write_basic_package_version_file("preciceConfigVersion.cmake"
VERSION ${preCICE_VERSION}
COMPATIBILITY SameMajorVersion
)
# Install the Config and the ConfigVersion files
install(FILES "cmake/preciceConfig.cmake" "${preCICE_BINARY_DIR}/preciceConfigVersion.cmake"
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/precice
)
# Setup the config in the build directory
export(EXPORT preciceTargets
NAMESPACE precice::
FILE "preciceTargets.cmake")
file(COPY "cmake/preciceConfig.cmake"
DESTINATION "${preCICE_BINARY_DIR}")
# Add an alias to allow subprojects to use the namespaced name
add_library(precice::precice ALIAS precice)
# Set the directory used to prepare files for packaging
set(PRECICE_PACKAGING_DIR "${CMAKE_CURRENT_BINARY_DIR}/packaging")
mark_as_advanced(PRECICE_PACKAGING_DIR)
# Compress and install the manpages
find_program(GZIP_EXE gzip DOC "The gzip executable")
if(GZIP_EXE)
# Process manpages for binaries
file(COPY docs/man/man1/binprecice.1 DESTINATION packaging/man1)
if(PRECICE_InstallTest)
file(COPY docs/man/man1/testprecice.1 DESTINATION packaging/man1)
endif()
file(GLOB PRECICE_MAN_PAGES "${PRECICE_PACKAGING_DIR}/man1/*.1")
foreach(manpage ${PRECICE_MAN_PAGES})
message(STATUS "Compressing manpage: ${manpage}")
execute_process(COMMAND "${GZIP_EXE}" "-9nf" "${manpage}")
endforeach()
# Install compressed manpages
install(DIRECTORY ${PRECICE_PACKAGING_DIR}/man1
DESTINATION ${CMAKE_INSTALL_MANDIR}
)
else()
message(WARNING "Installing uncompressed manpages")
# Install uncompressed manpages
install(DIRECTORY docs/man/man1
DESTINATION ${CMAKE_INSTALL_MANDIR}
)
if(BUILD_TESTING AND PRECICE_InstallTest)
install(FILES docs/man/man1/testprecice.1
DESTINATION share/man
)
endif()
endif()
# Configure a pkg-config file
configure_file(
"${PROJECT_SOURCE_DIR}/tools/releasing/packaging/debian/precice.pc.in"
"lib/pkgconfig/libprecice.pc"
@ONLY
)
install(DIRECTORY "${preCICE_BINARY_DIR}/lib/pkgconfig"
DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
#
# Add uninstall
#
include(${CMAKE_CURRENT_LIST_DIR}/cmake/Uninstall.cmake)
#
# CPack
#
if (PRECICE_Packages)
include(${CMAKE_CURRENT_LIST_DIR}/cmake/CPackConfig.cmake)
endif()
#
# CTest
#
if (BUILD_TESTING)
print_empty()
print_section("TESTS")
include(${CMAKE_CURRENT_LIST_DIR}/cmake/CTestConfig.cmake)
#
# Add test_install
#
include(${CMAKE_CURRENT_LIST_DIR}/cmake/TestInstall.cmake)
endif()
#
# Tooling
#
add_custom_target(
doxygen
COMMAND doxygen
WORKING_DIRECTORY ${preCICE_SOURCE_DIR}
USES_TERMINAL
)
add_custom_target(
format
COMMAND tools/formatting/format-all
WORKING_DIRECTORY ${preCICE_SOURCE_DIR}
USES_TERMINAL
)
add_custom_target(
sourcesIndex
COMMAND tools/building/updateSourceFiles.py
WORKING_DIRECTORY ${preCICE_SOURCE_DIR}
USES_TERMINAL
)
add_custom_target(
changelog
COMMAND tools/building/createChangelog
WORKING_DIRECTORY ${preCICE_SOURCE_DIR}
USES_TERMINAL
)