1 # Build the version number
3 set(SIMGRID_VERSION_MAJOR "3")
4 set(SIMGRID_VERSION_MINOR "30")
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}")
13 message(STATUS "Configuring SimGrid v${release_version}")
15 set(SIMGRID_VERSION_STRING "SimGrid version ${release_version}")
17 set(libsimgrid_version "${release_version}")
18 set(libsimgrid-java_version "${release_version}")
20 # Basic checks on cmake
21 cmake_minimum_required(VERSION 3.5)
22 #for lto, to avoid warning (should be removed when switching to requiring cmake >= 3.9)
23 if(NOT CMAKE_VERSION VERSION_LESS "3.9")
24 cmake_policy(SET CMP0069 NEW)
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 "5.0")
50 "SimGrid needs at least g++ version 5.0 to compile but you have ${CMAKE_CXX_COMPILER_VERSION}."
51 "You need a sufficient support of c++14 to compile SimGrid.")
55 ## We need a decent support of the C++14 and C11 standards
56 set(CMAKE_CXX_STANDARD 14)
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
123 execute_process(COMMAND ${CMAKE_LINKER} -v OUTPUT_VARIABLE LINKER_VERSION ERROR_VARIABLE LINKER_VERSION)
124 string(REGEX MATCH "[0-9].[0-9]*" LINKER_VERSION "${LINKER_VERSION}")
126 ### Find programs and paths
127 FIND_PROGRAM(GCOV_PATH gcov)
130 message(FATAL_ERROR "Please install Perl to compile SimGrid.")
133 # tesh.py needs python 3 (or the module python-subprocess32 on python2.8+)
134 if(CMAKE_VERSION VERSION_LESS "3.12")
135 set(PythonInterp_FIND_VERSION 3)
136 set(PythonInterp_FIND_VERSION_COUNT 1)
137 set(PythonInterp_FIND_VERSION_MAJOR 3)
138 include(FindPythonInterp)
139 if(NOT PYTHONINTERP_FOUND)
140 message(FATAL_ERROR "Please install Python (version 3 or higher) to compile SimGrid.")
143 find_package(Python3 COMPONENTS Interpreter Development)
144 if(NOT Python3_Interpreter_FOUND)
145 message(FATAL_ERROR "Please install Python (version 3 or higher) to compile SimGrid.")
147 set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE})
150 SET(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib)
152 ### Compute the include paths
154 # Only include public headers by default
156 ${CMAKE_BINARY_DIR}/include
157 ${CMAKE_HOME_DIRECTORY}/include
160 # Compute the ones that should be added when compiling the library
161 set(INTERNAL_INCLUDES
163 ${CMAKE_HOME_DIRECTORY}
164 ${CMAKE_HOME_DIRECTORY}/src/include
168 set (INTERNAL_INCLUDES ${INTERNAL_INCLUDES} ${CMAKE_HOME_DIRECTORY}/src/smpi/include)
171 if(NOT CMAKE_CROSSCOMPILING AND EXISTS /usr/include/)
172 set(INTERNAL_INCLUDES ${INTERNAL_INCLUDES} /usr/include/)
176 set(CMAKE_INCLUDE_WIN "${CMAKE_C_COMPILER}")
177 set(CMAKE_LIB_WIN "${CMAKE_C_COMPILER}")
178 string(REGEX REPLACE "/bin/gcc.*" "/include" CMAKE_INCLUDE_WIN "${CMAKE_INCLUDE_WIN}")
179 string(REGEX REPLACE "/bin/gcc.*" "/lib" CMAKE_LIB_WIN "${CMAKE_LIB_WIN}")
180 set(INTERNAL_INCLUDES ${INTERNAL_INCLUDES} ${CMAKE_INCLUDE_WIN})
181 unset(CMAKE_INCLUDE_WIN)
184 # library dependency cannot start with a space (CMP0004), so initialize it with something that is never deactivated.
185 set(SIMGRID_DEP "-lm")
187 ### Determine the assembly flavor that we need today
188 set(HAVE_RAW_CONTEXTS 0)
189 include(CMakeDetermineSystem)
190 IF(CMAKE_SYSTEM_PROCESSOR MATCHES ".86|AMD64|amd64")
191 IF(CMAKE_SIZEOF_VOID_P EQUAL 4) # 32 bits
192 message(STATUS "System processor: i686 (${CMAKE_SYSTEM_PROCESSOR}, 32 bits)")
193 set(SIMGRID_PROCESSOR_i686 1)
194 set(SIMGRID_PROCESSOR_x86_64 0)
196 message(STATUS "System processor: x86_64 (${CMAKE_SYSTEM_PROCESSOR}, 64 bits)")
197 set(SIMGRID_PROCESSOR_i686 0)
198 set(SIMGRID_PROCESSOR_x86_64 1)
201 message(STATUS "Disable fast raw contexts on Windows.")
202 elseif(CMAKE_SIZEOF_VOID_P EQUAL 4 AND CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
203 message(STATUS "Disable fast raw contexts on x32 ABI.")
205 set(HAVE_RAW_CONTEXTS 1)
208 set(SIMGRID_PROCESSOR_i686 0)
209 set(SIMGRID_PROCESSOR_x86_64 0)
212 include(CheckFunctionExists)
213 include(CheckTypeSize)
214 include(CheckIncludeFile)
215 include(CheckIncludeFiles)
216 include(CheckLibraryExists)
217 include(CheckSymbolExists)
221 message(STATUS "Don't even look for graphviz, as we build minimal binding libraries.")
223 include(FindGraphviz)
226 set(SIMGRID_HAVE_NS3 0)
229 if (SIMGRID_HAVE_NS3)
230 if (NS3_VERSION VERSION_LESS "3.28")
231 message(FATAL_ERROR "SimGrid needs at least ns-3.28. Please upgrade or disable that cmake option.")
233 set(SIMGRID_HAVE_NS3 1)
234 foreach(lib core csma point-to-point internet network applications wifi)
235 set(SIMGRID_DEP "${SIMGRID_DEP} -lns${NS3_VERSION}-${lib}${NS3_SUFFIX}")
238 message(FATAL_ERROR "Cannot find ns-3. Please install it (apt-get install ns3 libns3-dev) or disable that cmake option")
242 set(SIMGRID_HAVE_MSG 0)
244 set(SIMGRID_HAVE_MSG 1)
248 set(Boost_USE_STATIC_LIBS 1)
255 message(FATAL_ERROR "Cannot find PAPI. Please install it (apt-get install papi-tools libpapi-dev) or disable PAPI bindings.")
259 # But we do need the core of Boost
260 # cmake before 3.13.1 does not know about stacktrace components. Fix it.
261 # Usable components: https://www.boost.org/doc/libs/1_65_1/doc/html/stacktrace/configuration_and_build.html
262 set(_Boost_STACKTRACE_HEADERS "boost/stacktrace.hpp")
263 set(_Boost_STACKTRACE_BACKTRACE_HEADERS "boost/stacktrace.hpp")
264 set(_Boost_STACKTRACE_ADDR2LINE_HEADERS "boost/stacktrace.hpp")
266 if(minimal-bindings) # When we want a minimal jarfile, don't even search for boost optional components
267 message(STATUS "Don't even look for boost optional components, as we build minimal binding libraries.")
268 find_package(Boost 1.48)
270 find_package(Boost 1.59 OPTIONAL_COMPONENTS context stacktrace_backtrace stacktrace_addr2line)
273 include_directories(${Boost_INCLUDE_DIRS})
274 message(STATUS "Mandatory components found. SimGrid is compilable.")
275 if (NOT minimal-bindings)
276 message(STATUS "Looking for optional Boost components:")
277 set(Boost_FOUND 1) # These components are optionals
278 CHECK_INCLUDE_FILE("backtrace.h" HAVE_BACKTRACE_H) # check that backtrace is actually possible
279 if (Boost_STACKTRACE_BACKTRACE_FOUND AND HAVE_BACKTRACE_H)
280 message (STATUS " stacktrace: found the fast 'backtrace' implementation. Activating human-readable stack traces.")
281 set(HAVE_BOOST_STACKTRACE_BACKTRACE 1)
283 set(HAVE_BOOST_STACKTRACE_BACKTRACE 0)
284 if (Boost_STACKTRACE_ADDR2LINE_FOUND)
285 message (STATUS " stacktrace: found the slow 'addr2line' implementation. Activating human-readable stack traces.")
286 set(HAVE_BOOST_STACKTRACE_ADDR2LINE 1)
288 message (STATUS " stacktrace: MISSING. Install libboost-stacktrace-dev to display the stacktraces.")
289 set(HAVE_BOOST_STACKTRACE_ADDR2LINE 0)
293 if(Boost_CONTEXT_FOUND)
294 message (STATUS " context: found. Activating Boost contexts.")
295 set(HAVE_BOOST_CONTEXTS 1)
297 message (STATUS " context: MISSING. Install libboost-context-dev for this optional feature.")
298 set(HAVE_BOOST_CONTEXTS 0)
303 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'")
305 find_package(Boost 1.48) #try without optional libraries
307 message(FATAL_ERROR "Boost libraries not found. Install libboost-dev (>= 1.48.0).")
309 include_directories(${Boost_INCLUDE_DIRS})
310 message(STATUS "Mandatory components found. SimGrid is compilable.")
315 # Checks for header libraries functions.
316 CHECK_LIBRARY_EXISTS(rt clock_gettime "" HAVE_POSIX_GETTIME)
317 CHECK_LIBRARY_EXISTS(pthread pthread_setaffinity_np "" HAVE_PTHREAD_SETAFFINITY)
318 CHECK_INCLUDE_FILE("pthread_np.h" HAVE_PTHREAD_NP_H) # for pthread_setaffinity_np() on FreeBSD
320 if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
321 set(CMAKE_REQUIRED_DEFINITIONS "-D_XOPEN_SOURCE=700 -D_DARWIN_C_SOURCE")
323 # Use the GNU version of unusual modifiers like PRIx64
324 add_definitions(-D__USE_MINGW_ANSI_STDIO=1)
325 set(CMAKE_REQUIRED_DEFINITIONS "-D__USE_MINGW_ANSI_STDIO=1")
327 set(CMAKE_REQUIRED_DEFINITIONS "-D_GNU_SOURCE")
330 CHECK_INCLUDE_FILE("valgrind/valgrind.h" HAVE_VALGRIND_H)
331 CHECK_INCLUDE_FILE("unistd.h" HAVE_UNISTD_H)
332 CHECK_INCLUDE_FILE("linux/futex.h" HAVE_FUTEX_H)
334 CHECK_FUNCTION_EXISTS(dlfunc HAVE_DLFUNC)
335 CHECK_FUNCTION_EXISTS(gettimeofday HAVE_GETTIMEOFDAY)
336 CHECK_FUNCTION_EXISTS(nanosleep HAVE_NANOSLEEP)
337 CHECK_FUNCTION_EXISTS(sysconf HAVE_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 # The detection of vasprintf fails on MinGW, assumingly because it's
345 # defined as an inline function in stdio.h instead of a regular
346 # function. So force the result to be 1 despite of the test.
347 set(HAVE_VASPRINTF 1)
350 CHECK_INCLUDE_FILE("sys/sendfile.h" HAVE_SENDFILE_H)
351 CHECK_FUNCTION_EXISTS(sendfile HAVE_SENDFILE)
352 if(HAVE_SENDFILE_H AND HAVE_SENDFILE)
353 set(SG_HAVE_SENDFILE 1)
355 set(SG_HAVE_SENDFILE 0)
358 if(enable_model-checking AND NOT "${CMAKE_SYSTEM}" MATCHES "Linux|FreeBSD")
359 message(WARNING "Support for model-checking has not been enabled on ${CMAKE_SYSTEM}: disabling it")
360 set(enable_model-checking FALSE)
363 if(enable_model-checking AND minimal-bindings)
364 message(FATAL_ERROR "Compile-time option 'minimal-bindings' cannot be enabled with 'model-checking'")
371 if(enable_model-checking)
372 message(STATUS "Warning: support for model-checking has been disabled because you are missing either mmap or __thread.")
374 SET(enable_model-checking 0)
377 if(enable_mallocators)
378 SET(SIMGRID_HAVE_MALLOCATOR 1)
380 SET(SIMGRID_HAVE_MALLOCATOR 0)
383 if(enable_model-checking)
384 include(FindLibunwind)
386 SET(SIMGRID_DEP "${SIMGRID_DEP} ${LIBUNWIND_LIBRARIES}")
388 message(FATAL_ERROR "Please install libunwind-dev libdw-dev libelf-dev libevent-dev if you want to compile the SimGrid model checker.")
390 find_package(Libdw REQUIRED)
391 find_package(Libelf REQUIRED)
392 find_package(Libevent REQUIRED)
393 include_directories(${LIBDW_INCLUDE_DIR} ${LIBELF_INCLUDE_DIR} ${LIBEVENT_INCLUDE_DIR})
394 set(SIMGRID_DEP "${SIMGRID_DEP} ${LIBEVENT_LIBRARIES} ${LIBELF_LIBRARIES} ${LIBDW_LIBRARIES}")
395 set(SIMGRID_HAVE_MC 1)
396 if("${CMAKE_SYSTEM}" MATCHES "FreeBSD" AND enable_java)
397 message(WARNING "FreeBSD + Model-Checking + Java = too much for now. Disabling the Java bindings.")
398 set(enable_java FALSE)
401 SET(SIMGRID_HAVE_MC 0)
404 mark_as_advanced(PATH_LIBDW_H)
405 mark_as_advanced(PATH_LIBDW_LIB)
407 if(enable_java AND NOT enable_msg)
408 message(FATAL_ERROR "Cannot activate the Java bindings without the MSG module. Either add -Denable_msg=ON or -Denable_java=OFF")
411 if (enable_model-checking AND enable_ns3)
412 message(WARNING "Activating both model-checking and ns-3 bindings is considered experimental.")
418 message (STATUS "Warning: no support for SMPI automatic privatization on Windows.")
419 SET(HAVE_PRIVATIZATION 0)
421 SET(HAVE_PRIVATIZATION 1)
427 #--------------------------------------------------------------------------------------------------
428 ### Check what context backends are available
430 set(HAVE_UCONTEXT_CONTEXTS 0)
431 CHECK_INCLUDE_FILE("ucontext.h" HAVE_UCONTEXT_H)
432 if(NOT HAVE_UCONTEXT_H)
433 message(STATUS "No ucontext factory: <ucontext.h> not found.")
435 message(STATUS "No ucontext factory: Apple don't want us to use them.")
436 set(HAVE_UCONTEXT_H 0)
438 try_compile(compile_makecontext ${CMAKE_BINARY_DIR} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_makecontext.c
439 OUTPUT_VARIABLE compile_makecontext_output)
441 #If can have both context
442 if(compile_makecontext)
443 set(HAVE_UCONTEXT_CONTEXTS 1)
444 message(STATUS "Support for ucontext factory ok.")
446 message(STATUS "Error: <ucontext.h> exists, but makecontext is not compilable. Compilation output:\n ${compile_makecontext_output}")
447 message(STATUS "No ucontext factory: makecontext() is not compilable.")
450 # Stack setup (size and address)
451 try_run(RUN_makecontext_VAR COMPILE_makecontext_VAR
452 ${CMAKE_BINARY_DIR} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_stacksetup.c
453 RUN_OUTPUT_VARIABLE stack_setup)
455 LIST(LENGTH stack_setup stack_setup_len)
456 if("${stack_setup_len}" STREQUAL "2")
457 LIST(GET stack_setup 0 makecontext_addr)
458 LIST(GET stack_setup 1 makecontext_size)
459 set(sg_makecontext_stack_addr "#define sg_makecontext_stack_addr(skaddr) (${makecontext_addr})")
460 set(sg_makecontext_stack_size "#define sg_makecontext_stack_size(sksize) (${makecontext_size})")
462 message(FATAL_ERROR "Could not figure out the stack setup. Compil: ${RUN_makecontext_VAR}. Exec: ${COMPILE_makecontext_VAR}. Output: ${stack_setup}")
466 # Stack growth direction (upward or downward). Used for the following contexts: SysV, raw, Boost
467 try_run(RUN_stackgrowth_VAR COMPILE_stackgrowth_VAR
469 ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_stackgrowth.c
470 RUN_OUTPUT_VARIABLE stack
471 COPY_FILE test_stackgrowth)
473 if("${stack}" STREQUAL "down")
474 set(PTH_STACKGROWTH "-1")
475 elseif("${stack}" STREQUAL "up")
476 set(PTH_STACKGROWTH "1")
478 if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64")
479 set(PTH_STACKGROWTH "-1")
480 elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "i686")
481 set(PTH_STACKGROWTH "-1")
483 message(FATAL_ERROR "Could not figure out the stack direction. Test prog returned: ${stack}; CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}.")
486 # If the test ran well, remove the test binary
487 file(REMOVE test_stackgrowth)
488 #--------------------------------------------------------------------------------------------------
493 if(EXISTS ${CMAKE_HOME_DIRECTORY}/.git/)
494 execute_process(COMMAND git rev-parse --verify --short HEAD
495 WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}
496 OUTPUT_VARIABLE GIT_VERSION
497 OUTPUT_STRIP_TRAILING_WHITESPACE)
498 # Check for uncommitted changes
499 execute_process(COMMAND git diff --name-only HEAD
500 WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}
501 OUTPUT_VARIABLE files_changed)
503 set(GIT_VERSION "${GIT_VERSION}-dirty")
505 elseif(EXISTS ${CMAKE_HOME_DIRECTORY}/.gitversion)
506 FILE(STRINGS ${CMAKE_HOME_DIRECTORY}/.gitversion GIT_VERSION)
508 set(GIT_VERSION "none, release version")
510 message(STATUS "Git version: ${GIT_VERSION}")
512 ### Define source packages for Libs
513 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/DefinePackages.cmake)
515 ### Setup gcc & clang flags (include after DefinePackage.cmake, and before generating header files)
517 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Flags.cmake)
520 ### Generate the required headers and scripts
521 #############################################
523 # Avoid triggering a (full) rebuild by touching the files if they did not really change
524 configure_file("${CMAKE_HOME_DIRECTORY}/src/internal_config.h.in" "${CMAKE_BINARY_DIR}/src/internal_config.h.generated" @ONLY IMMEDIATE)
525 configure_file("${CMAKE_HOME_DIRECTORY}/include/simgrid/version.h.in" "${CMAKE_BINARY_DIR}/include/simgrid/version.h.generated" @ONLY IMMEDIATE)
526 configure_file("${CMAKE_HOME_DIRECTORY}/include/simgrid/config.h.in" "${CMAKE_BINARY_DIR}/include/simgrid/config.h.generated" @ONLY IMMEDIATE)
527 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/src/internal_config.h.generated ${CMAKE_BINARY_DIR}/src/internal_config.h)
528 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/include/simgrid/version.h.generated ${CMAKE_BINARY_DIR}/include/simgrid/version.h)
529 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/include/simgrid/config.h.generated ${CMAKE_BINARY_DIR}/include/simgrid/config.h)
530 file(REMOVE ${CMAKE_BINARY_DIR}/src/internal_config.h.generated)
531 file(REMOVE ${CMAKE_BINARY_DIR}/include/simgrid/config.h.generated)
532 file(REMOVE ${CMAKE_BINARY_DIR}/include/simgrid/version.h.generated)
534 # We need two versions of the SMPI scripts because they contain the path to the library
535 # so, it depends of whether SimGrid is installed, or run from the sources (during the build)
537 file(READ ${CMAKE_HOME_DIRECTORY}/src/smpi/smpitools.sh SMPITOOLS_SH) # Definitions shared amongst all SMPI scripts, inlined in each of them
539 ### SMPI script used when simgrid is installed
540 set(exec_prefix ${CMAKE_INSTALL_PREFIX})
541 set(includedir "${CMAKE_INSTALL_FULL_INCLUDEDIR}")
542 set(libdir "${CMAKE_INSTALL_FULL_LIBDIR}")
543 set(includeflag "\"-I${includedir}\" \"-I${includedir}/smpi\"")
544 set(CMAKE_SMPI_COMMAND "export LD_LIBRARY_PATH=\"${libdir}")
546 set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}:${NS3_LIBRARY_PATH}")
548 set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}\${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}\"")
549 set(SMPIMAIN ${libdir}/simgrid/smpimain)
550 set(SMPIREPLAYMAIN ${libdir}/simgrid/smpireplaymain)
552 configure_file(${CMAKE_HOME_DIRECTORY}/include/smpi/mpif.h.in ${CMAKE_BINARY_DIR}/include/smpi/mpif.h @ONLY)
553 #configure mpif.f90 to build mpi.mod
555 set(MODULE_MPIF_IN "module mpi")
556 set(MODULE_MPIF_OUT "end module mpi")
557 configure_file(${CMAKE_HOME_DIRECTORY}/include/smpi/mpif.h.in ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90.generated @ONLY)
558 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90.generated ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90)
559 set(CMAKE_Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/include/smpi)
560 add_library(mpi SHARED ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90)
563 foreach(script cc cxx ff f90 run)
564 configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpi${script}.in ${CMAKE_BINARY_DIR}/bin/smpi${script} @ONLY)
567 ### SMPI scripts used when compiling simgrid
568 set(exec_prefix "${CMAKE_BINARY_DIR}/smpi_script/")
569 set(includedir "${CMAKE_HOME_DIRECTORY}/include")
570 set(libdir "${CMAKE_BINARY_DIR}/lib")
571 set(includeflag "\"-I${includedir}\" \"-I${includedir}/smpi\"")
572 set(includeflag "${includeflag} \"-I${CMAKE_BINARY_DIR}/include\" \"-I${CMAKE_BINARY_DIR}/include/smpi\"")
573 set(CMAKE_SMPI_COMMAND "export LD_LIBRARY_PATH=\"${libdir}")
575 set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}:${NS3_LIBRARY_PATH}")
577 set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}\${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}\"")
578 set(SMPIMAIN ${libdir}/simgrid/smpimain)
579 set(SMPIREPLAYMAIN ${libdir}/simgrid/smpireplaymain)
581 foreach(script cc cxx ff f90 run)
582 configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpi${script}.in ${CMAKE_BINARY_DIR}/smpi_script/bin/smpi${script} @ONLY)
586 foreach(script cc cxx ff f90 run)
587 execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpi${script})
588 execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/smpi_script/bin/smpi${script})
592 set(generated_headers_to_install
593 ${CMAKE_CURRENT_BINARY_DIR}/include/smpi/mpif.h
594 ${CMAKE_CURRENT_BINARY_DIR}/include/simgrid/config.h
595 ${CMAKE_CURRENT_BINARY_DIR}/include/simgrid/version.h
598 set(generated_headers ${CMAKE_CURRENT_BINARY_DIR}/src/internal_config.h )
600 set(generated_files_to_clean
602 ${generated_headers_to_install}
603 ${CMAKE_BINARY_DIR}/bin/smpicc
604 ${CMAKE_BINARY_DIR}/bin/smpicxx
605 ${CMAKE_BINARY_DIR}/bin/smpiff
606 ${CMAKE_BINARY_DIR}/bin/smpif90
607 ${CMAKE_BINARY_DIR}/bin/smpirun
608 ${CMAKE_BINARY_DIR}/bin/colorize
609 ${CMAKE_BINARY_DIR}/bin/simgrid_update_xml
610 ${CMAKE_BINARY_DIR}/examples/smpi/tracing/smpi_traced.trace
613 if(NOT "${CMAKE_BINARY_DIR}" STREQUAL "${CMAKE_HOME_DIRECTORY}")
614 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions0.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions0.txt COPYONLY)
615 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions1.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions1.txt COPYONLY)
616 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_allreduce.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allreduce.txt COPYONLY)
617 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_barrier.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_barrier.txt COPYONLY)
618 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_bcast.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_bcast.txt COPYONLY)
619 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_with_isend.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_with_isend.txt COPYONLY)
620 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_alltoall.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoall.txt COPYONLY)
621 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_alltoallv.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoallv.txt COPYONLY)
622 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_waitall.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_waitall.txt COPYONLY)
623 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_reducescatter.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_reducescatter.txt COPYONLY)
624 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_gather.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_gather.txt COPYONLY)
625 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_allgatherv.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allgatherv.txt COPYONLY)
626 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile COPYONLY)
627 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_cluster ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_cluster COPYONLY)
628 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_griffon ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_griffon COPYONLY)
629 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_coll ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_coll COPYONLY)
630 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_io ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_io COPYONLY)
631 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_empty ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_empty COPYONLY)
633 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/description_file ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/description_file COPYONLY)
634 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/README ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/README COPYONLY)
635 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/smpi_replay.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/smpi_replay.txt COPYONLY)
636 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)
637 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)
638 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)
639 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)
640 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)
641 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)
642 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)
643 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)
644 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)
645 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)
646 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)
647 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)
648 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)
649 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)
650 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)
651 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)
652 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)
653 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)
654 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)
655 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)
656 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)
657 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)
658 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)
659 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)
660 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)
661 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)
662 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)
663 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)
664 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)
665 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)
666 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)
667 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)
669 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)
670 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)
671 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)
672 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)
673 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)
674 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)
675 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)
676 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)
677 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)
678 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)
679 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)
680 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)
681 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)
682 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)
683 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)
685 set(generated_files_to_clean
686 ${generated_files_to_clean}
687 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions0.txt
688 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions1.txt
689 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allreduce.txt
690 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_barrier.txt
691 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_bcast.txt
692 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_with_isend.txt
693 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoall.txt
694 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoallv.txt
695 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_waitall.txt
696 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_gather.txt
697 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allgatherv.txt
698 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_reducescatter.txt
699 ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile
700 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/description_file
701 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/README
702 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/smpi_replay.txt
703 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace0.txt
704 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace1.txt
705 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace2.txt
706 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace3.txt
707 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace4.txt
708 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace5.txt
709 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace6.txt
710 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace7.txt
711 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace8.txt
712 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace9.txt
713 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace10.txt
714 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace11.txt
715 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace12.txt
716 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace13.txt
717 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace14.txt
718 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace15.txt
719 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace16.txt
720 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace17.txt
721 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace18.txt
722 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace19.txt
723 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace20.txt
724 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace21.txt
725 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace22.txt
726 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace23.txt
727 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace24.txt
728 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace25.txt
729 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace26.txt
730 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace27.txt
731 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace28.txt
732 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace29.txt
733 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace30.txt
734 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace31.txt
735 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/compute_only.txt
736 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/compute_only/actions0.txt
737 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/compute_only/actions1.txt
738 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/empty.txt
739 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/empty/actions0.txt
740 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/empty/actions1.txt
741 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/mixed.txt
742 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/mixed/actions0.txt
743 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/mixed/actions1.txt
744 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/replay_multiple_manual.tesh
745 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute
746 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute_consecutive
747 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute_consecutive2
748 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute_simple
749 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty1
750 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2
751 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2_same_resources
752 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2_same_time
753 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2_same_time_and_resources
754 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed1
755 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2
756 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2_same_resources
757 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2_same_time
758 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2_same_time_and_resources
759 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_nojob
763 SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES
764 "${generated_files_to_clean}")
766 add_custom_target(tests COMMENT "Recompiling the tests")
767 add_custom_target(tests-mc COMMENT "Recompiling the MC tests and tools.")
768 add_dependencies(tests tests-mc)
770 ### Build some Maintainer files
771 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/MaintainerMode.cmake)
775 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/MakeLib.cmake)
777 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/MakeLibWin.cmake)
781 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Java.cmake)
784 # Python binding (with pybind11)
786 if((NOT DEFINED enable_python) OR enable_python)
787 if(EXISTS ${CMAKE_HOME_DIRECTORY}/pybind11) # Try to use a local copy of pybind11, if any
788 message(STATUS "Use the internal copy of pybind11.")
789 add_subdirectory(${CMAKE_HOME_DIRECTORY}/pybind11)
790 set(pybind11_FOUND ON)
792 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_HOME_DIRECTORY}/pybind11/tools/)
793 set(Python_ADDITIONAL_VERSIONS 3.9 3.8 3.7 3.6 3.5 3.4)
794 find_package(PythonLibsNew ${PYBIND11_PYTHON_VERSION} REQUIRED)
797 find_package(pybind11 CONFIG)
798 message(STATUS "Pybind11 version: ${pybind11_VERSION}")
799 if (pybind11_VERSION VERSION_LESS 2.4)
800 message(STATUS "SimGrid needs at least v2.4 of pybind11. Disabling the Python bindings.")
801 set(pybind11_FOUND OFF)
805 if(NOT PYTHONLIBS_FOUND AND NOT Python3_Development_FOUND)
806 message(STATUS "Python libs not found. Turn pybind11 off.")
808 set(pybind11_FOUND OFF)
812 option(enable_python "Whether the Python bindings are activated." ${pybind11_FOUND}) # ON by default if dependencies are met
814 if("${CMAKE_SYSTEM}" MATCHES "FreeBSD" AND enable_model-checking AND enable_python)
815 message(WARNING "FreeBSD + Model-Checking + Python = too much for now. Disabling the Python bindings.")
816 set(enable_python FALSE)
821 message(STATUS "Found pybind11.")
823 set(pybind11_options NO_EXTRAS)
825 pybind11_add_module(python-bindings src/bindings/python/simgrid_python.cpp ${pybind11_options})
826 target_compile_features(python-bindings PRIVATE cxx_std_14)
827 target_link_libraries(python-bindings PUBLIC simgrid)
828 set_target_properties(python-bindings PROPERTIES
829 LIBRARY_OUTPUT_NAME simgrid
830 CXX_VISIBILITY_PRESET "default"
831 INTERPROCEDURAL_OPTIMIZATION FALSE)
832 # LTO is disabled here from the python bindings because this makes a
833 # cmake warning about CMP0069 even when this policy is set. This
834 # problem may be in cmake, in pybind11 or even in our code, not sure.
835 # It may get eventually solved in cmake or pybind11. Or not.
836 # The sure thing is that our python bindings are in one file only,
837 # so there is no need for LTO here. Problem solved :)
839 add_dependencies(tests python-bindings)
840 set_property(TARGET python-bindings
841 APPEND PROPERTY INCLUDE_DIRECTORIES "${INTERNAL_INCLUDES}")
843 if("${SIMGRID_PYTHON_LIBDIR}" STREQUAL "") # value not manually set
844 if("${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr")
845 set(SIMGRID_PYTHON_LIBDIR ${Python3_SITEARCH})
846 else("${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr")
847 string(REGEX REPLACE "^/usr/" "${CMAKE_INSTALL_PREFIX}/" SIMGRID_PYTHON_LIBDIR ${Python3_SITEARCH})
848 endif("${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr")
850 install(TARGETS python-bindings
851 LIBRARY DESTINATION "${SIMGRID_PYTHON_LIBDIR}")
853 message(FATAL_ERROR "Please install pybind11-dev to build the Python bindings (or disable that option).")
856 mark_as_advanced(PYBIND11_PYTHON_VERSION)
857 mark_as_advanced(pybind11_DIR)
860 if(enable_memcheck_xml)
861 set(enable_memcheck true)
866 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Tests.cmake)
867 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/CTestConfig.cmake)
869 ### Define subdirectories
870 foreach(cmakefile ${CMAKEFILES_TXT})
871 string(REPLACE "/CMakeLists.txt" "" repository ${cmakefile})
872 add_subdirectory("${CMAKE_HOME_DIRECTORY}/${repository}")
875 ### Setup the distrib
876 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Distrib.cmake)
878 ### Build the docs if asked to
879 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Documentation.cmake)
881 ### Print the result of configuration
883 message("##########################################")
884 message("#### Content of src/internal_config.h ####")
885 message("##########################################")
886 file(STRINGS ${CMAKE_CURRENT_BINARY_DIR}/src/internal_config.h config_output)
887 LIST(REMOVE_AT config_output 0 1 2 3 4 5 6 7 8 9 10) # Pass the file header
888 foreach(line ${config_output})
891 message("##########################################")
892 message("#### Content of simgrid/config.h ####")
893 message("##########################################")
894 file(STRINGS ${CMAKE_CURRENT_BINARY_DIR}/include/simgrid/config.h config_output)
895 LIST(REMOVE_AT config_output 0 1 2 3 4 5 6 7 8 9 -1) # Pass the file header
896 foreach(line ${config_output})
899 message("##########################################")
900 message("#### End of configuration headers ####")
901 message("##########################################")
903 message("\nConfiguration of package `simgrid':")
904 message(" Home directory ..............: ${CMAKE_HOME_DIRECTORY}")
905 message(" Build Name ..................: ${BUILDNAME}")
906 message(" Cmake Generator .............: ${CMAKE_GENERATOR}")
907 message(" Site ........................: ${SITE}")
908 message(" Install prefix ..............: ${CMAKE_INSTALL_PREFIX}")
909 message(" Release .....................: simgrid-${release_version}")
911 message(" Compiler: C .................: ${CMAKE_C_COMPILER} (id: ${CMAKE_C_COMPILER_ID})")
912 message(" version .............: ${CMAKE_C_COMPILER_VERSION}")
913 message(" is gnu ..............: ${CMAKE_COMPILER_IS_GNUCC}")
914 message(" Compiler: C++ ...............: ${CMAKE_CXX_COMPILER} (id: ${CMAKE_CXX_COMPILER_ID})")
915 message(" version .............: ${CMAKE_CXX_COMPILER_VERSION}")
917 message(" Compiler: Javac .............: ${Java_JAVAC_EXECUTABLE}")
918 message(" version .............: ${Java_VERSION_STRING}")
919 message(" runtime .............: ${Java_JAVA_EXECUTABLE}")
921 if(CMAKE_Fortran_COMPILER)
922 message(" Compiler: Fortran ...........: ${SMPI_Fortran_COMPILER} (id: ${CMAKE_Fortran_COMPILER_ID})")
923 message(" version .............: ${CMAKE_Fortran_COMPILER_VERSION}")
925 message(" Linker: .....................: ${CMAKE_LINKER}")
926 message(" version .............: ${LINKER_VERSION}")
927 message(" Make program: ...............: ${CMAKE_MAKE_PROGRAM}")
929 message(" CFlags ......................: ${CMAKE_C_FLAGS}")
930 message(" CXXFlags ....................: ${CMAKE_CXX_FLAGS}")
931 message(" LDFlags .....................: ${CMAKE_C_LINK_FLAGS}")
932 message(" with LTO ....................: ${enable_lto}")
935 if (SIMGRID_HAVE_MSG)
936 message(" Compile MSG .................: ON")
938 message(" Compile MSG .................: OFF")
941 if (SIMGRID_HAVE_NS3)
942 message(" Compile ns-3 ................: ON (path: ${NS3_PATH})")
944 message(" Compile ns-3 ................: OFF (hint: ${NS3_HINT})")
948 message(" Compile Java ................: ON")
949 message(" Native lib in jar .........: ${enable_lib_in_jar}")
951 message(" Compile Java ................: OFF")
954 message(" Compile Python bindings .....: ${enable_python}")
955 message(" module ....................: ${PYTHON_MODULE_PREFIX}simgrid${PYTHON_MODULE_EXTENSION}")
956 message(" install path ..............: ${SIMGRID_PYTHON_LIBDIR} (force another value with -DSIMGRID_PYTHON_LIBDIR)")
958 message(" Compile Python bindings .....: OFF (disabled, or pybind11 not found)")
960 message(" Compile Smpi ................: ${HAVE_SMPI}")
961 message(" Smpi fortran ..............: ${SMPI_FORTRAN}")
962 message(" MPICH3 testsuite ..........: ${enable_smpi_MPICH3_testsuite}")
963 message(" MBI testsuite .............: ${enable_smpi_MBI_testsuite}")
964 message(" Privatization .............: ${HAVE_PRIVATIZATION}")
965 message(" PAPI support...............: ${HAVE_PAPI}")
966 message(" Compile Boost.Context support: ${HAVE_BOOST_CONTEXTS}")
968 message(" Maintainer mode .............: ${enable_maintainer_mode}")
969 message(" Documentation................: ${enable_documentation}")
970 message(" Model checking ..............: ${SIMGRID_HAVE_MC}")
971 message(" Graphviz mode ...............: ${HAVE_GRAPHVIZ}")
972 message(" Mallocators .................: ${enable_mallocators}")
974 message(" Simgrid dependencies ........: ${SIMGRID_DEP}")
977 execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_BINARY_DIR}/Testing/Notes/)
978 file(WRITE ${PROJECT_BINARY_DIR}/Testing/Notes/Build "GIT version : ${GIT_VERSION}\n")
979 file(APPEND ${PROJECT_BINARY_DIR}/Testing/Notes/Build "Release : simgrid-${release_version}\n")