Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Remove explicit conversion to std::string when it's not required.
[simgrid.git] / CMakeLists.txt
1 # Build the version number
2
3 set(SIMGRID_VERSION_MAJOR "3")
4 set(SIMGRID_VERSION_MINOR "32")
5 set(SIMGRID_VERSION_PATCH "1") # odd => git branch; even => stable release or released snapshot
6
7 if(${SIMGRID_VERSION_PATCH} EQUAL "0")
8   set(release_version "${SIMGRID_VERSION_MAJOR}.${SIMGRID_VERSION_MINOR}")
9 else()
10   set(release_version "${SIMGRID_VERSION_MAJOR}.${SIMGRID_VERSION_MINOR}.${SIMGRID_VERSION_PATCH}")
11 endif()
12
13 message(STATUS "Configuring SimGrid v${release_version}")
14
15 set(SIMGRID_VERSION_STRING "SimGrid version ${release_version}")
16
17 set(libsimgrid_version "${release_version}")
18 set(libsimgrid-java_version "${release_version}")
19
20 # Basic checks on cmake
21 cmake_minimum_required(VERSION 3.5)
22 #for lto, to avoid warning (should be removed when switching to requiring cmake >= 3.9)
23 if(NOT CMAKE_VERSION VERSION_LESS "3.9")
24   cmake_policy(SET CMP0069 NEW)
25 endif()
26 # once we move >= 3.13, we should use target_link_option in examples/sthread
27 message(STATUS "Cmake version ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION}")
28 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_HOME_DIRECTORY}/tools/cmake/Modules)
29
30 project(simgrid C CXX)
31
32 # customizable installation directories
33 include(GNUInstallDirs)
34
35 #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
36 #     Check for the compiler        #
37 #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
38 ##
39 ## Check the C/C++ standard that we need
40 ##   See also tools/cmake/Flags.cmake that sets our paranoid warning flags
41 INCLUDE(CheckCCompilerFlag)
42 CHECK_C_COMPILER_FLAG(-fstack-cleaner HAVE_C_STACK_CLEANER)
43
44 ## Request full debugging flags
45 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g3")
46 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g3")
47
48 if (CMAKE_COMPILER_IS_GNUCC)
49   if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "7.0")
50     message(FATAL_ERROR
51             "SimGrid needs at least g++ version 7.0 to compile but you have ${CMAKE_CXX_COMPILER_VERSION}."
52             "You need a sufficient support of c++17 to compile SimGrid.")
53   endif()
54 endif()
55
56 ## We need a decent support of the C++17 and C11 standards
57 set(CMAKE_CXX_STANDARD 17)
58 set(CMAKE_CXX_STANDARD_REQUIRED ON)
59
60 set(CMAKE_C_STANDARD 11)
61 set(CMAKE_C_STANDARD_REQUIRED ON)
62
63 if (CMAKE_C_COMPILER_ID STREQUAL "Intel" AND CMAKE_C11_EXTENSION_COMPILE_OPTION STREQUAL "-std=c11")
64   set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=gnu11")
65 endif()
66
67 ### Check threading support
68 set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
69 find_package(Threads)
70
71 ### Setup Options
72 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Option.cmake)
73
74 ### SMPI vs. Fortran
75 if ((NOT DEFINED enable_smpi) OR enable_smpi)
76   # First unset the compiler in case we're re-running cmake over a previous
77   # configuration where it was saved as smpiff
78   unset(CMAKE_Fortran_COMPILER)
79
80   SET(SMPI_FORTRAN 0)
81   if(enable_fortran)
82     enable_language(Fortran OPTIONAL)
83   endif()
84
85   if(CMAKE_Fortran_COMPILER)
86
87     # Fortran compiler detected: save it, then replace by smpiff
88     set(SMPI_Fortran_COMPILER "${CMAKE_Fortran_COMPILER}" CACHE FILEPATH "The real Fortran compiler")
89
90         # Set flags/libs to be used in smpiff
91     if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU")
92       set(SMPI_Fortran_FLAGS_ "\"-fpic\" \"-ff2c\" \"-fno-second-underscore\"")
93       set(SMPI_Fortran_LIBS "\"-lgfortran\"")
94       set(SMPI_GFORTRAN 1)
95     elseif(CMAKE_Fortran_COMPILER_ID MATCHES "Intel")
96       set(SMPI_Fortran_FLAGS_ "\"-fPIC\" \"-nofor-main\"")
97       set(SMPI_Fortran_LIBS "\"-lifcore\"")
98       set(SMPI_IFORT 1)
99     elseif(CMAKE_Fortran_COMPILER_ID MATCHES "PGI|Flang") # flang
100       set(SMPI_Fortran_FLAGS_ "\"-fPIC\"")
101       set(SMPI_Fortran_LIBS "")
102       set(SMPI_FLANG 1)
103     endif()
104     set(SMPI_Fortran_FLAGS "${SMPI_Fortran_FLAGS_} ${SMPI_Fortran_FLAGS}")
105
106     ## Request debugging flags for Fortran too
107     set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -g")
108
109     set(SMPI_FORTRAN 1)
110   endif(CMAKE_Fortran_COMPILER)
111
112 endif()
113
114 ### SET THE LIBRARY EXTENSION
115 if(APPLE)
116   set(LIB_EXE "dylib")
117 elseif(WIN32)
118   set(LIB_EXE "a")
119   set(BIN_EXE ".exe")
120 else()
121   set(LIB_EXE "so")
122 endif()
123
124 execute_process(COMMAND ${CMAKE_LINKER} -v OUTPUT_VARIABLE LINKER_VERSION ERROR_VARIABLE LINKER_VERSION)
125 string(REGEX MATCH "[0-9].[0-9]*" LINKER_VERSION "${LINKER_VERSION}")
126
127 ### Find programs and paths
128 FIND_PROGRAM(GCOV_PATH gcov)
129 include(FindPerl)
130 if(NOT PERL_FOUND)
131   message(FATAL_ERROR "Please install Perl to compile SimGrid.")
132 endif()
133
134 # tesh.py needs python 3 (or the module python-subprocess32 on python2.8+)
135 if(CMAKE_VERSION VERSION_LESS "3.12")
136   set(PythonInterp_FIND_VERSION 3)
137   set(PythonInterp_FIND_VERSION_COUNT 1)
138   set(PythonInterp_FIND_VERSION_MAJOR 3)
139   include(FindPythonInterp)
140   if(NOT PYTHONINTERP_FOUND)
141     message(FATAL_ERROR "Please install Python (version 3 or higher) to compile SimGrid.")
142   endif()
143 else()
144   find_package(Python3 COMPONENTS Interpreter Development)
145   if(NOT Python3_Interpreter_FOUND)
146     message(FATAL_ERROR "Please install Python (version 3 or higher) to compile SimGrid.")
147   endif()
148   set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE})
149 endif()
150
151 SET(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib)
152
153 ### Compute the include paths
154
155 # Only include public headers by default
156 include_directories(
157    ${CMAKE_BINARY_DIR}/include
158    ${CMAKE_HOME_DIRECTORY}/include
159 )
160
161 # Compute the ones that should be added when compiling the library
162 set(INTERNAL_INCLUDES
163   ${CMAKE_BINARY_DIR}
164   ${CMAKE_HOME_DIRECTORY}
165   ${CMAKE_HOME_DIRECTORY}/src/include
166   )
167
168 if(enable_smpi)
169   set (INTERNAL_INCLUDES ${INTERNAL_INCLUDES} ${CMAKE_HOME_DIRECTORY}/src/smpi/include)
170 endif()
171
172 if(NOT CMAKE_CROSSCOMPILING AND EXISTS /usr/include/)
173   set(INTERNAL_INCLUDES ${INTERNAL_INCLUDES} /usr/include/)
174 endif()
175
176 if(WIN32)
177   set(CMAKE_INCLUDE_WIN "${CMAKE_C_COMPILER}")
178   set(CMAKE_LIB_WIN "${CMAKE_C_COMPILER}")
179   string(REGEX REPLACE "/bin/gcc.*" "/include"  CMAKE_INCLUDE_WIN "${CMAKE_INCLUDE_WIN}")
180   string(REGEX REPLACE "/bin/gcc.*" "/lib"  CMAKE_LIB_WIN "${CMAKE_LIB_WIN}")
181   set(INTERNAL_INCLUDES ${INTERNAL_INCLUDES} ${CMAKE_INCLUDE_WIN})
182   unset(CMAKE_INCLUDE_WIN)
183 endif()
184
185 # library dependency cannot start with a space (CMP0004), so initialize it with something that is never deactivated.
186 set(SIMGRID_DEP "-lm")
187
188 ### Determine the assembly flavor that we need today
189 set(HAVE_RAW_CONTEXTS 0)
190 include(CMakeDetermineSystem)
191 IF(CMAKE_SYSTEM_PROCESSOR MATCHES ".86|AMD64|amd64")
192   IF(CMAKE_SIZEOF_VOID_P EQUAL 4) # 32 bits
193     message(STATUS "System processor: i686 (${CMAKE_SYSTEM_PROCESSOR}, 32 bits)")
194     set(SIMGRID_PROCESSOR_i686 1)
195     set(SIMGRID_PROCESSOR_x86_64 0)
196   ELSE()
197     message(STATUS "System processor: x86_64 (${CMAKE_SYSTEM_PROCESSOR}, 64 bits)")
198     set(SIMGRID_PROCESSOR_i686 0)
199     set(SIMGRID_PROCESSOR_x86_64 1)
200   ENDIF()
201   if (WIN32)
202     message(STATUS "Disable fast raw contexts on Windows.")
203   elseif(CMAKE_SIZEOF_VOID_P EQUAL 4 AND CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
204     message(STATUS "Disable fast raw contexts on x32 ABI.")
205   else()
206     set(HAVE_RAW_CONTEXTS 1)
207   endif()
208 ELSE()
209   set(SIMGRID_PROCESSOR_i686 0)
210   set(SIMGRID_PROCESSOR_x86_64 0)
211 ENDIF()
212
213 include(CheckFunctionExists)
214 include(CheckTypeSize)
215 include(CheckIncludeFile)
216 include(CheckIncludeFiles)
217 include(CheckLibraryExists)
218 include(CheckSymbolExists)
219
220 set(HAVE_GRAPHVIZ 0)
221 if(minimal-bindings)
222   message(STATUS "Don't even look for graphviz, as we build minimal binding libraries.")
223 else()
224   include(FindGraphviz)
225 endif()
226
227 set(SIMGRID_HAVE_NS3 0)
228 if(enable_ns3)
229   include(FindNS3)
230   if (SIMGRID_HAVE_NS3)
231     if (NOT NS3_VERSION EQUAL "3-dev" AND NS3_VERSION VERSION_LESS "3.28")
232       message(FATAL_ERROR "SimGrid needs ns-3 in version 3.28 or higher. Please upgrade or disable that cmake option.")
233     endif()
234     set(SIMGRID_HAVE_NS3 1)
235     set(SIMGRID_DEP "${SIMGRID_DEP} ${NS3_LIBRARIES}")
236   else()
237     message(FATAL_ERROR "Cannot find ns-3. Please install it (apt-get install ns3 libns3-dev) or disable that cmake option")
238   endif()
239 endif()
240
241 ### Check for Eigen library
242 set(SIMGRID_HAVE_EIGEN3 0)
243 find_package (Eigen3 3.3 CONFIG
244               HINTS ${EIGEN3_HINT})
245 if (Eigen3_FOUND)
246   set(SIMGRID_HAVE_EIGEN3 1)
247   message(STATUS "Found Eigen3: ${EIGEN3_INCLUDE_DIR}")
248   include_directories(${EIGEN3_INCLUDE_DIR})
249   if ("3.3.4" VERSION_EQUAL EIGEN3_VERSION_STRING AND CMAKE_COMPILER_IS_GNUCC)
250     message(STATUS "Avoid build error of Eigen3 v3.3.4 using -Wno-error=int-in-bool-context")
251     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-error=int-in-bool-context")
252   endif()
253 else()
254   message(STATUS "Disabling model BMF because Eigen3 was not found. If it's installed, use EIGEN3_HINT to hint cmake about the location of Eigen3Config.cmake")
255 endif()
256
257 set(SIMGRID_HAVE_MSG 0)
258 if(enable_msg)
259   set(SIMGRID_HAVE_MSG 1)
260 endif()
261
262 if(WIN32)
263   set(Boost_USE_STATIC_LIBS 1)
264 endif()
265
266 set(HAVE_PAPI 0)
267 if(enable_smpi_papi)
268   include(FindPAPI)
269   if (NOT HAVE_PAPI)
270     message(FATAL_ERROR "Cannot find PAPI. Please install it (apt-get install papi-tools libpapi-dev) or disable PAPI bindings.")
271   endif()
272 endif()
273
274 # But we do need the core of Boost
275 # cmake before 3.13.1 does not know about stacktrace components. Fix it.
276 # Usable components: https://www.boost.org/doc/libs/1_65_1/doc/html/stacktrace/configuration_and_build.html
277 set(_Boost_STACKTRACE_HEADERS           "boost/stacktrace.hpp")
278 set(_Boost_STACKTRACE_BACKTRACE_HEADERS "boost/stacktrace.hpp")
279 set(_Boost_STACKTRACE_ADDR2LINE_HEADERS "boost/stacktrace.hpp")
280
281   if(minimal-bindings) # When we want a minimal jarfile, don't even search for boost optional components
282     message(STATUS "Don't even look for boost optional components, as we build minimal binding libraries.")
283     find_package(Boost 1.48)
284   else()
285     find_package(Boost 1.59 OPTIONAL_COMPONENTS context stacktrace_backtrace stacktrace_addr2line)
286   endif()
287   if(Boost_FOUND)
288     include_directories(${Boost_INCLUDE_DIRS})
289     message(STATUS "Mandatory components found. SimGrid is compilable.")
290     if (NOT minimal-bindings)
291       message(STATUS "Looking for optional Boost components:")
292       set(Boost_FOUND 1) # These components are optionals
293       CHECK_INCLUDE_FILE("backtrace.h" HAVE_BACKTRACE_H) # check that backtrace is actually possible
294       if (Boost_STACKTRACE_BACKTRACE_FOUND AND HAVE_BACKTRACE_H)
295         message (STATUS "  stacktrace: found the fast 'backtrace' implementation. Activating human-readable stack traces.")
296         set(HAVE_BOOST_STACKTRACE_BACKTRACE 1)
297       else()
298         set(HAVE_BOOST_STACKTRACE_BACKTRACE 0)
299         if (Boost_STACKTRACE_ADDR2LINE_FOUND)
300           message (STATUS "  stacktrace: found the slow 'addr2line' implementation. Activating human-readable stack traces.")
301           set(HAVE_BOOST_STACKTRACE_ADDR2LINE 1)
302         else()
303           message (STATUS "  stacktrace: MISSING. Install libboost-stacktrace-dev to display the stacktraces.")
304           set(HAVE_BOOST_STACKTRACE_ADDR2LINE 0)
305         endif()
306       endif()
307
308       if(Boost_CONTEXT_FOUND)
309         message (STATUS "  context: found. Activating Boost contexts.")
310         set(HAVE_BOOST_CONTEXTS 1)
311       else()
312         message (STATUS "  context: MISSING. Install libboost-context-dev for this optional feature.")
313         set(HAVE_BOOST_CONTEXTS 0)
314       endif()
315     endif()
316   else()
317     if(APPLE)
318       message(FATAL_ERROR "Boost libraries not found. Try to install them with 'sudo fink install boost1.53.nopython' (check the exact name with 'fink list boost') or 'sudo brew install boost'")
319     else()
320       find_package(Boost 1.48) #try without optional libraries
321       if(NOT Boost_FOUND)
322         message(FATAL_ERROR "Boost libraries not found. Install libboost-dev (>= 1.48.0).")
323       else()
324         include_directories(${Boost_INCLUDE_DIRS})
325         message(STATUS "Mandatory components found. SimGrid is compilable.")
326       endif()
327     endif()
328   endif()
329
330 # Checks for header libraries functions.
331 CHECK_LIBRARY_EXISTS(rt      clock_gettime           "" HAVE_POSIX_GETTIME)
332 CHECK_LIBRARY_EXISTS(pthread pthread_setaffinity_np  "" HAVE_PTHREAD_SETAFFINITY)
333 CHECK_INCLUDE_FILE("pthread_np.h" HAVE_PTHREAD_NP_H) # for pthread_setaffinity_np() on FreeBSD
334
335 if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
336   set(CMAKE_REQUIRED_DEFINITIONS "-D_XOPEN_SOURCE=700 -D_DARWIN_C_SOURCE")
337 elseif(MINGW)
338   # Use the GNU version of unusual modifiers like PRIx64
339   add_definitions(-D__USE_MINGW_ANSI_STDIO=1)
340   set(CMAKE_REQUIRED_DEFINITIONS "-D__USE_MINGW_ANSI_STDIO=1")
341 else()
342   set(CMAKE_REQUIRED_DEFINITIONS "-D_GNU_SOURCE")
343 endif()
344
345 CHECK_INCLUDE_FILE("valgrind/valgrind.h" HAVE_VALGRIND_H)
346 CHECK_INCLUDE_FILE("unistd.h" HAVE_UNISTD_H)
347 CHECK_INCLUDE_FILE("linux/futex.h" HAVE_FUTEX_H)
348
349 CHECK_FUNCTION_EXISTS(dlfunc HAVE_DLFUNC)
350 CHECK_FUNCTION_EXISTS(gettimeofday HAVE_GETTIMEOFDAY)
351 CHECK_FUNCTION_EXISTS(nanosleep HAVE_NANOSLEEP)
352 CHECK_FUNCTION_EXISTS(sysconf HAVE_SYSCONF)
353 CHECK_FUNCTION_EXISTS(process_vm_readv HAVE_PROCESS_VM_READV)
354 CHECK_FUNCTION_EXISTS(mmap HAVE_MMAP)
355 CHECK_FUNCTION_EXISTS(mremap HAVE_MREMAP)
356
357 CHECK_SYMBOL_EXISTS(vasprintf stdio.h HAVE_VASPRINTF)
358 if(MINGW)
359   # The detection of vasprintf fails on MinGW, assumingly because it's
360   # defined as an inline function in stdio.h instead of a regular
361   # function. So force the result to be 1 despite of the test.
362   set(HAVE_VASPRINTF 1)
363 endif()
364
365 CHECK_INCLUDE_FILE("sys/sendfile.h" HAVE_SENDFILE_H)
366 CHECK_FUNCTION_EXISTS(sendfile HAVE_SENDFILE)
367 if(HAVE_SENDFILE_H AND HAVE_SENDFILE)
368   set(SG_HAVE_SENDFILE 1)
369 else()
370   set(SG_HAVE_SENDFILE 0)
371 endif()
372
373 if(enable_model-checking AND NOT "${CMAKE_SYSTEM}" MATCHES "Linux|FreeBSD")
374   message(WARNING "Support for model-checking has not been enabled on ${CMAKE_SYSTEM}: disabling it")
375   set(enable_model-checking FALSE)
376 endif()
377
378 if(enable_model-checking AND minimal-bindings)
379   message(FATAL_ERROR "Compile-time option 'minimal-bindings' cannot be enabled with 'model-checking'")
380 endif()
381
382 if(HAVE_MMAP)
383   SET(HAVE_MMALLOC 1)
384 else()
385   SET(HAVE_MMALLOC 0)
386   if(enable_model-checking)
387     message(STATUS "Warning: support for model-checking has been disabled because you are missing either mmap or __thread.")
388   endif()
389   SET(enable_model-checking 0)
390 endif()
391
392 if(enable_mallocators)
393   SET(SIMGRID_HAVE_MALLOCATOR 1)
394 else()
395   SET(SIMGRID_HAVE_MALLOCATOR 0)
396 endif()
397
398 if(enable_model-checking)
399   include(FindLibunwind)
400   if(HAVE_LIBUNWIND)
401     SET(SIMGRID_DEP "${SIMGRID_DEP} ${LIBUNWIND_LIBRARIES}")
402   else()
403     message(FATAL_ERROR "Please install libunwind-dev libdw-dev libelf-dev libevent-dev if you want to compile the SimGrid model checker.")
404   endif()
405   find_package(Libdw REQUIRED)
406   find_package(Libelf REQUIRED)
407   find_package(Libevent REQUIRED)
408   include_directories(${LIBDW_INCLUDE_DIR} ${LIBELF_INCLUDE_DIR} ${LIBEVENT_INCLUDE_DIR})
409   set(SIMGRID_DEP "${SIMGRID_DEP} ${LIBEVENT_LIBRARIES} ${LIBELF_LIBRARIES} ${LIBDW_LIBRARIES}")
410   set(SIMGRID_HAVE_MC 1)
411   if("${CMAKE_SYSTEM}" MATCHES "FreeBSD" AND enable_java)
412     message(WARNING "FreeBSD + Model-Checking + Java = too much for now. Disabling the Java bindings.")
413     set(enable_java FALSE)
414   endif()
415   set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -gdwarf-4")
416   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -gdwarf-4")
417 else()
418   SET(SIMGRID_HAVE_MC 0)
419   set(HAVE_MMALLOC 0)
420 endif()
421 mark_as_advanced(PATH_LIBDW_H)
422 mark_as_advanced(PATH_LIBDW_LIB)
423
424 if(enable_java AND NOT enable_msg)
425   message(FATAL_ERROR "Cannot activate the Java bindings without the MSG module. Either add -Denable_msg=ON or -Denable_java=OFF")
426 endif()
427
428 if (enable_model-checking AND enable_ns3)
429   message(WARNING "Activating both model-checking and ns-3 bindings is considered experimental.")
430 endif()
431
432 if(enable_smpi)
433   SET(HAVE_SMPI 1)
434   if(WIN32)
435     message (STATUS "Warning: no support for SMPI automatic privatization on Windows.")
436     SET(HAVE_PRIVATIZATION 0)
437   else()
438     SET(HAVE_PRIVATIZATION 1)
439   endif()
440 else()
441   SET(HAVE_SMPI 0)
442 endif()
443
444 #--------------------------------------------------------------------------------------------------
445 ### Check what context backends are available
446
447 set(HAVE_UCONTEXT_CONTEXTS 0)
448 CHECK_INCLUDE_FILE("ucontext.h" HAVE_UCONTEXT_H)
449 if(NOT HAVE_UCONTEXT_H)
450   message(STATUS "No ucontext factory: <ucontext.h> not found.")
451 elseif(APPLE)
452   message(STATUS "No ucontext factory: Apple don't want us to use them.")
453   set(HAVE_UCONTEXT_H 0)
454 else()
455   try_compile(compile_makecontext ${CMAKE_BINARY_DIR} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_makecontext.c
456     OUTPUT_VARIABLE compile_makecontext_output)
457
458   #If can have both context
459   if(NOT compile_makecontext)
460     message(STATUS "Error: <ucontext.h> exists, but makecontext is not compilable. Compilation output:\n ${compile_makecontext_output}")
461     message(STATUS "No ucontext factory: makecontext() is not compilable.")
462   else()
463     message(STATUS "Support for ucontext factory ok.")
464     set(HAVE_UCONTEXT_CONTEXTS 1)
465
466     # Stack setup (size and address)
467     try_run(RUN_makecontext_VAR COMPILE_makecontext_VAR
468       ${CMAKE_BINARY_DIR} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_stacksetup.c
469       RUN_OUTPUT_VARIABLE stack_setup)
470
471     LIST(LENGTH stack_setup stack_setup_len)
472     if("${stack_setup_len}" STREQUAL "2")
473       LIST(GET stack_setup 0 makecontext_addr)
474       LIST(GET stack_setup 1 makecontext_size)
475       set(sg_makecontext_stack_addr "#define sg_makecontext_stack_addr(skaddr) (${makecontext_addr})")
476       set(sg_makecontext_stack_size "#define sg_makecontext_stack_size(sksize) (${makecontext_size})")
477     else()
478       message(FATAL_ERROR "Could not figure out the stack setup. Compil: ${RUN_makecontext_VAR}. Exec: ${COMPILE_makecontext_VAR}. Output: ${stack_setup}")
479     endif()
480   endif()
481 endif()
482
483 # Stack growth direction (upward or downward). Used for the following contexts: SysV, raw, Boost
484 try_run(RUN_stackgrowth_VAR COMPILE_stackgrowth_VAR
485   ${CMAKE_BINARY_DIR}
486   ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_stackgrowth.c
487   RUN_OUTPUT_VARIABLE stack
488   COPY_FILE test_stackgrowth)
489
490 if("${stack}" STREQUAL "down")
491   set(PTH_STACKGROWTH "-1")
492 elseif("${stack}" STREQUAL "up")
493   set(PTH_STACKGROWTH "1")
494 else()
495   if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64")
496     set(PTH_STACKGROWTH "-1")
497   elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "i686")
498     set(PTH_STACKGROWTH "-1")
499   else()
500     message(FATAL_ERROR "Could not figure out the stack direction. Test prog returned: ${stack}; CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}.")
501   endif()
502 endif()
503 # If the test ran well, remove the test binary
504 file(REMOVE test_stackgrowth)
505 #--------------------------------------------------------------------------------------------------
506
507 ###############
508 ## GIT version check
509 ##
510 if(EXISTS ${CMAKE_HOME_DIRECTORY}/.git/)
511   execute_process(COMMAND git rev-parse --verify --short HEAD
512      WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}
513      OUTPUT_VARIABLE GIT_VERSION
514      OUTPUT_STRIP_TRAILING_WHITESPACE)
515   # Check for uncommitted changes
516   execute_process(COMMAND git diff --name-only HEAD
517     WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}
518     OUTPUT_VARIABLE files_changed)
519   if(files_changed)
520     set(GIT_VERSION "${GIT_VERSION}-dirty")
521   endif()
522 elseif(EXISTS ${CMAKE_HOME_DIRECTORY}/.gitversion)
523   FILE(STRINGS ${CMAKE_HOME_DIRECTORY}/.gitversion GIT_VERSION)
524 else()
525   set(GIT_VERSION "none, release version")
526 endif()
527 message(STATUS "Git version: ${GIT_VERSION}")
528
529 ### Define source packages for Libs
530 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/DefinePackages.cmake)
531
532 ### Setup gcc & clang flags (include after DefinePackage.cmake, and before generating header files)
533 if (NOT MSVC)
534   include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Flags.cmake)
535 endif()
536
537 ### Generate the required headers and scripts
538 #############################################
539
540 # Avoid triggering a (full) rebuild by touching the files if they did not really change
541 configure_file("${CMAKE_HOME_DIRECTORY}/src/internal_config.h.in"    "${CMAKE_BINARY_DIR}/src/internal_config.h.generated"    @ONLY IMMEDIATE)
542 configure_file("${CMAKE_HOME_DIRECTORY}/include/simgrid/version.h.in" "${CMAKE_BINARY_DIR}/include/simgrid/version.h.generated" @ONLY IMMEDIATE)
543 configure_file("${CMAKE_HOME_DIRECTORY}/include/simgrid/config.h.in" "${CMAKE_BINARY_DIR}/include/simgrid/config.h.generated" @ONLY IMMEDIATE)
544 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/src/internal_config.h.generated ${CMAKE_BINARY_DIR}/src/internal_config.h)
545 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/include/simgrid/version.h.generated ${CMAKE_BINARY_DIR}/include/simgrid/version.h)
546 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/include/simgrid/config.h.generated ${CMAKE_BINARY_DIR}/include/simgrid/config.h)
547 file(REMOVE ${CMAKE_BINARY_DIR}/src/internal_config.h.generated)
548 file(REMOVE ${CMAKE_BINARY_DIR}/include/simgrid/config.h.generated)
549 file(REMOVE ${CMAKE_BINARY_DIR}/include/simgrid/version.h.generated)
550
551 # We need two versions of the SMPI scripts because they contain the path to the library
552 # so, it depends of whether SimGrid is installed, or run from the sources (during the build)
553
554 file(READ ${CMAKE_HOME_DIRECTORY}/src/smpi/smpitools.sh SMPITOOLS_SH) # Definitions shared amongst all SMPI scripts, inlined in each of them
555
556 ### SMPI script used when simgrid is installed
557 set(exec_prefix ${CMAKE_INSTALL_PREFIX})
558 set(includedir "${CMAKE_INSTALL_FULL_INCLUDEDIR}")
559 set(libdir "${CMAKE_INSTALL_FULL_LIBDIR}")
560 set(includeflag "\"-I${includedir}\" \"-I${includedir}/smpi\"")
561 set(CMAKE_SMPI_COMMAND "export LD_LIBRARY_PATH=\"${libdir}")
562 if(NS3_LIBRARY_PATH)
563   set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}:${NS3_LIBRARY_PATH}")
564 endif()
565 set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}\${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}\"")
566 set(SMPIMAIN ${libdir}/simgrid/smpimain)
567 set(SMPIREPLAYMAIN ${libdir}/simgrid/smpireplaymain)
568
569 configure_file(${CMAKE_HOME_DIRECTORY}/include/smpi/mpif.h.in ${CMAKE_BINARY_DIR}/include/smpi/mpif.h @ONLY)
570 #configure mpif.f90 to build mpi.mod
571 if(SMPI_FORTRAN)
572   set(MODULE_MPIF_IN "module mpi")
573   set(MODULE_MPIF_OUT "end module mpi")
574   configure_file(${CMAKE_HOME_DIRECTORY}/include/smpi/mpif.h.in ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90.generated @ONLY)
575   execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90.generated ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90)
576   file(REMOVE ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90.generated)
577   set(CMAKE_Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/include/smpi)
578   add_library(mpi SHARED ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90)
579 endif()
580
581 foreach(script cc cxx ff f90 run)
582   configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpi${script}.in ${CMAKE_BINARY_DIR}/bin/smpi${script} @ONLY)
583 endforeach()
584
585 ### SMPI scripts used when compiling simgrid
586 set(exec_prefix "${CMAKE_BINARY_DIR}/smpi_script/")
587 set(includedir "${CMAKE_HOME_DIRECTORY}/include")
588 set(libdir "${CMAKE_BINARY_DIR}/lib")
589 set(includeflag "\"-I${includedir}\" \"-I${includedir}/smpi\"")
590 set(includeflag "${includeflag} \"-I${CMAKE_BINARY_DIR}/include\" \"-I${CMAKE_BINARY_DIR}/include/smpi\"")
591 set(CMAKE_SMPI_COMMAND "export LD_LIBRARY_PATH=\"${libdir}")
592 if(NS3_LIBRARY_PATH)
593   set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}:${NS3_LIBRARY_PATH}")
594 endif()
595 set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}\${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}\"")
596 set(SMPIMAIN ${libdir}/simgrid/smpimain)
597 set(SMPIREPLAYMAIN ${libdir}/simgrid/smpireplaymain)
598
599 foreach(script cc cxx ff f90 run)
600   configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpi${script}.in ${CMAKE_BINARY_DIR}/smpi_script/bin/smpi${script} @ONLY)
601 endforeach()
602
603 if(NOT WIN32)
604   foreach(script cc cxx ff f90 run)
605     execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpi${script})
606     execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/smpi_script/bin/smpi${script})
607   endforeach()
608 endif()
609
610 set(generated_headers_to_install
611   ${CMAKE_CURRENT_BINARY_DIR}/include/smpi/mpif.h
612   ${CMAKE_CURRENT_BINARY_DIR}/include/simgrid/config.h
613   ${CMAKE_CURRENT_BINARY_DIR}/include/simgrid/version.h
614   )
615
616 set(generated_headers  ${CMAKE_CURRENT_BINARY_DIR}/src/internal_config.h )
617
618 set(generated_files_to_clean
619   ${generated_headers}
620   ${generated_headers_to_install}
621   ${CMAKE_BINARY_DIR}/bin/smpicc
622   ${CMAKE_BINARY_DIR}/bin/smpicxx
623   ${CMAKE_BINARY_DIR}/bin/smpiff
624   ${CMAKE_BINARY_DIR}/bin/smpif90
625   ${CMAKE_BINARY_DIR}/bin/smpirun
626   ${CMAKE_BINARY_DIR}/bin/colorize
627   ${CMAKE_BINARY_DIR}/bin/simgrid_update_xml
628   ${CMAKE_BINARY_DIR}/examples/smpi/tracing/smpi_traced.trace
629   )
630
631 if(NOT "${CMAKE_BINARY_DIR}" STREQUAL "${CMAKE_HOME_DIRECTORY}")
632   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions0.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions0.txt COPYONLY)
633   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions1.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions1.txt COPYONLY)
634   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_allreduce.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allreduce.txt COPYONLY)
635   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_barrier.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_barrier.txt COPYONLY)
636   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_bcast.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_bcast.txt COPYONLY)
637   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_with_isend.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_with_isend.txt COPYONLY)
638   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_alltoall.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoall.txt COPYONLY)
639   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_alltoallv.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoallv.txt COPYONLY)
640   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_waitall.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_waitall.txt COPYONLY)
641   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_reducescatter.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_reducescatter.txt COPYONLY)
642   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_gather.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_gather.txt COPYONLY)
643   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_allgatherv.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allgatherv.txt COPYONLY)
644   configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile COPYONLY)
645   configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_cluster ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_cluster COPYONLY)
646   configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_griffon ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_griffon COPYONLY)
647   configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_coll ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_coll COPYONLY)
648   configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_io ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_io COPYONLY)
649   configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_empty ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_empty COPYONLY)
650
651   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/description_file ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/description_file COPYONLY)
652   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/README ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/README COPYONLY)
653   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/smpi_replay.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/smpi_replay.txt COPYONLY)
654   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace0.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace0.txt COPYONLY)
655   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace1.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace1.txt COPYONLY)
656   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace2.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace2.txt COPYONLY)
657   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace3.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace3.txt COPYONLY)
658   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace4.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace4.txt COPYONLY)
659   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace5.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace5.txt COPYONLY)
660   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace6.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace6.txt COPYONLY)
661   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace7.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace7.txt COPYONLY)
662   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace8.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace8.txt COPYONLY)
663   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace9.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace9.txt COPYONLY)
664   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace10.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace10.txt COPYONLY)
665   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace11.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace11.txt COPYONLY)
666   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace12.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace12.txt COPYONLY)
667   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace13.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace13.txt COPYONLY)
668   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace14.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace14.txt COPYONLY)
669   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace15.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace15.txt COPYONLY)
670   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace16.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace16.txt COPYONLY)
671   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace17.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace17.txt COPYONLY)
672   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace18.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace18.txt COPYONLY)
673   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace19.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace19.txt COPYONLY)
674   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace20.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace20.txt COPYONLY)
675   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace21.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace21.txt COPYONLY)
676   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace22.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace22.txt COPYONLY)
677   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace23.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace23.txt COPYONLY)
678   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace24.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace24.txt COPYONLY)
679   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace25.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace25.txt COPYONLY)
680   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace26.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace26.txt COPYONLY)
681   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace27.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace27.txt COPYONLY)
682   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace28.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace28.txt COPYONLY)
683   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace29.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace29.txt COPYONLY)
684   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace30.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace30.txt COPYONLY)
685   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace31.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace31.txt COPYONLY)
686
687 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple_manual_deploy/compute_only.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/compute_only.txt COPYONLY)
688 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple_manual_deploy/compute_only/actions0.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/compute_only/actions0.txt COPYONLY)
689 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple_manual_deploy/compute_only/actions1.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/compute_only/actions1.txt COPYONLY)
690 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple_manual_deploy/empty.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/empty.txt COPYONLY)
691 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple_manual_deploy/empty/actions0.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/empty/actions0.txt COPYONLY)
692 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple_manual_deploy/empty/actions1.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/empty/actions1.txt COPYONLY)
693 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple_manual_deploy/mixed.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/mixed.txt COPYONLY)
694 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple_manual_deploy/mixed/actions0.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/mixed/actions0.txt COPYONLY)
695 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple_manual_deploy/mixed/actions1.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/mixed/actions1.txt COPYONLY)
696 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple_manual_deploy/workload_compute ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute COPYONLY)
697 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple_manual_deploy/workload_compute_consecutive ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute_consecutive COPYONLY)
698 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple_manual_deploy/workload_compute_consecutive2 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute_consecutive2 COPYONLY)
699 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple_manual_deploy/workload_compute_simple ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute_simple COPYONLY)
700 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2_same_time ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2_same_time COPYONLY)
701 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2_same_time_and_resources ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2_same_time_and_resources COPYONLY)
702
703   set(generated_files_to_clean
704     ${generated_files_to_clean}
705     ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions0.txt
706     ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions1.txt
707     ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allreduce.txt
708     ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_barrier.txt
709     ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_bcast.txt
710     ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_with_isend.txt
711     ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoall.txt
712     ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoallv.txt
713     ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_waitall.txt
714     ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_gather.txt
715     ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allgatherv.txt
716     ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_reducescatter.txt
717     ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile
718     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/description_file
719     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/README
720     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/smpi_replay.txt
721     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace0.txt
722     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace1.txt
723     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace2.txt
724     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace3.txt
725     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace4.txt
726     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace5.txt
727     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace6.txt
728     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace7.txt
729     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace8.txt
730     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace9.txt
731     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace10.txt
732     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace11.txt
733     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace12.txt
734     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace13.txt
735     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace14.txt
736     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace15.txt
737     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace16.txt
738     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace17.txt
739     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace18.txt
740     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace19.txt
741     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace20.txt
742     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace21.txt
743     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace22.txt
744     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace23.txt
745     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace24.txt
746     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace25.txt
747     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace26.txt
748     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace27.txt
749     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace28.txt
750     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace29.txt
751     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace30.txt
752     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace31.txt
753     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/compute_only.txt
754     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/compute_only/actions0.txt
755     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/compute_only/actions1.txt
756     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/empty.txt
757     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/empty/actions0.txt
758     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/empty/actions1.txt
759     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/mixed.txt
760     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/mixed/actions0.txt
761     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/mixed/actions1.txt
762     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/replay_multiple_manual.tesh
763     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute
764     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute_consecutive
765     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute_consecutive2
766     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute_simple
767     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty1
768     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2
769     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2_same_resources
770     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2_same_time
771     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2_same_time_and_resources
772     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed1
773     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2
774     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2_same_resources
775     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2_same_time
776     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2_same_time_and_resources
777     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_nojob
778     )
779 endif()
780
781 SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES
782   "${generated_files_to_clean}")
783
784 add_custom_target(tests    COMMENT "Recompiling the tests")
785 add_custom_target(tests-mc COMMENT "Recompiling the MC tests and tools.")
786 add_dependencies(tests tests-mc)
787
788 ### Build some Maintainer files
789 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/MaintainerMode.cmake)
790
791 ### Make Libs
792 if(NOT WIN32)
793   include(${CMAKE_HOME_DIRECTORY}/tools/cmake/MakeLib.cmake)
794 else()
795   include(${CMAKE_HOME_DIRECTORY}/tools/cmake/MakeLibWin.cmake)
796 endif()
797
798 if(enable_java)
799   include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Java.cmake)
800 endif()
801
802 # Python binding (with pybind11)
803 ################
804 if((NOT DEFINED enable_python) OR enable_python)
805   if(EXISTS ${CMAKE_HOME_DIRECTORY}/pybind11) # Try to use a local copy of pybind11, if any
806     message(STATUS "Use the internal copy of pybind11.")
807     add_subdirectory(${CMAKE_HOME_DIRECTORY}/pybind11)
808     set(pybind11_FOUND ON)
809
810     set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_HOME_DIRECTORY}/pybind11/tools/)
811     set(Python_ADDITIONAL_VERSIONS 3.9 3.8 3.7 3.6 3.5 3.4)
812     find_package(PythonLibsNew ${PYBIND11_PYTHON_VERSION} REQUIRED)
813
814   else()
815     find_package(pybind11 CONFIG)
816     message(STATUS "Pybind11 version: ${pybind11_VERSION}")
817     if (pybind11_VERSION VERSION_LESS 2.4)
818       message(STATUS "SimGrid needs at least v2.4 of pybind11. Disabling the Python bindings.")
819       set(pybind11_FOUND OFF)
820     endif()
821   endif()
822
823   if(NOT PYTHONLIBS_FOUND AND NOT Python3_Development_FOUND)
824     message(STATUS "Python libs not found. Turn pybind11 off.")
825
826     set(pybind11_FOUND OFF)
827   endif()
828 endif()
829
830 option(enable_python "Whether the Python bindings are activated." ${pybind11_FOUND}) # ON by default if dependencies are met
831
832 if("${CMAKE_SYSTEM}" MATCHES "FreeBSD" AND enable_model-checking AND enable_python)
833   message(WARNING "FreeBSD + Model-Checking + Python = too much for now. Disabling the Python bindings.")
834   set(enable_python FALSE)
835 endif()
836
837 if(enable_python)
838   if(pybind11_FOUND)
839     message(STATUS "Found pybind11.")
840     if(NOT enable_lto)
841       set(pybind11_options NO_EXTRAS)
842     endif()
843     pybind11_add_module(python-bindings src/bindings/python/simgrid_python.cpp ${pybind11_options})
844     target_compile_features(python-bindings PRIVATE cxx_std_14)
845     target_link_libraries(python-bindings PUBLIC simgrid)
846     set_target_properties(python-bindings PROPERTIES
847                           LIBRARY_OUTPUT_NAME simgrid
848                           CXX_VISIBILITY_PRESET "default"
849                           INTERPROCEDURAL_OPTIMIZATION FALSE)
850     # LTO is disabled here from the python bindings because this makes a
851     # cmake warning about CMP0069 even when this policy is set. This
852     # problem may be in cmake, in pybind11 or even in our code, not sure.
853     # It may get eventually solved in cmake or pybind11. Or not.
854     # The sure thing is that our python bindings are in one file only,
855     # so there is no need for LTO here. Problem solved :)
856
857     add_dependencies(tests python-bindings)
858     set_property(TARGET python-bindings
859                  APPEND PROPERTY INCLUDE_DIRECTORIES "${INTERNAL_INCLUDES}")
860
861     if("${SIMGRID_PYTHON_LIBDIR}" STREQUAL "") # value not manually set
862       if("${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr")
863         set(SIMGRID_PYTHON_LIBDIR ${Python3_SITEARCH})
864       else("${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr")
865         string(REGEX REPLACE "^/usr/" "${CMAKE_INSTALL_PREFIX}/" SIMGRID_PYTHON_LIBDIR ${Python3_SITEARCH})
866       endif("${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr")
867     endif()
868     install(TARGETS python-bindings
869             LIBRARY DESTINATION "${SIMGRID_PYTHON_LIBDIR}")
870   else()
871     message(FATAL_ERROR "Please install pybind11-dev to build the Python bindings (or disable that option).")
872   endif()
873 endif()
874 mark_as_advanced(PYBIND11_PYTHON_VERSION)
875 mark_as_advanced(pybind11_DIR)
876
877 ### Make tests
878 if(enable_memcheck_xml)
879   set(enable_memcheck true)
880 endif()
881
882 INCLUDE(CTest)
883 ENABLE_TESTING()
884 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Tests.cmake)
885 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/CTestConfig.cmake)
886
887 ### Define subdirectories
888 foreach(cmakefile ${CMAKEFILES_TXT})
889   string(REPLACE "/CMakeLists.txt" "" repository ${cmakefile})
890   add_subdirectory("${CMAKE_HOME_DIRECTORY}/${repository}")
891 endforeach()
892
893 ### Setup the distrib
894 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Distrib.cmake)
895
896 ### Build the docs if asked to
897 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Documentation.cmake)
898
899 ### Print the result of configuration
900 message("")
901 message("##########################################")
902 message("#### Content of src/internal_config.h ####")
903 message("##########################################")
904 file(STRINGS ${CMAKE_CURRENT_BINARY_DIR}/src/internal_config.h config_output)
905 LIST(REMOVE_AT config_output 0 1 2 3 4 5 6 7 8 9 10) # Pass the file header
906 foreach(line ${config_output})
907   message("   ${line}")
908 endforeach()
909 message("##########################################")
910 message("####   Content of simgrid/config.h    ####")
911 message("##########################################")
912 file(STRINGS ${CMAKE_CURRENT_BINARY_DIR}/include/simgrid/config.h config_output)
913 LIST(REMOVE_AT config_output 0 1 2 3 4 5 6 7 8 9 -1) # Pass the file header
914 foreach(line ${config_output})
915   message("   ${line}")
916 endforeach()
917 message("##########################################")
918 message("####   End of configuration headers   ####")
919 message("##########################################")
920
921 message("\nConfiguration of package `simgrid':")
922 message("        Home directory ..............: ${CMAKE_HOME_DIRECTORY}")
923 message("        Build Name ..................: ${BUILDNAME}")
924 message("        Cmake Generator .............: ${CMAKE_GENERATOR}")
925 message("        Site ........................: ${SITE}")
926 message("        Install prefix ..............: ${CMAKE_INSTALL_PREFIX}")
927 message("        Release .....................: simgrid-${release_version}")
928 message("")
929 message("        Compiler: C .................: ${CMAKE_C_COMPILER} (id: ${CMAKE_C_COMPILER_ID})")
930 message("                version .............: ${CMAKE_C_COMPILER_VERSION}")
931 message("                is gnu ..............: ${CMAKE_COMPILER_IS_GNUCC}")
932 message("        Compiler: C++ ...............: ${CMAKE_CXX_COMPILER} (id: ${CMAKE_CXX_COMPILER_ID})")
933 message("                version .............: ${CMAKE_CXX_COMPILER_VERSION}")
934 if(${Java_FOUND})
935   message("        Compiler: Javac .............: ${Java_JAVAC_EXECUTABLE}")
936   message("                version .............: ${Java_VERSION_STRING}")
937   message("                runtime .............: ${Java_JAVA_EXECUTABLE}")
938 endif()
939 if(CMAKE_Fortran_COMPILER)
940   message("        Compiler: Fortran ...........: ${SMPI_Fortran_COMPILER} (id: ${CMAKE_Fortran_COMPILER_ID})")
941   message("                version .............: ${CMAKE_Fortran_COMPILER_VERSION}")
942 endif()
943 message("        Linker: .....................: ${CMAKE_LINKER}")
944 message("                version .............: ${LINKER_VERSION}")
945 message("        Make program: ...............: ${CMAKE_MAKE_PROGRAM}")
946 message("")
947 message("        CFlags ......................: ${CMAKE_C_FLAGS}")
948 message("        CXXFlags ....................: ${CMAKE_CXX_FLAGS}")
949 message("        LDFlags .....................: ${CMAKE_C_LINK_FLAGS}")
950 message("        with LTO ....................: ${enable_lto}")
951 message("")
952
953 if (SIMGRID_HAVE_MSG)
954   message("        Compile MSG .................: ON")
955 else()
956   message("        Compile MSG .................: OFF")
957 endif()
958
959 if (SIMGRID_HAVE_NS3)
960   message("        Compile ns-3 ................: ON (path: ${NS3_PATH})")
961 else()
962   message("        Compile ns-3 ................: OFF  (hint: ${NS3_HINT})")
963 endif()
964
965 if (${Java_FOUND})
966   message("        Compile Java ................: ON")
967   message("          Native lib in jar .........: ${enable_lib_in_jar}")
968 else()
969   message("        Compile Java ................: OFF")
970 endif()
971 if(pybind11_FOUND)
972   message("        Compile Python bindings .....: ${enable_python}")
973   message("          module ....................: ${PYTHON_MODULE_PREFIX}simgrid${PYTHON_MODULE_EXTENSION}")
974   message("          install path ..............: ${SIMGRID_PYTHON_LIBDIR} (force another value with -DSIMGRID_PYTHON_LIBDIR)")
975 else()
976   message("        Compile Python bindings .....: OFF (disabled, or pybind11 not found)")
977 endif()
978 if(Eigen3_FOUND)
979   message("        Eigen3 library ..............: ${EIGEN3_VERSION_STRING} in ${EIGEN3_INCLUDE_DIR}")
980 else()
981   message("        Eigen3 library ..............: not found (EIGEN3_HINT='${EIGEN3_HINT}').")
982 endif()
983 message("        Compile Smpi ................: ${HAVE_SMPI}")
984 message("          Smpi fortran ..............: ${SMPI_FORTRAN}")
985 message("          MPICH3 testsuite ..........: ${enable_smpi_MPICH3_testsuite}")
986 message("          MBI testsuite .............: ${enable_smpi_MBI_testsuite}")
987 message("          Privatization .............: ${HAVE_PRIVATIZATION}")
988 message("          PAPI support...............: ${HAVE_PAPI}")
989 message("        Compile Boost.Context support: ${HAVE_BOOST_CONTEXTS}")
990 message("")
991 message("        Maintainer mode .............: ${enable_maintainer_mode}")
992 message("        Documentation................: ${enable_documentation}")
993 message("        Model checking ..............: ${SIMGRID_HAVE_MC}")
994 message("        Graphviz mode ...............: ${HAVE_GRAPHVIZ}")
995 message("        Mallocators .................: ${enable_mallocators}")
996 message("")
997 message("        Simgrid dependencies ........: ${SIMGRID_DEP}")
998 message("")
999
1000 execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_BINARY_DIR}/Testing/Notes/)
1001 file(WRITE ${PROJECT_BINARY_DIR}/Testing/Notes/Build  "GIT version : ${GIT_VERSION}\n")
1002 file(APPEND ${PROJECT_BINARY_DIR}/Testing/Notes/Build "Release     : simgrid-${release_version}\n")
1003
1004 INCLUDE(Dart)