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