Logo AND Algorithmique Numérique Distribuée

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