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