1 # Build the version number
3 set(SIMGRID_VERSION_MAJOR "3")
4 set(SIMGRID_VERSION_MINOR "32")
5 set(SIMGRID_VERSION_PATCH "1") # odd => git branch; even => stable release or released snapshot
7 if(${SIMGRID_VERSION_PATCH} EQUAL "0")
8 set(release_version "${SIMGRID_VERSION_MAJOR}.${SIMGRID_VERSION_MINOR}")
10 set(release_version "${SIMGRID_VERSION_MAJOR}.${SIMGRID_VERSION_MINOR}.${SIMGRID_VERSION_PATCH}")
14 message(FATAL_ERROR "SimGrid does not build on native windows, nor with MinGW. Please use WSL2 instead.")
17 message(STATUS "Configuring SimGrid v${release_version}")
19 set(SIMGRID_VERSION_STRING "SimGrid version ${release_version}")
21 set(libsimgrid_version "${release_version}")
23 # Basic checks on cmake
24 cmake_minimum_required(VERSION 3.5)
25 #for lto, to avoid warning (should be removed when switching to requiring cmake >= 3.9)
26 if(NOT CMAKE_VERSION VERSION_LESS "3.9")
27 cmake_policy(SET CMP0069 NEW)
29 # once we move >= 3.13, we should use target_link_option in examples/sthread
30 message(STATUS "Cmake version ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION}")
31 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_HOME_DIRECTORY}/tools/cmake/Modules)
33 project(simgrid C CXX)
35 # customizable installation directories
36 include(GNUInstallDirs)
38 #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
39 # Check for the compiler #
40 #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
42 ## Check the C/C++ standard that we need
43 ## See also tools/cmake/Flags.cmake that sets our paranoid warning flags
44 INCLUDE(CheckCCompilerFlag)
45 CHECK_C_COMPILER_FLAG(-fstack-cleaner HAVE_C_STACK_CLEANER)
47 ## Request full debugging flags
48 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g3")
49 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g3")
51 if (CMAKE_COMPILER_IS_GNUCC)
52 if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "7.0")
54 "SimGrid needs at least g++ version 7.0 to compile but you have ${CMAKE_CXX_COMPILER_VERSION}."
55 "You need a sufficient support of c++17 to compile SimGrid.")
59 ## We need a decent support of the C++17 and C11 standards
60 set(CMAKE_CXX_STANDARD 17)
61 set(CMAKE_CXX_STANDARD_REQUIRED ON)
63 set(CMAKE_C_STANDARD 11)
64 set(CMAKE_C_STANDARD_REQUIRED ON)
66 if (CMAKE_C_COMPILER_ID STREQUAL "Intel" AND CMAKE_C11_EXTENSION_COMPILE_OPTION STREQUAL "-std=c11")
67 set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=gnu11")
70 ### Check threading support
71 set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
75 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Option.cmake)
78 if ((NOT DEFINED enable_smpi) OR enable_smpi)
79 # First unset the compiler in case we're re-running cmake over a previous
80 # configuration where it was saved as smpiff
81 unset(CMAKE_Fortran_COMPILER)
85 enable_language(Fortran OPTIONAL)
88 if(CMAKE_Fortran_COMPILER)
90 # Fortran compiler detected: save it, then replace by smpiff
91 set(SMPI_Fortran_COMPILER "${CMAKE_Fortran_COMPILER}" CACHE FILEPATH "The real Fortran compiler")
93 # Set flags/libs to be used in smpiff
94 if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU")
95 set(SMPI_Fortran_FLAGS_ "\"-fpic\" \"-ff2c\" \"-fno-second-underscore\"")
96 set(SMPI_Fortran_LIBS "\"-lgfortran\"")
98 elseif(CMAKE_Fortran_COMPILER_ID MATCHES "Intel")
99 set(SMPI_Fortran_FLAGS_ "\"-fPIC\" \"-nofor-main\"")
100 set(SMPI_Fortran_LIBS "\"-lifcore\"")
102 elseif(CMAKE_Fortran_COMPILER_ID MATCHES "PGI|Flang") # flang
103 set(SMPI_Fortran_FLAGS_ "\"-fPIC\"")
104 set(SMPI_Fortran_LIBS "")
107 set(SMPI_Fortran_FLAGS "${SMPI_Fortran_FLAGS_} ${SMPI_Fortran_FLAGS}")
109 ## Request debugging flags for Fortran too
110 set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -g")
113 endif(CMAKE_Fortran_COMPILER)
117 ### SET THE LIBRARY EXTENSION
124 execute_process(COMMAND ${CMAKE_LINKER} -v OUTPUT_VARIABLE LINKER_VERSION ERROR_VARIABLE LINKER_VERSION)
125 string(REGEX MATCH "[0-9].[0-9]*" LINKER_VERSION "${LINKER_VERSION}")
127 ### Find programs and paths
128 FIND_PROGRAM(GCOV_PATH gcov)
131 message(FATAL_ERROR "Please install Perl to compile SimGrid.")
134 # tesh.py needs python 3 (or the module python-subprocess32 on python2.8+)
135 if(CMAKE_VERSION VERSION_LESS "3.12")
136 set(PythonInterp_FIND_VERSION 3)
137 set(PythonInterp_FIND_VERSION_COUNT 1)
138 set(PythonInterp_FIND_VERSION_MAJOR 3)
139 include(FindPythonInterp)
140 if(NOT PYTHONINTERP_FOUND)
141 message(FATAL_ERROR "Please install Python (version 3 or higher) to compile SimGrid.")
144 find_package(Python3 COMPONENTS Interpreter Development)
145 if(NOT Python3_Interpreter_FOUND)
146 message(FATAL_ERROR "Please install Python (version 3 or higher) to compile SimGrid.")
148 set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE})
151 SET(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib)
153 ### Compute the include paths
155 # Only include public headers by default
157 ${CMAKE_BINARY_DIR}/include
158 ${CMAKE_HOME_DIRECTORY}/include
161 # Compute the ones that should be added when compiling the library
162 set(INTERNAL_INCLUDES
164 ${CMAKE_HOME_DIRECTORY}
165 ${CMAKE_HOME_DIRECTORY}/src/include
169 set (INTERNAL_INCLUDES ${INTERNAL_INCLUDES} ${CMAKE_HOME_DIRECTORY}/src/smpi/include)
172 if(NOT CMAKE_CROSSCOMPILING AND EXISTS /usr/include/)
173 set(INTERNAL_INCLUDES ${INTERNAL_INCLUDES} /usr/include/)
176 # library dependency cannot start with a space (CMP0004), so initialize it with something that is never deactivated.
177 set(SIMGRID_DEP "-lm")
179 ### Determine the assembly flavor that we need today
180 set(HAVE_RAW_CONTEXTS 0)
181 include(CMakeDetermineSystem)
182 IF(CMAKE_SYSTEM_PROCESSOR MATCHES ".86|AMD64|amd64")
183 IF(CMAKE_SIZEOF_VOID_P EQUAL 4) # 32 bits
184 message(STATUS "System processor: i686 (${CMAKE_SYSTEM_PROCESSOR}, 32 bits)")
185 set(SIMGRID_PROCESSOR_i686 1)
186 set(SIMGRID_PROCESSOR_x86_64 0)
187 set(SIMGRID_PROCESSOR_arm64 0)
189 message(STATUS "System processor: x86_64 (${CMAKE_SYSTEM_PROCESSOR}, 64 bits)")
190 set(SIMGRID_PROCESSOR_i686 0)
191 set(SIMGRID_PROCESSOR_x86_64 1)
192 set(SIMGRID_PROCESSOR_arm64 0)
194 if(CMAKE_SIZEOF_VOID_P EQUAL 4 AND CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
195 message(STATUS "Disable fast raw contexts on x32 ABI.")
197 set(HAVE_RAW_CONTEXTS 1)
199 ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64")
200 message(STATUS "System processor: arm64 (${CMAKE_SYSTEM_PROCESSOR}, 64 bits)")
201 set(SIMGRID_PROCESSOR_i686 0)
202 set(SIMGRID_PROCESSOR_x86_64 0)
203 set(SIMGRID_PROCESSOR_arm64 1)
205 message(STATUS "System processor (${CMAKE_SYSTEM_PROCESSOR}) not explicitly accounted for")
206 set(SIMGRID_PROCESSOR_i686 0)
207 set(SIMGRID_PROCESSOR_x86_64 0)
208 set(SIMGRID_PROCESSOR_arm64 0)
211 include(CheckFunctionExists)
212 include(CheckTypeSize)
213 include(CheckIncludeFile)
214 include(CheckIncludeFiles)
215 include(CheckLibraryExists)
216 include(CheckSymbolExists)
220 message(STATUS "Don't even look for graphviz, as we build minimal binding libraries.")
222 include(FindGraphviz)
225 set(SIMGRID_HAVE_NS3 0)
228 if (SIMGRID_HAVE_NS3)
229 if (NOT NS3_VERSION EQUAL "3-dev" AND NS3_VERSION VERSION_LESS "3.28")
230 message(FATAL_ERROR "SimGrid needs ns-3 in version 3.28 or higher. Please upgrade or disable that cmake option.")
232 set(SIMGRID_HAVE_NS3 1)
233 set(SIMGRID_DEP "${SIMGRID_DEP} ${NS3_LIBRARIES}")
235 message(FATAL_ERROR "Cannot find ns-3. Please install it (apt-get install ns3 libns3-dev) or disable that cmake option")
239 ### Check for Eigen library
240 set(SIMGRID_HAVE_EIGEN3 0)
241 find_package (Eigen3 3.3 CONFIG
242 HINTS ${EIGEN3_HINT})
244 set(SIMGRID_HAVE_EIGEN3 1)
245 message(STATUS "Found Eigen3: ${EIGEN3_INCLUDE_DIR}")
246 include_directories(${EIGEN3_INCLUDE_DIR})
247 if ("3.3.4" VERSION_EQUAL EIGEN3_VERSION_STRING AND CMAKE_COMPILER_IS_GNUCC)
248 message(STATUS "Avoid build error of Eigen3 v3.3.4 using -Wno-error=int-in-bool-context")
249 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-error=int-in-bool-context")
252 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")
259 message(FATAL_ERROR "Cannot find PAPI. Please install it (apt-get install papi-tools libpapi-dev) or disable PAPI bindings.")
263 # But we do need the core of Boost
264 # cmake before 3.13.1 does not know about stacktrace components. Fix it.
265 # Usable components: https://www.boost.org/doc/libs/1_65_1/doc/html/stacktrace/configuration_and_build.html
266 set(_Boost_STACKTRACE_HEADERS "boost/stacktrace.hpp")
267 set(_Boost_STACKTRACE_BACKTRACE_HEADERS "boost/stacktrace.hpp")
268 set(_Boost_STACKTRACE_ADDR2LINE_HEADERS "boost/stacktrace.hpp")
270 if(minimal-bindings) # When we want a minimal python library, don't even search for boost optional components
271 message(STATUS "Don't even look for boost optional components, as we build minimal binding libraries.")
272 find_package(Boost 1.48)
274 find_package(Boost 1.59 OPTIONAL_COMPONENTS context stacktrace_backtrace stacktrace_addr2line)
277 include_directories(${Boost_INCLUDE_DIRS})
278 message(STATUS "Mandatory components found. SimGrid is compilable.")
279 if (NOT minimal-bindings)
280 message(STATUS "Looking for optional Boost components:")
281 set(Boost_FOUND 1) # These components are optionals
282 CHECK_INCLUDE_FILE("backtrace.h" HAVE_BACKTRACE_H) # check that backtrace is actually possible
283 if (Boost_STACKTRACE_BACKTRACE_FOUND AND HAVE_BACKTRACE_H)
284 message (STATUS " stacktrace: found the fast 'backtrace' implementation. Activating human-readable stack traces.")
285 set(HAVE_BOOST_STACKTRACE_BACKTRACE 1)
287 set(HAVE_BOOST_STACKTRACE_BACKTRACE 0)
288 if (Boost_STACKTRACE_ADDR2LINE_FOUND)
289 message (STATUS " stacktrace: found the slow 'addr2line' implementation. Activating human-readable stack traces.")
290 set(HAVE_BOOST_STACKTRACE_ADDR2LINE 1)
292 message (STATUS " stacktrace: MISSING. Install libboost-stacktrace-dev to display the stacktraces.")
293 set(HAVE_BOOST_STACKTRACE_ADDR2LINE 0)
297 if(Boost_CONTEXT_FOUND)
298 message (STATUS " context: found. Activating Boost contexts.")
299 set(HAVE_BOOST_CONTEXTS 1)
301 message (STATUS " context: MISSING. Install libboost-context-dev for this optional feature.")
302 set(HAVE_BOOST_CONTEXTS 0)
307 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'")
309 find_package(Boost 1.48) #try without optional libraries
311 message(FATAL_ERROR "Boost libraries not found. Install libboost-dev (>= 1.48.0).")
313 include_directories(${Boost_INCLUDE_DIRS})
314 message(STATUS "Mandatory components found. SimGrid is compilable.")
319 # Checks for header libraries functions.
320 CHECK_LIBRARY_EXISTS(rt clock_gettime "" HAVE_POSIX_GETTIME)
321 CHECK_LIBRARY_EXISTS(pthread pthread_setaffinity_np "" HAVE_PTHREAD_SETAFFINITY)
322 CHECK_INCLUDE_FILE("pthread_np.h" HAVE_PTHREAD_NP_H) # for pthread_setaffinity_np() on FreeBSD
324 if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
325 set(CMAKE_REQUIRED_DEFINITIONS "-D_XOPEN_SOURCE=700 -D_DARWIN_C_SOURCE")
327 set(CMAKE_REQUIRED_DEFINITIONS "-D_GNU_SOURCE")
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)
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)
339 message(FATAL_ERROR "Cannot build without sysconf.")
341 CHECK_FUNCTION_EXISTS(process_vm_readv HAVE_PROCESS_VM_READV)
342 CHECK_FUNCTION_EXISTS(mmap HAVE_MMAP)
343 CHECK_FUNCTION_EXISTS(mremap HAVE_MREMAP)
345 CHECK_SYMBOL_EXISTS(vasprintf stdio.h HAVE_VASPRINTF)
347 CHECK_INCLUDE_FILE("sys/sendfile.h" HAVE_SENDFILE_H)
348 CHECK_FUNCTION_EXISTS(sendfile HAVE_SENDFILE)
349 if(HAVE_SENDFILE_H AND HAVE_SENDFILE)
350 set(SG_HAVE_SENDFILE 1)
352 set(SG_HAVE_SENDFILE 0)
355 if(enable_model-checking AND NOT "${CMAKE_SYSTEM}" MATCHES "Linux|FreeBSD")
356 message(FATAL_ERROR "Support for model-checking has not been enabled on ${CMAKE_SYSTEM}. Please use a Linux docker to use the model checker.")
359 if(enable_model-checking AND minimal-bindings)
360 message(FATAL_ERROR "Compile-time option 'minimal-bindings' cannot be enabled with 'model-checking'")
367 if(enable_model-checking)
368 message(STATUS "Warning: support for model-checking has been disabled because you are missing either mmap or __thread.")
370 SET(enable_model-checking 0)
373 if(enable_mallocators)
374 SET(SIMGRID_HAVE_MALLOCATOR 1)
376 SET(SIMGRID_HAVE_MALLOCATOR 0)
379 if(enable_model-checking)
380 include(FindLibunwind)
382 SET(SIMGRID_DEP "${SIMGRID_DEP} ${LIBUNWIND_LIBRARIES}")
384 message(FATAL_ERROR "Please install libunwind-dev libdw-dev libelf-dev libevent-dev if you want to compile the SimGrid model checker.")
386 find_package(Libdw REQUIRED)
387 find_package(Libelf REQUIRED)
388 find_package(Libevent REQUIRED)
389 include_directories(${LIBDW_INCLUDE_DIR} ${LIBELF_INCLUDE_DIR} ${LIBEVENT_INCLUDE_DIR})
390 set(SIMGRID_DEP "${SIMGRID_DEP} ${LIBEVENT_LIBRARIES} ${LIBELF_LIBRARIES} ${LIBDW_LIBRARIES}")
391 set(SIMGRID_HAVE_MC 1)
392 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -gdwarf-4")
393 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -gdwarf-4")
395 SET(SIMGRID_HAVE_MC 0)
398 mark_as_advanced(PATH_LIBDW_H)
399 mark_as_advanced(PATH_LIBDW_LIB)
401 if (enable_model-checking AND enable_ns3)
402 message(WARNING "Activating both model-checking and ns-3 bindings is considered experimental.")
407 SET(HAVE_PRIVATIZATION 1)
412 #--------------------------------------------------------------------------------------------------
413 ### Check what context backends are available
415 set(HAVE_UCONTEXT_CONTEXTS 0)
416 CHECK_INCLUDE_FILE("ucontext.h" HAVE_UCONTEXT_H)
417 if(NOT HAVE_UCONTEXT_H)
418 message(STATUS "No ucontext factory: <ucontext.h> not found.")
420 message(STATUS "No ucontext factory: Apple don't want us to use them.")
421 set(HAVE_UCONTEXT_H 0)
423 try_compile(compile_makecontext ${CMAKE_BINARY_DIR} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_makecontext.c
424 OUTPUT_VARIABLE compile_makecontext_output)
426 #If can have both context
427 if(NOT compile_makecontext)
428 message(STATUS "Error: <ucontext.h> exists, but makecontext is not compilable. Compilation output:\n ${compile_makecontext_output}")
429 message(STATUS "No ucontext factory: makecontext() is not compilable.")
431 message(STATUS "Support for ucontext factory ok.")
432 set(HAVE_UCONTEXT_CONTEXTS 1)
434 # Stack setup (size and address)
435 try_run(RUN_makecontext_VAR COMPILE_makecontext_VAR
436 ${CMAKE_BINARY_DIR} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_stacksetup.c
437 RUN_OUTPUT_VARIABLE stack_setup)
439 LIST(LENGTH stack_setup stack_setup_len)
440 if("${stack_setup_len}" STREQUAL "2")
441 LIST(GET stack_setup 0 makecontext_addr)
442 LIST(GET stack_setup 1 makecontext_size)
443 set(sg_makecontext_stack_addr "#define sg_makecontext_stack_addr(skaddr) (${makecontext_addr})")
444 set(sg_makecontext_stack_size "#define sg_makecontext_stack_size(sksize) (${makecontext_size})")
446 message(FATAL_ERROR "Could not figure out the stack setup. Compil: ${RUN_makecontext_VAR}. Exec: ${COMPILE_makecontext_VAR}. Output: ${stack_setup}")
451 # Stack growth direction (upward or downward). Used for the following contexts: SysV, raw, Boost
452 try_run(RUN_stackgrowth_VAR COMPILE_stackgrowth_VAR
454 ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_stackgrowth.c
455 RUN_OUTPUT_VARIABLE stack
456 COPY_FILE test_stackgrowth)
458 if("${stack}" STREQUAL "down")
459 set(PTH_STACKGROWTH "-1")
460 elseif("${stack}" STREQUAL "up")
461 set(PTH_STACKGROWTH "1")
463 if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64")
464 set(PTH_STACKGROWTH "-1")
465 elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "i686")
466 set(PTH_STACKGROWTH "-1")
468 message(FATAL_ERROR "Could not figure out the stack direction. Test prog returned: ${stack}; CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}.")
471 # If the test ran well, remove the test binary
472 file(REMOVE test_stackgrowth)
473 #--------------------------------------------------------------------------------------------------
478 if(EXISTS ${CMAKE_HOME_DIRECTORY}/.git/)
479 execute_process(COMMAND git rev-parse --verify --short HEAD
480 WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}
481 OUTPUT_VARIABLE GIT_VERSION
482 OUTPUT_STRIP_TRAILING_WHITESPACE)
483 # Check for uncommitted changes
484 execute_process(COMMAND git diff --name-only HEAD
485 WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}
486 OUTPUT_VARIABLE files_changed)
488 set(GIT_VERSION "${GIT_VERSION}-dirty")
490 elseif(EXISTS ${CMAKE_HOME_DIRECTORY}/.gitversion)
491 FILE(STRINGS ${CMAKE_HOME_DIRECTORY}/.gitversion GIT_VERSION)
493 set(GIT_VERSION "none, release version")
495 message(STATUS "Git version: ${GIT_VERSION}")
497 ### Define source packages for Libs
498 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/DefinePackages.cmake)
500 ### Setup gcc & clang flags (include after DefinePackage.cmake, and before generating header files)
502 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Flags.cmake)
505 ### Generate the required headers and scripts
506 #############################################
508 # Avoid triggering a (full) rebuild by touching the files if they did not really change
509 configure_file("${CMAKE_HOME_DIRECTORY}/src/internal_config.h.in" "${CMAKE_BINARY_DIR}/src/internal_config.h.generated" @ONLY IMMEDIATE)
510 configure_file("${CMAKE_HOME_DIRECTORY}/include/simgrid/version.h.in" "${CMAKE_BINARY_DIR}/include/simgrid/version.h.generated" @ONLY IMMEDIATE)
511 configure_file("${CMAKE_HOME_DIRECTORY}/include/simgrid/config.h.in" "${CMAKE_BINARY_DIR}/include/simgrid/config.h.generated" @ONLY IMMEDIATE)
512 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/src/internal_config.h.generated ${CMAKE_BINARY_DIR}/src/internal_config.h)
513 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/include/simgrid/version.h.generated ${CMAKE_BINARY_DIR}/include/simgrid/version.h)
514 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/include/simgrid/config.h.generated ${CMAKE_BINARY_DIR}/include/simgrid/config.h)
515 file(REMOVE ${CMAKE_BINARY_DIR}/src/internal_config.h.generated)
516 file(REMOVE ${CMAKE_BINARY_DIR}/include/simgrid/config.h.generated)
517 file(REMOVE ${CMAKE_BINARY_DIR}/include/simgrid/version.h.generated)
519 # We need two versions of the SMPI scripts because they contain the path to the library
520 # so, it depends of whether SimGrid is installed, or run from the sources (during the build)
522 file(READ ${CMAKE_HOME_DIRECTORY}/src/smpi/smpitools.sh SMPITOOLS_SH) # Definitions shared amongst all SMPI scripts, inlined in each of them
524 ### SMPI script used when simgrid is installed
525 set(exec_prefix ${CMAKE_INSTALL_PREFIX})
526 set(includedir "${CMAKE_INSTALL_FULL_INCLUDEDIR}")
527 set(libdir "${CMAKE_INSTALL_FULL_LIBDIR}")
528 set(includeflag "\"-I${includedir}\" \"-I${includedir}/smpi\"")
529 set(CMAKE_SMPI_COMMAND "export LD_LIBRARY_PATH=\"${libdir}")
531 set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}:${NS3_LIBRARY_PATH}")
533 set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}\${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}\"")
534 set(SMPIMAIN ${libdir}/simgrid/smpimain)
535 set(SMPIREPLAYMAIN ${libdir}/simgrid/smpireplaymain)
537 configure_file(${CMAKE_HOME_DIRECTORY}/include/smpi/mpif.h.in ${CMAKE_BINARY_DIR}/include/smpi/mpif.h @ONLY)
538 #configure mpif.f90 to build mpi.mod
540 set(MODULE_MPIF_IN "module mpi")
541 set(MODULE_MPIF_OUT "end module mpi")
542 configure_file(${CMAKE_HOME_DIRECTORY}/include/smpi/mpif.h.in ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90.generated @ONLY)
543 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90.generated ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90)
544 file(REMOVE ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90.generated)
545 set(CMAKE_Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/include/smpi)
546 add_library(mpi SHARED ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90)
549 foreach(script cc cxx ff f90 run)
550 configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpi${script}.in ${CMAKE_BINARY_DIR}/bin/smpi${script} @ONLY)
553 ### SMPI scripts used when compiling simgrid
554 set(exec_prefix "${CMAKE_BINARY_DIR}/smpi_script/")
555 set(includedir "${CMAKE_HOME_DIRECTORY}/include")
556 set(libdir "${CMAKE_BINARY_DIR}/lib")
557 set(includeflag "\"-I${includedir}\" \"-I${includedir}/smpi\"")
558 set(includeflag "${includeflag} \"-I${CMAKE_BINARY_DIR}/include\" \"-I${CMAKE_BINARY_DIR}/include/smpi\"")
559 set(CMAKE_SMPI_COMMAND "export LD_LIBRARY_PATH=\"${libdir}")
561 set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}:${NS3_LIBRARY_PATH}")
563 set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}\${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}\"")
564 set(SMPIMAIN ${libdir}/simgrid/smpimain)
565 set(SMPIREPLAYMAIN ${libdir}/simgrid/smpireplaymain)
567 foreach(script cc cxx ff f90 run)
568 configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpi${script}.in ${CMAKE_BINARY_DIR}/smpi_script/bin/smpi${script} @ONLY)
571 foreach(script cc cxx ff f90 run)
572 execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpi${script})
573 execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/smpi_script/bin/smpi${script})
576 set(generated_headers_to_install
577 ${CMAKE_CURRENT_BINARY_DIR}/include/smpi/mpif.h
578 ${CMAKE_CURRENT_BINARY_DIR}/include/simgrid/config.h
579 ${CMAKE_CURRENT_BINARY_DIR}/include/simgrid/version.h
582 set(generated_headers ${CMAKE_CURRENT_BINARY_DIR}/src/internal_config.h )
584 set(generated_files_to_clean
586 ${generated_headers_to_install}
587 ${CMAKE_BINARY_DIR}/bin/smpicc
588 ${CMAKE_BINARY_DIR}/bin/smpicxx
589 ${CMAKE_BINARY_DIR}/bin/smpiff
590 ${CMAKE_BINARY_DIR}/bin/smpif90
591 ${CMAKE_BINARY_DIR}/bin/smpirun
592 ${CMAKE_BINARY_DIR}/bin/simgrid_update_xml
593 ${CMAKE_BINARY_DIR}/examples/smpi/tracing/smpi_traced.trace
596 if(NOT "${CMAKE_BINARY_DIR}" STREQUAL "${CMAKE_HOME_DIRECTORY}")
597 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions0.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions0.txt COPYONLY)
598 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions1.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions1.txt COPYONLY)
599 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_allreduce.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allreduce.txt COPYONLY)
600 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_barrier.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_barrier.txt COPYONLY)
601 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_bcast.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_bcast.txt COPYONLY)
602 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_with_isend.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_with_isend.txt COPYONLY)
603 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_alltoall.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoall.txt COPYONLY)
604 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_alltoallv.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoallv.txt COPYONLY)
605 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_waitall.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_waitall.txt COPYONLY)
606 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_reducescatter.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_reducescatter.txt COPYONLY)
607 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_gather.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_gather.txt COPYONLY)
608 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_allgatherv.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allgatherv.txt COPYONLY)
609 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile COPYONLY)
610 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_cluster ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_cluster COPYONLY)
611 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_griffon ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_griffon COPYONLY)
612 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_coll ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_coll COPYONLY)
613 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_io ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_io COPYONLY)
614 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_empty ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_empty COPYONLY)
616 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/description_file ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/description_file COPYONLY)
617 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/README ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/README COPYONLY)
618 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/smpi_replay.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/smpi_replay.txt COPYONLY)
619 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)
620 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)
621 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)
622 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)
623 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)
624 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)
625 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)
626 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)
627 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)
628 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)
629 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)
630 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)
631 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)
632 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)
633 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)
634 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)
635 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)
636 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)
637 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)
638 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)
639 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)
640 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)
641 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)
642 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)
643 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)
644 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)
645 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)
646 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)
647 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)
648 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)
649 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)
650 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)
652 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)
653 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)
654 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)
655 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)
656 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)
657 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)
658 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)
659 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)
660 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)
661 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)
662 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)
663 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)
664 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)
665 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)
666 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)
668 set(generated_files_to_clean
669 ${generated_files_to_clean}
670 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions0.txt
671 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions1.txt
672 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allreduce.txt
673 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_barrier.txt
674 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_bcast.txt
675 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_with_isend.txt
676 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoall.txt
677 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoallv.txt
678 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_waitall.txt
679 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_gather.txt
680 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allgatherv.txt
681 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_reducescatter.txt
682 ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile
683 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/description_file
684 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/README
685 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/smpi_replay.txt
686 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace0.txt
687 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace1.txt
688 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace2.txt
689 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace3.txt
690 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace4.txt
691 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace5.txt
692 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace6.txt
693 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace7.txt
694 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace8.txt
695 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace9.txt
696 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace10.txt
697 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace11.txt
698 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace12.txt
699 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace13.txt
700 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace14.txt
701 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace15.txt
702 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace16.txt
703 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace17.txt
704 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace18.txt
705 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace19.txt
706 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace20.txt
707 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace21.txt
708 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace22.txt
709 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace23.txt
710 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace24.txt
711 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace25.txt
712 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace26.txt
713 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace27.txt
714 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace28.txt
715 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace29.txt
716 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace30.txt
717 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace31.txt
718 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/compute_only.txt
719 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/compute_only/actions0.txt
720 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/compute_only/actions1.txt
721 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/empty.txt
722 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/empty/actions0.txt
723 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/empty/actions1.txt
724 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/mixed.txt
725 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/mixed/actions0.txt
726 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/mixed/actions1.txt
727 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/replay_multiple_manual.tesh
728 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute
729 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute_consecutive
730 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute_consecutive2
731 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute_simple
732 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty1
733 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2
734 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2_same_resources
735 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2_same_time
736 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2_same_time_and_resources
737 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed1
738 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2
739 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2_same_resources
740 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2_same_time
741 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2_same_time_and_resources
742 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_nojob
746 SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES
747 "${generated_files_to_clean}")
749 add_custom_target(tests COMMENT "Recompiling the tests")
750 add_custom_target(tests-mc COMMENT "Recompiling the MC tests and tools.")
751 add_dependencies(tests tests-mc)
753 ### Build some Maintainer files
754 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/MaintainerMode.cmake)
757 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/MakeLib.cmake)
759 # Python binding (with pybind11)
761 if((NOT DEFINED enable_python) OR enable_python)
762 if(EXISTS ${CMAKE_HOME_DIRECTORY}/pybind11) # Try to use a local copy of pybind11, if any
763 message(STATUS "Use the internal copy of pybind11.")
764 add_subdirectory(${CMAKE_HOME_DIRECTORY}/pybind11)
765 set(pybind11_FOUND ON)
767 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_HOME_DIRECTORY}/pybind11/tools/)
768 set(Python_ADDITIONAL_VERSIONS 3.9 3.8 3.7 3.6 3.5 3.4)
769 find_package(PythonLibsNew ${PYBIND11_PYTHON_VERSION} REQUIRED)
772 find_package(pybind11 CONFIG)
773 message(STATUS "Pybind11 version: ${pybind11_VERSION}")
774 if (pybind11_VERSION VERSION_LESS 2.4)
775 message(STATUS "SimGrid needs at least v2.4 of pybind11. Disabling the Python bindings.")
776 set(pybind11_FOUND OFF)
780 if(NOT PYTHONLIBS_FOUND AND NOT Python3_Development_FOUND)
781 message(STATUS "Python libs not found. Turn pybind11 off.")
783 set(pybind11_FOUND OFF)
787 option(enable_python "Whether the Python bindings are activated." ${pybind11_FOUND}) # ON by default if dependencies are met
789 if("${CMAKE_SYSTEM}" MATCHES "FreeBSD" AND enable_model-checking AND enable_python)
790 message(WARNING "FreeBSD + Model-Checking + Python = too much for now. Disabling the Python bindings.")
791 set(enable_python FALSE)
796 message(STATUS "Found pybind11.")
798 set(pybind11_options NO_EXTRAS)
800 pybind11_add_module(python-bindings src/bindings/python/simgrid_python.cpp ${pybind11_options})
801 target_compile_features(python-bindings PRIVATE cxx_std_14)
802 target_link_libraries(python-bindings PUBLIC simgrid)
803 set_target_properties(python-bindings PROPERTIES
804 LIBRARY_OUTPUT_NAME simgrid
805 CXX_VISIBILITY_PRESET "default"
806 INTERPROCEDURAL_OPTIMIZATION FALSE)
807 # LTO is disabled here from the python bindings because this makes a
808 # cmake warning about CMP0069 even when this policy is set. This
809 # problem may be in cmake, in pybind11 or even in our code, not sure.
810 # It may get eventually solved in cmake or pybind11. Or not.
811 # The sure thing is that our python bindings are in one file only,
812 # so there is no need for LTO here. Problem solved :)
814 add_dependencies(tests python-bindings)
815 set_property(TARGET python-bindings
816 APPEND PROPERTY INCLUDE_DIRECTORIES "${INTERNAL_INCLUDES}")
818 if("${SIMGRID_PYTHON_LIBDIR}" STREQUAL "") # value not manually set
819 if("${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr")
820 set(SIMGRID_PYTHON_LIBDIR ${Python3_SITEARCH})
821 else("${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr")
822 string(REGEX REPLACE "^/usr/" "${CMAKE_INSTALL_PREFIX}/" SIMGRID_PYTHON_LIBDIR ${Python3_SITEARCH})
823 endif("${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr")
825 install(TARGETS python-bindings
826 LIBRARY DESTINATION "${SIMGRID_PYTHON_LIBDIR}")
828 message(FATAL_ERROR "Please install pybind11-dev to build the Python bindings (or disable that option).")
831 mark_as_advanced(PYBIND11_PYTHON_VERSION)
832 mark_as_advanced(pybind11_DIR)
835 if(enable_memcheck_xml)
836 set(enable_memcheck true)
841 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Tests.cmake)
842 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/CTestConfig.cmake)
844 ### Define subdirectories
845 foreach(cmakefile ${CMAKEFILES_TXT})
846 string(REPLACE "/CMakeLists.txt" "" repository ${cmakefile})
847 add_subdirectory("${CMAKE_HOME_DIRECTORY}/${repository}")
850 ### Setup the distrib
851 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Distrib.cmake)
853 ### Build the docs if asked to
854 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Documentation.cmake)
856 ### Print the result of configuration
858 message("##########################################")
859 message("#### Content of src/internal_config.h ####")
860 message("##########################################")
861 file(STRINGS ${CMAKE_CURRENT_BINARY_DIR}/src/internal_config.h config_output)
862 LIST(REMOVE_AT config_output 0 1 2 3 4 5 6 7 8 9 10) # Pass the file header
863 foreach(line ${config_output})
866 message("##########################################")
867 message("#### Content of simgrid/config.h ####")
868 message("##########################################")
869 file(STRINGS ${CMAKE_CURRENT_BINARY_DIR}/include/simgrid/config.h config_output)
870 LIST(REMOVE_AT config_output 0 1 2 3 4 5 6 7 8 9 -1) # Pass the file header
871 foreach(line ${config_output})
874 message("##########################################")
875 message("#### End of configuration headers ####")
876 message("##########################################")
878 message("\nConfiguration of package `simgrid':")
879 message(" Home directory ..............: ${CMAKE_HOME_DIRECTORY}")
880 message(" Build Name ..................: ${BUILDNAME}")
881 message(" Cmake Generator .............: ${CMAKE_GENERATOR}")
882 message(" Site ........................: ${SITE}")
883 message(" Install prefix ..............: ${CMAKE_INSTALL_PREFIX}")
884 message(" Release .....................: simgrid-${release_version}")
886 message(" Compiler: C .................: ${CMAKE_C_COMPILER} (id: ${CMAKE_C_COMPILER_ID})")
887 message(" version .............: ${CMAKE_C_COMPILER_VERSION}")
888 message(" is gnu ..............: ${CMAKE_COMPILER_IS_GNUCC}")
889 message(" Compiler: C++ ...............: ${CMAKE_CXX_COMPILER} (id: ${CMAKE_CXX_COMPILER_ID})")
890 message(" version .............: ${CMAKE_CXX_COMPILER_VERSION}")
891 if(CMAKE_Fortran_COMPILER)
892 message(" Compiler: Fortran ...........: ${SMPI_Fortran_COMPILER} (id: ${CMAKE_Fortran_COMPILER_ID})")
893 message(" version .............: ${CMAKE_Fortran_COMPILER_VERSION}")
895 message(" Linker: .....................: ${CMAKE_LINKER}")
896 message(" version .............: ${LINKER_VERSION}")
897 message(" Make program: ...............: ${CMAKE_MAKE_PROGRAM}")
899 message(" CFlags ......................: ${CMAKE_C_FLAGS}")
900 message(" CXXFlags ....................: ${CMAKE_CXX_FLAGS}")
901 message(" LDFlags .....................: ${CMAKE_C_LINK_FLAGS}")
902 message(" with LTO ....................: ${enable_lto}")
905 if (SIMGRID_HAVE_NS3)
906 message(" Compile ns-3 ................: ON (path: ${NS3_PATH})")
908 message(" Compile ns-3 ................: OFF (hint: ${NS3_HINT})")
912 message(" Compile Python bindings .....: ${enable_python}")
913 message(" module ....................: ${PYTHON_MODULE_PREFIX}simgrid${PYTHON_MODULE_EXTENSION}")
914 message(" install path ..............: ${SIMGRID_PYTHON_LIBDIR} (force another value with -DSIMGRID_PYTHON_LIBDIR)")
916 message(" Compile Python bindings .....: OFF (disabled, or pybind11 not found)")
919 message(" Eigen3 library ..............: ${EIGEN3_VERSION_STRING} in ${EIGEN3_INCLUDE_DIR}")
921 message(" Eigen3 library ..............: not found (EIGEN3_HINT='${EIGEN3_HINT}').")
923 message(" Compile Smpi ................: ${HAVE_SMPI}")
924 message(" Smpi fortran ..............: ${SMPI_FORTRAN}")
925 message(" MPICH3 testsuite ..........: ${enable_smpi_MPICH3_testsuite}")
926 message(" MBI testsuite .............: ${enable_smpi_MBI_testsuite}")
927 message(" Privatization .............: ${HAVE_PRIVATIZATION}")
928 message(" PAPI support...............: ${HAVE_PAPI}")
929 message(" Compile Boost.Context support: ${HAVE_BOOST_CONTEXTS}")
931 message(" Maintainer mode .............: ${enable_maintainer_mode}")
932 message(" Documentation................: ${enable_documentation}")
933 message(" Model checking ..............: ${SIMGRID_HAVE_MC}")
934 message(" Graphviz mode ...............: ${HAVE_GRAPHVIZ}")
935 message(" Mallocators .................: ${enable_mallocators}")
937 message(" Simgrid dependencies ........: ${SIMGRID_DEP}")
940 execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_BINARY_DIR}/Testing/Notes/)
941 file(WRITE ${PROJECT_BINARY_DIR}/Testing/Notes/Build "GIT version : ${GIT_VERSION}\n")
942 file(APPEND ${PROJECT_BINARY_DIR}/Testing/Notes/Build "Release : simgrid-${release_version}\n")