Logo AND Algorithmique Numérique Distribuée

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