Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'dev-cpuimpl-used' into 'master'
[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 at least ns-3.28. Please upgrade or disable that cmake option.")
232     endif()
233     set(SIMGRID_HAVE_NS3 1)
234     foreach(lib core csma point-to-point internet network applications wifi)
235       set(SIMGRID_DEP "${SIMGRID_DEP} -lns${NS3_VERSION}-${lib}${NS3_SUFFIX}")
236     endforeach()
237   else()
238     message(FATAL_ERROR "Cannot find ns-3. Please install it (apt-get install ns3 libns3-dev) or disable that cmake option")
239   endif()
240 endif()
241
242 ### Check for Eigen library
243 set(SIMGRID_HAVE_EIGEN3 0)
244 find_package (Eigen3 3.3 CONFIG
245               HINTS ${EIGEN3_HINT})
246 if (Eigen3_FOUND)
247   set(SIMGRID_HAVE_EIGEN3 1)
248   message(STATUS "Found Eigen3: ${EIGEN3_INCLUDE_DIR}")
249   include_directories(${EIGEN3_INCLUDE_DIR})
250   if ("3.3.4" VERSION_EQUAL EIGEN3_VERSION_STRING AND CMAKE_COMPILER_IS_GNUCC)
251     message(STATUS "Avoid build error of Eigen3 v3.3.4 using -Wno-error=int-in-bool-context")
252     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-error=int-in-bool-context")
253   endif()
254 else()
255   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")
256 endif()
257
258 set(SIMGRID_HAVE_MSG 0)
259 if(enable_msg)
260   set(SIMGRID_HAVE_MSG 1)
261 endif()
262
263 if(WIN32)
264   set(Boost_USE_STATIC_LIBS 1)
265 endif()
266
267 set(HAVE_PAPI 0)
268 if(enable_smpi_papi)
269   include(FindPAPI)
270   if (NOT HAVE_PAPI)
271     message(FATAL_ERROR "Cannot find PAPI. Please install it (apt-get install papi-tools libpapi-dev) or disable PAPI bindings.")
272   endif()
273 endif()
274
275 # But we do need the core of Boost
276 # cmake before 3.13.1 does not know about stacktrace components. Fix it.
277 # Usable components: https://www.boost.org/doc/libs/1_65_1/doc/html/stacktrace/configuration_and_build.html
278 set(_Boost_STACKTRACE_HEADERS           "boost/stacktrace.hpp")
279 set(_Boost_STACKTRACE_BACKTRACE_HEADERS "boost/stacktrace.hpp")
280 set(_Boost_STACKTRACE_ADDR2LINE_HEADERS "boost/stacktrace.hpp")
281
282   if(minimal-bindings) # When we want a minimal jarfile, don't even search for boost optional components
283     message(STATUS "Don't even look for boost optional components, as we build minimal binding libraries.")
284     find_package(Boost 1.48)
285   else()
286     find_package(Boost 1.59 OPTIONAL_COMPONENTS context stacktrace_backtrace stacktrace_addr2line)
287   endif()
288   if(Boost_FOUND)
289     include_directories(${Boost_INCLUDE_DIRS})
290     message(STATUS "Mandatory components found. SimGrid is compilable.")
291     if (NOT minimal-bindings)
292       message(STATUS "Looking for optional Boost components:")
293       set(Boost_FOUND 1) # These components are optionals
294       CHECK_INCLUDE_FILE("backtrace.h" HAVE_BACKTRACE_H) # check that backtrace is actually possible
295       if (Boost_STACKTRACE_BACKTRACE_FOUND AND HAVE_BACKTRACE_H)
296         message (STATUS "  stacktrace: found the fast 'backtrace' implementation. Activating human-readable stack traces.")
297         set(HAVE_BOOST_STACKTRACE_BACKTRACE 1)
298       else()
299         set(HAVE_BOOST_STACKTRACE_BACKTRACE 0)
300         if (Boost_STACKTRACE_ADDR2LINE_FOUND)
301           message (STATUS "  stacktrace: found the slow 'addr2line' implementation. Activating human-readable stack traces.")
302           set(HAVE_BOOST_STACKTRACE_ADDR2LINE 1)
303         else()
304           message (STATUS "  stacktrace: MISSING. Install libboost-stacktrace-dev to display the stacktraces.")
305           set(HAVE_BOOST_STACKTRACE_ADDR2LINE 0)
306         endif()
307       endif()
308
309       if(Boost_CONTEXT_FOUND)
310         message (STATUS "  context: found. Activating Boost contexts.")
311         set(HAVE_BOOST_CONTEXTS 1)
312       else()
313         message (STATUS "  context: MISSING. Install libboost-context-dev for this optional feature.")
314         set(HAVE_BOOST_CONTEXTS 0)
315       endif()
316     endif()
317   else()
318     if(APPLE)
319       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'")
320     else()
321       find_package(Boost 1.48) #try without optional libraries
322       if(NOT Boost_FOUND)
323         message(FATAL_ERROR "Boost libraries not found. Install libboost-dev (>= 1.48.0).")
324       else()
325         include_directories(${Boost_INCLUDE_DIRS})
326         message(STATUS "Mandatory components found. SimGrid is compilable.")
327       endif()
328     endif()
329   endif()
330
331 # Checks for header libraries functions.
332 CHECK_LIBRARY_EXISTS(rt      clock_gettime           "" HAVE_POSIX_GETTIME)
333 CHECK_LIBRARY_EXISTS(pthread pthread_setaffinity_np  "" HAVE_PTHREAD_SETAFFINITY)
334 CHECK_INCLUDE_FILE("pthread_np.h" HAVE_PTHREAD_NP_H) # for pthread_setaffinity_np() on FreeBSD
335
336 if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
337   set(CMAKE_REQUIRED_DEFINITIONS "-D_XOPEN_SOURCE=700 -D_DARWIN_C_SOURCE")
338 elseif(MINGW)
339   # Use the GNU version of unusual modifiers like PRIx64
340   add_definitions(-D__USE_MINGW_ANSI_STDIO=1)
341   set(CMAKE_REQUIRED_DEFINITIONS "-D__USE_MINGW_ANSI_STDIO=1")
342 else()
343   set(CMAKE_REQUIRED_DEFINITIONS "-D_GNU_SOURCE")
344 endif()
345
346 CHECK_INCLUDE_FILE("valgrind/valgrind.h" HAVE_VALGRIND_H)
347 CHECK_INCLUDE_FILE("unistd.h" HAVE_UNISTD_H)
348 CHECK_INCLUDE_FILE("linux/futex.h" HAVE_FUTEX_H)
349
350 CHECK_FUNCTION_EXISTS(dlfunc HAVE_DLFUNC)
351 CHECK_FUNCTION_EXISTS(gettimeofday HAVE_GETTIMEOFDAY)
352 CHECK_FUNCTION_EXISTS(nanosleep HAVE_NANOSLEEP)
353 CHECK_FUNCTION_EXISTS(sysconf HAVE_SYSCONF)
354 CHECK_FUNCTION_EXISTS(process_vm_readv HAVE_PROCESS_VM_READV)
355 CHECK_FUNCTION_EXISTS(mmap HAVE_MMAP)
356 CHECK_FUNCTION_EXISTS(mremap HAVE_MREMAP)
357
358 CHECK_SYMBOL_EXISTS(vasprintf stdio.h HAVE_VASPRINTF)
359 if(MINGW)
360   # The detection of vasprintf fails on MinGW, assumingly because it's
361   # defined as an inline function in stdio.h instead of a regular
362   # function. So force the result to be 1 despite of the test.
363   set(HAVE_VASPRINTF 1)
364 endif()
365
366 CHECK_INCLUDE_FILE("sys/sendfile.h" HAVE_SENDFILE_H)
367 CHECK_FUNCTION_EXISTS(sendfile HAVE_SENDFILE)
368 if(HAVE_SENDFILE_H AND HAVE_SENDFILE)
369   set(SG_HAVE_SENDFILE 1)
370 else()
371   set(SG_HAVE_SENDFILE 0)
372 endif()
373
374 if(enable_model-checking AND NOT "${CMAKE_SYSTEM}" MATCHES "Linux|FreeBSD")
375   message(WARNING "Support for model-checking has not been enabled on ${CMAKE_SYSTEM}: disabling it")
376   set(enable_model-checking FALSE)
377 endif()
378
379 if(enable_model-checking AND minimal-bindings)
380   message(FATAL_ERROR "Compile-time option 'minimal-bindings' cannot be enabled with 'model-checking'")
381 endif()
382
383 if(HAVE_MMAP)
384   SET(HAVE_MMALLOC 1)
385 else()
386   SET(HAVE_MMALLOC 0)
387   if(enable_model-checking)
388     message(STATUS "Warning: support for model-checking has been disabled because you are missing either mmap or __thread.")
389   endif()
390   SET(enable_model-checking 0)
391 endif()
392
393 if(enable_mallocators)
394   SET(SIMGRID_HAVE_MALLOCATOR 1)
395 else()
396   SET(SIMGRID_HAVE_MALLOCATOR 0)
397 endif()
398
399 if(enable_model-checking)
400   include(FindLibunwind)
401   if(HAVE_LIBUNWIND)
402     SET(SIMGRID_DEP "${SIMGRID_DEP} ${LIBUNWIND_LIBRARIES}")
403   else()
404     message(FATAL_ERROR "Please install libunwind-dev libdw-dev libelf-dev libevent-dev if you want to compile the SimGrid model checker.")
405   endif()
406   find_package(Libdw REQUIRED)
407   find_package(Libelf REQUIRED)
408   find_package(Libevent REQUIRED)
409   include_directories(${LIBDW_INCLUDE_DIR} ${LIBELF_INCLUDE_DIR} ${LIBEVENT_INCLUDE_DIR})
410   set(SIMGRID_DEP "${SIMGRID_DEP} ${LIBEVENT_LIBRARIES} ${LIBELF_LIBRARIES} ${LIBDW_LIBRARIES}")
411   set(SIMGRID_HAVE_MC 1)
412   if("${CMAKE_SYSTEM}" MATCHES "FreeBSD" AND enable_java)
413     message(WARNING "FreeBSD + Model-Checking + Java = too much for now. Disabling the Java bindings.")
414     set(enable_java FALSE)
415   endif()
416 else()
417   SET(SIMGRID_HAVE_MC 0)
418   set(HAVE_MMALLOC 0)
419 endif()
420 mark_as_advanced(PATH_LIBDW_H)
421 mark_as_advanced(PATH_LIBDW_LIB)
422
423 if(enable_java AND NOT enable_msg)
424   message(FATAL_ERROR "Cannot activate the Java bindings without the MSG module. Either add -Denable_msg=ON or -Denable_java=OFF")
425 endif()
426
427 if (enable_model-checking AND enable_ns3)
428   message(WARNING "Activating both model-checking and ns-3 bindings is considered experimental.")
429 endif()
430
431 if(enable_smpi)
432   SET(HAVE_SMPI 1)
433   if(WIN32)
434     message (STATUS "Warning: no support for SMPI automatic privatization on Windows.")
435     SET(HAVE_PRIVATIZATION 0)
436   else()
437     SET(HAVE_PRIVATIZATION 1)
438   endif()
439 else()
440   SET(HAVE_SMPI 0)
441 endif()
442
443 #--------------------------------------------------------------------------------------------------
444 ### Check what context backends are available
445
446 set(HAVE_UCONTEXT_CONTEXTS 0)
447 CHECK_INCLUDE_FILE("ucontext.h" HAVE_UCONTEXT_H)
448 if(NOT HAVE_UCONTEXT_H)
449   message(STATUS "No ucontext factory: <ucontext.h> not found.")
450 elseif(APPLE)
451   message(STATUS "No ucontext factory: Apple don't want us to use them.")
452   set(HAVE_UCONTEXT_H 0)
453 else()
454   try_compile(compile_makecontext ${CMAKE_BINARY_DIR} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_makecontext.c
455     OUTPUT_VARIABLE compile_makecontext_output)
456
457   #If can have both context
458   if(compile_makecontext)
459     set(HAVE_UCONTEXT_CONTEXTS 1)
460     message(STATUS "Support for ucontext factory ok.")
461   else()
462     message(STATUS "Error: <ucontext.h> exists, but makecontext is not compilable. Compilation output:\n ${compile_makecontext_output}")
463     message(STATUS "No ucontext factory: makecontext() is not compilable.")
464   endif()
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
482 # Stack growth direction (upward or downward). Used for the following contexts: SysV, raw, Boost
483 try_run(RUN_stackgrowth_VAR COMPILE_stackgrowth_VAR
484   ${CMAKE_BINARY_DIR}
485   ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_stackgrowth.c
486   RUN_OUTPUT_VARIABLE stack
487   COPY_FILE test_stackgrowth)
488
489 if("${stack}" STREQUAL "down")
490   set(PTH_STACKGROWTH "-1")
491 elseif("${stack}" STREQUAL "up")
492   set(PTH_STACKGROWTH "1")
493 else()
494   if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64")
495     set(PTH_STACKGROWTH "-1")
496   elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "i686")
497     set(PTH_STACKGROWTH "-1")
498   else()
499     message(FATAL_ERROR "Could not figure out the stack direction. Test prog returned: ${stack}; CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}.")
500   endif()
501 endif()
502 # If the test ran well, remove the test binary
503 file(REMOVE test_stackgrowth)
504 #--------------------------------------------------------------------------------------------------
505
506 ###############
507 ## GIT version check
508 ##
509 if(EXISTS ${CMAKE_HOME_DIRECTORY}/.git/)
510   execute_process(COMMAND git rev-parse --verify --short HEAD
511      WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}
512      OUTPUT_VARIABLE GIT_VERSION
513      OUTPUT_STRIP_TRAILING_WHITESPACE)
514   # Check for uncommitted changes
515   execute_process(COMMAND git diff --name-only HEAD
516     WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}
517     OUTPUT_VARIABLE files_changed)
518   if(files_changed)
519     set(GIT_VERSION "${GIT_VERSION}-dirty")
520   endif()
521 elseif(EXISTS ${CMAKE_HOME_DIRECTORY}/.gitversion)
522   FILE(STRINGS ${CMAKE_HOME_DIRECTORY}/.gitversion GIT_VERSION)
523 else()
524   set(GIT_VERSION "none, release version")
525 endif()
526 message(STATUS "Git version: ${GIT_VERSION}")
527
528 ### Define source packages for Libs
529 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/DefinePackages.cmake)
530
531 ### Setup gcc & clang flags (include after DefinePackage.cmake, and before generating header files)
532 if (NOT MSVC)
533   include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Flags.cmake)
534 endif()
535
536 ### Generate the required headers and scripts
537 #############################################
538
539 # Avoid triggering a (full) rebuild by touching the files if they did not really change
540 configure_file("${CMAKE_HOME_DIRECTORY}/src/internal_config.h.in"    "${CMAKE_BINARY_DIR}/src/internal_config.h.generated"    @ONLY IMMEDIATE)
541 configure_file("${CMAKE_HOME_DIRECTORY}/include/simgrid/version.h.in" "${CMAKE_BINARY_DIR}/include/simgrid/version.h.generated" @ONLY IMMEDIATE)
542 configure_file("${CMAKE_HOME_DIRECTORY}/include/simgrid/config.h.in" "${CMAKE_BINARY_DIR}/include/simgrid/config.h.generated" @ONLY IMMEDIATE)
543 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/src/internal_config.h.generated ${CMAKE_BINARY_DIR}/src/internal_config.h)
544 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/include/simgrid/version.h.generated ${CMAKE_BINARY_DIR}/include/simgrid/version.h)
545 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/include/simgrid/config.h.generated ${CMAKE_BINARY_DIR}/include/simgrid/config.h)
546 file(REMOVE ${CMAKE_BINARY_DIR}/src/internal_config.h.generated)
547 file(REMOVE ${CMAKE_BINARY_DIR}/include/simgrid/config.h.generated)
548 file(REMOVE ${CMAKE_BINARY_DIR}/include/simgrid/version.h.generated)
549
550 # We need two versions of the SMPI scripts because they contain the path to the library
551 # so, it depends of whether SimGrid is installed, or run from the sources (during the build)
552
553 file(READ ${CMAKE_HOME_DIRECTORY}/src/smpi/smpitools.sh SMPITOOLS_SH) # Definitions shared amongst all SMPI scripts, inlined in each of them
554
555 ### SMPI script used when simgrid is installed
556 set(exec_prefix ${CMAKE_INSTALL_PREFIX})
557 set(includedir "${CMAKE_INSTALL_FULL_INCLUDEDIR}")
558 set(libdir "${CMAKE_INSTALL_FULL_LIBDIR}")
559 set(includeflag "\"-I${includedir}\" \"-I${includedir}/smpi\"")
560 set(CMAKE_SMPI_COMMAND "export LD_LIBRARY_PATH=\"${libdir}")
561 if(NS3_LIBRARY_PATH)
562   set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}:${NS3_LIBRARY_PATH}")
563 endif()
564 set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}\${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}\"")
565 set(SMPIMAIN ${libdir}/simgrid/smpimain)
566 set(SMPIREPLAYMAIN ${libdir}/simgrid/smpireplaymain)
567
568 configure_file(${CMAKE_HOME_DIRECTORY}/include/smpi/mpif.h.in ${CMAKE_BINARY_DIR}/include/smpi/mpif.h @ONLY)
569 #configure mpif.f90 to build mpi.mod
570 if(SMPI_FORTRAN)
571   set(MODULE_MPIF_IN "module mpi")
572   set(MODULE_MPIF_OUT "end module mpi")
573   configure_file(${CMAKE_HOME_DIRECTORY}/include/smpi/mpif.h.in ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90.generated @ONLY)
574   execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90.generated ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90)
575   set(CMAKE_Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/include/smpi)
576   add_library(mpi SHARED ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90)
577 endif()
578
579 foreach(script cc cxx ff f90 run)
580   configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpi${script}.in ${CMAKE_BINARY_DIR}/bin/smpi${script} @ONLY)
581 endforeach()
582
583 ### SMPI scripts used when compiling simgrid
584 set(exec_prefix "${CMAKE_BINARY_DIR}/smpi_script/")
585 set(includedir "${CMAKE_HOME_DIRECTORY}/include")
586 set(libdir "${CMAKE_BINARY_DIR}/lib")
587 set(includeflag "\"-I${includedir}\" \"-I${includedir}/smpi\"")
588 set(includeflag "${includeflag} \"-I${CMAKE_BINARY_DIR}/include\" \"-I${CMAKE_BINARY_DIR}/include/smpi\"")
589 set(CMAKE_SMPI_COMMAND "export LD_LIBRARY_PATH=\"${libdir}")
590 if(NS3_LIBRARY_PATH)
591   set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}:${NS3_LIBRARY_PATH}")
592 endif()
593 set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}\${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}\"")
594 set(SMPIMAIN ${libdir}/simgrid/smpimain)
595 set(SMPIREPLAYMAIN ${libdir}/simgrid/smpireplaymain)
596
597 foreach(script cc cxx ff f90 run)
598   configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpi${script}.in ${CMAKE_BINARY_DIR}/smpi_script/bin/smpi${script} @ONLY)
599 endforeach()
600
601 if(NOT WIN32)
602   foreach(script cc cxx ff f90 run)
603     execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpi${script})
604     execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/smpi_script/bin/smpi${script})
605   endforeach()
606 endif()
607
608 set(generated_headers_to_install
609   ${CMAKE_CURRENT_BINARY_DIR}/include/smpi/mpif.h
610   ${CMAKE_CURRENT_BINARY_DIR}/include/simgrid/config.h
611   ${CMAKE_CURRENT_BINARY_DIR}/include/simgrid/version.h
612   )
613
614 set(generated_headers  ${CMAKE_CURRENT_BINARY_DIR}/src/internal_config.h )
615
616 set(generated_files_to_clean
617   ${generated_headers}
618   ${generated_headers_to_install}
619   ${CMAKE_BINARY_DIR}/bin/smpicc
620   ${CMAKE_BINARY_DIR}/bin/smpicxx
621   ${CMAKE_BINARY_DIR}/bin/smpiff
622   ${CMAKE_BINARY_DIR}/bin/smpif90
623   ${CMAKE_BINARY_DIR}/bin/smpirun
624   ${CMAKE_BINARY_DIR}/bin/colorize
625   ${CMAKE_BINARY_DIR}/bin/simgrid_update_xml
626   ${CMAKE_BINARY_DIR}/examples/smpi/tracing/smpi_traced.trace
627   )
628
629 if(NOT "${CMAKE_BINARY_DIR}" STREQUAL "${CMAKE_HOME_DIRECTORY}")
630   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions0.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions0.txt COPYONLY)
631   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions1.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions1.txt COPYONLY)
632   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_allreduce.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allreduce.txt COPYONLY)
633   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_barrier.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_barrier.txt COPYONLY)
634   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_bcast.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_bcast.txt COPYONLY)
635   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_with_isend.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_with_isend.txt COPYONLY)
636   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_alltoall.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoall.txt COPYONLY)
637   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_alltoallv.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoallv.txt COPYONLY)
638   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_waitall.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_waitall.txt COPYONLY)
639   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_reducescatter.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_reducescatter.txt COPYONLY)
640   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_gather.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_gather.txt COPYONLY)
641   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_allgatherv.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allgatherv.txt COPYONLY)
642   configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile COPYONLY)
643   configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_cluster ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_cluster COPYONLY)
644   configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_griffon ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_griffon COPYONLY)
645   configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_coll ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_coll COPYONLY)
646   configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_io ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_io COPYONLY)
647   configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_empty ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_empty COPYONLY)
648
649   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/description_file ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/description_file COPYONLY)
650   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/README ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/README COPYONLY)
651   configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/smpi_replay.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/smpi_replay.txt COPYONLY)
652   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)
653   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)
654   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)
655   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)
656   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)
657   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)
658   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)
659   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)
660   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)
661   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)
662   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)
663   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)
664   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)
665   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)
666   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)
667   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)
668   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)
669   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)
670   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)
671   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)
672   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)
673   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)
674   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)
675   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)
676   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)
677   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)
678   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)
679   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)
680   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)
681   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)
682   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)
683   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)
684
685 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)
686 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)
687 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)
688 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)
689 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)
690 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)
691 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)
692 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)
693 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)
694 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)
695 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)
696 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)
697 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)
698 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)
699 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)
700
701   set(generated_files_to_clean
702     ${generated_files_to_clean}
703     ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions0.txt
704     ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions1.txt
705     ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allreduce.txt
706     ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_barrier.txt
707     ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_bcast.txt
708     ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_with_isend.txt
709     ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoall.txt
710     ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoallv.txt
711     ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_waitall.txt
712     ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_gather.txt
713     ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allgatherv.txt
714     ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_reducescatter.txt
715     ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile
716     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/description_file
717     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/README
718     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/smpi_replay.txt
719     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace0.txt
720     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace1.txt
721     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace2.txt
722     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace3.txt
723     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace4.txt
724     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace5.txt
725     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace6.txt
726     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace7.txt
727     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace8.txt
728     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace9.txt
729     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace10.txt
730     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace11.txt
731     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace12.txt
732     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace13.txt
733     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace14.txt
734     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace15.txt
735     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace16.txt
736     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace17.txt
737     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace18.txt
738     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace19.txt
739     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace20.txt
740     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace21.txt
741     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace22.txt
742     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace23.txt
743     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace24.txt
744     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace25.txt
745     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace26.txt
746     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace27.txt
747     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace28.txt
748     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace29.txt
749     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace30.txt
750     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace31.txt
751     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/compute_only.txt
752     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/compute_only/actions0.txt
753     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/compute_only/actions1.txt
754     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/empty.txt
755     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/empty/actions0.txt
756     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/empty/actions1.txt
757     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/mixed.txt
758     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/mixed/actions0.txt
759     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/mixed/actions1.txt
760     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/replay_multiple_manual.tesh
761     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute
762     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute_consecutive
763     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute_consecutive2
764     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute_simple
765     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty1
766     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2
767     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2_same_resources
768     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2_same_time
769     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2_same_time_and_resources
770     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed1
771     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2
772     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2_same_resources
773     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2_same_time
774     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2_same_time_and_resources
775     ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_nojob
776     )
777 endif()
778
779 SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES
780   "${generated_files_to_clean}")
781
782 add_custom_target(tests    COMMENT "Recompiling the tests")
783 add_custom_target(tests-mc COMMENT "Recompiling the MC tests and tools.")
784 add_dependencies(tests tests-mc)
785
786 ### Build some Maintainer files
787 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/MaintainerMode.cmake)
788
789 ### Make Libs
790 if(NOT WIN32)
791   include(${CMAKE_HOME_DIRECTORY}/tools/cmake/MakeLib.cmake)
792 else()
793   include(${CMAKE_HOME_DIRECTORY}/tools/cmake/MakeLibWin.cmake)
794 endif()
795
796 if(enable_java)
797   include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Java.cmake)
798 endif()
799
800 # Python binding (with pybind11)
801 ################
802 if((NOT DEFINED enable_python) OR enable_python)
803   if(EXISTS ${CMAKE_HOME_DIRECTORY}/pybind11) # Try to use a local copy of pybind11, if any
804     message(STATUS "Use the internal copy of pybind11.")
805     add_subdirectory(${CMAKE_HOME_DIRECTORY}/pybind11)
806     set(pybind11_FOUND ON)
807
808     set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_HOME_DIRECTORY}/pybind11/tools/)
809     set(Python_ADDITIONAL_VERSIONS 3.9 3.8 3.7 3.6 3.5 3.4)
810     find_package(PythonLibsNew ${PYBIND11_PYTHON_VERSION} REQUIRED)
811
812   else()
813     find_package(pybind11 CONFIG)
814     message(STATUS "Pybind11 version: ${pybind11_VERSION}")
815     if (pybind11_VERSION VERSION_LESS 2.4)
816       message(STATUS "SimGrid needs at least v2.4 of pybind11. Disabling the Python bindings.")
817       set(pybind11_FOUND OFF)
818     endif()
819   endif()
820
821   if(NOT PYTHONLIBS_FOUND AND NOT Python3_Development_FOUND)
822     message(STATUS "Python libs not found. Turn pybind11 off.")
823
824     set(pybind11_FOUND OFF)
825   endif()
826 endif()
827
828 option(enable_python "Whether the Python bindings are activated." ${pybind11_FOUND}) # ON by default if dependencies are met
829
830 if("${CMAKE_SYSTEM}" MATCHES "FreeBSD" AND enable_model-checking AND enable_python)
831   message(WARNING "FreeBSD + Model-Checking + Python = too much for now. Disabling the Python bindings.")
832   set(enable_python FALSE)
833 endif()
834
835 if(enable_python)
836   if(pybind11_FOUND)
837     message(STATUS "Found pybind11.")
838     if(NOT enable_lto)
839       set(pybind11_options NO_EXTRAS)
840     endif()
841     pybind11_add_module(python-bindings src/bindings/python/simgrid_python.cpp ${pybind11_options})
842     target_compile_features(python-bindings PRIVATE cxx_std_14)
843     target_link_libraries(python-bindings PUBLIC simgrid)
844     set_target_properties(python-bindings PROPERTIES
845                           LIBRARY_OUTPUT_NAME simgrid
846                           CXX_VISIBILITY_PRESET "default"
847                           INTERPROCEDURAL_OPTIMIZATION FALSE)
848     # LTO is disabled here from the python bindings because this makes a
849     # cmake warning about CMP0069 even when this policy is set. This
850     # problem may be in cmake, in pybind11 or even in our code, not sure.
851     # It may get eventually solved in cmake or pybind11. Or not.
852     # The sure thing is that our python bindings are in one file only,
853     # so there is no need for LTO here. Problem solved :)
854
855     add_dependencies(tests python-bindings)
856     set_property(TARGET python-bindings
857                  APPEND PROPERTY INCLUDE_DIRECTORIES "${INTERNAL_INCLUDES}")
858
859     if("${SIMGRID_PYTHON_LIBDIR}" STREQUAL "") # value not manually set
860       if("${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr")
861         set(SIMGRID_PYTHON_LIBDIR ${Python3_SITEARCH})
862       else("${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr")
863         string(REGEX REPLACE "^/usr/" "${CMAKE_INSTALL_PREFIX}/" SIMGRID_PYTHON_LIBDIR ${Python3_SITEARCH})
864       endif("${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr")
865     endif()
866     install(TARGETS python-bindings
867             LIBRARY DESTINATION "${SIMGRID_PYTHON_LIBDIR}")
868   else()
869     message(FATAL_ERROR "Please install pybind11-dev to build the Python bindings (or disable that option).")
870   endif()
871 endif()
872 mark_as_advanced(PYBIND11_PYTHON_VERSION)
873 mark_as_advanced(pybind11_DIR)
874
875 ### Make tests
876 if(enable_memcheck_xml)
877   set(enable_memcheck true)
878 endif()
879
880 INCLUDE(CTest)
881 ENABLE_TESTING()
882 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Tests.cmake)
883 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/CTestConfig.cmake)
884
885 ### Define subdirectories
886 foreach(cmakefile ${CMAKEFILES_TXT})
887   string(REPLACE "/CMakeLists.txt" "" repository ${cmakefile})
888   add_subdirectory("${CMAKE_HOME_DIRECTORY}/${repository}")
889 endforeach()
890
891 ### Setup the distrib
892 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Distrib.cmake)
893
894 ### Build the docs if asked to
895 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Documentation.cmake)
896
897 ### Print the result of configuration
898 message("")
899 message("##########################################")
900 message("#### Content of src/internal_config.h ####")
901 message("##########################################")
902 file(STRINGS ${CMAKE_CURRENT_BINARY_DIR}/src/internal_config.h config_output)
903 LIST(REMOVE_AT config_output 0 1 2 3 4 5 6 7 8 9 10) # Pass the file header
904 foreach(line ${config_output})
905   message("   ${line}")
906 endforeach()
907 message("##########################################")
908 message("####   Content of simgrid/config.h    ####")
909 message("##########################################")
910 file(STRINGS ${CMAKE_CURRENT_BINARY_DIR}/include/simgrid/config.h config_output)
911 LIST(REMOVE_AT config_output 0 1 2 3 4 5 6 7 8 9 -1) # Pass the file header
912 foreach(line ${config_output})
913   message("   ${line}")
914 endforeach()
915 message("##########################################")
916 message("####   End of configuration headers   ####")
917 message("##########################################")
918
919 message("\nConfiguration of package `simgrid':")
920 message("        Home directory ..............: ${CMAKE_HOME_DIRECTORY}")
921 message("        Build Name ..................: ${BUILDNAME}")
922 message("        Cmake Generator .............: ${CMAKE_GENERATOR}")
923 message("        Site ........................: ${SITE}")
924 message("        Install prefix ..............: ${CMAKE_INSTALL_PREFIX}")
925 message("        Release .....................: simgrid-${release_version}")
926 message("")
927 message("        Compiler: C .................: ${CMAKE_C_COMPILER} (id: ${CMAKE_C_COMPILER_ID})")
928 message("                version .............: ${CMAKE_C_COMPILER_VERSION}")
929 message("                is gnu ..............: ${CMAKE_COMPILER_IS_GNUCC}")
930 message("        Compiler: C++ ...............: ${CMAKE_CXX_COMPILER} (id: ${CMAKE_CXX_COMPILER_ID})")
931 message("                version .............: ${CMAKE_CXX_COMPILER_VERSION}")
932 if(${Java_FOUND})
933   message("        Compiler: Javac .............: ${Java_JAVAC_EXECUTABLE}")
934   message("                version .............: ${Java_VERSION_STRING}")
935   message("                runtime .............: ${Java_JAVA_EXECUTABLE}")
936 endif()
937 if(CMAKE_Fortran_COMPILER)
938   message("        Compiler: Fortran ...........: ${SMPI_Fortran_COMPILER} (id: ${CMAKE_Fortran_COMPILER_ID})")
939   message("                version .............: ${CMAKE_Fortran_COMPILER_VERSION}")
940 endif()
941 message("        Linker: .....................: ${CMAKE_LINKER}")
942 message("                version .............: ${LINKER_VERSION}")
943 message("        Make program: ...............: ${CMAKE_MAKE_PROGRAM}")
944 message("")
945 message("        CFlags ......................: ${CMAKE_C_FLAGS}")
946 message("        CXXFlags ....................: ${CMAKE_CXX_FLAGS}")
947 message("        LDFlags .....................: ${CMAKE_C_LINK_FLAGS}")
948 message("        with LTO ....................: ${enable_lto}")
949 message("")
950
951 if (SIMGRID_HAVE_MSG)
952   message("        Compile MSG .................: ON")
953 else()
954   message("        Compile MSG .................: OFF")
955 endif()
956
957 if (SIMGRID_HAVE_NS3)
958   message("        Compile ns-3 ................: ON (path: ${NS3_PATH})")
959 else()
960   message("        Compile ns-3 ................: OFF  (hint: ${NS3_HINT})")
961 endif()
962
963 if (${Java_FOUND})
964   message("        Compile Java ................: ON")
965   message("          Native lib in jar .........: ${enable_lib_in_jar}")
966 else()
967   message("        Compile Java ................: OFF")
968 endif()
969 if(pybind11_FOUND)
970   message("        Compile Python bindings .....: ${enable_python}")
971   message("          module ....................: ${PYTHON_MODULE_PREFIX}simgrid${PYTHON_MODULE_EXTENSION}")
972   message("          install path ..............: ${SIMGRID_PYTHON_LIBDIR} (force another value with -DSIMGRID_PYTHON_LIBDIR)")
973 else()
974   message("        Compile Python bindings .....: OFF (disabled, or pybind11 not found)")
975 endif()
976 if(Eigen3_FOUND)
977   message("        Eigen3 library ..............: ${EIGEN3_VERSION_STRING} in ${EIGEN3_INCLUDE_DIR}")
978 else()
979   message("        Eigen3 library ..............: not found (EIGEN3_HINT='${EIGEN3_HINT}').")
980 endif()
981 message("        Compile Smpi ................: ${HAVE_SMPI}")
982 message("          Smpi fortran ..............: ${SMPI_FORTRAN}")
983 message("          MPICH3 testsuite ..........: ${enable_smpi_MPICH3_testsuite}")
984 message("          MBI testsuite .............: ${enable_smpi_MBI_testsuite}")
985 message("          Privatization .............: ${HAVE_PRIVATIZATION}")
986 message("          PAPI support...............: ${HAVE_PAPI}")
987 message("        Compile Boost.Context support: ${HAVE_BOOST_CONTEXTS}")
988 message("")
989 message("        Maintainer mode .............: ${enable_maintainer_mode}")
990 message("        Documentation................: ${enable_documentation}")
991 message("        Model checking ..............: ${SIMGRID_HAVE_MC}")
992 message("        Graphviz mode ...............: ${HAVE_GRAPHVIZ}")
993 message("        Mallocators .................: ${enable_mallocators}")
994 message("")
995 message("        Simgrid dependencies ........: ${SIMGRID_DEP}")
996 message("")
997
998 execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_BINARY_DIR}/Testing/Notes/)
999 file(WRITE ${PROJECT_BINARY_DIR}/Testing/Notes/Build  "GIT version : ${GIT_VERSION}\n")
1000 file(APPEND ${PROJECT_BINARY_DIR}/Testing/Notes/Build "Release     : simgrid-${release_version}\n")
1001
1002 INCLUDE(Dart)