Logo AND Algorithmique Numérique Distribuée

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