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.11.2
238 HINTS ${nlohmann_json_HINT})
239 if (nlohmann_json_FOUND)
240 set(SIMGRID_HAVE_JSON 1)
241 message(STATUS "Found nlohmann_json: ${NLOHMANN_JSON_INCLUDE_DIR}")
242 include_directories(${NLOHMANN_JSON_INCLUDE_DIR})
249 message(FATAL_ERROR "Cannot find PAPI. Please install it (apt-get install papi-tools libpapi-dev) or disable PAPI bindings.")
253 # But we do need the core of Boost
254 # cmake before 3.13.1 does not know about stacktrace components. Fix it.
255 # Usable components: https://www.boost.org/doc/libs/1_65_1/doc/html/stacktrace/configuration_and_build.html
256 set(_Boost_STACKTRACE_HEADERS "boost/stacktrace.hpp")
257 set(_Boost_STACKTRACE_BACKTRACE_HEADERS "boost/stacktrace.hpp")
258 set(_Boost_STACKTRACE_ADDR2LINE_HEADERS "boost/stacktrace.hpp")
260 if(minimal-bindings) # When we want a minimal python library, don't even search for boost optional components
261 message(STATUS "Don't even look for boost optional components, as we build minimal binding libraries.")
262 find_package(Boost 1.48)
264 find_package(Boost 1.59 OPTIONAL_COMPONENTS context stacktrace_backtrace stacktrace_addr2line)
267 include_directories(${Boost_INCLUDE_DIRS})
268 message(STATUS "Mandatory components found. SimGrid is compilable.")
269 if (NOT minimal-bindings)
270 message(STATUS "Looking for optional Boost components:")
271 set(Boost_FOUND 1) # These components are optionals
272 CHECK_INCLUDE_FILE("backtrace.h" HAVE_BACKTRACE_H) # check that backtrace is actually possible
273 if (Boost_STACKTRACE_BACKTRACE_FOUND AND HAVE_BACKTRACE_H)
274 message (STATUS " stacktrace: found the fast 'backtrace' implementation. Activating human-readable stack traces.")
275 set(HAVE_BOOST_STACKTRACE_BACKTRACE 1)
277 set(HAVE_BOOST_STACKTRACE_BACKTRACE 0)
278 if (Boost_STACKTRACE_ADDR2LINE_FOUND)
279 message (STATUS " stacktrace: found the slow 'addr2line' implementation. Activating human-readable stack traces.")
280 set(HAVE_BOOST_STACKTRACE_ADDR2LINE 1)
282 message (STATUS " stacktrace: MISSING. Install libboost-stacktrace-dev to display the stacktraces.")
283 set(HAVE_BOOST_STACKTRACE_ADDR2LINE 0)
287 if(Boost_CONTEXT_FOUND)
288 message (STATUS " context: found. Activating Boost contexts.")
289 set(HAVE_BOOST_CONTEXTS 1)
291 message (STATUS " context: MISSING. Install libboost-context-dev for this optional feature.")
292 set(HAVE_BOOST_CONTEXTS 0)
297 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'")
299 find_package(Boost 1.48) #try without optional libraries
301 message(FATAL_ERROR "Boost libraries not found. Install libboost-dev (>= 1.48.0).")
303 include_directories(${Boost_INCLUDE_DIRS})
304 message(STATUS "Mandatory components found. SimGrid is compilable.")
309 # Checks for header libraries functions.
310 CHECK_LIBRARY_EXISTS(rt clock_gettime "" HAVE_POSIX_GETTIME)
311 CHECK_LIBRARY_EXISTS(pthread pthread_setaffinity_np "" HAVE_PTHREAD_SETAFFINITY)
312 CHECK_INCLUDE_FILE("pthread_np.h" HAVE_PTHREAD_NP_H) # for pthread_setaffinity_np() on FreeBSD
314 if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
315 set(CMAKE_REQUIRED_DEFINITIONS "-D_XOPEN_SOURCE=700 -D_DARWIN_C_SOURCE")
317 set(CMAKE_REQUIRED_DEFINITIONS "-D_GNU_SOURCE")
320 CHECK_INCLUDE_FILE("valgrind/valgrind.h" HAVE_VALGRIND_H)
321 CHECK_INCLUDE_FILE("unistd.h" HAVE_UNISTD_H)
322 CHECK_INCLUDE_FILE("linux/futex.h" HAVE_FUTEX_H)
324 CHECK_FUNCTION_EXISTS(dlfunc HAVE_DLFUNC)
325 CHECK_FUNCTION_EXISTS(gettimeofday HAVE_GETTIMEOFDAY)
326 CHECK_FUNCTION_EXISTS(nanosleep HAVE_NANOSLEEP)
327 CHECK_FUNCTION_EXISTS(sysconf HAVE_SYSCONF)
329 message(FATAL_ERROR "Cannot build without sysconf.")
331 CHECK_FUNCTION_EXISTS(process_vm_readv HAVE_PROCESS_VM_READV)
332 CHECK_FUNCTION_EXISTS(mmap HAVE_MMAP)
333 CHECK_FUNCTION_EXISTS(mremap HAVE_MREMAP)
335 CHECK_SYMBOL_EXISTS(vasprintf stdio.h HAVE_VASPRINTF)
337 CHECK_INCLUDE_FILE("sys/sendfile.h" HAVE_SENDFILE_H)
338 CHECK_FUNCTION_EXISTS(sendfile HAVE_SENDFILE)
339 if(HAVE_SENDFILE_H AND HAVE_SENDFILE)
340 set(SG_HAVE_SENDFILE 1)
342 set(SG_HAVE_SENDFILE 0)
345 if(enable_model-checking AND NOT "${CMAKE_SYSTEM}" MATCHES "Linux|FreeBSD")
346 message(FATAL_ERROR "Support for model-checking has not been enabled on ${CMAKE_SYSTEM}. Please use a Linux docker to use the model checker.")
349 if(enable_model-checking AND minimal-bindings)
350 message(FATAL_ERROR "Compile-time option 'minimal-bindings' cannot be enabled with 'model-checking'")
357 if(enable_model-checking)
358 message(STATUS "Warning: support for model-checking has been disabled because you are missing either mmap or __thread.")
360 SET(enable_model-checking 0)
363 if(enable_mallocators)
364 SET(SIMGRID_HAVE_MALLOCATOR 1)
366 SET(SIMGRID_HAVE_MALLOCATOR 0)
369 if(enable_model-checking)
370 include(FindLibunwind)
372 SET(SIMGRID_DEP "${SIMGRID_DEP} ${LIBUNWIND_LIBRARIES}")
374 message(FATAL_ERROR "Please install libunwind-dev libdw-dev libelf-dev libevent-dev if you want to compile the SimGrid model checker.")
376 find_package(Libdw REQUIRED)
377 find_package(Libelf REQUIRED)
378 find_package(Libevent REQUIRED)
379 include_directories(${LIBDW_INCLUDE_DIR} ${LIBELF_INCLUDE_DIR} ${LIBEVENT_INCLUDE_DIR})
380 set(SIMGRID_DEP "${SIMGRID_DEP} ${LIBEVENT_LIBRARIES} ${LIBELF_LIBRARIES} ${LIBDW_LIBRARIES}")
381 set(SIMGRID_HAVE_MC 1)
382 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -gdwarf-4")
383 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -gdwarf-4")
385 SET(SIMGRID_HAVE_MC 0)
388 mark_as_advanced(PATH_LIBDW_H)
389 mark_as_advanced(PATH_LIBDW_LIB)
391 if (enable_model-checking AND enable_ns3)
392 message(WARNING "Activating both model-checking and ns-3 bindings is considered experimental.")
397 SET(HAVE_PRIVATIZATION 1)
402 #--------------------------------------------------------------------------------------------------
403 ### Check what context backends are available
405 set(HAVE_UCONTEXT_CONTEXTS 0)
406 CHECK_INCLUDE_FILE("ucontext.h" HAVE_UCONTEXT_H)
407 if(NOT HAVE_UCONTEXT_H)
408 message(STATUS "No ucontext factory: <ucontext.h> not found.")
410 message(STATUS "No ucontext factory: Apple don't want us to use them.")
411 set(HAVE_UCONTEXT_H 0)
413 try_compile(compile_makecontext ${CMAKE_BINARY_DIR} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_makecontext.c
414 OUTPUT_VARIABLE compile_makecontext_output)
416 #If can have both context
417 if(NOT compile_makecontext)
418 message(STATUS "Error: <ucontext.h> exists, but makecontext is not compilable. Compilation output:\n ${compile_makecontext_output}")
419 message(STATUS "No ucontext factory: makecontext() is not compilable.")
421 message(STATUS "Support for ucontext factory ok.")
422 set(HAVE_UCONTEXT_CONTEXTS 1)
424 # Stack setup (size and address)
425 try_run(RUN_makecontext_VAR COMPILE_makecontext_VAR
426 ${CMAKE_BINARY_DIR} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_stacksetup.c
427 RUN_OUTPUT_VARIABLE stack_setup)
429 LIST(LENGTH stack_setup stack_setup_len)
430 if("${stack_setup_len}" STREQUAL "2")
431 LIST(GET stack_setup 0 makecontext_addr)
432 LIST(GET stack_setup 1 makecontext_size)
433 set(sg_makecontext_stack_addr "#define sg_makecontext_stack_addr(skaddr) (${makecontext_addr})")
434 set(sg_makecontext_stack_size "#define sg_makecontext_stack_size(sksize) (${makecontext_size})")
436 message(FATAL_ERROR "Could not figure out the stack setup. Compil: ${RUN_makecontext_VAR}. Exec: ${COMPILE_makecontext_VAR}. Output: ${stack_setup}")
441 # Stack growth direction (upward or downward). Used for the following contexts: SysV, raw, Boost
442 try_run(RUN_stackgrowth_VAR COMPILE_stackgrowth_VAR
444 ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_stackgrowth.c
445 RUN_OUTPUT_VARIABLE stack
446 COPY_FILE test_stackgrowth)
448 if("${stack}" STREQUAL "down")
449 set(PTH_STACKGROWTH "-1")
450 elseif("${stack}" STREQUAL "up")
451 set(PTH_STACKGROWTH "1")
453 if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64")
454 set(PTH_STACKGROWTH "-1")
455 elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "i686")
456 set(PTH_STACKGROWTH "-1")
458 message(FATAL_ERROR "Could not figure out the stack direction. Test prog returned: ${stack}; CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}.")
461 # If the test ran well, remove the test binary
462 file(REMOVE test_stackgrowth)
463 #--------------------------------------------------------------------------------------------------
468 if(EXISTS ${CMAKE_HOME_DIRECTORY}/.git/)
469 execute_process(COMMAND git rev-parse --verify --short HEAD
470 WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}
471 OUTPUT_VARIABLE GIT_VERSION
472 OUTPUT_STRIP_TRAILING_WHITESPACE)
473 # Check for uncommitted changes
474 execute_process(COMMAND git diff --name-only HEAD
475 WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}
476 OUTPUT_VARIABLE files_changed)
478 set(GIT_VERSION "${GIT_VERSION}-dirty")
480 elseif(EXISTS ${CMAKE_HOME_DIRECTORY}/.gitversion)
481 FILE(STRINGS ${CMAKE_HOME_DIRECTORY}/.gitversion GIT_VERSION)
483 set(GIT_VERSION "none, release version")
485 message(STATUS "Git version: ${GIT_VERSION}")
487 ### Define source packages for Libs
488 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/DefinePackages.cmake)
490 ### Setup gcc & clang flags (include after DefinePackage.cmake, and before generating header files)
492 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Flags.cmake)
495 ### Generate the required headers and scripts
496 #############################################
498 # Avoid triggering a (full) rebuild by touching the files if they did not really change
499 configure_file("${CMAKE_HOME_DIRECTORY}/src/internal_config.h.in" "${CMAKE_BINARY_DIR}/src/internal_config.h.generated" @ONLY IMMEDIATE)
500 configure_file("${CMAKE_HOME_DIRECTORY}/include/simgrid/version.h.in" "${CMAKE_BINARY_DIR}/include/simgrid/version.h.generated" @ONLY IMMEDIATE)
501 configure_file("${CMAKE_HOME_DIRECTORY}/include/simgrid/config.h.in" "${CMAKE_BINARY_DIR}/include/simgrid/config.h.generated" @ONLY IMMEDIATE)
502 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/src/internal_config.h.generated ${CMAKE_BINARY_DIR}/src/internal_config.h)
503 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/include/simgrid/version.h.generated ${CMAKE_BINARY_DIR}/include/simgrid/version.h)
504 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/include/simgrid/config.h.generated ${CMAKE_BINARY_DIR}/include/simgrid/config.h)
505 file(REMOVE ${CMAKE_BINARY_DIR}/src/internal_config.h.generated)
506 file(REMOVE ${CMAKE_BINARY_DIR}/include/simgrid/config.h.generated)
507 file(REMOVE ${CMAKE_BINARY_DIR}/include/simgrid/version.h.generated)
509 # We need two versions of the SMPI scripts because they contain the path to the library
510 # so, it depends of whether SimGrid is installed, or run from the sources (during the build)
512 file(READ ${CMAKE_HOME_DIRECTORY}/src/smpi/smpitools.sh SMPITOOLS_SH) # Definitions shared amongst all SMPI scripts, inlined in each of them
514 ### SMPI script used when simgrid is installed
515 set(exec_prefix ${CMAKE_INSTALL_PREFIX})
516 set(includedir "${CMAKE_INSTALL_FULL_INCLUDEDIR}")
517 set(libdir "${CMAKE_INSTALL_FULL_LIBDIR}")
518 set(includeflag "\"-I${includedir}\" \"-I${includedir}/smpi\"")
519 set(CMAKE_SMPI_COMMAND "export LD_LIBRARY_PATH=\"${libdir}")
521 set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}:${NS3_LIBRARY_PATH}")
523 set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}\${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}\"")
524 set(SMPIMAIN ${libdir}/simgrid/smpimain)
525 set(SMPIREPLAYMAIN ${libdir}/simgrid/smpireplaymain)
527 configure_file(${CMAKE_HOME_DIRECTORY}/include/smpi/mpif.h.in ${CMAKE_BINARY_DIR}/include/smpi/mpif.h @ONLY)
528 #configure mpif.f90 to build mpi.mod
530 set(MODULE_MPIF_IN "module mpi")
531 set(MODULE_MPIF_OUT "end module mpi")
532 configure_file(${CMAKE_HOME_DIRECTORY}/include/smpi/mpif.h.in ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90.generated @ONLY)
533 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90.generated ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90)
534 file(REMOVE ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90.generated)
535 set(CMAKE_Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/include/smpi)
536 add_library(mpi SHARED ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90)
539 foreach(script cc cxx ff f90 run)
540 configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpi${script}.in ${CMAKE_BINARY_DIR}/bin/smpi${script} @ONLY)
543 ### SMPI scripts used when compiling simgrid
544 set(exec_prefix "${CMAKE_BINARY_DIR}/smpi_script/")
545 set(includedir "${CMAKE_HOME_DIRECTORY}/include")
546 set(libdir "${CMAKE_BINARY_DIR}/lib")
547 set(includeflag "\"-I${includedir}\" \"-I${includedir}/smpi\"")
548 set(includeflag "${includeflag} \"-I${CMAKE_BINARY_DIR}/include\" \"-I${CMAKE_BINARY_DIR}/include/smpi\"")
549 set(CMAKE_SMPI_COMMAND "export LD_LIBRARY_PATH=\"${libdir}")
551 set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}:${NS3_LIBRARY_PATH}")
553 set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}\${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}\"")
554 set(SMPIMAIN ${libdir}/simgrid/smpimain)
555 set(SMPIREPLAYMAIN ${libdir}/simgrid/smpireplaymain)
557 foreach(script cc cxx ff f90 run)
558 configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpi${script}.in ${CMAKE_BINARY_DIR}/smpi_script/bin/smpi${script} @ONLY)
561 foreach(script cc cxx ff f90 run)
562 execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpi${script})
563 execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/smpi_script/bin/smpi${script})
566 set(generated_headers_to_install
567 ${CMAKE_CURRENT_BINARY_DIR}/include/smpi/mpif.h
568 ${CMAKE_CURRENT_BINARY_DIR}/include/simgrid/config.h
569 ${CMAKE_CURRENT_BINARY_DIR}/include/simgrid/version.h
572 set(generated_headers ${CMAKE_CURRENT_BINARY_DIR}/src/internal_config.h )
574 set(generated_files_to_clean
576 ${generated_headers_to_install}
577 ${CMAKE_BINARY_DIR}/bin/smpicc
578 ${CMAKE_BINARY_DIR}/bin/smpicxx
579 ${CMAKE_BINARY_DIR}/bin/smpiff
580 ${CMAKE_BINARY_DIR}/bin/smpif90
581 ${CMAKE_BINARY_DIR}/bin/smpirun
582 ${CMAKE_BINARY_DIR}/bin/simgrid_update_xml
583 ${CMAKE_BINARY_DIR}/examples/smpi/tracing/smpi_traced.trace
586 if(NOT "${CMAKE_BINARY_DIR}" STREQUAL "${CMAKE_HOME_DIRECTORY}")
587 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions0.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions0.txt COPYONLY)
588 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions1.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions1.txt COPYONLY)
589 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_allreduce.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allreduce.txt COPYONLY)
590 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_barrier.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_barrier.txt COPYONLY)
591 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_bcast.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_bcast.txt COPYONLY)
592 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_with_isend.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_with_isend.txt COPYONLY)
593 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_alltoall.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoall.txt COPYONLY)
594 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_alltoallv.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoallv.txt COPYONLY)
595 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_waitall.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_waitall.txt COPYONLY)
596 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_reducescatter.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_reducescatter.txt COPYONLY)
597 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_gather.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_gather.txt COPYONLY)
598 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_allgatherv.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allgatherv.txt COPYONLY)
599 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile COPYONLY)
600 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_cluster ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_cluster COPYONLY)
601 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_griffon ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_griffon COPYONLY)
602 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_coll ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_coll COPYONLY)
603 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_io ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_io COPYONLY)
604 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_empty ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_empty COPYONLY)
606 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/description_file ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/description_file COPYONLY)
607 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/README ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/README COPYONLY)
608 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/smpi_replay.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/smpi_replay.txt COPYONLY)
609 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)
610 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)
611 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)
612 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)
613 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)
614 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)
615 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)
616 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)
617 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)
618 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)
619 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)
620 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)
621 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)
622 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)
623 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)
624 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)
625 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)
626 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)
627 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)
628 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)
629 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)
630 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)
631 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)
632 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)
633 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)
634 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)
635 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)
636 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)
637 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)
638 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)
639 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)
640 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)
642 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)
643 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)
644 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)
645 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)
646 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)
647 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)
648 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)
649 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)
650 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)
651 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)
652 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)
653 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)
654 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)
655 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)
656 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)
658 set(generated_files_to_clean
659 ${generated_files_to_clean}
660 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions0.txt
661 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions1.txt
662 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allreduce.txt
663 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_barrier.txt
664 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_bcast.txt
665 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_with_isend.txt
666 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoall.txt
667 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoallv.txt
668 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_waitall.txt
669 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_gather.txt
670 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allgatherv.txt
671 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_reducescatter.txt
672 ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile
673 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/description_file
674 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/README
675 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/smpi_replay.txt
676 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace0.txt
677 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace1.txt
678 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace2.txt
679 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace3.txt
680 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace4.txt
681 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace5.txt
682 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace6.txt
683 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace7.txt
684 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace8.txt
685 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace9.txt
686 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace10.txt
687 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace11.txt
688 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace12.txt
689 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace13.txt
690 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace14.txt
691 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace15.txt
692 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace16.txt
693 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace17.txt
694 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace18.txt
695 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace19.txt
696 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace20.txt
697 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace21.txt
698 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace22.txt
699 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace23.txt
700 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace24.txt
701 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace25.txt
702 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace26.txt
703 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace27.txt
704 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace28.txt
705 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace29.txt
706 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace30.txt
707 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace31.txt
708 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/compute_only.txt
709 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/compute_only/actions0.txt
710 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/compute_only/actions1.txt
711 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/empty.txt
712 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/empty/actions0.txt
713 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/empty/actions1.txt
714 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/mixed.txt
715 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/mixed/actions0.txt
716 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/mixed/actions1.txt
717 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/replay_multiple_manual.tesh
718 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute
719 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute_consecutive
720 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute_consecutive2
721 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute_simple
722 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty1
723 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2
724 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2_same_resources
725 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2_same_time
726 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2_same_time_and_resources
727 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed1
728 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2
729 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2_same_resources
730 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2_same_time
731 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2_same_time_and_resources
732 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_nojob
736 SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES
737 "${generated_files_to_clean}")
739 add_custom_target(tests COMMENT "Recompiling the tests")
740 add_custom_target(tests-mc COMMENT "Recompiling the MC tests and tools.")
741 add_dependencies(tests tests-mc)
743 ### Build some Maintainer files
744 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/MaintainerMode.cmake)
747 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/MakeLib.cmake)
749 # Python binding (with pybind11)
751 if((NOT DEFINED enable_python) OR enable_python)
752 if(EXISTS ${CMAKE_HOME_DIRECTORY}/pybind11) # Try to use a local copy of pybind11, if any
753 message(STATUS "Use the internal copy of pybind11.")
754 add_subdirectory(${CMAKE_HOME_DIRECTORY}/pybind11)
755 set(pybind11_FOUND ON)
757 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_HOME_DIRECTORY}/pybind11/tools/)
758 set(Python_ADDITIONAL_VERSIONS 3.9 3.8 3.7 3.6 3.5 3.4)
759 find_package(PythonLibsNew ${PYBIND11_PYTHON_VERSION} REQUIRED)
762 find_package(pybind11 CONFIG)
763 message(STATUS "Pybind11 version: ${pybind11_VERSION}")
764 if (pybind11_VERSION VERSION_LESS 2.4)
765 message(STATUS "SimGrid needs at least v2.4 of pybind11. Disabling the Python bindings.")
766 set(pybind11_FOUND OFF)
771 find_package(Python3 COMPONENTS Development)
772 if(NOT Python3_Development_FOUND OR NOT pybind11_FOUND)
773 message(STATUS "SimGrid Python bindings cannot be built on this system.")
774 set(default_enable_python OFF)
776 set(default_enable_python ON)
779 option(enable_python "Whether the Python bindings are activated." ${default_enable_python}) # ON by default if dependencies are met
781 if("${CMAKE_SYSTEM}" MATCHES "FreeBSD" AND enable_model-checking AND enable_python)
782 message(WARNING "FreeBSD + Model-Checking + Python = too much for now. Disabling the Python bindings.")
783 set(enable_python FALSE)
787 if(NOT Python3_Development_FOUND)
788 message(FATAL_ERROR "Please install the development components of Python (python3-dev on Debian) to build the Python bindings (or disable that option).")
791 message(STATUS "Found pybind11.")
793 set(pybind11_options NO_EXTRAS)
795 pybind11_add_module(python-bindings src/bindings/python/simgrid_python.cpp ${pybind11_options})
796 target_compile_features(python-bindings PRIVATE cxx_std_14)
797 target_link_libraries(python-bindings PUBLIC simgrid)
798 set_target_properties(python-bindings PROPERTIES
799 LIBRARY_OUTPUT_NAME simgrid
800 CXX_VISIBILITY_PRESET "default"
801 INTERPROCEDURAL_OPTIMIZATION FALSE)
802 # LTO is disabled here from the python bindings because this makes a
803 # cmake warning about CMP0069 even when this policy is set. This
804 # problem may be in cmake, in pybind11 or even in our code, not sure.
805 # It may get eventually solved in cmake or pybind11. Or not.
806 # The sure thing is that our python bindings are in one file only,
807 # so there is no need for LTO here. Problem solved :)
809 add_dependencies(tests python-bindings)
810 set_property(TARGET python-bindings
811 APPEND PROPERTY INCLUDE_DIRECTORIES "${INTERNAL_INCLUDES}")
813 if("${SIMGRID_PYTHON_LIBDIR}" STREQUAL "") # value not manually set
814 if("${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr")
815 set(SIMGRID_PYTHON_LIBDIR ${Python3_SITEARCH})
816 else("${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr")
817 string(REGEX REPLACE "^/usr/" "${CMAKE_INSTALL_PREFIX}/" SIMGRID_PYTHON_LIBDIR ${Python3_SITEARCH})
818 endif("${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr")
820 install(TARGETS python-bindings
821 LIBRARY DESTINATION "${SIMGRID_PYTHON_LIBDIR}")
823 message(FATAL_ERROR "Please install pybind11-dev to build the Python bindings (or disable that option).")
826 mark_as_advanced(PYBIND11_PYTHON_VERSION)
827 mark_as_advanced(pybind11_DIR)
830 if(enable_memcheck_xml)
831 set(enable_memcheck true)
836 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Tests.cmake)
837 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/CTestConfig.cmake)
839 ### Define subdirectories
840 foreach(cmakefile ${CMAKEFILES_TXT})
841 string(REPLACE "/CMakeLists.txt" "" repository ${cmakefile})
842 add_subdirectory("${CMAKE_HOME_DIRECTORY}/${repository}")
845 ### Setup the distrib
846 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Distrib.cmake)
848 ### Build the docs if asked to
849 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Documentation.cmake)
851 ### Print the result of configuration
853 message("##########################################")
854 message("#### Content of src/internal_config.h ####")
855 message("##########################################")
856 file(STRINGS ${CMAKE_CURRENT_BINARY_DIR}/src/internal_config.h config_output)
857 LIST(REMOVE_AT config_output 0 1 2 3 4 5 6 7 8 9 10) # Pass the file header
858 foreach(line ${config_output})
861 message("##########################################")
862 message("#### Content of simgrid/config.h ####")
863 message("##########################################")
864 file(STRINGS ${CMAKE_CURRENT_BINARY_DIR}/include/simgrid/config.h config_output)
865 LIST(REMOVE_AT config_output 0 1 2 3 4 5 6 7 8 9 -1) # Pass the file header
866 foreach(line ${config_output})
869 message("##########################################")
870 message("#### End of configuration headers ####")
871 message("##########################################")
873 message("\nConfiguration of package `simgrid':")
874 message(" Home directory ..............: ${CMAKE_HOME_DIRECTORY}")
875 message(" Build Name ..................: ${BUILDNAME}")
876 message(" Cmake Generator .............: ${CMAKE_GENERATOR}")
877 message(" Site ........................: ${SITE}")
878 message(" Install prefix ..............: ${CMAKE_INSTALL_PREFIX}")
879 message(" Release .....................: simgrid-${release_version}")
881 message(" Compiler: C .................: ${CMAKE_C_COMPILER} (id: ${CMAKE_C_COMPILER_ID})")
882 message(" version .............: ${CMAKE_C_COMPILER_VERSION}")
883 message(" is gnu ..............: ${CMAKE_COMPILER_IS_GNUCC}")
884 message(" Compiler: C++ ...............: ${CMAKE_CXX_COMPILER} (id: ${CMAKE_CXX_COMPILER_ID})")
885 message(" version .............: ${CMAKE_CXX_COMPILER_VERSION}")
886 if(CMAKE_Fortran_COMPILER)
887 message(" Compiler: Fortran ...........: ${SMPI_Fortran_COMPILER} (id: ${CMAKE_Fortran_COMPILER_ID})")
888 message(" version .............: ${CMAKE_Fortran_COMPILER_VERSION}")
890 message(" Linker: .....................: ${CMAKE_LINKER}")
891 message(" version .............: ${LINKER_VERSION}")
892 message(" Make program: ...............: ${CMAKE_MAKE_PROGRAM}")
894 message(" CFlags ......................: ${CMAKE_C_FLAGS}")
895 message(" CXXFlags ....................: ${CMAKE_CXX_FLAGS}")
896 message(" LDFlags .....................: ${CMAKE_C_LINK_FLAGS}")
897 message(" with LTO ....................: ${enable_lto}")
900 if (SIMGRID_HAVE_NS3)
901 message(" Compile ns-3 ................: ON (path: ${NS3_PATH})")
903 message(" Compile ns-3 ................: OFF (hint: ${NS3_HINT})")
907 message(" Compile Python bindings .....: ${enable_python}")
908 message(" module ....................: ${PYTHON_MODULE_PREFIX}simgrid${PYTHON_MODULE_EXTENSION}")
909 message(" install path ..............: ${SIMGRID_PYTHON_LIBDIR} (force another value with -DSIMGRID_PYTHON_LIBDIR)")
911 message(" Compile Python bindings .....: OFF (disabled, or pybind11 not found)")
913 if(SIMGRID_HAVE_EIGEN3)
914 message(" Eigen3 library ..............: ${EIGEN3_VERSION_STRING} in ${EIGEN3_INCLUDE_DIR}")
916 message(" Eigen3 library ..............: not found (EIGEN3_HINT='${EIGEN3_HINT}').")
918 if(SIMGRID_HAVE_JSON)
919 message(" JSON library.................: ${nlohmann_json_FIND_VERSION} in ${NLOHMANN_JSON_INCLUDE_DIR}")
921 message(" JSON library.................: not found (nlohmann_json_HINT='${nlohmann_json_HINT}')")
923 message(" Compile Smpi ................: ${HAVE_SMPI}")
924 message(" Smpi fortran ..............: ${SMPI_FORTRAN}")
925 message(" MPICH3 testsuite ..........: ${enable_smpi_MPICH3_testsuite}")
926 message(" MBI testsuite .............: ${enable_smpi_MBI_testsuite}")
927 message(" Privatization .............: ${HAVE_PRIVATIZATION}")
928 message(" PAPI support...............: ${HAVE_PAPI}")
929 message(" Compile Boost.Context support: ${HAVE_BOOST_CONTEXTS}")
931 message(" Maintainer mode .............: ${enable_maintainer_mode}")
932 message(" Documentation................: ${enable_documentation}")
933 message(" Model checking ..............: ${SIMGRID_HAVE_MC}")
934 message(" Graphviz mode ...............: ${HAVE_GRAPHVIZ}")
935 message(" Mallocators .................: ${enable_mallocators}")
937 message(" Simgrid dependencies ........: ${SIMGRID_DEP}")
940 execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_BINARY_DIR}/Testing/Notes/)
941 file(WRITE ${PROJECT_BINARY_DIR}/Testing/Notes/Build "GIT version : ${GIT_VERSION}\n")
942 file(APPEND ${PROJECT_BINARY_DIR}/Testing/Notes/Build "Release : simgrid-${release_version}\n")