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 "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}")
22 set(libsimgrid-java_version "${release_version}")
24 # Basic checks on cmake
25 cmake_minimum_required(VERSION 3.5)
26 #for lto, to avoid warning (should be removed when switching to requiring cmake >= 3.9)
27 if(NOT CMAKE_VERSION VERSION_LESS "3.9")
28 cmake_policy(SET CMP0069 NEW)
30 # once we move >= 3.13, we should use target_link_option in examples/sthread
31 message(STATUS "Cmake version ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION}")
32 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_HOME_DIRECTORY}/tools/cmake/Modules)
34 project(simgrid C CXX)
36 # customizable installation directories
37 include(GNUInstallDirs)
39 #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
40 # Check for the compiler #
41 #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
43 ## Check the C/C++ standard that we need
44 ## See also tools/cmake/Flags.cmake that sets our paranoid warning flags
45 INCLUDE(CheckCCompilerFlag)
46 CHECK_C_COMPILER_FLAG(-fstack-cleaner HAVE_C_STACK_CLEANER)
48 ## Request full debugging flags
49 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g3")
50 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g3")
52 if (CMAKE_COMPILER_IS_GNUCC)
53 if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "7.0")
55 "SimGrid needs at least g++ version 7.0 to compile but you have ${CMAKE_CXX_COMPILER_VERSION}."
56 "You need a sufficient support of c++17 to compile SimGrid.")
60 ## We need a decent support of the C++17 and C11 standards
61 set(CMAKE_CXX_STANDARD 17)
62 set(CMAKE_CXX_STANDARD_REQUIRED ON)
64 set(CMAKE_C_STANDARD 11)
65 set(CMAKE_C_STANDARD_REQUIRED ON)
67 if (CMAKE_C_COMPILER_ID STREQUAL "Intel" AND CMAKE_C11_EXTENSION_COMPILE_OPTION STREQUAL "-std=c11")
68 set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=gnu11")
71 ### Check threading support
72 set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
76 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Option.cmake)
79 if ((NOT DEFINED enable_smpi) OR enable_smpi)
80 # First unset the compiler in case we're re-running cmake over a previous
81 # configuration where it was saved as smpiff
82 unset(CMAKE_Fortran_COMPILER)
86 enable_language(Fortran OPTIONAL)
89 if(CMAKE_Fortran_COMPILER)
91 # Fortran compiler detected: save it, then replace by smpiff
92 set(SMPI_Fortran_COMPILER "${CMAKE_Fortran_COMPILER}" CACHE FILEPATH "The real Fortran compiler")
94 # Set flags/libs to be used in smpiff
95 if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU")
96 set(SMPI_Fortran_FLAGS_ "\"-fpic\" \"-ff2c\" \"-fno-second-underscore\"")
97 set(SMPI_Fortran_LIBS "\"-lgfortran\"")
99 elseif(CMAKE_Fortran_COMPILER_ID MATCHES "Intel")
100 set(SMPI_Fortran_FLAGS_ "\"-fPIC\" \"-nofor-main\"")
101 set(SMPI_Fortran_LIBS "\"-lifcore\"")
103 elseif(CMAKE_Fortran_COMPILER_ID MATCHES "PGI|Flang") # flang
104 set(SMPI_Fortran_FLAGS_ "\"-fPIC\"")
105 set(SMPI_Fortran_LIBS "")
108 set(SMPI_Fortran_FLAGS "${SMPI_Fortran_FLAGS_} ${SMPI_Fortran_FLAGS}")
110 ## Request debugging flags for Fortran too
111 set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -g")
114 endif(CMAKE_Fortran_COMPILER)
118 ### SET THE LIBRARY EXTENSION
125 execute_process(COMMAND ${CMAKE_LINKER} -v OUTPUT_VARIABLE LINKER_VERSION ERROR_VARIABLE LINKER_VERSION)
126 string(REGEX MATCH "[0-9].[0-9]*" LINKER_VERSION "${LINKER_VERSION}")
128 ### Find programs and paths
129 FIND_PROGRAM(GCOV_PATH gcov)
132 message(FATAL_ERROR "Please install Perl to compile SimGrid.")
135 # tesh.py needs python 3 (or the module python-subprocess32 on python2.8+)
136 if(CMAKE_VERSION VERSION_LESS "3.12")
137 set(PythonInterp_FIND_VERSION 3)
138 set(PythonInterp_FIND_VERSION_COUNT 1)
139 set(PythonInterp_FIND_VERSION_MAJOR 3)
140 include(FindPythonInterp)
141 if(NOT PYTHONINTERP_FOUND)
142 message(FATAL_ERROR "Please install Python (version 3 or higher) to compile SimGrid.")
145 find_package(Python3 COMPONENTS Interpreter Development)
146 if(NOT Python3_Interpreter_FOUND)
147 message(FATAL_ERROR "Please install Python (version 3 or higher) to compile SimGrid.")
149 set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE})
152 SET(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib)
154 ### Compute the include paths
156 # Only include public headers by default
158 ${CMAKE_BINARY_DIR}/include
159 ${CMAKE_HOME_DIRECTORY}/include
162 # Compute the ones that should be added when compiling the library
163 set(INTERNAL_INCLUDES
165 ${CMAKE_HOME_DIRECTORY}
166 ${CMAKE_HOME_DIRECTORY}/src/include
170 set (INTERNAL_INCLUDES ${INTERNAL_INCLUDES} ${CMAKE_HOME_DIRECTORY}/src/smpi/include)
173 if(NOT CMAKE_CROSSCOMPILING AND EXISTS /usr/include/)
174 set(INTERNAL_INCLUDES ${INTERNAL_INCLUDES} /usr/include/)
177 # library dependency cannot start with a space (CMP0004), so initialize it with something that is never deactivated.
178 set(SIMGRID_DEP "-lm")
180 ### Determine the assembly flavor that we need today
181 set(HAVE_RAW_CONTEXTS 0)
182 include(CMakeDetermineSystem)
183 IF(CMAKE_SYSTEM_PROCESSOR MATCHES ".86|AMD64|amd64")
184 IF(CMAKE_SIZEOF_VOID_P EQUAL 4) # 32 bits
185 message(STATUS "System processor: i686 (${CMAKE_SYSTEM_PROCESSOR}, 32 bits)")
186 set(SIMGRID_PROCESSOR_i686 1)
187 set(SIMGRID_PROCESSOR_x86_64 0)
189 message(STATUS "System processor: x86_64 (${CMAKE_SYSTEM_PROCESSOR}, 64 bits)")
190 set(SIMGRID_PROCESSOR_i686 0)
191 set(SIMGRID_PROCESSOR_x86_64 1)
193 if(CMAKE_SIZEOF_VOID_P EQUAL 4 AND CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
194 message(STATUS "Disable fast raw contexts on x32 ABI.")
196 set(HAVE_RAW_CONTEXTS 1)
199 set(SIMGRID_PROCESSOR_i686 0)
200 set(SIMGRID_PROCESSOR_x86_64 0)
203 include(CheckFunctionExists)
204 include(CheckTypeSize)
205 include(CheckIncludeFile)
206 include(CheckIncludeFiles)
207 include(CheckLibraryExists)
208 include(CheckSymbolExists)
212 message(STATUS "Don't even look for graphviz, as we build minimal binding libraries.")
214 include(FindGraphviz)
217 set(SIMGRID_HAVE_NS3 0)
220 if (SIMGRID_HAVE_NS3)
221 if (NOT NS3_VERSION EQUAL "3-dev" AND NS3_VERSION VERSION_LESS "3.28")
222 message(FATAL_ERROR "SimGrid needs ns-3 in version 3.28 or higher. Please upgrade or disable that cmake option.")
224 set(SIMGRID_HAVE_NS3 1)
225 set(SIMGRID_DEP "${SIMGRID_DEP} ${NS3_LIBRARIES}")
227 message(FATAL_ERROR "Cannot find ns-3. Please install it (apt-get install ns3 libns3-dev) or disable that cmake option")
231 ### Check for Eigen library
232 set(SIMGRID_HAVE_EIGEN3 0)
233 find_package (Eigen3 3.3 CONFIG
234 HINTS ${EIGEN3_HINT})
236 set(SIMGRID_HAVE_EIGEN3 1)
237 message(STATUS "Found Eigen3: ${EIGEN3_INCLUDE_DIR}")
238 include_directories(${EIGEN3_INCLUDE_DIR})
239 if ("3.3.4" VERSION_EQUAL EIGEN3_VERSION_STRING AND CMAKE_COMPILER_IS_GNUCC)
240 message(STATUS "Avoid build error of Eigen3 v3.3.4 using -Wno-error=int-in-bool-context")
241 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-error=int-in-bool-context")
244 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")
247 set(SIMGRID_HAVE_MSG 0)
249 set(SIMGRID_HAVE_MSG 1)
256 message(FATAL_ERROR "Cannot find PAPI. Please install it (apt-get install papi-tools libpapi-dev) or disable PAPI bindings.")
260 # But we do need the core of Boost
261 # cmake before 3.13.1 does not know about stacktrace components. Fix it.
262 # Usable components: https://www.boost.org/doc/libs/1_65_1/doc/html/stacktrace/configuration_and_build.html
263 set(_Boost_STACKTRACE_HEADERS "boost/stacktrace.hpp")
264 set(_Boost_STACKTRACE_BACKTRACE_HEADERS "boost/stacktrace.hpp")
265 set(_Boost_STACKTRACE_ADDR2LINE_HEADERS "boost/stacktrace.hpp")
267 if(minimal-bindings) # When we want a minimal jarfile, don't even search for boost optional components
268 message(STATUS "Don't even look for boost optional components, as we build minimal binding libraries.")
269 find_package(Boost 1.48)
271 find_package(Boost 1.59 OPTIONAL_COMPONENTS context stacktrace_backtrace stacktrace_addr2line)
274 include_directories(${Boost_INCLUDE_DIRS})
275 message(STATUS "Mandatory components found. SimGrid is compilable.")
276 if (NOT minimal-bindings)
277 message(STATUS "Looking for optional Boost components:")
278 set(Boost_FOUND 1) # These components are optionals
279 CHECK_INCLUDE_FILE("backtrace.h" HAVE_BACKTRACE_H) # check that backtrace is actually possible
280 if (Boost_STACKTRACE_BACKTRACE_FOUND AND HAVE_BACKTRACE_H)
281 message (STATUS " stacktrace: found the fast 'backtrace' implementation. Activating human-readable stack traces.")
282 set(HAVE_BOOST_STACKTRACE_BACKTRACE 1)
284 set(HAVE_BOOST_STACKTRACE_BACKTRACE 0)
285 if (Boost_STACKTRACE_ADDR2LINE_FOUND)
286 message (STATUS " stacktrace: found the slow 'addr2line' implementation. Activating human-readable stack traces.")
287 set(HAVE_BOOST_STACKTRACE_ADDR2LINE 1)
289 message (STATUS " stacktrace: MISSING. Install libboost-stacktrace-dev to display the stacktraces.")
290 set(HAVE_BOOST_STACKTRACE_ADDR2LINE 0)
294 if(Boost_CONTEXT_FOUND)
295 message (STATUS " context: found. Activating Boost contexts.")
296 set(HAVE_BOOST_CONTEXTS 1)
298 message (STATUS " context: MISSING. Install libboost-context-dev for this optional feature.")
299 set(HAVE_BOOST_CONTEXTS 0)
304 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'")
306 find_package(Boost 1.48) #try without optional libraries
308 message(FATAL_ERROR "Boost libraries not found. Install libboost-dev (>= 1.48.0).")
310 include_directories(${Boost_INCLUDE_DIRS})
311 message(STATUS "Mandatory components found. SimGrid is compilable.")
316 # Checks for header libraries functions.
317 CHECK_LIBRARY_EXISTS(rt clock_gettime "" HAVE_POSIX_GETTIME)
318 CHECK_LIBRARY_EXISTS(pthread pthread_setaffinity_np "" HAVE_PTHREAD_SETAFFINITY)
319 CHECK_INCLUDE_FILE("pthread_np.h" HAVE_PTHREAD_NP_H) # for pthread_setaffinity_np() on FreeBSD
321 if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
322 set(CMAKE_REQUIRED_DEFINITIONS "-D_XOPEN_SOURCE=700 -D_DARWIN_C_SOURCE")
324 set(CMAKE_REQUIRED_DEFINITIONS "-D_GNU_SOURCE")
327 CHECK_INCLUDE_FILE("valgrind/valgrind.h" HAVE_VALGRIND_H)
328 CHECK_INCLUDE_FILE("unistd.h" HAVE_UNISTD_H)
329 CHECK_INCLUDE_FILE("linux/futex.h" HAVE_FUTEX_H)
331 CHECK_FUNCTION_EXISTS(dlfunc HAVE_DLFUNC)
332 CHECK_FUNCTION_EXISTS(gettimeofday HAVE_GETTIMEOFDAY)
333 CHECK_FUNCTION_EXISTS(nanosleep HAVE_NANOSLEEP)
334 CHECK_FUNCTION_EXISTS(sysconf HAVE_SYSCONF)
336 message(FATAL_ERROR "Cannot build without sysconf.")
338 CHECK_FUNCTION_EXISTS(process_vm_readv HAVE_PROCESS_VM_READV)
339 CHECK_FUNCTION_EXISTS(mmap HAVE_MMAP)
340 CHECK_FUNCTION_EXISTS(mremap HAVE_MREMAP)
342 CHECK_SYMBOL_EXISTS(vasprintf stdio.h HAVE_VASPRINTF)
344 CHECK_INCLUDE_FILE("sys/sendfile.h" HAVE_SENDFILE_H)
345 CHECK_FUNCTION_EXISTS(sendfile HAVE_SENDFILE)
346 if(HAVE_SENDFILE_H AND HAVE_SENDFILE)
347 set(SG_HAVE_SENDFILE 1)
349 set(SG_HAVE_SENDFILE 0)
352 if(enable_model-checking AND NOT "${CMAKE_SYSTEM}" MATCHES "Linux|FreeBSD")
353 message(FATAL_ERROR "Support for model-checking has not been enabled on ${CMAKE_SYSTEM}. Please use a Linux docker to use the model checker.")
356 if(enable_model-checking AND minimal-bindings)
357 message(FATAL_ERROR "Compile-time option 'minimal-bindings' cannot be enabled with 'model-checking'")
364 if(enable_model-checking)
365 message(STATUS "Warning: support for model-checking has been disabled because you are missing either mmap or __thread.")
367 SET(enable_model-checking 0)
370 if(enable_mallocators)
371 SET(SIMGRID_HAVE_MALLOCATOR 1)
373 SET(SIMGRID_HAVE_MALLOCATOR 0)
376 if(enable_model-checking)
377 include(FindLibunwind)
379 SET(SIMGRID_DEP "${SIMGRID_DEP} ${LIBUNWIND_LIBRARIES}")
381 message(FATAL_ERROR "Please install libunwind-dev libdw-dev libelf-dev libevent-dev if you want to compile the SimGrid model checker.")
383 find_package(Libdw REQUIRED)
384 find_package(Libelf REQUIRED)
385 find_package(Libevent REQUIRED)
386 include_directories(${LIBDW_INCLUDE_DIR} ${LIBELF_INCLUDE_DIR} ${LIBEVENT_INCLUDE_DIR})
387 set(SIMGRID_DEP "${SIMGRID_DEP} ${LIBEVENT_LIBRARIES} ${LIBELF_LIBRARIES} ${LIBDW_LIBRARIES}")
388 set(SIMGRID_HAVE_MC 1)
389 if("${CMAKE_SYSTEM}" MATCHES "FreeBSD" AND enable_java)
390 message(WARNING "FreeBSD + Model-Checking + Java = too much for now. Disabling the Java bindings.")
391 set(enable_java FALSE)
393 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -gdwarf-4")
394 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -gdwarf-4")
396 SET(SIMGRID_HAVE_MC 0)
399 mark_as_advanced(PATH_LIBDW_H)
400 mark_as_advanced(PATH_LIBDW_LIB)
402 if(enable_java AND NOT enable_msg)
403 message(FATAL_ERROR "Cannot activate the Java bindings without the MSG module. Either add -Denable_msg=ON or -Denable_java=OFF")
406 if (enable_model-checking AND enable_ns3)
407 message(WARNING "Activating both model-checking and ns-3 bindings is considered experimental.")
412 SET(HAVE_PRIVATIZATION 1)
417 #--------------------------------------------------------------------------------------------------
418 ### Check what context backends are available
420 set(HAVE_UCONTEXT_CONTEXTS 0)
421 CHECK_INCLUDE_FILE("ucontext.h" HAVE_UCONTEXT_H)
422 if(NOT HAVE_UCONTEXT_H)
423 message(STATUS "No ucontext factory: <ucontext.h> not found.")
425 message(STATUS "No ucontext factory: Apple don't want us to use them.")
426 set(HAVE_UCONTEXT_H 0)
428 try_compile(compile_makecontext ${CMAKE_BINARY_DIR} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_makecontext.c
429 OUTPUT_VARIABLE compile_makecontext_output)
431 #If can have both context
432 if(NOT compile_makecontext)
433 message(STATUS "Error: <ucontext.h> exists, but makecontext is not compilable. Compilation output:\n ${compile_makecontext_output}")
434 message(STATUS "No ucontext factory: makecontext() is not compilable.")
436 message(STATUS "Support for ucontext factory ok.")
437 set(HAVE_UCONTEXT_CONTEXTS 1)
439 # Stack setup (size and address)
440 try_run(RUN_makecontext_VAR COMPILE_makecontext_VAR
441 ${CMAKE_BINARY_DIR} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_stacksetup.c
442 RUN_OUTPUT_VARIABLE stack_setup)
444 LIST(LENGTH stack_setup stack_setup_len)
445 if("${stack_setup_len}" STREQUAL "2")
446 LIST(GET stack_setup 0 makecontext_addr)
447 LIST(GET stack_setup 1 makecontext_size)
448 set(sg_makecontext_stack_addr "#define sg_makecontext_stack_addr(skaddr) (${makecontext_addr})")
449 set(sg_makecontext_stack_size "#define sg_makecontext_stack_size(sksize) (${makecontext_size})")
451 message(FATAL_ERROR "Could not figure out the stack setup. Compil: ${RUN_makecontext_VAR}. Exec: ${COMPILE_makecontext_VAR}. Output: ${stack_setup}")
456 # Stack growth direction (upward or downward). Used for the following contexts: SysV, raw, Boost
457 try_run(RUN_stackgrowth_VAR COMPILE_stackgrowth_VAR
459 ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_stackgrowth.c
460 RUN_OUTPUT_VARIABLE stack
461 COPY_FILE test_stackgrowth)
463 if("${stack}" STREQUAL "down")
464 set(PTH_STACKGROWTH "-1")
465 elseif("${stack}" STREQUAL "up")
466 set(PTH_STACKGROWTH "1")
468 if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64")
469 set(PTH_STACKGROWTH "-1")
470 elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "i686")
471 set(PTH_STACKGROWTH "-1")
473 message(FATAL_ERROR "Could not figure out the stack direction. Test prog returned: ${stack}; CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}.")
476 # If the test ran well, remove the test binary
477 file(REMOVE test_stackgrowth)
478 #--------------------------------------------------------------------------------------------------
483 if(EXISTS ${CMAKE_HOME_DIRECTORY}/.git/)
484 execute_process(COMMAND git rev-parse --verify --short HEAD
485 WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}
486 OUTPUT_VARIABLE GIT_VERSION
487 OUTPUT_STRIP_TRAILING_WHITESPACE)
488 # Check for uncommitted changes
489 execute_process(COMMAND git diff --name-only HEAD
490 WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}
491 OUTPUT_VARIABLE files_changed)
493 set(GIT_VERSION "${GIT_VERSION}-dirty")
495 elseif(EXISTS ${CMAKE_HOME_DIRECTORY}/.gitversion)
496 FILE(STRINGS ${CMAKE_HOME_DIRECTORY}/.gitversion GIT_VERSION)
498 set(GIT_VERSION "none, release version")
500 message(STATUS "Git version: ${GIT_VERSION}")
502 ### Define source packages for Libs
503 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/DefinePackages.cmake)
505 ### Setup gcc & clang flags (include after DefinePackage.cmake, and before generating header files)
507 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Flags.cmake)
510 ### Generate the required headers and scripts
511 #############################################
513 # Avoid triggering a (full) rebuild by touching the files if they did not really change
514 configure_file("${CMAKE_HOME_DIRECTORY}/src/internal_config.h.in" "${CMAKE_BINARY_DIR}/src/internal_config.h.generated" @ONLY IMMEDIATE)
515 configure_file("${CMAKE_HOME_DIRECTORY}/include/simgrid/version.h.in" "${CMAKE_BINARY_DIR}/include/simgrid/version.h.generated" @ONLY IMMEDIATE)
516 configure_file("${CMAKE_HOME_DIRECTORY}/include/simgrid/config.h.in" "${CMAKE_BINARY_DIR}/include/simgrid/config.h.generated" @ONLY IMMEDIATE)
517 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/src/internal_config.h.generated ${CMAKE_BINARY_DIR}/src/internal_config.h)
518 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/include/simgrid/version.h.generated ${CMAKE_BINARY_DIR}/include/simgrid/version.h)
519 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/include/simgrid/config.h.generated ${CMAKE_BINARY_DIR}/include/simgrid/config.h)
520 file(REMOVE ${CMAKE_BINARY_DIR}/src/internal_config.h.generated)
521 file(REMOVE ${CMAKE_BINARY_DIR}/include/simgrid/config.h.generated)
522 file(REMOVE ${CMAKE_BINARY_DIR}/include/simgrid/version.h.generated)
524 # We need two versions of the SMPI scripts because they contain the path to the library
525 # so, it depends of whether SimGrid is installed, or run from the sources (during the build)
527 file(READ ${CMAKE_HOME_DIRECTORY}/src/smpi/smpitools.sh SMPITOOLS_SH) # Definitions shared amongst all SMPI scripts, inlined in each of them
529 ### SMPI script used when simgrid is installed
530 set(exec_prefix ${CMAKE_INSTALL_PREFIX})
531 set(includedir "${CMAKE_INSTALL_FULL_INCLUDEDIR}")
532 set(libdir "${CMAKE_INSTALL_FULL_LIBDIR}")
533 set(includeflag "\"-I${includedir}\" \"-I${includedir}/smpi\"")
534 set(CMAKE_SMPI_COMMAND "export LD_LIBRARY_PATH=\"${libdir}")
536 set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}:${NS3_LIBRARY_PATH}")
538 set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}\${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}\"")
539 set(SMPIMAIN ${libdir}/simgrid/smpimain)
540 set(SMPIREPLAYMAIN ${libdir}/simgrid/smpireplaymain)
542 configure_file(${CMAKE_HOME_DIRECTORY}/include/smpi/mpif.h.in ${CMAKE_BINARY_DIR}/include/smpi/mpif.h @ONLY)
543 #configure mpif.f90 to build mpi.mod
545 set(MODULE_MPIF_IN "module mpi")
546 set(MODULE_MPIF_OUT "end module mpi")
547 configure_file(${CMAKE_HOME_DIRECTORY}/include/smpi/mpif.h.in ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90.generated @ONLY)
548 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90.generated ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90)
549 file(REMOVE ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90.generated)
550 set(CMAKE_Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/include/smpi)
551 add_library(mpi SHARED ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90)
554 foreach(script cc cxx ff f90 run)
555 configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpi${script}.in ${CMAKE_BINARY_DIR}/bin/smpi${script} @ONLY)
558 ### SMPI scripts used when compiling simgrid
559 set(exec_prefix "${CMAKE_BINARY_DIR}/smpi_script/")
560 set(includedir "${CMAKE_HOME_DIRECTORY}/include")
561 set(libdir "${CMAKE_BINARY_DIR}/lib")
562 set(includeflag "\"-I${includedir}\" \"-I${includedir}/smpi\"")
563 set(includeflag "${includeflag} \"-I${CMAKE_BINARY_DIR}/include\" \"-I${CMAKE_BINARY_DIR}/include/smpi\"")
564 set(CMAKE_SMPI_COMMAND "export LD_LIBRARY_PATH=\"${libdir}")
566 set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}:${NS3_LIBRARY_PATH}")
568 set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}\${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}\"")
569 set(SMPIMAIN ${libdir}/simgrid/smpimain)
570 set(SMPIREPLAYMAIN ${libdir}/simgrid/smpireplaymain)
572 foreach(script cc cxx ff f90 run)
573 configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpi${script}.in ${CMAKE_BINARY_DIR}/smpi_script/bin/smpi${script} @ONLY)
576 foreach(script cc cxx ff f90 run)
577 execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpi${script})
578 execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/smpi_script/bin/smpi${script})
581 set(generated_headers_to_install
582 ${CMAKE_CURRENT_BINARY_DIR}/include/smpi/mpif.h
583 ${CMAKE_CURRENT_BINARY_DIR}/include/simgrid/config.h
584 ${CMAKE_CURRENT_BINARY_DIR}/include/simgrid/version.h
587 set(generated_headers ${CMAKE_CURRENT_BINARY_DIR}/src/internal_config.h )
589 set(generated_files_to_clean
591 ${generated_headers_to_install}
592 ${CMAKE_BINARY_DIR}/bin/smpicc
593 ${CMAKE_BINARY_DIR}/bin/smpicxx
594 ${CMAKE_BINARY_DIR}/bin/smpiff
595 ${CMAKE_BINARY_DIR}/bin/smpif90
596 ${CMAKE_BINARY_DIR}/bin/smpirun
597 ${CMAKE_BINARY_DIR}/bin/colorize
598 ${CMAKE_BINARY_DIR}/bin/simgrid_update_xml
599 ${CMAKE_BINARY_DIR}/examples/smpi/tracing/smpi_traced.trace
602 if(NOT "${CMAKE_BINARY_DIR}" STREQUAL "${CMAKE_HOME_DIRECTORY}")
603 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions0.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions0.txt COPYONLY)
604 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions1.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions1.txt COPYONLY)
605 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_allreduce.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allreduce.txt COPYONLY)
606 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_barrier.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_barrier.txt COPYONLY)
607 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_bcast.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_bcast.txt COPYONLY)
608 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_with_isend.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_with_isend.txt COPYONLY)
609 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_alltoall.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoall.txt COPYONLY)
610 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_alltoallv.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoallv.txt COPYONLY)
611 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_waitall.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_waitall.txt COPYONLY)
612 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_reducescatter.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_reducescatter.txt COPYONLY)
613 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_gather.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_gather.txt COPYONLY)
614 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_allgatherv.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allgatherv.txt COPYONLY)
615 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile COPYONLY)
616 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_cluster ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_cluster COPYONLY)
617 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_griffon ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_griffon COPYONLY)
618 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_coll ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_coll COPYONLY)
619 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_io ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_io COPYONLY)
620 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_empty ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_empty COPYONLY)
622 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/description_file ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/description_file COPYONLY)
623 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/README ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/README COPYONLY)
624 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/smpi_replay.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/smpi_replay.txt COPYONLY)
625 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)
626 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)
627 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)
628 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)
629 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)
630 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)
631 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)
632 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)
633 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)
634 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)
635 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)
636 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)
637 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)
638 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)
639 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)
640 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)
641 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)
642 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)
643 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)
644 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)
645 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)
646 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)
647 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)
648 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)
649 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)
650 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)
651 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)
652 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)
653 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)
654 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)
655 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)
656 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)
658 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)
659 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)
660 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)
661 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)
662 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)
663 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)
664 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)
665 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)
666 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)
667 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)
668 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)
669 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)
670 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)
671 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)
672 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)
674 set(generated_files_to_clean
675 ${generated_files_to_clean}
676 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions0.txt
677 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions1.txt
678 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allreduce.txt
679 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_barrier.txt
680 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_bcast.txt
681 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_with_isend.txt
682 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoall.txt
683 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoallv.txt
684 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_waitall.txt
685 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_gather.txt
686 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allgatherv.txt
687 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_reducescatter.txt
688 ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile
689 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/description_file
690 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/README
691 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/smpi_replay.txt
692 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace0.txt
693 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace1.txt
694 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace2.txt
695 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace3.txt
696 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace4.txt
697 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace5.txt
698 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace6.txt
699 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace7.txt
700 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace8.txt
701 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace9.txt
702 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace10.txt
703 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace11.txt
704 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace12.txt
705 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace13.txt
706 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace14.txt
707 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace15.txt
708 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace16.txt
709 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace17.txt
710 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace18.txt
711 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace19.txt
712 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace20.txt
713 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace21.txt
714 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace22.txt
715 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace23.txt
716 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace24.txt
717 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace25.txt
718 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace26.txt
719 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace27.txt
720 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace28.txt
721 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace29.txt
722 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace30.txt
723 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace31.txt
724 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/compute_only.txt
725 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/compute_only/actions0.txt
726 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/compute_only/actions1.txt
727 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/empty.txt
728 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/empty/actions0.txt
729 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/empty/actions1.txt
730 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/mixed.txt
731 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/mixed/actions0.txt
732 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/mixed/actions1.txt
733 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/replay_multiple_manual.tesh
734 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute
735 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute_consecutive
736 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute_consecutive2
737 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute_simple
738 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty1
739 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2
740 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2_same_resources
741 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2_same_time
742 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2_same_time_and_resources
743 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed1
744 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2
745 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2_same_resources
746 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2_same_time
747 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2_same_time_and_resources
748 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_nojob
752 SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES
753 "${generated_files_to_clean}")
755 add_custom_target(tests COMMENT "Recompiling the tests")
756 add_custom_target(tests-mc COMMENT "Recompiling the MC tests and tools.")
757 add_dependencies(tests tests-mc)
759 ### Build some Maintainer files
760 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/MaintainerMode.cmake)
763 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/MakeLib.cmake)
766 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Java.cmake)
769 # Python binding (with pybind11)
771 if((NOT DEFINED enable_python) OR enable_python)
772 if(EXISTS ${CMAKE_HOME_DIRECTORY}/pybind11) # Try to use a local copy of pybind11, if any
773 message(STATUS "Use the internal copy of pybind11.")
774 add_subdirectory(${CMAKE_HOME_DIRECTORY}/pybind11)
775 set(pybind11_FOUND ON)
777 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_HOME_DIRECTORY}/pybind11/tools/)
778 set(Python_ADDITIONAL_VERSIONS 3.9 3.8 3.7 3.6 3.5 3.4)
779 find_package(PythonLibsNew ${PYBIND11_PYTHON_VERSION} REQUIRED)
782 find_package(pybind11 CONFIG)
783 message(STATUS "Pybind11 version: ${pybind11_VERSION}")
784 if (pybind11_VERSION VERSION_LESS 2.4)
785 message(STATUS "SimGrid needs at least v2.4 of pybind11. Disabling the Python bindings.")
786 set(pybind11_FOUND OFF)
790 if(NOT PYTHONLIBS_FOUND AND NOT Python3_Development_FOUND)
791 message(STATUS "Python libs not found. Turn pybind11 off.")
793 set(pybind11_FOUND OFF)
797 option(enable_python "Whether the Python bindings are activated." ${pybind11_FOUND}) # ON by default if dependencies are met
799 if("${CMAKE_SYSTEM}" MATCHES "FreeBSD" AND enable_model-checking AND enable_python)
800 message(WARNING "FreeBSD + Model-Checking + Python = too much for now. Disabling the Python bindings.")
801 set(enable_python FALSE)
806 message(STATUS "Found pybind11.")
808 set(pybind11_options NO_EXTRAS)
810 pybind11_add_module(python-bindings src/bindings/python/simgrid_python.cpp ${pybind11_options})
811 target_compile_features(python-bindings PRIVATE cxx_std_14)
812 target_link_libraries(python-bindings PUBLIC simgrid)
813 set_target_properties(python-bindings PROPERTIES
814 LIBRARY_OUTPUT_NAME simgrid
815 CXX_VISIBILITY_PRESET "default"
816 INTERPROCEDURAL_OPTIMIZATION FALSE)
817 # LTO is disabled here from the python bindings because this makes a
818 # cmake warning about CMP0069 even when this policy is set. This
819 # problem may be in cmake, in pybind11 or even in our code, not sure.
820 # It may get eventually solved in cmake or pybind11. Or not.
821 # The sure thing is that our python bindings are in one file only,
822 # so there is no need for LTO here. Problem solved :)
824 add_dependencies(tests python-bindings)
825 set_property(TARGET python-bindings
826 APPEND PROPERTY INCLUDE_DIRECTORIES "${INTERNAL_INCLUDES}")
828 if("${SIMGRID_PYTHON_LIBDIR}" STREQUAL "") # value not manually set
829 if("${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr")
830 set(SIMGRID_PYTHON_LIBDIR ${Python3_SITEARCH})
831 else("${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr")
832 string(REGEX REPLACE "^/usr/" "${CMAKE_INSTALL_PREFIX}/" SIMGRID_PYTHON_LIBDIR ${Python3_SITEARCH})
833 endif("${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr")
835 install(TARGETS python-bindings
836 LIBRARY DESTINATION "${SIMGRID_PYTHON_LIBDIR}")
838 message(FATAL_ERROR "Please install pybind11-dev to build the Python bindings (or disable that option).")
841 mark_as_advanced(PYBIND11_PYTHON_VERSION)
842 mark_as_advanced(pybind11_DIR)
845 if(enable_memcheck_xml)
846 set(enable_memcheck true)
851 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Tests.cmake)
852 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/CTestConfig.cmake)
854 ### Define subdirectories
855 foreach(cmakefile ${CMAKEFILES_TXT})
856 string(REPLACE "/CMakeLists.txt" "" repository ${cmakefile})
857 add_subdirectory("${CMAKE_HOME_DIRECTORY}/${repository}")
860 ### Setup the distrib
861 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Distrib.cmake)
863 ### Build the docs if asked to
864 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Documentation.cmake)
866 ### Print the result of configuration
868 message("##########################################")
869 message("#### Content of src/internal_config.h ####")
870 message("##########################################")
871 file(STRINGS ${CMAKE_CURRENT_BINARY_DIR}/src/internal_config.h config_output)
872 LIST(REMOVE_AT config_output 0 1 2 3 4 5 6 7 8 9 10) # Pass the file header
873 foreach(line ${config_output})
876 message("##########################################")
877 message("#### Content of simgrid/config.h ####")
878 message("##########################################")
879 file(STRINGS ${CMAKE_CURRENT_BINARY_DIR}/include/simgrid/config.h config_output)
880 LIST(REMOVE_AT config_output 0 1 2 3 4 5 6 7 8 9 -1) # Pass the file header
881 foreach(line ${config_output})
884 message("##########################################")
885 message("#### End of configuration headers ####")
886 message("##########################################")
888 message("\nConfiguration of package `simgrid':")
889 message(" Home directory ..............: ${CMAKE_HOME_DIRECTORY}")
890 message(" Build Name ..................: ${BUILDNAME}")
891 message(" Cmake Generator .............: ${CMAKE_GENERATOR}")
892 message(" Site ........................: ${SITE}")
893 message(" Install prefix ..............: ${CMAKE_INSTALL_PREFIX}")
894 message(" Release .....................: simgrid-${release_version}")
896 message(" Compiler: C .................: ${CMAKE_C_COMPILER} (id: ${CMAKE_C_COMPILER_ID})")
897 message(" version .............: ${CMAKE_C_COMPILER_VERSION}")
898 message(" is gnu ..............: ${CMAKE_COMPILER_IS_GNUCC}")
899 message(" Compiler: C++ ...............: ${CMAKE_CXX_COMPILER} (id: ${CMAKE_CXX_COMPILER_ID})")
900 message(" version .............: ${CMAKE_CXX_COMPILER_VERSION}")
902 message(" Compiler: Javac .............: ${Java_JAVAC_EXECUTABLE}")
903 message(" version .............: ${Java_VERSION_STRING}")
904 message(" runtime .............: ${Java_JAVA_EXECUTABLE}")
906 if(CMAKE_Fortran_COMPILER)
907 message(" Compiler: Fortran ...........: ${SMPI_Fortran_COMPILER} (id: ${CMAKE_Fortran_COMPILER_ID})")
908 message(" version .............: ${CMAKE_Fortran_COMPILER_VERSION}")
910 message(" Linker: .....................: ${CMAKE_LINKER}")
911 message(" version .............: ${LINKER_VERSION}")
912 message(" Make program: ...............: ${CMAKE_MAKE_PROGRAM}")
914 message(" CFlags ......................: ${CMAKE_C_FLAGS}")
915 message(" CXXFlags ....................: ${CMAKE_CXX_FLAGS}")
916 message(" LDFlags .....................: ${CMAKE_C_LINK_FLAGS}")
917 message(" with LTO ....................: ${enable_lto}")
920 if (SIMGRID_HAVE_MSG)
921 message(" Compile MSG .................: ON")
923 message(" Compile MSG .................: OFF")
926 if (SIMGRID_HAVE_NS3)
927 message(" Compile ns-3 ................: ON (path: ${NS3_PATH})")
929 message(" Compile ns-3 ................: OFF (hint: ${NS3_HINT})")
933 message(" Compile Java ................: ON")
934 message(" Native lib in jar .........: ${enable_lib_in_jar}")
936 message(" Compile Java ................: OFF")
939 message(" Compile Python bindings .....: ${enable_python}")
940 message(" module ....................: ${PYTHON_MODULE_PREFIX}simgrid${PYTHON_MODULE_EXTENSION}")
941 message(" install path ..............: ${SIMGRID_PYTHON_LIBDIR} (force another value with -DSIMGRID_PYTHON_LIBDIR)")
943 message(" Compile Python bindings .....: OFF (disabled, or pybind11 not found)")
946 message(" Eigen3 library ..............: ${EIGEN3_VERSION_STRING} in ${EIGEN3_INCLUDE_DIR}")
948 message(" Eigen3 library ..............: not found (EIGEN3_HINT='${EIGEN3_HINT}').")
950 message(" Compile Smpi ................: ${HAVE_SMPI}")
951 message(" Smpi fortran ..............: ${SMPI_FORTRAN}")
952 message(" MPICH3 testsuite ..........: ${enable_smpi_MPICH3_testsuite}")
953 message(" MBI testsuite .............: ${enable_smpi_MBI_testsuite}")
954 message(" Privatization .............: ${HAVE_PRIVATIZATION}")
955 message(" PAPI support...............: ${HAVE_PAPI}")
956 message(" Compile Boost.Context support: ${HAVE_BOOST_CONTEXTS}")
958 message(" Maintainer mode .............: ${enable_maintainer_mode}")
959 message(" Documentation................: ${enable_documentation}")
960 message(" Model checking ..............: ${SIMGRID_HAVE_MC}")
961 message(" Graphviz mode ...............: ${HAVE_GRAPHVIZ}")
962 message(" Mallocators .................: ${enable_mallocators}")
964 message(" Simgrid dependencies ........: ${SIMGRID_DEP}")
967 execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_BINARY_DIR}/Testing/Notes/)
968 file(WRITE ${PROJECT_BINARY_DIR}/Testing/Notes/Build "GIT version : ${GIT_VERSION}\n")
969 file(APPEND ${PROJECT_BINARY_DIR}/Testing/Notes/Build "Release : simgrid-${release_version}\n")