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)
70 ### Check for Eigen library
71 find_package (Eigen3 3.3 REQUIRED NO_MODULE)
74 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Option.cmake)
77 if ((NOT DEFINED enable_smpi) OR enable_smpi)
78 # First unset the compiler in case we're re-running cmake over a previous
79 # configuration where it was saved as smpiff
80 unset(CMAKE_Fortran_COMPILER)
84 enable_language(Fortran OPTIONAL)
87 if(CMAKE_Fortran_COMPILER)
89 # Fortran compiler detected: save it, then replace by smpiff
90 set(SMPI_Fortran_COMPILER "${CMAKE_Fortran_COMPILER}" CACHE FILEPATH "The real Fortran compiler")
92 # Set flags/libs to be used in smpiff
93 if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU")
94 set(SMPI_Fortran_FLAGS_ "\"-fpic\" \"-ff2c\" \"-fno-second-underscore\"")
95 set(SMPI_Fortran_LIBS "\"-lgfortran\"")
97 elseif(CMAKE_Fortran_COMPILER_ID MATCHES "Intel")
98 set(SMPI_Fortran_FLAGS_ "\"-fPIC\" \"-nofor-main\"")
99 set(SMPI_Fortran_LIBS "\"-lifcore\"")
101 elseif(CMAKE_Fortran_COMPILER_ID MATCHES "PGI|Flang") # flang
102 set(SMPI_Fortran_FLAGS_ "\"-fPIC\"")
103 set(SMPI_Fortran_LIBS "")
106 set(SMPI_Fortran_FLAGS "${SMPI_Fortran_FLAGS_} ${SMPI_Fortran_FLAGS}")
108 ## Request debugging flags for Fortran too
109 set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -g")
112 endif(CMAKE_Fortran_COMPILER)
116 ### SET THE LIBRARY EXTENSION
126 execute_process(COMMAND ${CMAKE_LINKER} -v OUTPUT_VARIABLE LINKER_VERSION ERROR_VARIABLE LINKER_VERSION)
127 string(REGEX MATCH "[0-9].[0-9]*" LINKER_VERSION "${LINKER_VERSION}")
129 ### Find programs and paths
130 FIND_PROGRAM(GCOV_PATH gcov)
133 message(FATAL_ERROR "Please install Perl to compile SimGrid.")
136 # tesh.py needs python 3 (or the module python-subprocess32 on python2.8+)
137 if(CMAKE_VERSION VERSION_LESS "3.12")
138 set(PythonInterp_FIND_VERSION 3)
139 set(PythonInterp_FIND_VERSION_COUNT 1)
140 set(PythonInterp_FIND_VERSION_MAJOR 3)
141 include(FindPythonInterp)
142 if(NOT PYTHONINTERP_FOUND)
143 message(FATAL_ERROR "Please install Python (version 3 or higher) to compile SimGrid.")
146 find_package(Python3 COMPONENTS Interpreter Development)
147 if(NOT Python3_Interpreter_FOUND)
148 message(FATAL_ERROR "Please install Python (version 3 or higher) to compile SimGrid.")
150 set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE})
153 SET(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib)
155 ### Compute the include paths
157 # Only include public headers by default
159 ${CMAKE_BINARY_DIR}/include
160 ${CMAKE_HOME_DIRECTORY}/include
163 # Compute the ones that should be added when compiling the library
164 set(INTERNAL_INCLUDES
166 ${CMAKE_HOME_DIRECTORY}
167 ${CMAKE_HOME_DIRECTORY}/src/include
171 set (INTERNAL_INCLUDES ${INTERNAL_INCLUDES} ${CMAKE_HOME_DIRECTORY}/src/smpi/include)
174 if(NOT CMAKE_CROSSCOMPILING AND EXISTS /usr/include/)
175 set(INTERNAL_INCLUDES ${INTERNAL_INCLUDES} /usr/include/)
179 set(CMAKE_INCLUDE_WIN "${CMAKE_C_COMPILER}")
180 set(CMAKE_LIB_WIN "${CMAKE_C_COMPILER}")
181 string(REGEX REPLACE "/bin/gcc.*" "/include" CMAKE_INCLUDE_WIN "${CMAKE_INCLUDE_WIN}")
182 string(REGEX REPLACE "/bin/gcc.*" "/lib" CMAKE_LIB_WIN "${CMAKE_LIB_WIN}")
183 set(INTERNAL_INCLUDES ${INTERNAL_INCLUDES} ${CMAKE_INCLUDE_WIN})
184 unset(CMAKE_INCLUDE_WIN)
187 # library dependency cannot start with a space (CMP0004), so initialize it with something that is never deactivated.
188 set(SIMGRID_DEP "-lm")
190 ### Determine the assembly flavor that we need today
191 set(HAVE_RAW_CONTEXTS 0)
192 include(CMakeDetermineSystem)
193 IF(CMAKE_SYSTEM_PROCESSOR MATCHES ".86|AMD64|amd64")
194 IF(CMAKE_SIZEOF_VOID_P EQUAL 4) # 32 bits
195 message(STATUS "System processor: i686 (${CMAKE_SYSTEM_PROCESSOR}, 32 bits)")
196 set(SIMGRID_PROCESSOR_i686 1)
197 set(SIMGRID_PROCESSOR_x86_64 0)
199 message(STATUS "System processor: x86_64 (${CMAKE_SYSTEM_PROCESSOR}, 64 bits)")
200 set(SIMGRID_PROCESSOR_i686 0)
201 set(SIMGRID_PROCESSOR_x86_64 1)
204 message(STATUS "Disable fast raw contexts on Windows.")
205 elseif(CMAKE_SIZEOF_VOID_P EQUAL 4 AND CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
206 message(STATUS "Disable fast raw contexts on x32 ABI.")
208 set(HAVE_RAW_CONTEXTS 1)
211 set(SIMGRID_PROCESSOR_i686 0)
212 set(SIMGRID_PROCESSOR_x86_64 0)
215 include(CheckFunctionExists)
216 include(CheckTypeSize)
217 include(CheckIncludeFile)
218 include(CheckIncludeFiles)
219 include(CheckLibraryExists)
220 include(CheckSymbolExists)
224 message(STATUS "Don't even look for graphviz, as we build minimal binding libraries.")
226 include(FindGraphviz)
229 set(SIMGRID_HAVE_NS3 0)
232 if (SIMGRID_HAVE_NS3)
233 if (NS3_VERSION VERSION_LESS "3.28")
234 message(FATAL_ERROR "SimGrid needs at least ns-3.28. Please upgrade or disable that cmake option.")
236 set(SIMGRID_HAVE_NS3 1)
237 foreach(lib core csma point-to-point internet network applications wifi)
238 set(SIMGRID_DEP "${SIMGRID_DEP} -lns${NS3_VERSION}-${lib}${NS3_SUFFIX}")
241 message(FATAL_ERROR "Cannot find ns-3. Please install it (apt-get install ns3 libns3-dev) or disable that cmake option")
245 set(SIMGRID_HAVE_MSG 0)
247 set(SIMGRID_HAVE_MSG 1)
251 set(Boost_USE_STATIC_LIBS 1)
258 message(FATAL_ERROR "Cannot find PAPI. Please install it (apt-get install papi-tools libpapi-dev) or disable PAPI bindings.")
262 # But we do need the core of Boost
263 # cmake before 3.13.1 does not know about stacktrace components. Fix it.
264 # Usable components: https://www.boost.org/doc/libs/1_65_1/doc/html/stacktrace/configuration_and_build.html
265 set(_Boost_STACKTRACE_HEADERS "boost/stacktrace.hpp")
266 set(_Boost_STACKTRACE_BACKTRACE_HEADERS "boost/stacktrace.hpp")
267 set(_Boost_STACKTRACE_ADDR2LINE_HEADERS "boost/stacktrace.hpp")
269 if(minimal-bindings) # When we want a minimal jarfile, don't even search for boost optional components
270 message(STATUS "Don't even look for boost optional components, as we build minimal binding libraries.")
271 find_package(Boost 1.48)
273 find_package(Boost 1.59 OPTIONAL_COMPONENTS context stacktrace_backtrace stacktrace_addr2line)
276 include_directories(${Boost_INCLUDE_DIRS})
277 message(STATUS "Mandatory components found. SimGrid is compilable.")
278 if (NOT minimal-bindings)
279 message(STATUS "Looking for optional Boost components:")
280 set(Boost_FOUND 1) # These components are optionals
281 CHECK_INCLUDE_FILE("backtrace.h" HAVE_BACKTRACE_H) # check that backtrace is actually possible
282 if (Boost_STACKTRACE_BACKTRACE_FOUND AND HAVE_BACKTRACE_H)
283 message (STATUS " stacktrace: found the fast 'backtrace' implementation. Activating human-readable stack traces.")
284 set(HAVE_BOOST_STACKTRACE_BACKTRACE 1)
286 set(HAVE_BOOST_STACKTRACE_BACKTRACE 0)
287 if (Boost_STACKTRACE_ADDR2LINE_FOUND)
288 message (STATUS " stacktrace: found the slow 'addr2line' implementation. Activating human-readable stack traces.")
289 set(HAVE_BOOST_STACKTRACE_ADDR2LINE 1)
291 message (STATUS " stacktrace: MISSING. Install libboost-stacktrace-dev to display the stacktraces.")
292 set(HAVE_BOOST_STACKTRACE_ADDR2LINE 0)
296 if(Boost_CONTEXT_FOUND)
297 message (STATUS " context: found. Activating Boost contexts.")
298 set(HAVE_BOOST_CONTEXTS 1)
300 message (STATUS " context: MISSING. Install libboost-context-dev for this optional feature.")
301 set(HAVE_BOOST_CONTEXTS 0)
306 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'")
308 find_package(Boost 1.48) #try without optional libraries
310 message(FATAL_ERROR "Boost libraries not found. Install libboost-dev (>= 1.48.0).")
312 include_directories(${Boost_INCLUDE_DIRS})
313 message(STATUS "Mandatory components found. SimGrid is compilable.")
318 # Checks for header libraries functions.
319 CHECK_LIBRARY_EXISTS(rt clock_gettime "" HAVE_POSIX_GETTIME)
320 CHECK_LIBRARY_EXISTS(pthread pthread_setaffinity_np "" HAVE_PTHREAD_SETAFFINITY)
321 CHECK_INCLUDE_FILE("pthread_np.h" HAVE_PTHREAD_NP_H) # for pthread_setaffinity_np() on FreeBSD
323 if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
324 set(CMAKE_REQUIRED_DEFINITIONS "-D_XOPEN_SOURCE=700 -D_DARWIN_C_SOURCE")
326 # Use the GNU version of unusual modifiers like PRIx64
327 add_definitions(-D__USE_MINGW_ANSI_STDIO=1)
328 set(CMAKE_REQUIRED_DEFINITIONS "-D__USE_MINGW_ANSI_STDIO=1")
330 set(CMAKE_REQUIRED_DEFINITIONS "-D_GNU_SOURCE")
333 CHECK_INCLUDE_FILE("valgrind/valgrind.h" HAVE_VALGRIND_H)
334 CHECK_INCLUDE_FILE("unistd.h" HAVE_UNISTD_H)
335 CHECK_INCLUDE_FILE("linux/futex.h" HAVE_FUTEX_H)
337 CHECK_FUNCTION_EXISTS(dlfunc HAVE_DLFUNC)
338 CHECK_FUNCTION_EXISTS(gettimeofday HAVE_GETTIMEOFDAY)
339 CHECK_FUNCTION_EXISTS(nanosleep HAVE_NANOSLEEP)
340 CHECK_FUNCTION_EXISTS(sysconf HAVE_SYSCONF)
341 CHECK_FUNCTION_EXISTS(process_vm_readv HAVE_PROCESS_VM_READV)
342 CHECK_FUNCTION_EXISTS(mmap HAVE_MMAP)
343 CHECK_FUNCTION_EXISTS(mremap HAVE_MREMAP)
345 CHECK_SYMBOL_EXISTS(vasprintf stdio.h HAVE_VASPRINTF)
347 # The detection of vasprintf fails on MinGW, assumingly because it's
348 # defined as an inline function in stdio.h instead of a regular
349 # function. So force the result to be 1 despite of the test.
350 set(HAVE_VASPRINTF 1)
353 CHECK_INCLUDE_FILE("sys/sendfile.h" HAVE_SENDFILE_H)
354 CHECK_FUNCTION_EXISTS(sendfile HAVE_SENDFILE)
355 if(HAVE_SENDFILE_H AND HAVE_SENDFILE)
356 set(SG_HAVE_SENDFILE 1)
358 set(SG_HAVE_SENDFILE 0)
361 if(enable_model-checking AND NOT "${CMAKE_SYSTEM}" MATCHES "Linux|FreeBSD")
362 message(WARNING "Support for model-checking has not been enabled on ${CMAKE_SYSTEM}: disabling it")
363 set(enable_model-checking FALSE)
366 if(enable_model-checking AND minimal-bindings)
367 message(FATAL_ERROR "Compile-time option 'minimal-bindings' cannot be enabled with 'model-checking'")
374 if(enable_model-checking)
375 message(STATUS "Warning: support for model-checking has been disabled because you are missing either mmap or __thread.")
377 SET(enable_model-checking 0)
380 if(enable_mallocators)
381 SET(SIMGRID_HAVE_MALLOCATOR 1)
383 SET(SIMGRID_HAVE_MALLOCATOR 0)
386 if(enable_model-checking)
387 include(FindLibunwind)
389 SET(SIMGRID_DEP "${SIMGRID_DEP} ${LIBUNWIND_LIBRARIES}")
391 message(FATAL_ERROR "Please install libunwind-dev libdw-dev libelf-dev libevent-dev if you want to compile the SimGrid model checker.")
393 find_package(Libdw REQUIRED)
394 find_package(Libelf REQUIRED)
395 find_package(Libevent REQUIRED)
396 include_directories(${LIBDW_INCLUDE_DIR} ${LIBELF_INCLUDE_DIR} ${LIBEVENT_INCLUDE_DIR})
397 set(SIMGRID_DEP "${SIMGRID_DEP} ${LIBEVENT_LIBRARIES} ${LIBELF_LIBRARIES} ${LIBDW_LIBRARIES}")
398 set(SIMGRID_HAVE_MC 1)
399 if("${CMAKE_SYSTEM}" MATCHES "FreeBSD" AND enable_java)
400 message(WARNING "FreeBSD + Model-Checking + Java = too much for now. Disabling the Java bindings.")
401 set(enable_java FALSE)
404 SET(SIMGRID_HAVE_MC 0)
407 mark_as_advanced(PATH_LIBDW_H)
408 mark_as_advanced(PATH_LIBDW_LIB)
410 if(enable_java AND NOT enable_msg)
411 message(FATAL_ERROR "Cannot activate the Java bindings without the MSG module. Either add -Denable_msg=ON or -Denable_java=OFF")
414 if (enable_model-checking AND enable_ns3)
415 message(WARNING "Activating both model-checking and ns-3 bindings is considered experimental.")
421 message (STATUS "Warning: no support for SMPI automatic privatization on Windows.")
422 SET(HAVE_PRIVATIZATION 0)
424 SET(HAVE_PRIVATIZATION 1)
430 #--------------------------------------------------------------------------------------------------
431 ### Check what context backends are available
433 set(HAVE_UCONTEXT_CONTEXTS 0)
434 CHECK_INCLUDE_FILE("ucontext.h" HAVE_UCONTEXT_H)
435 if(NOT HAVE_UCONTEXT_H)
436 message(STATUS "No ucontext factory: <ucontext.h> not found.")
438 message(STATUS "No ucontext factory: Apple don't want us to use them.")
439 set(HAVE_UCONTEXT_H 0)
441 try_compile(compile_makecontext ${CMAKE_BINARY_DIR} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_makecontext.c
442 OUTPUT_VARIABLE compile_makecontext_output)
444 #If can have both context
445 if(compile_makecontext)
446 set(HAVE_UCONTEXT_CONTEXTS 1)
447 message(STATUS "Support for ucontext factory ok.")
449 message(STATUS "Error: <ucontext.h> exists, but makecontext is not compilable. Compilation output:\n ${compile_makecontext_output}")
450 message(STATUS "No ucontext factory: makecontext() is not compilable.")
453 # Stack setup (size and address)
454 try_run(RUN_makecontext_VAR COMPILE_makecontext_VAR
455 ${CMAKE_BINARY_DIR} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_stacksetup.c
456 RUN_OUTPUT_VARIABLE stack_setup)
458 LIST(LENGTH stack_setup stack_setup_len)
459 if("${stack_setup_len}" STREQUAL "2")
460 LIST(GET stack_setup 0 makecontext_addr)
461 LIST(GET stack_setup 1 makecontext_size)
462 set(sg_makecontext_stack_addr "#define sg_makecontext_stack_addr(skaddr) (${makecontext_addr})")
463 set(sg_makecontext_stack_size "#define sg_makecontext_stack_size(sksize) (${makecontext_size})")
465 message(FATAL_ERROR "Could not figure out the stack setup. Compil: ${RUN_makecontext_VAR}. Exec: ${COMPILE_makecontext_VAR}. Output: ${stack_setup}")
469 # Stack growth direction (upward or downward). Used for the following contexts: SysV, raw, Boost
470 try_run(RUN_stackgrowth_VAR COMPILE_stackgrowth_VAR
472 ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_stackgrowth.c
473 RUN_OUTPUT_VARIABLE stack
474 COPY_FILE test_stackgrowth)
476 if("${stack}" STREQUAL "down")
477 set(PTH_STACKGROWTH "-1")
478 elseif("${stack}" STREQUAL "up")
479 set(PTH_STACKGROWTH "1")
481 if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64")
482 set(PTH_STACKGROWTH "-1")
483 elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "i686")
484 set(PTH_STACKGROWTH "-1")
486 message(FATAL_ERROR "Could not figure out the stack direction. Test prog returned: ${stack}; CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}.")
489 # If the test ran well, remove the test binary
490 file(REMOVE test_stackgrowth)
491 #--------------------------------------------------------------------------------------------------
496 if(EXISTS ${CMAKE_HOME_DIRECTORY}/.git/)
497 execute_process(COMMAND git rev-parse --verify --short HEAD
498 WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}
499 OUTPUT_VARIABLE GIT_VERSION
500 OUTPUT_STRIP_TRAILING_WHITESPACE)
501 # Check for uncommitted changes
502 execute_process(COMMAND git diff --name-only HEAD
503 WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}
504 OUTPUT_VARIABLE files_changed)
506 set(GIT_VERSION "${GIT_VERSION}-dirty")
508 elseif(EXISTS ${CMAKE_HOME_DIRECTORY}/.gitversion)
509 FILE(STRINGS ${CMAKE_HOME_DIRECTORY}/.gitversion GIT_VERSION)
511 set(GIT_VERSION "none, release version")
513 message(STATUS "Git version: ${GIT_VERSION}")
515 ### Define source packages for Libs
516 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/DefinePackages.cmake)
518 ### Setup gcc & clang flags (include after DefinePackage.cmake, and before generating header files)
520 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Flags.cmake)
523 ### Generate the required headers and scripts
524 #############################################
526 # Avoid triggering a (full) rebuild by touching the files if they did not really change
527 configure_file("${CMAKE_HOME_DIRECTORY}/src/internal_config.h.in" "${CMAKE_BINARY_DIR}/src/internal_config.h.generated" @ONLY IMMEDIATE)
528 configure_file("${CMAKE_HOME_DIRECTORY}/include/simgrid/version.h.in" "${CMAKE_BINARY_DIR}/include/simgrid/version.h.generated" @ONLY IMMEDIATE)
529 configure_file("${CMAKE_HOME_DIRECTORY}/include/simgrid/config.h.in" "${CMAKE_BINARY_DIR}/include/simgrid/config.h.generated" @ONLY IMMEDIATE)
530 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/src/internal_config.h.generated ${CMAKE_BINARY_DIR}/src/internal_config.h)
531 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/include/simgrid/version.h.generated ${CMAKE_BINARY_DIR}/include/simgrid/version.h)
532 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/include/simgrid/config.h.generated ${CMAKE_BINARY_DIR}/include/simgrid/config.h)
533 file(REMOVE ${CMAKE_BINARY_DIR}/src/internal_config.h.generated)
534 file(REMOVE ${CMAKE_BINARY_DIR}/include/simgrid/config.h.generated)
535 file(REMOVE ${CMAKE_BINARY_DIR}/include/simgrid/version.h.generated)
537 # We need two versions of the SMPI scripts because they contain the path to the library
538 # so, it depends of whether SimGrid is installed, or run from the sources (during the build)
540 file(READ ${CMAKE_HOME_DIRECTORY}/src/smpi/smpitools.sh SMPITOOLS_SH) # Definitions shared amongst all SMPI scripts, inlined in each of them
542 ### SMPI script used when simgrid is installed
543 set(exec_prefix ${CMAKE_INSTALL_PREFIX})
544 set(includedir "${CMAKE_INSTALL_FULL_INCLUDEDIR}")
545 set(libdir "${CMAKE_INSTALL_FULL_LIBDIR}")
546 set(includeflag "\"-I${includedir}\" \"-I${includedir}/smpi\"")
547 set(CMAKE_SMPI_COMMAND "export LD_LIBRARY_PATH=\"${libdir}")
549 set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}:${NS3_LIBRARY_PATH}")
551 set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}\${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}\"")
552 set(SMPIMAIN ${libdir}/simgrid/smpimain)
553 set(SMPIREPLAYMAIN ${libdir}/simgrid/smpireplaymain)
555 configure_file(${CMAKE_HOME_DIRECTORY}/include/smpi/mpif.h.in ${CMAKE_BINARY_DIR}/include/smpi/mpif.h @ONLY)
556 #configure mpif.f90 to build mpi.mod
558 set(MODULE_MPIF_IN "module mpi")
559 set(MODULE_MPIF_OUT "end module mpi")
560 configure_file(${CMAKE_HOME_DIRECTORY}/include/smpi/mpif.h.in ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90.generated @ONLY)
561 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90.generated ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90)
562 set(CMAKE_Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/include/smpi)
563 add_library(mpi SHARED ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90)
566 foreach(script cc cxx ff f90 run)
567 configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpi${script}.in ${CMAKE_BINARY_DIR}/bin/smpi${script} @ONLY)
570 ### SMPI scripts used when compiling simgrid
571 set(exec_prefix "${CMAKE_BINARY_DIR}/smpi_script/")
572 set(includedir "${CMAKE_HOME_DIRECTORY}/include")
573 set(libdir "${CMAKE_BINARY_DIR}/lib")
574 set(includeflag "\"-I${includedir}\" \"-I${includedir}/smpi\"")
575 set(includeflag "${includeflag} \"-I${CMAKE_BINARY_DIR}/include\" \"-I${CMAKE_BINARY_DIR}/include/smpi\"")
576 set(CMAKE_SMPI_COMMAND "export LD_LIBRARY_PATH=\"${libdir}")
578 set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}:${NS3_LIBRARY_PATH}")
580 set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}\${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}\"")
581 set(SMPIMAIN ${libdir}/simgrid/smpimain)
582 set(SMPIREPLAYMAIN ${libdir}/simgrid/smpireplaymain)
584 foreach(script cc cxx ff f90 run)
585 configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpi${script}.in ${CMAKE_BINARY_DIR}/smpi_script/bin/smpi${script} @ONLY)
589 foreach(script cc cxx ff f90 run)
590 execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpi${script})
591 execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/smpi_script/bin/smpi${script})
595 set(generated_headers_to_install
596 ${CMAKE_CURRENT_BINARY_DIR}/include/smpi/mpif.h
597 ${CMAKE_CURRENT_BINARY_DIR}/include/simgrid/config.h
598 ${CMAKE_CURRENT_BINARY_DIR}/include/simgrid/version.h
601 set(generated_headers ${CMAKE_CURRENT_BINARY_DIR}/src/internal_config.h )
603 set(generated_files_to_clean
605 ${generated_headers_to_install}
606 ${CMAKE_BINARY_DIR}/bin/smpicc
607 ${CMAKE_BINARY_DIR}/bin/smpicxx
608 ${CMAKE_BINARY_DIR}/bin/smpiff
609 ${CMAKE_BINARY_DIR}/bin/smpif90
610 ${CMAKE_BINARY_DIR}/bin/smpirun
611 ${CMAKE_BINARY_DIR}/bin/colorize
612 ${CMAKE_BINARY_DIR}/bin/simgrid_update_xml
613 ${CMAKE_BINARY_DIR}/examples/smpi/tracing/smpi_traced.trace
616 if(NOT "${CMAKE_BINARY_DIR}" STREQUAL "${CMAKE_HOME_DIRECTORY}")
617 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions0.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions0.txt COPYONLY)
618 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions1.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions1.txt COPYONLY)
619 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_allreduce.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allreduce.txt COPYONLY)
620 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_barrier.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_barrier.txt COPYONLY)
621 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_bcast.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_bcast.txt COPYONLY)
622 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_with_isend.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_with_isend.txt COPYONLY)
623 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_alltoall.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoall.txt COPYONLY)
624 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_alltoallv.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoallv.txt COPYONLY)
625 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_waitall.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_waitall.txt COPYONLY)
626 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_reducescatter.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_reducescatter.txt COPYONLY)
627 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_gather.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_gather.txt COPYONLY)
628 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_allgatherv.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allgatherv.txt COPYONLY)
629 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile COPYONLY)
630 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_cluster ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_cluster COPYONLY)
631 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_griffon ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_griffon COPYONLY)
632 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_coll ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_coll COPYONLY)
633 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_io ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_io COPYONLY)
634 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_empty ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_empty COPYONLY)
636 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/description_file ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/description_file COPYONLY)
637 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/README ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/README COPYONLY)
638 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/smpi_replay.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/smpi_replay.txt COPYONLY)
639 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)
640 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)
641 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)
642 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)
643 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)
644 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)
645 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)
646 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)
647 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)
648 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)
649 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)
650 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)
651 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)
652 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)
653 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)
654 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)
655 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)
656 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)
657 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)
658 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)
659 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)
660 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)
661 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)
662 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)
663 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)
664 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)
665 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)
666 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)
667 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)
668 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)
669 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)
670 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)
672 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)
673 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)
674 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)
675 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)
676 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)
677 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)
678 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)
679 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)
680 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)
681 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)
682 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)
683 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)
684 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)
685 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)
686 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)
688 set(generated_files_to_clean
689 ${generated_files_to_clean}
690 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions0.txt
691 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions1.txt
692 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allreduce.txt
693 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_barrier.txt
694 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_bcast.txt
695 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_with_isend.txt
696 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoall.txt
697 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoallv.txt
698 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_waitall.txt
699 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_gather.txt
700 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allgatherv.txt
701 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_reducescatter.txt
702 ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile
703 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/description_file
704 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/README
705 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/smpi_replay.txt
706 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace0.txt
707 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace1.txt
708 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace2.txt
709 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace3.txt
710 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace4.txt
711 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace5.txt
712 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace6.txt
713 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace7.txt
714 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace8.txt
715 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace9.txt
716 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace10.txt
717 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace11.txt
718 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace12.txt
719 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace13.txt
720 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace14.txt
721 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace15.txt
722 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace16.txt
723 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace17.txt
724 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace18.txt
725 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace19.txt
726 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace20.txt
727 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace21.txt
728 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace22.txt
729 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace23.txt
730 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace24.txt
731 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace25.txt
732 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace26.txt
733 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace27.txt
734 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace28.txt
735 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace29.txt
736 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace30.txt
737 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace31.txt
738 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/compute_only.txt
739 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/compute_only/actions0.txt
740 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/compute_only/actions1.txt
741 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/empty.txt
742 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/empty/actions0.txt
743 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/empty/actions1.txt
744 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/mixed.txt
745 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/mixed/actions0.txt
746 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/mixed/actions1.txt
747 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/replay_multiple_manual.tesh
748 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute
749 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute_consecutive
750 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute_consecutive2
751 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute_simple
752 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty1
753 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2
754 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2_same_resources
755 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2_same_time
756 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2_same_time_and_resources
757 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed1
758 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2
759 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2_same_resources
760 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2_same_time
761 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2_same_time_and_resources
762 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_nojob
766 SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES
767 "${generated_files_to_clean}")
769 add_custom_target(tests COMMENT "Recompiling the tests")
770 add_custom_target(tests-mc COMMENT "Recompiling the MC tests and tools.")
771 add_dependencies(tests tests-mc)
773 ### Build some Maintainer files
774 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/MaintainerMode.cmake)
778 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/MakeLib.cmake)
780 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/MakeLibWin.cmake)
784 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Java.cmake)
787 # Python binding (with pybind11)
789 if((NOT DEFINED enable_python) OR enable_python)
790 if(EXISTS ${CMAKE_HOME_DIRECTORY}/pybind11) # Try to use a local copy of pybind11, if any
791 message(STATUS "Use the internal copy of pybind11.")
792 add_subdirectory(${CMAKE_HOME_DIRECTORY}/pybind11)
793 set(pybind11_FOUND ON)
795 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_HOME_DIRECTORY}/pybind11/tools/)
796 set(Python_ADDITIONAL_VERSIONS 3.9 3.8 3.7 3.6 3.5 3.4)
797 find_package(PythonLibsNew ${PYBIND11_PYTHON_VERSION} REQUIRED)
800 find_package(pybind11 CONFIG)
801 message(STATUS "Pybind11 version: ${pybind11_VERSION}")
802 if (pybind11_VERSION VERSION_LESS 2.4)
803 message(STATUS "SimGrid needs at least v2.4 of pybind11. Disabling the Python bindings.")
804 set(pybind11_FOUND OFF)
808 if(NOT PYTHONLIBS_FOUND AND NOT Python3_Development_FOUND)
809 message(STATUS "Python libs not found. Turn pybind11 off.")
811 set(pybind11_FOUND OFF)
815 option(enable_python "Whether the Python bindings are activated." ${pybind11_FOUND}) # ON by default if dependencies are met
817 if("${CMAKE_SYSTEM}" MATCHES "FreeBSD" AND enable_model-checking AND enable_python)
818 message(WARNING "FreeBSD + Model-Checking + Python = too much for now. Disabling the Python bindings.")
819 set(enable_python FALSE)
824 message(STATUS "Found pybind11.")
826 set(pybind11_options NO_EXTRAS)
828 pybind11_add_module(python-bindings src/bindings/python/simgrid_python.cpp ${pybind11_options})
829 target_compile_features(python-bindings PRIVATE cxx_std_14)
830 target_link_libraries(python-bindings PUBLIC simgrid)
831 set_target_properties(python-bindings PROPERTIES
832 LIBRARY_OUTPUT_NAME simgrid
833 CXX_VISIBILITY_PRESET "default"
834 INTERPROCEDURAL_OPTIMIZATION FALSE)
835 # LTO is disabled here from the python bindings because this makes a
836 # cmake warning about CMP0069 even when this policy is set. This
837 # problem may be in cmake, in pybind11 or even in our code, not sure.
838 # It may get eventually solved in cmake or pybind11. Or not.
839 # The sure thing is that our python bindings are in one file only,
840 # so there is no need for LTO here. Problem solved :)
842 add_dependencies(tests python-bindings)
843 set_property(TARGET python-bindings
844 APPEND PROPERTY INCLUDE_DIRECTORIES "${INTERNAL_INCLUDES}")
846 if("${SIMGRID_PYTHON_LIBDIR}" STREQUAL "") # value not manually set
847 if("${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr")
848 set(SIMGRID_PYTHON_LIBDIR ${Python3_SITEARCH})
849 else("${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr")
850 string(REGEX REPLACE "^/usr/" "${CMAKE_INSTALL_PREFIX}/" SIMGRID_PYTHON_LIBDIR ${Python3_SITEARCH})
851 endif("${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr")
853 install(TARGETS python-bindings
854 LIBRARY DESTINATION "${SIMGRID_PYTHON_LIBDIR}")
856 message(FATAL_ERROR "Please install pybind11-dev to build the Python bindings (or disable that option).")
859 mark_as_advanced(PYBIND11_PYTHON_VERSION)
860 mark_as_advanced(pybind11_DIR)
863 if(enable_memcheck_xml)
864 set(enable_memcheck true)
869 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Tests.cmake)
870 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/CTestConfig.cmake)
872 ### Define subdirectories
873 foreach(cmakefile ${CMAKEFILES_TXT})
874 string(REPLACE "/CMakeLists.txt" "" repository ${cmakefile})
875 add_subdirectory("${CMAKE_HOME_DIRECTORY}/${repository}")
878 ### Setup the distrib
879 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Distrib.cmake)
881 ### Build the docs if asked to
882 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Documentation.cmake)
884 ### Print the result of configuration
886 message("##########################################")
887 message("#### Content of src/internal_config.h ####")
888 message("##########################################")
889 file(STRINGS ${CMAKE_CURRENT_BINARY_DIR}/src/internal_config.h config_output)
890 LIST(REMOVE_AT config_output 0 1 2 3 4 5 6 7 8 9 10) # Pass the file header
891 foreach(line ${config_output})
894 message("##########################################")
895 message("#### Content of simgrid/config.h ####")
896 message("##########################################")
897 file(STRINGS ${CMAKE_CURRENT_BINARY_DIR}/include/simgrid/config.h config_output)
898 LIST(REMOVE_AT config_output 0 1 2 3 4 5 6 7 8 9 -1) # Pass the file header
899 foreach(line ${config_output})
902 message("##########################################")
903 message("#### End of configuration headers ####")
904 message("##########################################")
906 message("\nConfiguration of package `simgrid':")
907 message(" Home directory ..............: ${CMAKE_HOME_DIRECTORY}")
908 message(" Build Name ..................: ${BUILDNAME}")
909 message(" Cmake Generator .............: ${CMAKE_GENERATOR}")
910 message(" Site ........................: ${SITE}")
911 message(" Install prefix ..............: ${CMAKE_INSTALL_PREFIX}")
912 message(" Release .....................: simgrid-${release_version}")
914 message(" Compiler: C .................: ${CMAKE_C_COMPILER} (id: ${CMAKE_C_COMPILER_ID})")
915 message(" version .............: ${CMAKE_C_COMPILER_VERSION}")
916 message(" is gnu ..............: ${CMAKE_COMPILER_IS_GNUCC}")
917 message(" Compiler: C++ ...............: ${CMAKE_CXX_COMPILER} (id: ${CMAKE_CXX_COMPILER_ID})")
918 message(" version .............: ${CMAKE_CXX_COMPILER_VERSION}")
920 message(" Compiler: Javac .............: ${Java_JAVAC_EXECUTABLE}")
921 message(" version .............: ${Java_VERSION_STRING}")
922 message(" runtime .............: ${Java_JAVA_EXECUTABLE}")
924 if(CMAKE_Fortran_COMPILER)
925 message(" Compiler: Fortran ...........: ${SMPI_Fortran_COMPILER} (id: ${CMAKE_Fortran_COMPILER_ID})")
926 message(" version .............: ${CMAKE_Fortran_COMPILER_VERSION}")
928 message(" Linker: .....................: ${CMAKE_LINKER}")
929 message(" version .............: ${LINKER_VERSION}")
930 message(" Make program: ...............: ${CMAKE_MAKE_PROGRAM}")
932 message(" CFlags ......................: ${CMAKE_C_FLAGS}")
933 message(" CXXFlags ....................: ${CMAKE_CXX_FLAGS}")
934 message(" LDFlags .....................: ${CMAKE_C_LINK_FLAGS}")
935 message(" with LTO ....................: ${enable_lto}")
938 if (SIMGRID_HAVE_MSG)
939 message(" Compile MSG .................: ON")
941 message(" Compile MSG .................: OFF")
944 if (SIMGRID_HAVE_NS3)
945 message(" Compile ns-3 ................: ON (path: ${NS3_PATH})")
947 message(" Compile ns-3 ................: OFF (hint: ${NS3_HINT})")
951 message(" Compile Java ................: ON")
952 message(" Native lib in jar .........: ${enable_lib_in_jar}")
954 message(" Compile Java ................: OFF")
957 message(" Compile Python bindings .....: ${enable_python}")
958 message(" module ....................: ${PYTHON_MODULE_PREFIX}simgrid${PYTHON_MODULE_EXTENSION}")
959 message(" install path ..............: ${SIMGRID_PYTHON_LIBDIR} (force another value with -DSIMGRID_PYTHON_LIBDIR)")
961 message(" Compile Python bindings .....: OFF (disabled, or pybind11 not found)")
963 message(" Compile Smpi ................: ${HAVE_SMPI}")
964 message(" Smpi fortran ..............: ${SMPI_FORTRAN}")
965 message(" MPICH3 testsuite ..........: ${enable_smpi_MPICH3_testsuite}")
966 message(" MBI testsuite .............: ${enable_smpi_MBI_testsuite}")
967 message(" Privatization .............: ${HAVE_PRIVATIZATION}")
968 message(" PAPI support...............: ${HAVE_PAPI}")
969 message(" Compile Boost.Context support: ${HAVE_BOOST_CONTEXTS}")
971 message(" Maintainer mode .............: ${enable_maintainer_mode}")
972 message(" Documentation................: ${enable_documentation}")
973 message(" Model checking ..............: ${SIMGRID_HAVE_MC}")
974 message(" Graphviz mode ...............: ${HAVE_GRAPHVIZ}")
975 message(" Mallocators .................: ${enable_mallocators}")
977 message(" Simgrid dependencies ........: ${SIMGRID_DEP}")
980 execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_BINARY_DIR}/Testing/Notes/)
981 file(WRITE ${PROJECT_BINARY_DIR}/Testing/Notes/Build "GIT version : ${GIT_VERSION}\n")
982 file(APPEND ${PROJECT_BINARY_DIR}/Testing/Notes/Build "Release : simgrid-${release_version}\n")