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 # once we move CMake to >= 3.13.1, we could get rid of _Boost_STACKTRACE_BACKTRACE_HEADERS
27 message(STATUS "Cmake version ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION}")
28 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_HOME_DIRECTORY}/tools/cmake/Modules)
30 project(simgrid C CXX)
32 # customizable installation directories
33 include(GNUInstallDirs)
35 #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
36 # Check for the compiler #
37 #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
39 ## Check the C/C++ standard that we need
40 ## See also tools/cmake/Flags.cmake that sets our paranoid warning flags
41 INCLUDE(CheckCCompilerFlag)
42 CHECK_C_COMPILER_FLAG(-fstack-cleaner HAVE_C_STACK_CLEANER)
44 ## Request full debugging flags
45 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g3")
46 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g3")
48 if (CMAKE_COMPILER_IS_GNUCC)
49 if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "7.0")
51 "SimGrid needs at least g++ version 7.0 to compile but you have ${CMAKE_CXX_COMPILER_VERSION}."
52 "You need a sufficient support of c++17 to compile SimGrid.")
56 ## We need a decent support of the C++17 and C11 standards
57 set(CMAKE_CXX_STANDARD 17)
58 set(CMAKE_CXX_STANDARD_REQUIRED ON)
60 set(CMAKE_C_STANDARD 11)
61 set(CMAKE_C_STANDARD_REQUIRED ON)
63 if (CMAKE_C_COMPILER_ID STREQUAL "Intel" AND CMAKE_C11_EXTENSION_COMPILE_OPTION STREQUAL "-std=c11")
64 set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=gnu11")
67 ### Check threading support
68 set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
72 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Option.cmake)
75 if ((NOT DEFINED enable_smpi) OR enable_smpi)
76 # First unset the compiler in case we're re-running cmake over a previous
77 # configuration where it was saved as smpiff
78 unset(CMAKE_Fortran_COMPILER)
82 enable_language(Fortran OPTIONAL)
85 if(CMAKE_Fortran_COMPILER)
87 # Fortran compiler detected: save it, then replace by smpiff
88 set(SMPI_Fortran_COMPILER "${CMAKE_Fortran_COMPILER}" CACHE FILEPATH "The real Fortran compiler")
90 # Set flags/libs to be used in smpiff
91 if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU")
92 set(SMPI_Fortran_FLAGS_ "\"-fpic\" \"-ff2c\" \"-fno-second-underscore\"")
93 set(SMPI_Fortran_LIBS "\"-lgfortran\"")
95 elseif(CMAKE_Fortran_COMPILER_ID MATCHES "Intel")
96 set(SMPI_Fortran_FLAGS_ "\"-fPIC\" \"-nofor-main\"")
97 set(SMPI_Fortran_LIBS "\"-lifcore\"")
99 elseif(CMAKE_Fortran_COMPILER_ID MATCHES "PGI|Flang") # flang
100 set(SMPI_Fortran_FLAGS_ "\"-fPIC\"")
101 set(SMPI_Fortran_LIBS "")
104 set(SMPI_Fortran_FLAGS "${SMPI_Fortran_FLAGS_} ${SMPI_Fortran_FLAGS}")
106 ## Request debugging flags for Fortran too
107 set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -g")
110 endif(CMAKE_Fortran_COMPILER)
114 ### SET THE LIBRARY EXTENSION
121 execute_process(COMMAND ${CMAKE_LINKER} -v OUTPUT_VARIABLE LINKER_VERSION ERROR_VARIABLE LINKER_VERSION)
122 string(REGEX MATCH "[0-9].[0-9]*" LINKER_VERSION "${LINKER_VERSION}")
124 ### Find programs and paths
125 FIND_PROGRAM(GCOV_PATH gcov)
128 message(FATAL_ERROR "Please install Perl to compile SimGrid.")
131 # tesh.py needs python 3 (or the module python-subprocess32 on python2.8+)
132 find_package(Python3 COMPONENTS Interpreter)
133 if(NOT Python3_Interpreter_FOUND)
134 message(FATAL_ERROR "Please install Python (version 3 or higher) to compile SimGrid.")
136 set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE})
138 SET(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib)
140 ### Compute the include paths
142 # Only include public headers by default
144 ${CMAKE_BINARY_DIR}/include
145 ${CMAKE_HOME_DIRECTORY}/include
148 # Compute the ones that should be added when compiling the library
149 set(INTERNAL_INCLUDES
151 ${CMAKE_HOME_DIRECTORY}
155 set (INTERNAL_INCLUDES ${INTERNAL_INCLUDES} ${CMAKE_HOME_DIRECTORY}/src/smpi/include)
158 if(NOT CMAKE_CROSSCOMPILING AND EXISTS /usr/include/)
159 set(INTERNAL_INCLUDES ${INTERNAL_INCLUDES} /usr/include/)
162 # library dependency cannot start with a space (CMP0004), so initialize it with something that is never deactivated.
163 set(SIMGRID_DEP "-lm")
165 ### Determine the assembly flavor that we need today
166 set(HAVE_RAW_CONTEXTS 0)
167 include(CMakeDetermineSystem)
168 foreach(arch i686 x86_64 arm64)
169 set(SIMGRID_PROCESSOR_${arch} 0)
171 IF(CMAKE_SYSTEM_PROCESSOR MATCHES ".86|AMD64|amd64")
172 IF(CMAKE_SIZEOF_VOID_P EQUAL 4) # 32 bits
173 message(STATUS "System processor: i686 (${CMAKE_SYSTEM_PROCESSOR}, 32 bits)")
174 set(SIMGRID_PROCESSOR_i686 1)
176 message(STATUS "System processor: x86_64 (${CMAKE_SYSTEM_PROCESSOR}, 64 bits)")
177 set(SIMGRID_PROCESSOR_x86_64 1)
179 if(CMAKE_SIZEOF_VOID_P EQUAL 4 AND CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
180 message(STATUS "Disable fast raw contexts on x32 ABI.")
182 set(HAVE_RAW_CONTEXTS 1)
184 ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64")
185 message(STATUS "System processor: arm64 (${CMAKE_SYSTEM_PROCESSOR}, 64 bits)")
186 set(SIMGRID_PROCESSOR_arm64 1)
188 message(STATUS "System processor (${CMAKE_SYSTEM_PROCESSOR}) not explicitly accounted for")
191 include(CheckFunctionExists)
192 include(CheckTypeSize)
193 include(CheckIncludeFile)
194 include(CheckIncludeFiles)
195 include(CheckLibraryExists)
196 include(CheckSymbolExists)
200 message(STATUS "Don't even look for graphviz, as we build minimal binding libraries.")
202 include(FindGraphviz)
205 set(SIMGRID_HAVE_NS3 0)
208 if (SIMGRID_HAVE_NS3)
209 if (NOT NS3_VERSION EQUAL "3-dev" AND NS3_VERSION VERSION_LESS "3.28")
210 message(FATAL_ERROR "SimGrid needs ns-3 in version 3.28 or higher. Please upgrade or disable that cmake option.")
212 set(SIMGRID_HAVE_NS3 1)
213 set(SIMGRID_DEP "${SIMGRID_DEP} ${NS3_LIBRARIES}")
215 message(FATAL_ERROR "Cannot find ns-3. Please install it (apt-get install ns3 libns3-dev) or disable that cmake option")
219 ### Check for Eigen library
220 set(SIMGRID_HAVE_EIGEN3 0)
221 find_package (Eigen3 3.3 CONFIG
222 HINTS ${EIGEN3_HINT})
224 set(SIMGRID_HAVE_EIGEN3 1)
225 message(STATUS "Found Eigen3: ${EIGEN3_INCLUDE_DIR}")
226 include_directories(${EIGEN3_INCLUDE_DIR})
227 if ("3.3.4" VERSION_EQUAL EIGEN3_VERSION_STRING AND CMAKE_COMPILER_IS_GNUCC)
228 message(STATUS "Avoid build error of Eigen3 v3.3.4 using -Wno-error=int-in-bool-context")
229 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-error=int-in-bool-context")
232 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")
235 # Check for our JSON dependency
236 set(SIMGRID_HAVE_JSON 0)
237 find_package(nlohmann_json 3.7
238 HINTS ${nlohmann_json_HINT})
239 if (nlohmann_json_FOUND)
240 set(SIMGRID_HAVE_JSON 1)
241 if (NOT NLOHMANN_JSON_INCLUDE_DIR)
242 get_target_property(NLOHMANN_JSON_INCLUDE_DIR nlohmann_json::nlohmann_json INTERFACE_INCLUDE_DIRECTORIES)
243 list(REMOVE_DUPLICATES NLOHMANN_JSON_INCLUDE_DIR)
245 include_directories(${NLOHMANN_JSON_INCLUDE_DIR})
247 message(STATUS "Found nlohmann_json: ${NLOHMANN_JSON_INCLUDE_DIR}")
254 message(FATAL_ERROR "Cannot find PAPI. Please install it (apt-get install papi-tools libpapi-dev) or disable PAPI bindings.")
258 # But we do need the core of Boost
259 # cmake before 3.13.1 does not know about stacktrace components. Fix it.
260 # Usable components: https://www.boost.org/doc/libs/1_65_1/doc/html/stacktrace/configuration_and_build.html
261 set(_Boost_STACKTRACE_HEADERS "boost/stacktrace.hpp")
262 set(_Boost_STACKTRACE_BACKTRACE_HEADERS "boost/stacktrace.hpp")
263 set(_Boost_STACKTRACE_ADDR2LINE_HEADERS "boost/stacktrace.hpp")
265 if(minimal-bindings) # When we want a minimal python library, don't even search for boost optional components
266 message(STATUS "Don't even look for boost optional components, as we build minimal binding libraries.")
267 find_package(Boost 1.48)
269 find_package(Boost 1.59 OPTIONAL_COMPONENTS context stacktrace_backtrace stacktrace_addr2line)
272 include_directories(${Boost_INCLUDE_DIRS})
273 message(STATUS "Mandatory components found. SimGrid is compilable.")
274 if (NOT minimal-bindings)
275 message(STATUS "Looking for optional Boost components:")
276 set(Boost_FOUND 1) # These components are optionals
277 CHECK_INCLUDE_FILE("backtrace.h" HAVE_BACKTRACE_H) # check that backtrace is actually possible
278 if (Boost_STACKTRACE_BACKTRACE_FOUND AND HAVE_BACKTRACE_H)
279 message (STATUS " stacktrace: found the fast 'backtrace' implementation. Activating human-readable stack traces.")
280 set(HAVE_BOOST_STACKTRACE_BACKTRACE 1)
282 set(HAVE_BOOST_STACKTRACE_BACKTRACE 0)
283 if (Boost_STACKTRACE_ADDR2LINE_FOUND)
284 message (STATUS " stacktrace: found the slow 'addr2line' implementation. Activating human-readable stack traces.")
285 set(HAVE_BOOST_STACKTRACE_ADDR2LINE 1)
287 message (STATUS " stacktrace: MISSING. Install libboost-stacktrace-dev to display the stacktraces.")
288 set(HAVE_BOOST_STACKTRACE_ADDR2LINE 0)
292 if(Boost_CONTEXT_FOUND)
293 message (STATUS " context: found. Activating Boost contexts.")
294 set(HAVE_BOOST_CONTEXTS 1)
296 message (STATUS " context: MISSING. Install libboost-context-dev for this optional feature.")
297 set(HAVE_BOOST_CONTEXTS 0)
302 message(FATAL_ERROR "Boost libraries not found. Try to install them with 'sudo fink install boost1.53.nopython' (check the exact name with 'fink list boost') or 'sudo brew install boost'")
304 find_package(Boost 1.48) #try without optional libraries
306 message(FATAL_ERROR "Boost libraries not found. Install libboost-dev (>= 1.48.0).")
308 include_directories(${Boost_INCLUDE_DIRS})
309 message(STATUS "Mandatory components found. SimGrid is compilable.")
314 # Checks for header libraries functions.
315 CHECK_LIBRARY_EXISTS(rt clock_gettime "" HAVE_POSIX_GETTIME)
316 CHECK_LIBRARY_EXISTS(pthread pthread_setaffinity_np "" HAVE_PTHREAD_SETAFFINITY)
317 CHECK_INCLUDE_FILE("pthread_np.h" HAVE_PTHREAD_NP_H) # for pthread_setaffinity_np() on FreeBSD
319 if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
320 set(CMAKE_REQUIRED_DEFINITIONS "-D_XOPEN_SOURCE=700 -D_DARWIN_C_SOURCE")
322 set(CMAKE_REQUIRED_DEFINITIONS "-D_GNU_SOURCE")
325 CHECK_INCLUDE_FILE("valgrind/valgrind.h" HAVE_VALGRIND_H)
326 CHECK_INCLUDE_FILE("unistd.h" HAVE_UNISTD_H)
327 CHECK_INCLUDE_FILE("linux/futex.h" HAVE_FUTEX_H)
329 CHECK_FUNCTION_EXISTS(dlfunc HAVE_DLFUNC)
330 CHECK_FUNCTION_EXISTS(gettimeofday HAVE_GETTIMEOFDAY)
331 CHECK_FUNCTION_EXISTS(nanosleep HAVE_NANOSLEEP)
332 CHECK_FUNCTION_EXISTS(sysconf HAVE_SYSCONF)
334 message(FATAL_ERROR "Cannot build without sysconf.")
336 CHECK_FUNCTION_EXISTS(process_vm_readv HAVE_PROCESS_VM_READV)
337 CHECK_FUNCTION_EXISTS(mmap HAVE_MMAP)
338 CHECK_FUNCTION_EXISTS(mremap HAVE_MREMAP)
340 CHECK_SYMBOL_EXISTS(vasprintf stdio.h HAVE_VASPRINTF)
342 CHECK_INCLUDE_FILE("sys/sendfile.h" HAVE_SENDFILE_H)
343 CHECK_FUNCTION_EXISTS(sendfile HAVE_SENDFILE)
344 if(HAVE_SENDFILE_H AND HAVE_SENDFILE)
345 set(SG_HAVE_SENDFILE 1)
347 set(SG_HAVE_SENDFILE 0)
350 if(enable_model-checking AND NOT "${CMAKE_SYSTEM}" MATCHES "Linux|FreeBSD")
351 message(FATAL_ERROR "Support for model-checking has not been enabled on ${CMAKE_SYSTEM}. Please use a Linux docker to use the model checker.")
354 if(enable_model-checking AND minimal-bindings)
355 message(FATAL_ERROR "Compile-time option 'minimal-bindings' cannot be enabled with 'model-checking'")
362 if(enable_model-checking)
363 message(STATUS "Warning: support for model-checking has been disabled because you are missing either mmap or __thread.")
365 SET(enable_model-checking 0)
368 if(enable_mallocators)
369 SET(SIMGRID_HAVE_MALLOCATOR 1)
371 SET(SIMGRID_HAVE_MALLOCATOR 0)
374 find_package(Libevent REQUIRED)
375 include_directories(${LIBEVENT_INCLUDE_DIR})
376 set(SIMGRID_DEP "${SIMGRID_DEP} ${LIBEVENT_LIBRARIES}")
378 if(enable_model-checking)
379 include(FindLibunwind)
381 SET(SIMGRID_DEP "${SIMGRID_DEP} ${LIBUNWIND_LIBRARIES}")
383 message(FATAL_ERROR "Please install libunwind-dev libdw-dev libelf-dev if you want to compile the SimGrid model checker.")
385 find_package(Libdw REQUIRED)
386 find_package(Libelf REQUIRED)
387 include_directories(${LIBDW_INCLUDE_DIR} ${LIBELF_INCLUDE_DIR})
388 set(SIMGRID_DEP "${SIMGRID_DEP} ${LIBELF_LIBRARIES} ${LIBDW_LIBRARIES}")
389 set(SIMGRID_HAVE_STATEFUL_MC 1)
390 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -gdwarf-4")
391 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -gdwarf-4")
393 SET(SIMGRID_HAVE_STATEFUL_MC 0)
396 mark_as_advanced(PATH_LIBDW_H)
397 mark_as_advanced(PATH_LIBDW_LIB)
399 if (enable_model-checking AND enable_ns3)
400 message(WARNING "Activating both model-checking and ns-3 bindings is considered experimental.")
405 SET(HAVE_PRIVATIZATION 1)
410 #--------------------------------------------------------------------------------------------------
411 ### Check what context backends are available
413 set(HAVE_UCONTEXT_CONTEXTS 0)
414 CHECK_INCLUDE_FILE("ucontext.h" HAVE_UCONTEXT_H)
415 if(NOT HAVE_UCONTEXT_H)
416 message(STATUS "No ucontext factory: <ucontext.h> not found.")
418 message(STATUS "No ucontext factory: Apple don't want us to use them.")
419 set(HAVE_UCONTEXT_H 0)
421 try_compile(compile_makecontext ${CMAKE_BINARY_DIR} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_makecontext.c
422 OUTPUT_VARIABLE compile_makecontext_output)
424 #If can have both context
425 if(NOT compile_makecontext)
426 message(STATUS "Error: <ucontext.h> exists, but makecontext is not compilable. Compilation output:\n ${compile_makecontext_output}")
427 message(STATUS "No ucontext factory: makecontext() is not compilable.")
429 message(STATUS "Support for ucontext factory ok.")
430 set(HAVE_UCONTEXT_CONTEXTS 1)
432 # Stack setup (size and address)
433 try_run(RUN_makecontext_VAR COMPILE_makecontext_VAR
434 ${CMAKE_BINARY_DIR} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_stacksetup.c
435 RUN_OUTPUT_VARIABLE stack_setup)
437 LIST(LENGTH stack_setup stack_setup_len)
438 if("${stack_setup_len}" STREQUAL "2")
439 LIST(GET stack_setup 0 makecontext_addr)
440 LIST(GET stack_setup 1 makecontext_size)
441 set(sg_makecontext_stack_addr "#define sg_makecontext_stack_addr(skaddr) (${makecontext_addr})")
442 set(sg_makecontext_stack_size "#define sg_makecontext_stack_size(sksize) (${makecontext_size})")
444 message(FATAL_ERROR "Could not figure out the stack setup. Compil: ${RUN_makecontext_VAR}. Exec: ${COMPILE_makecontext_VAR}. Output: ${stack_setup}")
449 # Stack growth direction (upward or downward). Used for the following contexts: SysV, raw, Boost
450 try_run(RUN_stackgrowth_VAR COMPILE_stackgrowth_VAR
452 ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_stackgrowth.c
453 RUN_OUTPUT_VARIABLE stack
454 COPY_FILE test_stackgrowth)
456 if("${stack}" STREQUAL "down")
457 set(PTH_STACKGROWTH "-1")
458 elseif("${stack}" STREQUAL "up")
459 set(PTH_STACKGROWTH "1")
461 if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64")
462 set(PTH_STACKGROWTH "-1")
463 elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "i686")
464 set(PTH_STACKGROWTH "-1")
466 message(FATAL_ERROR "Could not figure out the stack direction. Test prog returned: ${stack}; CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}.")
469 # If the test ran well, remove the test binary
470 file(REMOVE test_stackgrowth)
471 #--------------------------------------------------------------------------------------------------
476 if(EXISTS ${CMAKE_HOME_DIRECTORY}/.git/)
477 execute_process(COMMAND git rev-parse --verify --short HEAD
478 WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}
479 OUTPUT_VARIABLE GIT_VERSION
480 OUTPUT_STRIP_TRAILING_WHITESPACE)
481 # Check for uncommitted changes
482 execute_process(COMMAND git diff --name-only HEAD
483 WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}
484 OUTPUT_VARIABLE files_changed)
486 set(GIT_VERSION "${GIT_VERSION}-dirty")
488 elseif(EXISTS ${CMAKE_HOME_DIRECTORY}/.gitversion)
489 FILE(STRINGS ${CMAKE_HOME_DIRECTORY}/.gitversion GIT_VERSION)
491 set(GIT_VERSION "none, release version")
493 message(STATUS "Git version: ${GIT_VERSION}")
495 ### Define source packages for Libs
496 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/DefinePackages.cmake)
498 ### Setup gcc & clang flags (include after DefinePackage.cmake, and before generating header files)
500 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Flags.cmake)
503 ### Generate the required headers and scripts
504 #############################################
506 # Avoid triggering a (full) rebuild by touching the files if they did not really change
507 configure_file("${CMAKE_HOME_DIRECTORY}/src/internal_config.h.in" "${CMAKE_BINARY_DIR}/src/internal_config.h.generated" @ONLY IMMEDIATE)
508 configure_file("${CMAKE_HOME_DIRECTORY}/include/simgrid/version.h.in" "${CMAKE_BINARY_DIR}/include/simgrid/version.h.generated" @ONLY IMMEDIATE)
509 configure_file("${CMAKE_HOME_DIRECTORY}/include/simgrid/config.h.in" "${CMAKE_BINARY_DIR}/include/simgrid/config.h.generated" @ONLY IMMEDIATE)
510 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/src/internal_config.h.generated ${CMAKE_BINARY_DIR}/src/internal_config.h)
511 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/include/simgrid/version.h.generated ${CMAKE_BINARY_DIR}/include/simgrid/version.h)
512 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/include/simgrid/config.h.generated ${CMAKE_BINARY_DIR}/include/simgrid/config.h)
513 file(REMOVE ${CMAKE_BINARY_DIR}/src/internal_config.h.generated)
514 file(REMOVE ${CMAKE_BINARY_DIR}/include/simgrid/config.h.generated)
515 file(REMOVE ${CMAKE_BINARY_DIR}/include/simgrid/version.h.generated)
517 # We need two versions of the SMPI scripts because they contain the path to the library
518 # so, it depends of whether SimGrid is installed, or run from the sources (during the build)
520 file(READ ${CMAKE_HOME_DIRECTORY}/src/smpi/smpitools.sh SMPITOOLS_SH) # Definitions shared amongst all SMPI scripts, inlined in each of them
522 ### SMPI script used when simgrid is installed
523 set(exec_prefix ${CMAKE_INSTALL_PREFIX})
524 set(includedir "${CMAKE_INSTALL_FULL_INCLUDEDIR}")
525 set(libdir "${CMAKE_INSTALL_FULL_LIBDIR}")
526 set(includeflag "\"-I${includedir}\" \"-I${includedir}/smpi\"")
527 set(CMAKE_SMPI_COMMAND "export LD_LIBRARY_PATH=\"${libdir}")
529 set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}:${NS3_LIBRARY_PATH}")
531 set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}\${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}\"")
532 set(SMPIMAIN ${libdir}/simgrid/smpimain)
533 set(SMPIREPLAYMAIN ${libdir}/simgrid/smpireplaymain)
535 configure_file(${CMAKE_HOME_DIRECTORY}/include/smpi/mpif.h.in ${CMAKE_BINARY_DIR}/include/smpi/mpif.h @ONLY)
536 #configure mpif.f90 to build mpi.mod
538 set(MODULE_MPIF_IN "module mpi")
539 set(MODULE_MPIF_OUT "end module mpi")
540 configure_file(${CMAKE_HOME_DIRECTORY}/include/smpi/mpif.h.in ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90.generated @ONLY)
541 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90.generated ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90)
542 file(REMOVE ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90.generated)
543 set(CMAKE_Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/include/smpi)
544 add_library(mpi SHARED ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90)
547 foreach(script cc cxx ff f90 run)
548 configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpi${script}.in ${CMAKE_BINARY_DIR}/bin/smpi${script} @ONLY)
551 ### SMPI scripts used when compiling simgrid
552 set(exec_prefix "${CMAKE_BINARY_DIR}/smpi_script/")
553 set(includedir "${CMAKE_HOME_DIRECTORY}/include")
554 set(libdir "${CMAKE_BINARY_DIR}/lib")
555 set(includeflag "\"-I${includedir}\" \"-I${includedir}/smpi\"")
556 set(includeflag "${includeflag} \"-I${CMAKE_BINARY_DIR}/include\" \"-I${CMAKE_BINARY_DIR}/include/smpi\"")
557 set(CMAKE_SMPI_COMMAND "export LD_LIBRARY_PATH=\"${libdir}")
559 set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}:${NS3_LIBRARY_PATH}")
561 set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}\${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}\"")
562 set(SMPIMAIN ${libdir}/simgrid/smpimain)
563 set(SMPIREPLAYMAIN ${libdir}/simgrid/smpireplaymain)
565 foreach(script cc cxx ff f90 run)
566 configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpi${script}.in ${CMAKE_BINARY_DIR}/smpi_script/bin/smpi${script} @ONLY)
569 foreach(script cc cxx ff f90 run)
570 execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpi${script})
571 execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/smpi_script/bin/smpi${script})
574 set(generated_headers_to_install
575 ${CMAKE_CURRENT_BINARY_DIR}/include/smpi/mpif.h
576 ${CMAKE_CURRENT_BINARY_DIR}/include/simgrid/config.h
577 ${CMAKE_CURRENT_BINARY_DIR}/include/simgrid/version.h
580 set(generated_headers ${CMAKE_CURRENT_BINARY_DIR}/src/internal_config.h )
582 set(generated_files_to_clean
584 ${generated_headers_to_install}
585 ${CMAKE_BINARY_DIR}/bin/smpicc
586 ${CMAKE_BINARY_DIR}/bin/smpicxx
587 ${CMAKE_BINARY_DIR}/bin/smpiff
588 ${CMAKE_BINARY_DIR}/bin/smpif90
589 ${CMAKE_BINARY_DIR}/bin/smpirun
590 ${CMAKE_BINARY_DIR}/bin/simgrid_update_xml
591 ${CMAKE_BINARY_DIR}/examples/smpi/tracing/smpi_traced.trace
594 if(NOT "${CMAKE_BINARY_DIR}" STREQUAL "${CMAKE_HOME_DIRECTORY}")
595 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions0.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions0.txt COPYONLY)
596 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions1.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions1.txt COPYONLY)
597 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_allreduce.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allreduce.txt COPYONLY)
598 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_barrier.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_barrier.txt COPYONLY)
599 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_bcast.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_bcast.txt COPYONLY)
600 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_with_isend.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_with_isend.txt COPYONLY)
601 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_alltoall.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoall.txt COPYONLY)
602 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_alltoallv.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoallv.txt COPYONLY)
603 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_waitall.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_waitall.txt COPYONLY)
604 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_reducescatter.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_reducescatter.txt COPYONLY)
605 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_gather.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_gather.txt COPYONLY)
606 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_allgatherv.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allgatherv.txt COPYONLY)
607 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile COPYONLY)
608 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_cluster ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_cluster COPYONLY)
609 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_griffon ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_griffon COPYONLY)
610 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_coll ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_coll COPYONLY)
611 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_io ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_io COPYONLY)
612 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_empty ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_empty COPYONLY)
614 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/description_file ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/description_file COPYONLY)
615 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/README ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/README COPYONLY)
616 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/smpi_replay.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/smpi_replay.txt COPYONLY)
617 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)
618 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)
619 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)
620 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)
621 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)
622 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)
623 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)
624 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)
625 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)
626 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)
627 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)
628 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)
629 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)
630 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)
631 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)
632 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)
633 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)
634 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)
635 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)
636 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)
637 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)
638 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)
639 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)
640 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)
641 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)
642 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)
643 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)
644 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)
645 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)
646 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)
647 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)
648 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)
650 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)
651 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)
652 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)
653 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)
654 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)
655 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)
656 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)
657 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)
658 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)
659 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)
660 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)
661 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)
662 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)
663 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)
664 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)
666 set(generated_files_to_clean
667 ${generated_files_to_clean}
668 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions0.txt
669 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions1.txt
670 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allreduce.txt
671 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_barrier.txt
672 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_bcast.txt
673 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_with_isend.txt
674 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoall.txt
675 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoallv.txt
676 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_waitall.txt
677 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_gather.txt
678 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allgatherv.txt
679 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_reducescatter.txt
680 ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile
681 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/description_file
682 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/README
683 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/smpi_replay.txt
684 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace0.txt
685 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace1.txt
686 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace2.txt
687 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace3.txt
688 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace4.txt
689 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace5.txt
690 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace6.txt
691 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace7.txt
692 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace8.txt
693 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace9.txt
694 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace10.txt
695 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace11.txt
696 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace12.txt
697 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace13.txt
698 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace14.txt
699 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace15.txt
700 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace16.txt
701 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace17.txt
702 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace18.txt
703 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace19.txt
704 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace20.txt
705 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace21.txt
706 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace22.txt
707 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace23.txt
708 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace24.txt
709 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace25.txt
710 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace26.txt
711 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace27.txt
712 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace28.txt
713 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace29.txt
714 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace30.txt
715 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace31.txt
716 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/compute_only.txt
717 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/compute_only/actions0.txt
718 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/compute_only/actions1.txt
719 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/empty.txt
720 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/empty/actions0.txt
721 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/empty/actions1.txt
722 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/mixed.txt
723 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/mixed/actions0.txt
724 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/mixed/actions1.txt
725 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/replay_multiple_manual.tesh
726 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute
727 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute_consecutive
728 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute_consecutive2
729 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute_simple
730 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty1
731 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2
732 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2_same_resources
733 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2_same_time
734 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2_same_time_and_resources
735 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed1
736 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2
737 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2_same_resources
738 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2_same_time
739 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2_same_time_and_resources
740 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_nojob
744 SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES
745 "${generated_files_to_clean}")
747 add_custom_target(tests COMMENT "Recompiling the tests")
748 add_custom_target(tests-mc COMMENT "Recompiling the MC tests and tools.")
749 add_dependencies(tests tests-mc)
751 ### Build some Maintainer files
752 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/MaintainerMode.cmake)
755 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/MakeLib.cmake)
757 # Python binding (with pybind11)
759 if((NOT DEFINED enable_python) OR enable_python)
760 if(EXISTS ${CMAKE_HOME_DIRECTORY}/pybind11) # Try to use a local copy of pybind11, if any
761 message(STATUS "Use the internal copy of pybind11.")
762 add_subdirectory(${CMAKE_HOME_DIRECTORY}/pybind11)
763 set(pybind11_FOUND ON)
765 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_HOME_DIRECTORY}/pybind11/tools/)
766 set(Python_ADDITIONAL_VERSIONS 3.9 3.8 3.7 3.6 3.5 3.4)
767 find_package(PythonLibsNew ${PYBIND11_PYTHON_VERSION} REQUIRED)
770 find_package(pybind11 CONFIG)
771 message(STATUS "Pybind11 version: ${pybind11_VERSION}")
772 if (pybind11_VERSION VERSION_LESS 2.4)
773 message(STATUS "SimGrid needs at least v2.4 of pybind11. Disabling the Python bindings.")
774 set(pybind11_FOUND OFF)
779 find_package(Python3 COMPONENTS Development)
780 if(NOT Python3_Development_FOUND OR NOT pybind11_FOUND)
781 message(STATUS "SimGrid Python bindings cannot be built on this system.")
782 set(default_enable_python OFF)
784 set(default_enable_python ON)
787 option(enable_python "Whether the Python bindings are activated." ${default_enable_python}) # 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)
795 if(NOT Python3_Development_FOUND)
796 message(FATAL_ERROR "Please install the development components of Python (python3-dev on Debian) to build the Python bindings (or disable that option).")
799 message(STATUS "Found pybind11.")
801 set(pybind11_options NO_EXTRAS)
803 pybind11_add_module(python-bindings src/bindings/python/simgrid_python.cpp ${pybind11_options})
804 target_compile_features(python-bindings PRIVATE cxx_std_14)
805 target_link_libraries(python-bindings PUBLIC simgrid)
806 set_target_properties(python-bindings PROPERTIES
807 LIBRARY_OUTPUT_NAME simgrid
808 CXX_VISIBILITY_PRESET "default"
809 INTERPROCEDURAL_OPTIMIZATION FALSE)
810 # LTO is disabled here from the python bindings because this makes a
811 # cmake warning about CMP0069 even when this policy is set. This
812 # problem may be in cmake, in pybind11 or even in our code, not sure.
813 # It may get eventually solved in cmake or pybind11. Or not.
814 # The sure thing is that our python bindings are in one file only,
815 # so there is no need for LTO here. Problem solved :)
817 add_dependencies(tests python-bindings)
818 set_property(TARGET python-bindings
819 APPEND PROPERTY INCLUDE_DIRECTORIES "${INTERNAL_INCLUDES}")
821 if("${SIMGRID_PYTHON_LIBDIR}" STREQUAL "") # value not manually set
822 if("${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr")
823 set(SIMGRID_PYTHON_LIBDIR ${Python3_SITEARCH})
824 else("${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr")
825 string(REGEX REPLACE "^/usr/" "${CMAKE_INSTALL_PREFIX}/" SIMGRID_PYTHON_LIBDIR ${Python3_SITEARCH})
826 endif("${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr")
828 install(TARGETS python-bindings
829 LIBRARY DESTINATION "${SIMGRID_PYTHON_LIBDIR}")
831 message(FATAL_ERROR "Please install pybind11-dev to build the Python bindings (or disable that option).")
834 mark_as_advanced(PYBIND11_PYTHON_VERSION)
835 mark_as_advanced(pybind11_DIR)
838 if(enable_memcheck_xml)
839 set(enable_memcheck true)
844 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Tests.cmake)
845 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/CTestConfig.cmake)
847 ### Define subdirectories
848 foreach(cmakefile ${CMAKEFILES_TXT})
849 string(REPLACE "/CMakeLists.txt" "" repository ${cmakefile})
850 add_subdirectory("${CMAKE_HOME_DIRECTORY}/${repository}")
853 ### Setup the distrib
854 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Distrib.cmake)
856 ### Build the docs if asked to
857 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Documentation.cmake)
859 ### Print the result of configuration
861 message("##########################################")
862 message("#### Content of src/internal_config.h ####")
863 message("##########################################")
864 file(STRINGS ${CMAKE_CURRENT_BINARY_DIR}/src/internal_config.h config_output)
865 LIST(REMOVE_AT config_output 0 1 2 3 4 5 6 7 8 9 10) # Pass the file header
866 foreach(line ${config_output})
869 message("##########################################")
870 message("#### Content of simgrid/config.h ####")
871 message("##########################################")
872 file(STRINGS ${CMAKE_CURRENT_BINARY_DIR}/include/simgrid/config.h config_output)
873 LIST(REMOVE_AT config_output 0 1 2 3 4 5 6 7 8 9 -1) # Pass the file header
874 foreach(line ${config_output})
877 message("##########################################")
878 message("#### End of configuration headers ####")
879 message("##########################################")
881 message("\nConfiguration of package `simgrid':")
882 message(" Home directory ..............: ${CMAKE_HOME_DIRECTORY}")
883 message(" Build Name ..................: ${BUILDNAME}")
884 message(" Cmake Generator .............: ${CMAKE_GENERATOR}")
885 message(" Site ........................: ${SITE}")
886 message(" Install prefix ..............: ${CMAKE_INSTALL_PREFIX}")
887 message(" Release .....................: simgrid-${release_version}")
889 message(" Compiler: C .................: ${CMAKE_C_COMPILER} (id: ${CMAKE_C_COMPILER_ID})")
890 message(" version .............: ${CMAKE_C_COMPILER_VERSION}")
891 message(" is gnu ..............: ${CMAKE_COMPILER_IS_GNUCC}")
892 message(" Compiler: C++ ...............: ${CMAKE_CXX_COMPILER} (id: ${CMAKE_CXX_COMPILER_ID})")
893 message(" version .............: ${CMAKE_CXX_COMPILER_VERSION}")
894 if(CMAKE_Fortran_COMPILER)
895 message(" Compiler: Fortran ...........: ${SMPI_Fortran_COMPILER} (id: ${CMAKE_Fortran_COMPILER_ID})")
896 message(" version .............: ${CMAKE_Fortran_COMPILER_VERSION}")
898 message(" Linker: .....................: ${CMAKE_LINKER}")
899 message(" version .............: ${LINKER_VERSION}")
900 message(" Make program: ...............: ${CMAKE_MAKE_PROGRAM}")
902 message(" CFlags ......................: ${CMAKE_C_FLAGS}")
903 message(" CXXFlags ....................: ${CMAKE_CXX_FLAGS}")
904 message(" LDFlags .....................: ${CMAKE_C_LINK_FLAGS}")
905 message(" with LTO ....................: ${enable_lto}")
908 if (SIMGRID_HAVE_NS3)
909 message(" Compile ns-3 ................: ON (path: ${NS3_PATH})")
911 message(" Compile ns-3 ................: OFF (hint: ${NS3_HINT})")
915 message(" Compile Python bindings .....: ${enable_python}")
916 message(" module ....................: ${PYTHON_MODULE_PREFIX}simgrid${PYTHON_MODULE_EXTENSION}")
917 message(" install path ..............: ${SIMGRID_PYTHON_LIBDIR} (force another value with -DSIMGRID_PYTHON_LIBDIR)")
919 message(" Compile Python bindings .....: OFF (disabled, or pybind11 not found)")
921 if(SIMGRID_HAVE_EIGEN3)
922 message(" Eigen3 library ..............: ${EIGEN3_VERSION_STRING} in ${EIGEN3_INCLUDE_DIR}")
924 message(" Eigen3 library ..............: not found (EIGEN3_HINT='${EIGEN3_HINT}')")
926 if(SIMGRID_HAVE_JSON)
927 message(" JSON library ................: ${nlohmann_json_VERSION} in ${NLOHMANN_JSON_INCLUDE_DIR}")
929 message(" JSON library ................: not found (nlohmann_json_HINT='${nlohmann_json_HINT}')")
931 message(" Compile Smpi ................: ${HAVE_SMPI}")
932 message(" Smpi fortran ..............: ${SMPI_FORTRAN}")
933 message(" MPICH3 testsuite ..........: ${enable_smpi_MPICH3_testsuite}")
934 message(" MBI testsuite .............: ${enable_smpi_MBI_testsuite}")
935 message(" Privatization .............: ${HAVE_PRIVATIZATION}")
936 message(" PAPI support ..............: ${HAVE_PAPI}")
937 message(" Compile Boost.Context support: ${HAVE_BOOST_CONTEXTS}")
939 message(" Maintainer mode .............: ${enable_maintainer_mode}")
940 message(" Documentation ...............: ${enable_documentation}")
941 message(" Stateful model checking .....: ${SIMGRID_HAVE_STATEFUL_MC}")
942 message(" Graphviz mode ...............: ${HAVE_GRAPHVIZ}")
943 message(" Mallocators .................: ${enable_mallocators}")
945 message(" Simgrid dependencies ........: ${SIMGRID_DEP}")
948 execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_BINARY_DIR}/Testing/Notes/)
949 file(WRITE ${PROJECT_BINARY_DIR}/Testing/Notes/Build "GIT version : ${GIT_VERSION}\n")
950 file(APPEND ${PROJECT_BINARY_DIR}/Testing/Notes/Build "Release : simgrid-${release_version}\n")