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.12)
25 # once we move CMake to >= 3.13, we should use target_link_option in examples/sthread
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)
29 project(simgrid C CXX)
31 # customizable installation directories
32 include(GNUInstallDirs)
34 #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
35 # Check for the compiler #
36 #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
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)
43 ## Request full debugging flags
44 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g3")
45 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g3")
47 if (CMAKE_COMPILER_IS_GNUCC)
48 if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "7.0")
50 "SimGrid needs at least g++ version 7.0 to compile but you have ${CMAKE_CXX_COMPILER_VERSION}."
51 "You need a sufficient support of c++17 to compile SimGrid.")
55 ## We need a decent support of the C++17 and C11 standards
56 set(CMAKE_CXX_STANDARD 17)
57 set(CMAKE_CXX_STANDARD_REQUIRED ON)
59 set(CMAKE_C_STANDARD 11)
60 set(CMAKE_C_STANDARD_REQUIRED ON)
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")
66 ### Check threading support
67 set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
71 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Option.cmake)
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)
81 enable_language(Fortran OPTIONAL)
84 if(CMAKE_Fortran_COMPILER)
86 # Fortran compiler detected: save it, then replace by smpiff
87 set(SMPI_Fortran_COMPILER "${CMAKE_Fortran_COMPILER}" CACHE FILEPATH "The real Fortran compiler")
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\"")
94 elseif(CMAKE_Fortran_COMPILER_ID MATCHES "Intel")
95 set(SMPI_Fortran_FLAGS_ "\"-fPIC\" \"-nofor-main\"")
96 set(SMPI_Fortran_LIBS "\"-lifcore\"")
98 elseif(CMAKE_Fortran_COMPILER_ID MATCHES "PGI|Flang") # flang
99 set(SMPI_Fortran_FLAGS_ "\"-fPIC\"")
100 set(SMPI_Fortran_LIBS "")
103 set(SMPI_Fortran_FLAGS "${SMPI_Fortran_FLAGS_} ${SMPI_Fortran_FLAGS}")
105 ## Request debugging flags for Fortran too
106 set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -g")
109 endif(CMAKE_Fortran_COMPILER)
113 ### SET THE LIBRARY EXTENSION
120 execute_process(COMMAND ${CMAKE_LINKER} -v OUTPUT_VARIABLE LINKER_VERSION ERROR_VARIABLE LINKER_VERSION)
121 string(REGEX MATCH "[0-9].[0-9]*" LINKER_VERSION "${LINKER_VERSION}")
123 ### Find programs and paths
124 FIND_PROGRAM(GCOV_PATH gcov)
127 message(FATAL_ERROR "Please install Perl to compile SimGrid.")
130 # tesh.py needs python 3 (or the module python-subprocess32 on python2.8+)
131 find_package(Python3 COMPONENTS Interpreter)
132 if(NOT Python3_Interpreter_FOUND)
133 message(FATAL_ERROR "Please install Python (version 3 or higher) to compile SimGrid.")
135 set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE})
137 SET(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib)
139 ### Compute the include paths
141 # Only include public headers by default
143 ${CMAKE_BINARY_DIR}/include
144 ${CMAKE_HOME_DIRECTORY}/include
147 # Compute the ones that should be added when compiling the library
148 set(INTERNAL_INCLUDES
150 ${CMAKE_HOME_DIRECTORY}
154 set (INTERNAL_INCLUDES ${INTERNAL_INCLUDES} ${CMAKE_HOME_DIRECTORY}/src/smpi/include)
157 if(NOT CMAKE_CROSSCOMPILING AND EXISTS /usr/include/)
158 set(INTERNAL_INCLUDES ${INTERNAL_INCLUDES} /usr/include/)
161 # library dependency cannot start with a space (CMP0004), so initialize it with something that is never deactivated.
162 set(SIMGRID_DEP "-lm")
164 ### Determine the assembly flavor that we need today
165 set(HAVE_RAW_CONTEXTS 0)
166 include(CMakeDetermineSystem)
167 foreach(arch i686 x86_64 arm64)
168 set(SIMGRID_PROCESSOR_${arch} 0)
170 IF(CMAKE_SYSTEM_PROCESSOR MATCHES ".86|AMD64|amd64")
171 IF(CMAKE_SIZEOF_VOID_P EQUAL 4) # 32 bits
172 message(STATUS "System processor: i686 (${CMAKE_SYSTEM_PROCESSOR}, 32 bits)")
173 set(SIMGRID_PROCESSOR_i686 1)
175 message(STATUS "System processor: x86_64 (${CMAKE_SYSTEM_PROCESSOR}, 64 bits)")
176 set(SIMGRID_PROCESSOR_x86_64 1)
178 if(CMAKE_SIZEOF_VOID_P EQUAL 4 AND CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
179 message(STATUS "Disable fast raw contexts on x32 ABI.")
181 set(HAVE_RAW_CONTEXTS 1)
183 ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64")
184 message(STATUS "System processor: arm64 (${CMAKE_SYSTEM_PROCESSOR}, 64 bits)")
185 set(SIMGRID_PROCESSOR_arm64 1)
187 message(STATUS "System processor (${CMAKE_SYSTEM_PROCESSOR}) not explicitly accounted for")
190 include(CheckFunctionExists)
191 include(CheckTypeSize)
192 include(CheckIncludeFile)
193 include(CheckIncludeFiles)
194 include(CheckLibraryExists)
195 include(CheckSymbolExists)
199 message(STATUS "Don't even look for graphviz, as we build minimal binding libraries.")
201 include(FindGraphviz)
204 set(SIMGRID_HAVE_NS3 0)
207 if (SIMGRID_HAVE_NS3)
208 if (NOT NS3_VERSION EQUAL "3-dev" AND NS3_VERSION VERSION_LESS "3.28")
209 message(FATAL_ERROR "SimGrid needs ns-3 in version 3.28 or higher. Please upgrade or disable that cmake option.")
211 set(SIMGRID_HAVE_NS3 1)
212 set(SIMGRID_DEP "${SIMGRID_DEP} ${NS3_LIBRARIES}")
214 message(FATAL_ERROR "Cannot find ns-3. Please install it (apt-get install ns3 libns3-dev) or disable that cmake option")
218 ### Check for Eigen library
219 set(SIMGRID_HAVE_EIGEN3 0)
220 find_package (Eigen3 3.3 CONFIG
221 HINTS ${EIGEN3_HINT})
223 set(SIMGRID_HAVE_EIGEN3 1)
224 message(STATUS "Found Eigen3: ${EIGEN3_INCLUDE_DIR}")
225 include_directories(${EIGEN3_INCLUDE_DIR})
226 if ("3.3.4" VERSION_EQUAL EIGEN3_VERSION_STRING AND CMAKE_COMPILER_IS_GNUCC)
227 message(STATUS "Avoid build error of Eigen3 v3.3.4 using -Wno-error=int-in-bool-context")
228 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-error=int-in-bool-context")
231 message(STATUS "Disabling model BMF because Eigen3 was not found. If it's installed, use EIGEN3_HINT to hint cmake about the location of Eigen3Config.cmake")
234 # Check for our JSON dependency
235 set(SIMGRID_HAVE_JSON 0)
236 find_package(nlohmann_json 3.11.2
237 HINTS ${nlohmann_json_HINT})
238 if (nlohmann_json_FOUND)
239 set(SIMGRID_HAVE_JSON 1)
240 message(STATUS "Found nlohmann_json: ${NLOHMANN_JSON_INCLUDE_DIR}")
241 include_directories(${NLOHMANN_JSON_INCLUDE_DIR})
248 message(FATAL_ERROR "Cannot find PAPI. Please install it (apt-get install papi-tools libpapi-dev) or disable PAPI bindings.")
252 # But we do need the core of Boost
253 # cmake before 3.13.1 does not know about stacktrace components. Fix it.
254 # Usable components: https://www.boost.org/doc/libs/1_65_1/doc/html/stacktrace/configuration_and_build.html
255 set(_Boost_STACKTRACE_HEADERS "boost/stacktrace.hpp")
256 set(_Boost_STACKTRACE_BACKTRACE_HEADERS "boost/stacktrace.hpp")
257 set(_Boost_STACKTRACE_ADDR2LINE_HEADERS "boost/stacktrace.hpp")
259 if(minimal-bindings) # When we want a minimal python library, don't even search for boost optional components
260 message(STATUS "Don't even look for boost optional components, as we build minimal binding libraries.")
261 find_package(Boost 1.48)
263 find_package(Boost 1.59 OPTIONAL_COMPONENTS context stacktrace_backtrace stacktrace_addr2line)
266 include_directories(${Boost_INCLUDE_DIRS})
267 message(STATUS "Mandatory components found. SimGrid is compilable.")
268 if (NOT minimal-bindings)
269 message(STATUS "Looking for optional Boost components:")
270 set(Boost_FOUND 1) # These components are optionals
271 CHECK_INCLUDE_FILE("backtrace.h" HAVE_BACKTRACE_H) # check that backtrace is actually possible
272 if (Boost_STACKTRACE_BACKTRACE_FOUND AND HAVE_BACKTRACE_H)
273 message (STATUS " stacktrace: found the fast 'backtrace' implementation. Activating human-readable stack traces.")
274 set(HAVE_BOOST_STACKTRACE_BACKTRACE 1)
276 set(HAVE_BOOST_STACKTRACE_BACKTRACE 0)
277 if (Boost_STACKTRACE_ADDR2LINE_FOUND)
278 message (STATUS " stacktrace: found the slow 'addr2line' implementation. Activating human-readable stack traces.")
279 set(HAVE_BOOST_STACKTRACE_ADDR2LINE 1)
281 message (STATUS " stacktrace: MISSING. Install libboost-stacktrace-dev to display the stacktraces.")
282 set(HAVE_BOOST_STACKTRACE_ADDR2LINE 0)
286 if(Boost_CONTEXT_FOUND)
287 message (STATUS " context: found. Activating Boost contexts.")
288 set(HAVE_BOOST_CONTEXTS 1)
290 message (STATUS " context: MISSING. Install libboost-context-dev for this optional feature.")
291 set(HAVE_BOOST_CONTEXTS 0)
296 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'")
298 find_package(Boost 1.48) #try without optional libraries
300 message(FATAL_ERROR "Boost libraries not found. Install libboost-dev (>= 1.48.0).")
302 include_directories(${Boost_INCLUDE_DIRS})
303 message(STATUS "Mandatory components found. SimGrid is compilable.")
308 # Checks for header libraries functions.
309 CHECK_LIBRARY_EXISTS(rt clock_gettime "" HAVE_POSIX_GETTIME)
310 CHECK_LIBRARY_EXISTS(pthread pthread_setaffinity_np "" HAVE_PTHREAD_SETAFFINITY)
311 CHECK_INCLUDE_FILE("pthread_np.h" HAVE_PTHREAD_NP_H) # for pthread_setaffinity_np() on FreeBSD
313 if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
314 set(CMAKE_REQUIRED_DEFINITIONS "-D_XOPEN_SOURCE=700 -D_DARWIN_C_SOURCE")
316 set(CMAKE_REQUIRED_DEFINITIONS "-D_GNU_SOURCE")
319 CHECK_INCLUDE_FILE("valgrind/valgrind.h" HAVE_VALGRIND_H)
320 CHECK_INCLUDE_FILE("unistd.h" HAVE_UNISTD_H)
321 CHECK_INCLUDE_FILE("linux/futex.h" HAVE_FUTEX_H)
323 CHECK_FUNCTION_EXISTS(dlfunc HAVE_DLFUNC)
324 CHECK_FUNCTION_EXISTS(gettimeofday HAVE_GETTIMEOFDAY)
325 CHECK_FUNCTION_EXISTS(nanosleep HAVE_NANOSLEEP)
326 CHECK_FUNCTION_EXISTS(sysconf HAVE_SYSCONF)
328 message(FATAL_ERROR "Cannot build without sysconf.")
330 CHECK_FUNCTION_EXISTS(process_vm_readv HAVE_PROCESS_VM_READV)
331 CHECK_FUNCTION_EXISTS(mmap HAVE_MMAP)
332 CHECK_FUNCTION_EXISTS(mremap HAVE_MREMAP)
334 CHECK_SYMBOL_EXISTS(vasprintf stdio.h HAVE_VASPRINTF)
336 CHECK_INCLUDE_FILE("sys/sendfile.h" HAVE_SENDFILE_H)
337 CHECK_FUNCTION_EXISTS(sendfile HAVE_SENDFILE)
338 if(HAVE_SENDFILE_H AND HAVE_SENDFILE)
339 set(SG_HAVE_SENDFILE 1)
341 set(SG_HAVE_SENDFILE 0)
344 if(enable_model-checking AND NOT "${CMAKE_SYSTEM}" MATCHES "Linux|FreeBSD")
345 message(FATAL_ERROR "Support for model-checking has not been enabled on ${CMAKE_SYSTEM}. Please use a Linux docker to use the model checker.")
348 if(enable_model-checking AND minimal-bindings)
349 message(FATAL_ERROR "Compile-time option 'minimal-bindings' cannot be enabled with 'model-checking'")
356 if(enable_model-checking)
357 message(STATUS "Warning: support for model-checking has been disabled because you are missing either mmap or __thread.")
359 SET(enable_model-checking 0)
362 if(enable_mallocators)
363 SET(SIMGRID_HAVE_MALLOCATOR 1)
365 SET(SIMGRID_HAVE_MALLOCATOR 0)
368 if(enable_model-checking)
369 include(FindLibunwind)
371 SET(SIMGRID_DEP "${SIMGRID_DEP} ${LIBUNWIND_LIBRARIES}")
373 message(FATAL_ERROR "Please install libunwind-dev libdw-dev libelf-dev libevent-dev if you want to compile the SimGrid model checker.")
375 find_package(Libdw REQUIRED)
376 find_package(Libelf REQUIRED)
377 find_package(Libevent REQUIRED)
378 include_directories(${LIBDW_INCLUDE_DIR} ${LIBELF_INCLUDE_DIR} ${LIBEVENT_INCLUDE_DIR})
379 set(SIMGRID_DEP "${SIMGRID_DEP} ${LIBEVENT_LIBRARIES} ${LIBELF_LIBRARIES} ${LIBDW_LIBRARIES}")
380 set(SIMGRID_HAVE_MC 1)
381 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -gdwarf-4")
382 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -gdwarf-4")
384 SET(SIMGRID_HAVE_MC 0)
387 mark_as_advanced(PATH_LIBDW_H)
388 mark_as_advanced(PATH_LIBDW_LIB)
390 if (enable_model-checking AND enable_ns3)
391 message(WARNING "Activating both model-checking and ns-3 bindings is considered experimental.")
396 SET(HAVE_PRIVATIZATION 1)
401 #--------------------------------------------------------------------------------------------------
402 ### Check what context backends are available
404 set(HAVE_UCONTEXT_CONTEXTS 0)
405 CHECK_INCLUDE_FILE("ucontext.h" HAVE_UCONTEXT_H)
406 if(NOT HAVE_UCONTEXT_H)
407 message(STATUS "No ucontext factory: <ucontext.h> not found.")
409 message(STATUS "No ucontext factory: Apple don't want us to use them.")
410 set(HAVE_UCONTEXT_H 0)
412 try_compile(compile_makecontext ${CMAKE_BINARY_DIR} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_makecontext.c
413 OUTPUT_VARIABLE compile_makecontext_output)
415 #If can have both context
416 if(NOT compile_makecontext)
417 message(STATUS "Error: <ucontext.h> exists, but makecontext is not compilable. Compilation output:\n ${compile_makecontext_output}")
418 message(STATUS "No ucontext factory: makecontext() is not compilable.")
420 message(STATUS "Support for ucontext factory ok.")
421 set(HAVE_UCONTEXT_CONTEXTS 1)
423 # Stack setup (size and address)
424 try_run(RUN_makecontext_VAR COMPILE_makecontext_VAR
425 ${CMAKE_BINARY_DIR} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_stacksetup.c
426 RUN_OUTPUT_VARIABLE stack_setup)
428 LIST(LENGTH stack_setup stack_setup_len)
429 if("${stack_setup_len}" STREQUAL "2")
430 LIST(GET stack_setup 0 makecontext_addr)
431 LIST(GET stack_setup 1 makecontext_size)
432 set(sg_makecontext_stack_addr "#define sg_makecontext_stack_addr(skaddr) (${makecontext_addr})")
433 set(sg_makecontext_stack_size "#define sg_makecontext_stack_size(sksize) (${makecontext_size})")
435 message(FATAL_ERROR "Could not figure out the stack setup. Compil: ${RUN_makecontext_VAR}. Exec: ${COMPILE_makecontext_VAR}. Output: ${stack_setup}")
440 # Stack growth direction (upward or downward). Used for the following contexts: SysV, raw, Boost
441 try_run(RUN_stackgrowth_VAR COMPILE_stackgrowth_VAR
443 ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_stackgrowth.c
444 RUN_OUTPUT_VARIABLE stack
445 COPY_FILE test_stackgrowth)
447 if("${stack}" STREQUAL "down")
448 set(PTH_STACKGROWTH "-1")
449 elseif("${stack}" STREQUAL "up")
450 set(PTH_STACKGROWTH "1")
452 if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64")
453 set(PTH_STACKGROWTH "-1")
454 elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "i686")
455 set(PTH_STACKGROWTH "-1")
457 message(FATAL_ERROR "Could not figure out the stack direction. Test prog returned: ${stack}; CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}.")
460 # If the test ran well, remove the test binary
461 file(REMOVE test_stackgrowth)
462 #--------------------------------------------------------------------------------------------------
467 if(EXISTS ${CMAKE_HOME_DIRECTORY}/.git/)
468 execute_process(COMMAND git rev-parse --verify --short HEAD
469 WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}
470 OUTPUT_VARIABLE GIT_VERSION
471 OUTPUT_STRIP_TRAILING_WHITESPACE)
472 # Check for uncommitted changes
473 execute_process(COMMAND git diff --name-only HEAD
474 WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}
475 OUTPUT_VARIABLE files_changed)
477 set(GIT_VERSION "${GIT_VERSION}-dirty")
479 elseif(EXISTS ${CMAKE_HOME_DIRECTORY}/.gitversion)
480 FILE(STRINGS ${CMAKE_HOME_DIRECTORY}/.gitversion GIT_VERSION)
482 set(GIT_VERSION "none, release version")
484 message(STATUS "Git version: ${GIT_VERSION}")
486 ### Define source packages for Libs
487 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/DefinePackages.cmake)
489 ### Setup gcc & clang flags (include after DefinePackage.cmake, and before generating header files)
491 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Flags.cmake)
494 ### Generate the required headers and scripts
495 #############################################
497 # Avoid triggering a (full) rebuild by touching the files if they did not really change
498 configure_file("${CMAKE_HOME_DIRECTORY}/src/internal_config.h.in" "${CMAKE_BINARY_DIR}/src/internal_config.h.generated" @ONLY IMMEDIATE)
499 configure_file("${CMAKE_HOME_DIRECTORY}/include/simgrid/version.h.in" "${CMAKE_BINARY_DIR}/include/simgrid/version.h.generated" @ONLY IMMEDIATE)
500 configure_file("${CMAKE_HOME_DIRECTORY}/include/simgrid/config.h.in" "${CMAKE_BINARY_DIR}/include/simgrid/config.h.generated" @ONLY IMMEDIATE)
501 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/src/internal_config.h.generated ${CMAKE_BINARY_DIR}/src/internal_config.h)
502 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/include/simgrid/version.h.generated ${CMAKE_BINARY_DIR}/include/simgrid/version.h)
503 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/include/simgrid/config.h.generated ${CMAKE_BINARY_DIR}/include/simgrid/config.h)
504 file(REMOVE ${CMAKE_BINARY_DIR}/src/internal_config.h.generated)
505 file(REMOVE ${CMAKE_BINARY_DIR}/include/simgrid/config.h.generated)
506 file(REMOVE ${CMAKE_BINARY_DIR}/include/simgrid/version.h.generated)
508 # We need two versions of the SMPI scripts because they contain the path to the library
509 # so, it depends of whether SimGrid is installed, or run from the sources (during the build)
511 file(READ ${CMAKE_HOME_DIRECTORY}/src/smpi/smpitools.sh SMPITOOLS_SH) # Definitions shared amongst all SMPI scripts, inlined in each of them
513 ### SMPI script used when simgrid is installed
514 set(exec_prefix ${CMAKE_INSTALL_PREFIX})
515 set(includedir "${CMAKE_INSTALL_FULL_INCLUDEDIR}")
516 set(libdir "${CMAKE_INSTALL_FULL_LIBDIR}")
517 set(includeflag "\"-I${includedir}\" \"-I${includedir}/smpi\"")
518 set(CMAKE_SMPI_COMMAND "export LD_LIBRARY_PATH=\"${libdir}")
520 set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}:${NS3_LIBRARY_PATH}")
522 set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}\${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}\"")
523 set(SMPIMAIN ${libdir}/simgrid/smpimain)
524 set(SMPIREPLAYMAIN ${libdir}/simgrid/smpireplaymain)
526 configure_file(${CMAKE_HOME_DIRECTORY}/include/smpi/mpif.h.in ${CMAKE_BINARY_DIR}/include/smpi/mpif.h @ONLY)
527 #configure mpif.f90 to build mpi.mod
529 set(MODULE_MPIF_IN "module mpi")
530 set(MODULE_MPIF_OUT "end module mpi")
531 configure_file(${CMAKE_HOME_DIRECTORY}/include/smpi/mpif.h.in ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90.generated @ONLY)
532 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90.generated ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90)
533 file(REMOVE ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90.generated)
534 set(CMAKE_Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/include/smpi)
535 add_library(mpi SHARED ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90)
538 foreach(script cc cxx ff f90 run)
539 configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpi${script}.in ${CMAKE_BINARY_DIR}/bin/smpi${script} @ONLY)
542 ### SMPI scripts used when compiling simgrid
543 set(exec_prefix "${CMAKE_BINARY_DIR}/smpi_script/")
544 set(includedir "${CMAKE_HOME_DIRECTORY}/include")
545 set(libdir "${CMAKE_BINARY_DIR}/lib")
546 set(includeflag "\"-I${includedir}\" \"-I${includedir}/smpi\"")
547 set(includeflag "${includeflag} \"-I${CMAKE_BINARY_DIR}/include\" \"-I${CMAKE_BINARY_DIR}/include/smpi\"")
548 set(CMAKE_SMPI_COMMAND "export LD_LIBRARY_PATH=\"${libdir}")
550 set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}:${NS3_LIBRARY_PATH}")
552 set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}\${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}\"")
553 set(SMPIMAIN ${libdir}/simgrid/smpimain)
554 set(SMPIREPLAYMAIN ${libdir}/simgrid/smpireplaymain)
556 foreach(script cc cxx ff f90 run)
557 configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpi${script}.in ${CMAKE_BINARY_DIR}/smpi_script/bin/smpi${script} @ONLY)
560 foreach(script cc cxx ff f90 run)
561 execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpi${script})
562 execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/smpi_script/bin/smpi${script})
565 set(generated_headers_to_install
566 ${CMAKE_CURRENT_BINARY_DIR}/include/smpi/mpif.h
567 ${CMAKE_CURRENT_BINARY_DIR}/include/simgrid/config.h
568 ${CMAKE_CURRENT_BINARY_DIR}/include/simgrid/version.h
571 set(generated_headers ${CMAKE_CURRENT_BINARY_DIR}/src/internal_config.h )
573 set(generated_files_to_clean
575 ${generated_headers_to_install}
576 ${CMAKE_BINARY_DIR}/bin/smpicc
577 ${CMAKE_BINARY_DIR}/bin/smpicxx
578 ${CMAKE_BINARY_DIR}/bin/smpiff
579 ${CMAKE_BINARY_DIR}/bin/smpif90
580 ${CMAKE_BINARY_DIR}/bin/smpirun
581 ${CMAKE_BINARY_DIR}/bin/simgrid_update_xml
582 ${CMAKE_BINARY_DIR}/examples/smpi/tracing/smpi_traced.trace
585 if(NOT "${CMAKE_BINARY_DIR}" STREQUAL "${CMAKE_HOME_DIRECTORY}")
586 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions0.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions0.txt COPYONLY)
587 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions1.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions1.txt COPYONLY)
588 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_allreduce.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allreduce.txt COPYONLY)
589 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_barrier.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_barrier.txt COPYONLY)
590 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_bcast.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_bcast.txt COPYONLY)
591 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_with_isend.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_with_isend.txt COPYONLY)
592 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_alltoall.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoall.txt COPYONLY)
593 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_alltoallv.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoallv.txt COPYONLY)
594 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_waitall.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_waitall.txt COPYONLY)
595 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_reducescatter.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_reducescatter.txt COPYONLY)
596 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_gather.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_gather.txt COPYONLY)
597 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_allgatherv.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allgatherv.txt COPYONLY)
598 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile COPYONLY)
599 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_cluster ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_cluster COPYONLY)
600 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_griffon ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_griffon COPYONLY)
601 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_coll ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_coll COPYONLY)
602 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_io ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_io COPYONLY)
603 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_empty ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_empty COPYONLY)
605 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/description_file ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/description_file COPYONLY)
606 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/README ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/README COPYONLY)
607 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/smpi_replay.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/smpi_replay.txt COPYONLY)
608 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)
609 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)
610 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)
611 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)
612 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)
613 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)
614 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)
615 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)
616 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)
617 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)
618 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)
619 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)
620 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)
621 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)
622 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)
623 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)
624 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)
625 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)
626 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)
627 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)
628 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)
629 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)
630 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)
631 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)
632 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)
633 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)
634 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)
635 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)
636 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)
637 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)
638 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)
639 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)
641 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)
642 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)
643 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)
644 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)
645 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)
646 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)
647 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)
648 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)
649 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)
650 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)
651 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)
652 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)
653 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)
654 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)
655 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)
657 set(generated_files_to_clean
658 ${generated_files_to_clean}
659 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions0.txt
660 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions1.txt
661 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allreduce.txt
662 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_barrier.txt
663 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_bcast.txt
664 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_with_isend.txt
665 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoall.txt
666 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoallv.txt
667 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_waitall.txt
668 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_gather.txt
669 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allgatherv.txt
670 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_reducescatter.txt
671 ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile
672 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/description_file
673 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/README
674 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/smpi_replay.txt
675 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace0.txt
676 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace1.txt
677 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace2.txt
678 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace3.txt
679 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace4.txt
680 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace5.txt
681 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace6.txt
682 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace7.txt
683 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace8.txt
684 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace9.txt
685 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace10.txt
686 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace11.txt
687 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace12.txt
688 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace13.txt
689 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace14.txt
690 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace15.txt
691 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace16.txt
692 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace17.txt
693 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace18.txt
694 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace19.txt
695 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace20.txt
696 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace21.txt
697 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace22.txt
698 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace23.txt
699 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace24.txt
700 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace25.txt
701 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace26.txt
702 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace27.txt
703 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace28.txt
704 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace29.txt
705 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace30.txt
706 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace31.txt
707 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/compute_only.txt
708 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/compute_only/actions0.txt
709 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/compute_only/actions1.txt
710 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/empty.txt
711 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/empty/actions0.txt
712 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/empty/actions1.txt
713 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/mixed.txt
714 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/mixed/actions0.txt
715 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/mixed/actions1.txt
716 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/replay_multiple_manual.tesh
717 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute
718 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute_consecutive
719 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute_consecutive2
720 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute_simple
721 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty1
722 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2
723 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2_same_resources
724 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2_same_time
725 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2_same_time_and_resources
726 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed1
727 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2
728 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2_same_resources
729 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2_same_time
730 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2_same_time_and_resources
731 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_nojob
735 SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES
736 "${generated_files_to_clean}")
738 add_custom_target(tests COMMENT "Recompiling the tests")
739 add_custom_target(tests-mc COMMENT "Recompiling the MC tests and tools.")
740 add_dependencies(tests tests-mc)
742 ### Build some Maintainer files
743 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/MaintainerMode.cmake)
746 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/MakeLib.cmake)
748 # Python binding (with pybind11)
750 if((NOT DEFINED enable_python) OR enable_python)
751 if(EXISTS ${CMAKE_HOME_DIRECTORY}/pybind11) # Try to use a local copy of pybind11, if any
752 message(STATUS "Use the internal copy of pybind11.")
753 add_subdirectory(${CMAKE_HOME_DIRECTORY}/pybind11)
754 set(pybind11_FOUND ON)
756 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_HOME_DIRECTORY}/pybind11/tools/)
757 set(Python_ADDITIONAL_VERSIONS 3.9 3.8 3.7 3.6 3.5 3.4)
758 find_package(PythonLibsNew ${PYBIND11_PYTHON_VERSION} REQUIRED)
761 find_package(pybind11 CONFIG)
762 message(STATUS "Pybind11 version: ${pybind11_VERSION}")
763 if (pybind11_VERSION VERSION_LESS 2.4)
764 message(STATUS "SimGrid needs at least v2.4 of pybind11. Disabling the Python bindings.")
765 set(pybind11_FOUND OFF)
770 find_package(Python3 COMPONENTS Development)
771 if(NOT Python3_Development_FOUND OR NOT pybind11_FOUND)
772 message(STATUS "SimGrid Python bindings cannot be built on this system.")
773 set(default_enable_python OFF)
775 set(default_enable_python ON)
778 option(enable_python "Whether the Python bindings are activated." ${default_enable_python}) # ON by default if dependencies are met
780 if("${CMAKE_SYSTEM}" MATCHES "FreeBSD" AND enable_model-checking AND enable_python)
781 message(WARNING "FreeBSD + Model-Checking + Python = too much for now. Disabling the Python bindings.")
782 set(enable_python FALSE)
786 if(NOT Python3_Development_FOUND)
787 message(FATAL_ERROR "Please install the development components of Python (python3-dev on Debian) to build the Python bindings (or disable that option).")
790 message(STATUS "Found pybind11.")
792 set(pybind11_options NO_EXTRAS)
794 pybind11_add_module(python-bindings src/bindings/python/simgrid_python.cpp ${pybind11_options})
795 target_compile_features(python-bindings PRIVATE cxx_std_14)
796 target_link_libraries(python-bindings PUBLIC simgrid)
797 set_target_properties(python-bindings PROPERTIES
798 LIBRARY_OUTPUT_NAME simgrid
799 CXX_VISIBILITY_PRESET "default"
800 INTERPROCEDURAL_OPTIMIZATION FALSE)
801 # LTO is disabled here from the python bindings because this makes a
802 # cmake warning about CMP0069 even when this policy is set. This
803 # problem may be in cmake, in pybind11 or even in our code, not sure.
804 # It may get eventually solved in cmake or pybind11. Or not.
805 # The sure thing is that our python bindings are in one file only,
806 # so there is no need for LTO here. Problem solved :)
808 add_dependencies(tests python-bindings)
809 set_property(TARGET python-bindings
810 APPEND PROPERTY INCLUDE_DIRECTORIES "${INTERNAL_INCLUDES}")
812 if("${SIMGRID_PYTHON_LIBDIR}" STREQUAL "") # value not manually set
813 if("${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr")
814 set(SIMGRID_PYTHON_LIBDIR ${Python3_SITEARCH})
815 else("${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr")
816 string(REGEX REPLACE "^/usr/" "${CMAKE_INSTALL_PREFIX}/" SIMGRID_PYTHON_LIBDIR ${Python3_SITEARCH})
817 endif("${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr")
819 install(TARGETS python-bindings
820 LIBRARY DESTINATION "${SIMGRID_PYTHON_LIBDIR}")
822 message(FATAL_ERROR "Please install pybind11-dev to build the Python bindings (or disable that option).")
825 mark_as_advanced(PYBIND11_PYTHON_VERSION)
826 mark_as_advanced(pybind11_DIR)
829 if(enable_memcheck_xml)
830 set(enable_memcheck true)
835 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Tests.cmake)
836 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/CTestConfig.cmake)
838 ### Define subdirectories
839 foreach(cmakefile ${CMAKEFILES_TXT})
840 string(REPLACE "/CMakeLists.txt" "" repository ${cmakefile})
841 add_subdirectory("${CMAKE_HOME_DIRECTORY}/${repository}")
844 ### Setup the distrib
845 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Distrib.cmake)
847 ### Build the docs if asked to
848 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Documentation.cmake)
850 ### Print the result of configuration
852 message("##########################################")
853 message("#### Content of src/internal_config.h ####")
854 message("##########################################")
855 file(STRINGS ${CMAKE_CURRENT_BINARY_DIR}/src/internal_config.h config_output)
856 LIST(REMOVE_AT config_output 0 1 2 3 4 5 6 7 8 9 10) # Pass the file header
857 foreach(line ${config_output})
860 message("##########################################")
861 message("#### Content of simgrid/config.h ####")
862 message("##########################################")
863 file(STRINGS ${CMAKE_CURRENT_BINARY_DIR}/include/simgrid/config.h config_output)
864 LIST(REMOVE_AT config_output 0 1 2 3 4 5 6 7 8 9 -1) # Pass the file header
865 foreach(line ${config_output})
868 message("##########################################")
869 message("#### End of configuration headers ####")
870 message("##########################################")
872 message("\nConfiguration of package `simgrid':")
873 message(" Home directory ..............: ${CMAKE_HOME_DIRECTORY}")
874 message(" Build Name ..................: ${BUILDNAME}")
875 message(" Cmake Generator .............: ${CMAKE_GENERATOR}")
876 message(" Site ........................: ${SITE}")
877 message(" Install prefix ..............: ${CMAKE_INSTALL_PREFIX}")
878 message(" Release .....................: simgrid-${release_version}")
880 message(" Compiler: C .................: ${CMAKE_C_COMPILER} (id: ${CMAKE_C_COMPILER_ID})")
881 message(" version .............: ${CMAKE_C_COMPILER_VERSION}")
882 message(" is gnu ..............: ${CMAKE_COMPILER_IS_GNUCC}")
883 message(" Compiler: C++ ...............: ${CMAKE_CXX_COMPILER} (id: ${CMAKE_CXX_COMPILER_ID})")
884 message(" version .............: ${CMAKE_CXX_COMPILER_VERSION}")
885 if(CMAKE_Fortran_COMPILER)
886 message(" Compiler: Fortran ...........: ${SMPI_Fortran_COMPILER} (id: ${CMAKE_Fortran_COMPILER_ID})")
887 message(" version .............: ${CMAKE_Fortran_COMPILER_VERSION}")
889 message(" Linker: .....................: ${CMAKE_LINKER}")
890 message(" version .............: ${LINKER_VERSION}")
891 message(" Make program: ...............: ${CMAKE_MAKE_PROGRAM}")
893 message(" CFlags ......................: ${CMAKE_C_FLAGS}")
894 message(" CXXFlags ....................: ${CMAKE_CXX_FLAGS}")
895 message(" LDFlags .....................: ${CMAKE_C_LINK_FLAGS}")
896 message(" with LTO ....................: ${enable_lto}")
899 if (SIMGRID_HAVE_NS3)
900 message(" Compile ns-3 ................: ON (path: ${NS3_PATH})")
902 message(" Compile ns-3 ................: OFF (hint: ${NS3_HINT})")
906 message(" Compile Python bindings .....: ${enable_python}")
907 message(" module ....................: ${PYTHON_MODULE_PREFIX}simgrid${PYTHON_MODULE_EXTENSION}")
908 message(" install path ..............: ${SIMGRID_PYTHON_LIBDIR} (force another value with -DSIMGRID_PYTHON_LIBDIR)")
910 message(" Compile Python bindings .....: OFF (disabled, or pybind11 not found)")
913 message(" Eigen3 library ..............: ${EIGEN3_VERSION_STRING} in ${EIGEN3_INCLUDE_DIR}")
915 message(" Eigen3 library ..............: not found (EIGEN3_HINT='${EIGEN3_HINT}').")
917 message(" Compile Smpi ................: ${HAVE_SMPI}")
918 message(" Smpi fortran ..............: ${SMPI_FORTRAN}")
919 message(" MPICH3 testsuite ..........: ${enable_smpi_MPICH3_testsuite}")
920 message(" MBI testsuite .............: ${enable_smpi_MBI_testsuite}")
921 message(" Privatization .............: ${HAVE_PRIVATIZATION}")
922 message(" PAPI support...............: ${HAVE_PAPI}")
923 message(" Compile Boost.Context support: ${HAVE_BOOST_CONTEXTS}")
925 message(" Maintainer mode .............: ${enable_maintainer_mode}")
926 message(" Documentation................: ${enable_documentation}")
927 message(" Model checking ..............: ${SIMGRID_HAVE_MC}")
928 message(" Graphviz mode ...............: ${HAVE_GRAPHVIZ}")
929 message(" Mallocators .................: ${enable_mallocators}")
931 message(" Simgrid dependencies ........: ${SIMGRID_DEP}")
934 execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_BINARY_DIR}/Testing/Notes/)
935 file(WRITE ${PROJECT_BINARY_DIR}/Testing/Notes/Build "GIT version : ${GIT_VERSION}\n")
936 file(APPEND ${PROJECT_BINARY_DIR}/Testing/Notes/Build "Release : simgrid-${release_version}\n")