1 # Build the version number
3 set(SIMGRID_VERSION_MAJOR "3")
4 set(SIMGRID_VERSION_MINOR "31")
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 "7.0")
50 "SimGrid needs at least g++ version 7.0 to compile but you have ${CMAKE_CXX_COMPILER_VERSION}."
51 "You need a sufficient support of c++17 to compile SimGrid.")
55 ## We need a decent support of the C++14 and C11 standards
56 set(CMAKE_CXX_STANDARD 17)
57 set(CMAKE_CXX_STANDARD_REQUIRED ON)
59 set(CMAKE_C_STANDARD 11)
60 set(CMAKE_C_STANDARD_REQUIRED ON)
62 if (CMAKE_C_COMPILER_ID STREQUAL "Intel" AND CMAKE_C11_EXTENSION_COMPILE_OPTION STREQUAL "-std=c11")
63 set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=gnu11")
66 ### Check threading support
67 set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
71 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Option.cmake)
74 if ((NOT DEFINED enable_smpi) OR enable_smpi)
75 # First unset the compiler in case we're re-running cmake over a previous
76 # configuration where it was saved as smpiff
77 unset(CMAKE_Fortran_COMPILER)
81 enable_language(Fortran OPTIONAL)
84 if(CMAKE_Fortran_COMPILER)
86 # Fortran compiler detected: save it, then replace by smpiff
87 set(SMPI_Fortran_COMPILER "${CMAKE_Fortran_COMPILER}" CACHE FILEPATH "The real Fortran compiler")
89 # Set flags/libs to be used in smpiff
90 if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU")
91 set(SMPI_Fortran_FLAGS_ "\"-fpic\" \"-ff2c\" \"-fno-second-underscore\"")
92 set(SMPI_Fortran_LIBS "\"-lgfortran\"")
94 elseif(CMAKE_Fortran_COMPILER_ID MATCHES "Intel")
95 set(SMPI_Fortran_FLAGS_ "\"-fPIC\" \"-nofor-main\"")
96 set(SMPI_Fortran_LIBS "\"-lifcore\"")
98 elseif(CMAKE_Fortran_COMPILER_ID MATCHES "PGI|Flang") # flang
99 set(SMPI_Fortran_FLAGS_ "\"-fPIC\"")
100 set(SMPI_Fortran_LIBS "")
103 set(SMPI_Fortran_FLAGS "${SMPI_Fortran_FLAGS_} ${SMPI_Fortran_FLAGS}")
105 ## Request debugging flags for Fortran too
106 set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -g")
109 endif(CMAKE_Fortran_COMPILER)
113 ### SET THE LIBRARY EXTENSION
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 (NOT NS3_VERSION EQUAL "3-dev" AND 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 ### Check for Eigen library
243 set(SIMGRID_HAVE_EIGEN3 0)
244 find_package (Eigen3 3.3 CONFIG
245 HINTS ${EIGEN3_HINT})
247 set(SIMGRID_HAVE_EIGEN3 1)
248 message(STATUS "Found Eigen3: ${EIGEN3_INCLUDE_DIR}")
249 include_directories(${EIGEN3_INCLUDE_DIR})
250 if ("3.3.4" VERSION_EQUAL EIGEN3_VERSION_STRING AND CMAKE_COMPILER_IS_GNUCC)
251 message(STATUS "Avoid build error of Eigen3 v3.3.4 using -Wno-error=int-in-bool-context")
252 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-error=int-in-bool-context")
255 message(STATUS "Disabling model BMF because Eigen3 was not found. If it's installed, use EIGEN3_HINT to hint cmake about the location of Eigen3Config.cmake")
258 set(SIMGRID_HAVE_MSG 0)
260 set(SIMGRID_HAVE_MSG 1)
264 set(Boost_USE_STATIC_LIBS 1)
271 message(FATAL_ERROR "Cannot find PAPI. Please install it (apt-get install papi-tools libpapi-dev) or disable PAPI bindings.")
275 # But we do need the core of Boost
276 # cmake before 3.13.1 does not know about stacktrace components. Fix it.
277 # Usable components: https://www.boost.org/doc/libs/1_65_1/doc/html/stacktrace/configuration_and_build.html
278 set(_Boost_STACKTRACE_HEADERS "boost/stacktrace.hpp")
279 set(_Boost_STACKTRACE_BACKTRACE_HEADERS "boost/stacktrace.hpp")
280 set(_Boost_STACKTRACE_ADDR2LINE_HEADERS "boost/stacktrace.hpp")
282 if(minimal-bindings) # When we want a minimal jarfile, don't even search for boost optional components
283 message(STATUS "Don't even look for boost optional components, as we build minimal binding libraries.")
284 find_package(Boost 1.48)
286 find_package(Boost 1.59 OPTIONAL_COMPONENTS context stacktrace_backtrace stacktrace_addr2line)
289 include_directories(${Boost_INCLUDE_DIRS})
290 message(STATUS "Mandatory components found. SimGrid is compilable.")
291 if (NOT minimal-bindings)
292 message(STATUS "Looking for optional Boost components:")
293 set(Boost_FOUND 1) # These components are optionals
294 CHECK_INCLUDE_FILE("backtrace.h" HAVE_BACKTRACE_H) # check that backtrace is actually possible
295 if (Boost_STACKTRACE_BACKTRACE_FOUND AND HAVE_BACKTRACE_H)
296 message (STATUS " stacktrace: found the fast 'backtrace' implementation. Activating human-readable stack traces.")
297 set(HAVE_BOOST_STACKTRACE_BACKTRACE 1)
299 set(HAVE_BOOST_STACKTRACE_BACKTRACE 0)
300 if (Boost_STACKTRACE_ADDR2LINE_FOUND)
301 message (STATUS " stacktrace: found the slow 'addr2line' implementation. Activating human-readable stack traces.")
302 set(HAVE_BOOST_STACKTRACE_ADDR2LINE 1)
304 message (STATUS " stacktrace: MISSING. Install libboost-stacktrace-dev to display the stacktraces.")
305 set(HAVE_BOOST_STACKTRACE_ADDR2LINE 0)
309 if(Boost_CONTEXT_FOUND)
310 message (STATUS " context: found. Activating Boost contexts.")
311 set(HAVE_BOOST_CONTEXTS 1)
313 message (STATUS " context: MISSING. Install libboost-context-dev for this optional feature.")
314 set(HAVE_BOOST_CONTEXTS 0)
319 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'")
321 find_package(Boost 1.48) #try without optional libraries
323 message(FATAL_ERROR "Boost libraries not found. Install libboost-dev (>= 1.48.0).")
325 include_directories(${Boost_INCLUDE_DIRS})
326 message(STATUS "Mandatory components found. SimGrid is compilable.")
331 # Checks for header libraries functions.
332 CHECK_LIBRARY_EXISTS(rt clock_gettime "" HAVE_POSIX_GETTIME)
333 CHECK_LIBRARY_EXISTS(pthread pthread_setaffinity_np "" HAVE_PTHREAD_SETAFFINITY)
334 CHECK_INCLUDE_FILE("pthread_np.h" HAVE_PTHREAD_NP_H) # for pthread_setaffinity_np() on FreeBSD
336 if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
337 set(CMAKE_REQUIRED_DEFINITIONS "-D_XOPEN_SOURCE=700 -D_DARWIN_C_SOURCE")
339 # Use the GNU version of unusual modifiers like PRIx64
340 add_definitions(-D__USE_MINGW_ANSI_STDIO=1)
341 set(CMAKE_REQUIRED_DEFINITIONS "-D__USE_MINGW_ANSI_STDIO=1")
343 set(CMAKE_REQUIRED_DEFINITIONS "-D_GNU_SOURCE")
346 CHECK_INCLUDE_FILE("valgrind/valgrind.h" HAVE_VALGRIND_H)
347 CHECK_INCLUDE_FILE("unistd.h" HAVE_UNISTD_H)
348 CHECK_INCLUDE_FILE("linux/futex.h" HAVE_FUTEX_H)
350 CHECK_FUNCTION_EXISTS(dlfunc HAVE_DLFUNC)
351 CHECK_FUNCTION_EXISTS(gettimeofday HAVE_GETTIMEOFDAY)
352 CHECK_FUNCTION_EXISTS(nanosleep HAVE_NANOSLEEP)
353 CHECK_FUNCTION_EXISTS(sysconf HAVE_SYSCONF)
354 CHECK_FUNCTION_EXISTS(process_vm_readv HAVE_PROCESS_VM_READV)
355 CHECK_FUNCTION_EXISTS(mmap HAVE_MMAP)
356 CHECK_FUNCTION_EXISTS(mremap HAVE_MREMAP)
358 CHECK_SYMBOL_EXISTS(vasprintf stdio.h HAVE_VASPRINTF)
360 # The detection of vasprintf fails on MinGW, assumingly because it's
361 # defined as an inline function in stdio.h instead of a regular
362 # function. So force the result to be 1 despite of the test.
363 set(HAVE_VASPRINTF 1)
366 CHECK_INCLUDE_FILE("sys/sendfile.h" HAVE_SENDFILE_H)
367 CHECK_FUNCTION_EXISTS(sendfile HAVE_SENDFILE)
368 if(HAVE_SENDFILE_H AND HAVE_SENDFILE)
369 set(SG_HAVE_SENDFILE 1)
371 set(SG_HAVE_SENDFILE 0)
374 if(enable_model-checking AND NOT "${CMAKE_SYSTEM}" MATCHES "Linux|FreeBSD")
375 message(WARNING "Support for model-checking has not been enabled on ${CMAKE_SYSTEM}: disabling it")
376 set(enable_model-checking FALSE)
379 if(enable_model-checking AND minimal-bindings)
380 message(FATAL_ERROR "Compile-time option 'minimal-bindings' cannot be enabled with 'model-checking'")
387 if(enable_model-checking)
388 message(STATUS "Warning: support for model-checking has been disabled because you are missing either mmap or __thread.")
390 SET(enable_model-checking 0)
393 if(enable_mallocators)
394 SET(SIMGRID_HAVE_MALLOCATOR 1)
396 SET(SIMGRID_HAVE_MALLOCATOR 0)
399 if(enable_model-checking)
400 include(FindLibunwind)
402 SET(SIMGRID_DEP "${SIMGRID_DEP} ${LIBUNWIND_LIBRARIES}")
404 message(FATAL_ERROR "Please install libunwind-dev libdw-dev libelf-dev libevent-dev if you want to compile the SimGrid model checker.")
406 find_package(Libdw REQUIRED)
407 find_package(Libelf REQUIRED)
408 find_package(Libevent REQUIRED)
409 include_directories(${LIBDW_INCLUDE_DIR} ${LIBELF_INCLUDE_DIR} ${LIBEVENT_INCLUDE_DIR})
410 set(SIMGRID_DEP "${SIMGRID_DEP} ${LIBEVENT_LIBRARIES} ${LIBELF_LIBRARIES} ${LIBDW_LIBRARIES}")
411 set(SIMGRID_HAVE_MC 1)
412 if("${CMAKE_SYSTEM}" MATCHES "FreeBSD" AND enable_java)
413 message(WARNING "FreeBSD + Model-Checking + Java = too much for now. Disabling the Java bindings.")
414 set(enable_java FALSE)
417 SET(SIMGRID_HAVE_MC 0)
420 mark_as_advanced(PATH_LIBDW_H)
421 mark_as_advanced(PATH_LIBDW_LIB)
423 if(enable_java AND NOT enable_msg)
424 message(FATAL_ERROR "Cannot activate the Java bindings without the MSG module. Either add -Denable_msg=ON or -Denable_java=OFF")
427 if (enable_model-checking AND enable_ns3)
428 message(WARNING "Activating both model-checking and ns-3 bindings is considered experimental.")
434 message (STATUS "Warning: no support for SMPI automatic privatization on Windows.")
435 SET(HAVE_PRIVATIZATION 0)
437 SET(HAVE_PRIVATIZATION 1)
443 #--------------------------------------------------------------------------------------------------
444 ### Check what context backends are available
446 set(HAVE_UCONTEXT_CONTEXTS 0)
447 CHECK_INCLUDE_FILE("ucontext.h" HAVE_UCONTEXT_H)
448 if(NOT HAVE_UCONTEXT_H)
449 message(STATUS "No ucontext factory: <ucontext.h> not found.")
451 message(STATUS "No ucontext factory: Apple don't want us to use them.")
452 set(HAVE_UCONTEXT_H 0)
454 try_compile(compile_makecontext ${CMAKE_BINARY_DIR} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_makecontext.c
455 OUTPUT_VARIABLE compile_makecontext_output)
457 #If can have both context
458 if(compile_makecontext)
459 set(HAVE_UCONTEXT_CONTEXTS 1)
460 message(STATUS "Support for ucontext factory ok.")
462 message(STATUS "Error: <ucontext.h> exists, but makecontext is not compilable. Compilation output:\n ${compile_makecontext_output}")
463 message(STATUS "No ucontext factory: makecontext() is not compilable.")
466 # Stack setup (size and address)
467 try_run(RUN_makecontext_VAR COMPILE_makecontext_VAR
468 ${CMAKE_BINARY_DIR} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_stacksetup.c
469 RUN_OUTPUT_VARIABLE stack_setup)
471 LIST(LENGTH stack_setup stack_setup_len)
472 if("${stack_setup_len}" STREQUAL "2")
473 LIST(GET stack_setup 0 makecontext_addr)
474 LIST(GET stack_setup 1 makecontext_size)
475 set(sg_makecontext_stack_addr "#define sg_makecontext_stack_addr(skaddr) (${makecontext_addr})")
476 set(sg_makecontext_stack_size "#define sg_makecontext_stack_size(sksize) (${makecontext_size})")
478 message(FATAL_ERROR "Could not figure out the stack setup. Compil: ${RUN_makecontext_VAR}. Exec: ${COMPILE_makecontext_VAR}. Output: ${stack_setup}")
482 # Stack growth direction (upward or downward). Used for the following contexts: SysV, raw, Boost
483 try_run(RUN_stackgrowth_VAR COMPILE_stackgrowth_VAR
485 ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_stackgrowth.c
486 RUN_OUTPUT_VARIABLE stack
487 COPY_FILE test_stackgrowth)
489 if("${stack}" STREQUAL "down")
490 set(PTH_STACKGROWTH "-1")
491 elseif("${stack}" STREQUAL "up")
492 set(PTH_STACKGROWTH "1")
494 if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64")
495 set(PTH_STACKGROWTH "-1")
496 elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "i686")
497 set(PTH_STACKGROWTH "-1")
499 message(FATAL_ERROR "Could not figure out the stack direction. Test prog returned: ${stack}; CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}.")
502 # If the test ran well, remove the test binary
503 file(REMOVE test_stackgrowth)
504 #--------------------------------------------------------------------------------------------------
509 if(EXISTS ${CMAKE_HOME_DIRECTORY}/.git/)
510 execute_process(COMMAND git rev-parse --verify --short HEAD
511 WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}
512 OUTPUT_VARIABLE GIT_VERSION
513 OUTPUT_STRIP_TRAILING_WHITESPACE)
514 # Check for uncommitted changes
515 execute_process(COMMAND git diff --name-only HEAD
516 WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}
517 OUTPUT_VARIABLE files_changed)
519 set(GIT_VERSION "${GIT_VERSION}-dirty")
521 elseif(EXISTS ${CMAKE_HOME_DIRECTORY}/.gitversion)
522 FILE(STRINGS ${CMAKE_HOME_DIRECTORY}/.gitversion GIT_VERSION)
524 set(GIT_VERSION "none, release version")
526 message(STATUS "Git version: ${GIT_VERSION}")
528 ### Define source packages for Libs
529 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/DefinePackages.cmake)
531 ### Setup gcc & clang flags (include after DefinePackage.cmake, and before generating header files)
533 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Flags.cmake)
536 ### Generate the required headers and scripts
537 #############################################
539 # Avoid triggering a (full) rebuild by touching the files if they did not really change
540 configure_file("${CMAKE_HOME_DIRECTORY}/src/internal_config.h.in" "${CMAKE_BINARY_DIR}/src/internal_config.h.generated" @ONLY IMMEDIATE)
541 configure_file("${CMAKE_HOME_DIRECTORY}/include/simgrid/version.h.in" "${CMAKE_BINARY_DIR}/include/simgrid/version.h.generated" @ONLY IMMEDIATE)
542 configure_file("${CMAKE_HOME_DIRECTORY}/include/simgrid/config.h.in" "${CMAKE_BINARY_DIR}/include/simgrid/config.h.generated" @ONLY IMMEDIATE)
543 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/src/internal_config.h.generated ${CMAKE_BINARY_DIR}/src/internal_config.h)
544 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/include/simgrid/version.h.generated ${CMAKE_BINARY_DIR}/include/simgrid/version.h)
545 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/include/simgrid/config.h.generated ${CMAKE_BINARY_DIR}/include/simgrid/config.h)
546 file(REMOVE ${CMAKE_BINARY_DIR}/src/internal_config.h.generated)
547 file(REMOVE ${CMAKE_BINARY_DIR}/include/simgrid/config.h.generated)
548 file(REMOVE ${CMAKE_BINARY_DIR}/include/simgrid/version.h.generated)
550 # We need two versions of the SMPI scripts because they contain the path to the library
551 # so, it depends of whether SimGrid is installed, or run from the sources (during the build)
553 file(READ ${CMAKE_HOME_DIRECTORY}/src/smpi/smpitools.sh SMPITOOLS_SH) # Definitions shared amongst all SMPI scripts, inlined in each of them
555 ### SMPI script used when simgrid is installed
556 set(exec_prefix ${CMAKE_INSTALL_PREFIX})
557 set(includedir "${CMAKE_INSTALL_FULL_INCLUDEDIR}")
558 set(libdir "${CMAKE_INSTALL_FULL_LIBDIR}")
559 set(includeflag "\"-I${includedir}\" \"-I${includedir}/smpi\"")
560 set(CMAKE_SMPI_COMMAND "export LD_LIBRARY_PATH=\"${libdir}")
562 set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}:${NS3_LIBRARY_PATH}")
564 set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}\${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}\"")
565 set(SMPIMAIN ${libdir}/simgrid/smpimain)
566 set(SMPIREPLAYMAIN ${libdir}/simgrid/smpireplaymain)
568 configure_file(${CMAKE_HOME_DIRECTORY}/include/smpi/mpif.h.in ${CMAKE_BINARY_DIR}/include/smpi/mpif.h @ONLY)
569 #configure mpif.f90 to build mpi.mod
571 set(MODULE_MPIF_IN "module mpi")
572 set(MODULE_MPIF_OUT "end module mpi")
573 configure_file(${CMAKE_HOME_DIRECTORY}/include/smpi/mpif.h.in ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90.generated @ONLY)
574 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90.generated ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90)
575 set(CMAKE_Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/include/smpi)
576 add_library(mpi SHARED ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90)
579 foreach(script cc cxx ff f90 run)
580 configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpi${script}.in ${CMAKE_BINARY_DIR}/bin/smpi${script} @ONLY)
583 ### SMPI scripts used when compiling simgrid
584 set(exec_prefix "${CMAKE_BINARY_DIR}/smpi_script/")
585 set(includedir "${CMAKE_HOME_DIRECTORY}/include")
586 set(libdir "${CMAKE_BINARY_DIR}/lib")
587 set(includeflag "\"-I${includedir}\" \"-I${includedir}/smpi\"")
588 set(includeflag "${includeflag} \"-I${CMAKE_BINARY_DIR}/include\" \"-I${CMAKE_BINARY_DIR}/include/smpi\"")
589 set(CMAKE_SMPI_COMMAND "export LD_LIBRARY_PATH=\"${libdir}")
591 set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}:${NS3_LIBRARY_PATH}")
593 set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}\${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}\"")
594 set(SMPIMAIN ${libdir}/simgrid/smpimain)
595 set(SMPIREPLAYMAIN ${libdir}/simgrid/smpireplaymain)
597 foreach(script cc cxx ff f90 run)
598 configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpi${script}.in ${CMAKE_BINARY_DIR}/smpi_script/bin/smpi${script} @ONLY)
602 foreach(script cc cxx ff f90 run)
603 execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpi${script})
604 execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/smpi_script/bin/smpi${script})
608 set(generated_headers_to_install
609 ${CMAKE_CURRENT_BINARY_DIR}/include/smpi/mpif.h
610 ${CMAKE_CURRENT_BINARY_DIR}/include/simgrid/config.h
611 ${CMAKE_CURRENT_BINARY_DIR}/include/simgrid/version.h
614 set(generated_headers ${CMAKE_CURRENT_BINARY_DIR}/src/internal_config.h )
616 set(generated_files_to_clean
618 ${generated_headers_to_install}
619 ${CMAKE_BINARY_DIR}/bin/smpicc
620 ${CMAKE_BINARY_DIR}/bin/smpicxx
621 ${CMAKE_BINARY_DIR}/bin/smpiff
622 ${CMAKE_BINARY_DIR}/bin/smpif90
623 ${CMAKE_BINARY_DIR}/bin/smpirun
624 ${CMAKE_BINARY_DIR}/bin/colorize
625 ${CMAKE_BINARY_DIR}/bin/simgrid_update_xml
626 ${CMAKE_BINARY_DIR}/examples/smpi/tracing/smpi_traced.trace
629 if(NOT "${CMAKE_BINARY_DIR}" STREQUAL "${CMAKE_HOME_DIRECTORY}")
630 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions0.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions0.txt COPYONLY)
631 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions1.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions1.txt COPYONLY)
632 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_allreduce.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allreduce.txt COPYONLY)
633 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_barrier.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_barrier.txt COPYONLY)
634 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_bcast.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_bcast.txt COPYONLY)
635 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_with_isend.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_with_isend.txt COPYONLY)
636 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_alltoall.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoall.txt COPYONLY)
637 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_alltoallv.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoallv.txt COPYONLY)
638 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_waitall.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_waitall.txt COPYONLY)
639 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_reducescatter.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_reducescatter.txt COPYONLY)
640 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_gather.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_gather.txt COPYONLY)
641 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_allgatherv.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allgatherv.txt COPYONLY)
642 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile COPYONLY)
643 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_cluster ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_cluster COPYONLY)
644 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_griffon ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_griffon COPYONLY)
645 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_coll ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_coll COPYONLY)
646 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_io ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_io COPYONLY)
647 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_empty ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_empty COPYONLY)
649 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/description_file ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/description_file COPYONLY)
650 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/README ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/README COPYONLY)
651 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/smpi_replay.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/smpi_replay.txt COPYONLY)
652 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)
653 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)
654 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)
655 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)
656 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)
657 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)
658 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)
659 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)
660 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)
661 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)
662 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)
663 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)
664 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)
665 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)
666 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)
667 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)
668 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)
669 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)
670 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)
671 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)
672 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)
673 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)
674 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)
675 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)
676 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)
677 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)
678 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)
679 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)
680 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)
681 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)
682 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)
683 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)
685 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)
686 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)
687 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)
688 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)
689 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)
690 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)
691 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)
692 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)
693 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)
694 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)
695 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)
696 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)
697 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)
698 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)
699 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)
701 set(generated_files_to_clean
702 ${generated_files_to_clean}
703 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions0.txt
704 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions1.txt
705 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allreduce.txt
706 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_barrier.txt
707 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_bcast.txt
708 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_with_isend.txt
709 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoall.txt
710 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoallv.txt
711 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_waitall.txt
712 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_gather.txt
713 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allgatherv.txt
714 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_reducescatter.txt
715 ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile
716 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/description_file
717 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/README
718 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/smpi_replay.txt
719 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace0.txt
720 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace1.txt
721 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace2.txt
722 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace3.txt
723 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace4.txt
724 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace5.txt
725 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace6.txt
726 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace7.txt
727 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace8.txt
728 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace9.txt
729 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace10.txt
730 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace11.txt
731 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace12.txt
732 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace13.txt
733 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace14.txt
734 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace15.txt
735 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace16.txt
736 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace17.txt
737 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace18.txt
738 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace19.txt
739 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace20.txt
740 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace21.txt
741 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace22.txt
742 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace23.txt
743 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace24.txt
744 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace25.txt
745 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace26.txt
746 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace27.txt
747 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace28.txt
748 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace29.txt
749 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace30.txt
750 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace31.txt
751 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/compute_only.txt
752 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/compute_only/actions0.txt
753 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/compute_only/actions1.txt
754 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/empty.txt
755 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/empty/actions0.txt
756 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/empty/actions1.txt
757 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/mixed.txt
758 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/mixed/actions0.txt
759 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/mixed/actions1.txt
760 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/replay_multiple_manual.tesh
761 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute
762 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute_consecutive
763 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute_consecutive2
764 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute_simple
765 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty1
766 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2
767 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2_same_resources
768 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2_same_time
769 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2_same_time_and_resources
770 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed1
771 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2
772 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2_same_resources
773 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2_same_time
774 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2_same_time_and_resources
775 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_nojob
779 SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES
780 "${generated_files_to_clean}")
782 add_custom_target(tests COMMENT "Recompiling the tests")
783 add_custom_target(tests-mc COMMENT "Recompiling the MC tests and tools.")
784 add_dependencies(tests tests-mc)
786 ### Build some Maintainer files
787 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/MaintainerMode.cmake)
791 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/MakeLib.cmake)
793 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/MakeLibWin.cmake)
797 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Java.cmake)
800 # Python binding (with pybind11)
802 if((NOT DEFINED enable_python) OR enable_python)
803 if(EXISTS ${CMAKE_HOME_DIRECTORY}/pybind11) # Try to use a local copy of pybind11, if any
804 message(STATUS "Use the internal copy of pybind11.")
805 add_subdirectory(${CMAKE_HOME_DIRECTORY}/pybind11)
806 set(pybind11_FOUND ON)
808 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_HOME_DIRECTORY}/pybind11/tools/)
809 set(Python_ADDITIONAL_VERSIONS 3.9 3.8 3.7 3.6 3.5 3.4)
810 find_package(PythonLibsNew ${PYBIND11_PYTHON_VERSION} REQUIRED)
813 find_package(pybind11 CONFIG)
814 message(STATUS "Pybind11 version: ${pybind11_VERSION}")
815 if (pybind11_VERSION VERSION_LESS 2.4)
816 message(STATUS "SimGrid needs at least v2.4 of pybind11. Disabling the Python bindings.")
817 set(pybind11_FOUND OFF)
821 if(NOT PYTHONLIBS_FOUND AND NOT Python3_Development_FOUND)
822 message(STATUS "Python libs not found. Turn pybind11 off.")
824 set(pybind11_FOUND OFF)
828 option(enable_python "Whether the Python bindings are activated." ${pybind11_FOUND}) # ON by default if dependencies are met
830 if("${CMAKE_SYSTEM}" MATCHES "FreeBSD" AND enable_model-checking AND enable_python)
831 message(WARNING "FreeBSD + Model-Checking + Python = too much for now. Disabling the Python bindings.")
832 set(enable_python FALSE)
837 message(STATUS "Found pybind11.")
839 set(pybind11_options NO_EXTRAS)
841 pybind11_add_module(python-bindings src/bindings/python/simgrid_python.cpp ${pybind11_options})
842 target_compile_features(python-bindings PRIVATE cxx_std_14)
843 target_link_libraries(python-bindings PUBLIC simgrid)
844 set_target_properties(python-bindings PROPERTIES
845 LIBRARY_OUTPUT_NAME simgrid
846 CXX_VISIBILITY_PRESET "default"
847 INTERPROCEDURAL_OPTIMIZATION FALSE)
848 # LTO is disabled here from the python bindings because this makes a
849 # cmake warning about CMP0069 even when this policy is set. This
850 # problem may be in cmake, in pybind11 or even in our code, not sure.
851 # It may get eventually solved in cmake or pybind11. Or not.
852 # The sure thing is that our python bindings are in one file only,
853 # so there is no need for LTO here. Problem solved :)
855 add_dependencies(tests python-bindings)
856 set_property(TARGET python-bindings
857 APPEND PROPERTY INCLUDE_DIRECTORIES "${INTERNAL_INCLUDES}")
859 if("${SIMGRID_PYTHON_LIBDIR}" STREQUAL "") # value not manually set
860 if("${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr")
861 set(SIMGRID_PYTHON_LIBDIR ${Python3_SITEARCH})
862 else("${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr")
863 string(REGEX REPLACE "^/usr/" "${CMAKE_INSTALL_PREFIX}/" SIMGRID_PYTHON_LIBDIR ${Python3_SITEARCH})
864 endif("${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr")
866 install(TARGETS python-bindings
867 LIBRARY DESTINATION "${SIMGRID_PYTHON_LIBDIR}")
869 message(FATAL_ERROR "Please install pybind11-dev to build the Python bindings (or disable that option).")
872 mark_as_advanced(PYBIND11_PYTHON_VERSION)
873 mark_as_advanced(pybind11_DIR)
876 if(enable_memcheck_xml)
877 set(enable_memcheck true)
882 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Tests.cmake)
883 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/CTestConfig.cmake)
885 ### Define subdirectories
886 foreach(cmakefile ${CMAKEFILES_TXT})
887 string(REPLACE "/CMakeLists.txt" "" repository ${cmakefile})
888 add_subdirectory("${CMAKE_HOME_DIRECTORY}/${repository}")
891 ### Setup the distrib
892 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Distrib.cmake)
894 ### Build the docs if asked to
895 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Documentation.cmake)
897 ### Print the result of configuration
899 message("##########################################")
900 message("#### Content of src/internal_config.h ####")
901 message("##########################################")
902 file(STRINGS ${CMAKE_CURRENT_BINARY_DIR}/src/internal_config.h config_output)
903 LIST(REMOVE_AT config_output 0 1 2 3 4 5 6 7 8 9 10) # Pass the file header
904 foreach(line ${config_output})
907 message("##########################################")
908 message("#### Content of simgrid/config.h ####")
909 message("##########################################")
910 file(STRINGS ${CMAKE_CURRENT_BINARY_DIR}/include/simgrid/config.h config_output)
911 LIST(REMOVE_AT config_output 0 1 2 3 4 5 6 7 8 9 -1) # Pass the file header
912 foreach(line ${config_output})
915 message("##########################################")
916 message("#### End of configuration headers ####")
917 message("##########################################")
919 message("\nConfiguration of package `simgrid':")
920 message(" Home directory ..............: ${CMAKE_HOME_DIRECTORY}")
921 message(" Build Name ..................: ${BUILDNAME}")
922 message(" Cmake Generator .............: ${CMAKE_GENERATOR}")
923 message(" Site ........................: ${SITE}")
924 message(" Install prefix ..............: ${CMAKE_INSTALL_PREFIX}")
925 message(" Release .....................: simgrid-${release_version}")
927 message(" Compiler: C .................: ${CMAKE_C_COMPILER} (id: ${CMAKE_C_COMPILER_ID})")
928 message(" version .............: ${CMAKE_C_COMPILER_VERSION}")
929 message(" is gnu ..............: ${CMAKE_COMPILER_IS_GNUCC}")
930 message(" Compiler: C++ ...............: ${CMAKE_CXX_COMPILER} (id: ${CMAKE_CXX_COMPILER_ID})")
931 message(" version .............: ${CMAKE_CXX_COMPILER_VERSION}")
933 message(" Compiler: Javac .............: ${Java_JAVAC_EXECUTABLE}")
934 message(" version .............: ${Java_VERSION_STRING}")
935 message(" runtime .............: ${Java_JAVA_EXECUTABLE}")
937 if(CMAKE_Fortran_COMPILER)
938 message(" Compiler: Fortran ...........: ${SMPI_Fortran_COMPILER} (id: ${CMAKE_Fortran_COMPILER_ID})")
939 message(" version .............: ${CMAKE_Fortran_COMPILER_VERSION}")
941 message(" Linker: .....................: ${CMAKE_LINKER}")
942 message(" version .............: ${LINKER_VERSION}")
943 message(" Make program: ...............: ${CMAKE_MAKE_PROGRAM}")
945 message(" CFlags ......................: ${CMAKE_C_FLAGS}")
946 message(" CXXFlags ....................: ${CMAKE_CXX_FLAGS}")
947 message(" LDFlags .....................: ${CMAKE_C_LINK_FLAGS}")
948 message(" with LTO ....................: ${enable_lto}")
951 if (SIMGRID_HAVE_MSG)
952 message(" Compile MSG .................: ON")
954 message(" Compile MSG .................: OFF")
957 if (SIMGRID_HAVE_NS3)
958 message(" Compile ns-3 ................: ON (path: ${NS3_PATH})")
960 message(" Compile ns-3 ................: OFF (hint: ${NS3_HINT})")
964 message(" Compile Java ................: ON")
965 message(" Native lib in jar .........: ${enable_lib_in_jar}")
967 message(" Compile Java ................: OFF")
970 message(" Compile Python bindings .....: ${enable_python}")
971 message(" module ....................: ${PYTHON_MODULE_PREFIX}simgrid${PYTHON_MODULE_EXTENSION}")
972 message(" install path ..............: ${SIMGRID_PYTHON_LIBDIR} (force another value with -DSIMGRID_PYTHON_LIBDIR)")
974 message(" Compile Python bindings .....: OFF (disabled, or pybind11 not found)")
977 message(" Eigen3 library ..............: ${EIGEN3_VERSION_STRING} in ${EIGEN3_INCLUDE_DIR}")
979 message(" Eigen3 library ..............: not found (EIGEN3_HINT='${EIGEN3_HINT}').")
981 message(" Compile Smpi ................: ${HAVE_SMPI}")
982 message(" Smpi fortran ..............: ${SMPI_FORTRAN}")
983 message(" MPICH3 testsuite ..........: ${enable_smpi_MPICH3_testsuite}")
984 message(" MBI testsuite .............: ${enable_smpi_MBI_testsuite}")
985 message(" Privatization .............: ${HAVE_PRIVATIZATION}")
986 message(" PAPI support...............: ${HAVE_PAPI}")
987 message(" Compile Boost.Context support: ${HAVE_BOOST_CONTEXTS}")
989 message(" Maintainer mode .............: ${enable_maintainer_mode}")
990 message(" Documentation................: ${enable_documentation}")
991 message(" Model checking ..............: ${SIMGRID_HAVE_MC}")
992 message(" Graphviz mode ...............: ${HAVE_GRAPHVIZ}")
993 message(" Mallocators .................: ${enable_mallocators}")
995 message(" Simgrid dependencies ........: ${SIMGRID_DEP}")
998 execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_BINARY_DIR}/Testing/Notes/)
999 file(WRITE ${PROJECT_BINARY_DIR}/Testing/Notes/Build "GIT version : ${GIT_VERSION}\n")
1000 file(APPEND ${PROJECT_BINARY_DIR}/Testing/Notes/Build "Release : simgrid-${release_version}\n")