1 # Build the version number
3 set(SIMGRID_VERSION_MAJOR "3")
4 set(SIMGRID_VERSION_MINOR "32")
5 set(SIMGRID_VERSION_PATCH "1") # odd => git branch; even => stable release or released snapshot
7 if(${SIMGRID_VERSION_PATCH} EQUAL "0")
8 set(release_version "${SIMGRID_VERSION_MAJOR}.${SIMGRID_VERSION_MINOR}")
10 set(release_version "${SIMGRID_VERSION_MAJOR}.${SIMGRID_VERSION_MINOR}.${SIMGRID_VERSION_PATCH}")
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 # once we move >= 3.13, we should use target_link_option in examples/sthread
27 message(STATUS "Cmake version ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION}")
28 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_HOME_DIRECTORY}/tools/cmake/Modules)
30 project(simgrid C CXX)
32 # customizable installation directories
33 include(GNUInstallDirs)
35 #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
36 # Check for the compiler #
37 #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
39 ## Check the C/C++ standard that we need
40 ## See also tools/cmake/Flags.cmake that sets our paranoid warning flags
41 INCLUDE(CheckCCompilerFlag)
42 CHECK_C_COMPILER_FLAG(-fstack-cleaner HAVE_C_STACK_CLEANER)
44 ## Request full debugging flags
45 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g3")
46 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g3")
48 if (CMAKE_COMPILER_IS_GNUCC)
49 if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "7.0")
51 "SimGrid needs at least g++ version 7.0 to compile but you have ${CMAKE_CXX_COMPILER_VERSION}."
52 "You need a sufficient support of c++17 to compile SimGrid.")
56 ## We need a decent support of the C++17 and C11 standards
57 set(CMAKE_CXX_STANDARD 17)
58 set(CMAKE_CXX_STANDARD_REQUIRED ON)
60 set(CMAKE_C_STANDARD 11)
61 set(CMAKE_C_STANDARD_REQUIRED ON)
63 if (CMAKE_C_COMPILER_ID STREQUAL "Intel" AND CMAKE_C11_EXTENSION_COMPILE_OPTION STREQUAL "-std=c11")
64 set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=gnu11")
67 ### Check threading support
68 set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
72 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Option.cmake)
75 if ((NOT DEFINED enable_smpi) OR enable_smpi)
76 # First unset the compiler in case we're re-running cmake over a previous
77 # configuration where it was saved as smpiff
78 unset(CMAKE_Fortran_COMPILER)
82 enable_language(Fortran OPTIONAL)
85 if(CMAKE_Fortran_COMPILER)
87 # Fortran compiler detected: save it, then replace by smpiff
88 set(SMPI_Fortran_COMPILER "${CMAKE_Fortran_COMPILER}" CACHE FILEPATH "The real Fortran compiler")
90 # Set flags/libs to be used in smpiff
91 if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU")
92 set(SMPI_Fortran_FLAGS_ "\"-fpic\" \"-ff2c\" \"-fno-second-underscore\"")
93 set(SMPI_Fortran_LIBS "\"-lgfortran\"")
95 elseif(CMAKE_Fortran_COMPILER_ID MATCHES "Intel")
96 set(SMPI_Fortran_FLAGS_ "\"-fPIC\" \"-nofor-main\"")
97 set(SMPI_Fortran_LIBS "\"-lifcore\"")
99 elseif(CMAKE_Fortran_COMPILER_ID MATCHES "PGI|Flang") # flang
100 set(SMPI_Fortran_FLAGS_ "\"-fPIC\"")
101 set(SMPI_Fortran_LIBS "")
104 set(SMPI_Fortran_FLAGS "${SMPI_Fortran_FLAGS_} ${SMPI_Fortran_FLAGS}")
106 ## Request debugging flags for Fortran too
107 set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -g")
110 endif(CMAKE_Fortran_COMPILER)
114 ### SET THE LIBRARY EXTENSION
124 execute_process(COMMAND ${CMAKE_LINKER} -v OUTPUT_VARIABLE LINKER_VERSION ERROR_VARIABLE LINKER_VERSION)
125 string(REGEX MATCH "[0-9].[0-9]*" LINKER_VERSION "${LINKER_VERSION}")
127 ### Find programs and paths
128 FIND_PROGRAM(GCOV_PATH gcov)
131 message(FATAL_ERROR "Please install Perl to compile SimGrid.")
134 # tesh.py needs python 3 (or the module python-subprocess32 on python2.8+)
135 if(CMAKE_VERSION VERSION_LESS "3.12")
136 set(PythonInterp_FIND_VERSION 3)
137 set(PythonInterp_FIND_VERSION_COUNT 1)
138 set(PythonInterp_FIND_VERSION_MAJOR 3)
139 include(FindPythonInterp)
140 if(NOT PYTHONINTERP_FOUND)
141 message(FATAL_ERROR "Please install Python (version 3 or higher) to compile SimGrid.")
144 find_package(Python3 COMPONENTS Interpreter Development)
145 if(NOT Python3_Interpreter_FOUND)
146 message(FATAL_ERROR "Please install Python (version 3 or higher) to compile SimGrid.")
148 set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE})
151 SET(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib)
153 ### Compute the include paths
155 # Only include public headers by default
157 ${CMAKE_BINARY_DIR}/include
158 ${CMAKE_HOME_DIRECTORY}/include
161 # Compute the ones that should be added when compiling the library
162 set(INTERNAL_INCLUDES
164 ${CMAKE_HOME_DIRECTORY}
165 ${CMAKE_HOME_DIRECTORY}/src/include
169 set (INTERNAL_INCLUDES ${INTERNAL_INCLUDES} ${CMAKE_HOME_DIRECTORY}/src/smpi/include)
172 if(NOT CMAKE_CROSSCOMPILING AND EXISTS /usr/include/)
173 set(INTERNAL_INCLUDES ${INTERNAL_INCLUDES} /usr/include/)
177 set(CMAKE_INCLUDE_WIN "${CMAKE_C_COMPILER}")
178 set(CMAKE_LIB_WIN "${CMAKE_C_COMPILER}")
179 string(REGEX REPLACE "/bin/gcc.*" "/include" CMAKE_INCLUDE_WIN "${CMAKE_INCLUDE_WIN}")
180 string(REGEX REPLACE "/bin/gcc.*" "/lib" CMAKE_LIB_WIN "${CMAKE_LIB_WIN}")
181 set(INTERNAL_INCLUDES ${INTERNAL_INCLUDES} ${CMAKE_INCLUDE_WIN})
182 unset(CMAKE_INCLUDE_WIN)
185 # library dependency cannot start with a space (CMP0004), so initialize it with something that is never deactivated.
186 set(SIMGRID_DEP "-lm")
188 ### Determine the assembly flavor that we need today
189 set(HAVE_RAW_CONTEXTS 0)
190 include(CMakeDetermineSystem)
191 IF(CMAKE_SYSTEM_PROCESSOR MATCHES ".86|AMD64|amd64")
192 IF(CMAKE_SIZEOF_VOID_P EQUAL 4) # 32 bits
193 message(STATUS "System processor: i686 (${CMAKE_SYSTEM_PROCESSOR}, 32 bits)")
194 set(SIMGRID_PROCESSOR_i686 1)
195 set(SIMGRID_PROCESSOR_x86_64 0)
197 message(STATUS "System processor: x86_64 (${CMAKE_SYSTEM_PROCESSOR}, 64 bits)")
198 set(SIMGRID_PROCESSOR_i686 0)
199 set(SIMGRID_PROCESSOR_x86_64 1)
202 message(STATUS "Disable fast raw contexts on Windows.")
203 elseif(CMAKE_SIZEOF_VOID_P EQUAL 4 AND CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
204 message(STATUS "Disable fast raw contexts on x32 ABI.")
206 set(HAVE_RAW_CONTEXTS 1)
209 set(SIMGRID_PROCESSOR_i686 0)
210 set(SIMGRID_PROCESSOR_x86_64 0)
213 include(CheckFunctionExists)
214 include(CheckTypeSize)
215 include(CheckIncludeFile)
216 include(CheckIncludeFiles)
217 include(CheckLibraryExists)
218 include(CheckSymbolExists)
222 message(STATUS "Don't even look for graphviz, as we build minimal binding libraries.")
224 include(FindGraphviz)
227 set(SIMGRID_HAVE_NS3 0)
230 if (SIMGRID_HAVE_NS3)
231 if (NOT NS3_VERSION EQUAL "3-dev" AND NS3_VERSION VERSION_LESS "3.28")
232 message(FATAL_ERROR "SimGrid needs ns-3 in version 3.28 or higher. Please upgrade or disable that cmake option.")
234 set(SIMGRID_HAVE_NS3 1)
235 set(SIMGRID_DEP "${SIMGRID_DEP} ${NS3_LIBRARIES}")
237 message(FATAL_ERROR "Cannot find ns-3. Please install it (apt-get install ns3 libns3-dev) or disable that cmake option")
241 ### Check for Eigen library
242 set(SIMGRID_HAVE_EIGEN3 0)
243 find_package (Eigen3 3.3 CONFIG
244 HINTS ${EIGEN3_HINT})
246 set(SIMGRID_HAVE_EIGEN3 1)
247 message(STATUS "Found Eigen3: ${EIGEN3_INCLUDE_DIR}")
248 include_directories(${EIGEN3_INCLUDE_DIR})
249 if ("3.3.4" VERSION_EQUAL EIGEN3_VERSION_STRING AND CMAKE_COMPILER_IS_GNUCC)
250 message(STATUS "Avoid build error of Eigen3 v3.3.4 using -Wno-error=int-in-bool-context")
251 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-error=int-in-bool-context")
254 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")
257 set(SIMGRID_HAVE_MSG 0)
259 set(SIMGRID_HAVE_MSG 1)
263 set(Boost_USE_STATIC_LIBS 1)
270 message(FATAL_ERROR "Cannot find PAPI. Please install it (apt-get install papi-tools libpapi-dev) or disable PAPI bindings.")
274 # But we do need the core of Boost
275 # cmake before 3.13.1 does not know about stacktrace components. Fix it.
276 # Usable components: https://www.boost.org/doc/libs/1_65_1/doc/html/stacktrace/configuration_and_build.html
277 set(_Boost_STACKTRACE_HEADERS "boost/stacktrace.hpp")
278 set(_Boost_STACKTRACE_BACKTRACE_HEADERS "boost/stacktrace.hpp")
279 set(_Boost_STACKTRACE_ADDR2LINE_HEADERS "boost/stacktrace.hpp")
281 if(minimal-bindings) # When we want a minimal jarfile, don't even search for boost optional components
282 message(STATUS "Don't even look for boost optional components, as we build minimal binding libraries.")
283 find_package(Boost 1.48)
285 find_package(Boost 1.59 OPTIONAL_COMPONENTS context stacktrace_backtrace stacktrace_addr2line)
288 include_directories(${Boost_INCLUDE_DIRS})
289 message(STATUS "Mandatory components found. SimGrid is compilable.")
290 if (NOT minimal-bindings)
291 message(STATUS "Looking for optional Boost components:")
292 set(Boost_FOUND 1) # These components are optionals
293 CHECK_INCLUDE_FILE("backtrace.h" HAVE_BACKTRACE_H) # check that backtrace is actually possible
294 if (Boost_STACKTRACE_BACKTRACE_FOUND AND HAVE_BACKTRACE_H)
295 message (STATUS " stacktrace: found the fast 'backtrace' implementation. Activating human-readable stack traces.")
296 set(HAVE_BOOST_STACKTRACE_BACKTRACE 1)
298 set(HAVE_BOOST_STACKTRACE_BACKTRACE 0)
299 if (Boost_STACKTRACE_ADDR2LINE_FOUND)
300 message (STATUS " stacktrace: found the slow 'addr2line' implementation. Activating human-readable stack traces.")
301 set(HAVE_BOOST_STACKTRACE_ADDR2LINE 1)
303 message (STATUS " stacktrace: MISSING. Install libboost-stacktrace-dev to display the stacktraces.")
304 set(HAVE_BOOST_STACKTRACE_ADDR2LINE 0)
308 if(Boost_CONTEXT_FOUND)
309 message (STATUS " context: found. Activating Boost contexts.")
310 set(HAVE_BOOST_CONTEXTS 1)
312 message (STATUS " context: MISSING. Install libboost-context-dev for this optional feature.")
313 set(HAVE_BOOST_CONTEXTS 0)
318 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'")
320 find_package(Boost 1.48) #try without optional libraries
322 message(FATAL_ERROR "Boost libraries not found. Install libboost-dev (>= 1.48.0).")
324 include_directories(${Boost_INCLUDE_DIRS})
325 message(STATUS "Mandatory components found. SimGrid is compilable.")
330 # Checks for header libraries functions.
331 CHECK_LIBRARY_EXISTS(rt clock_gettime "" HAVE_POSIX_GETTIME)
332 CHECK_LIBRARY_EXISTS(pthread pthread_setaffinity_np "" HAVE_PTHREAD_SETAFFINITY)
333 CHECK_INCLUDE_FILE("pthread_np.h" HAVE_PTHREAD_NP_H) # for pthread_setaffinity_np() on FreeBSD
335 if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
336 set(CMAKE_REQUIRED_DEFINITIONS "-D_XOPEN_SOURCE=700 -D_DARWIN_C_SOURCE")
338 # Use the GNU version of unusual modifiers like PRIx64
339 add_definitions(-D__USE_MINGW_ANSI_STDIO=1)
340 set(CMAKE_REQUIRED_DEFINITIONS "-D__USE_MINGW_ANSI_STDIO=1")
342 set(CMAKE_REQUIRED_DEFINITIONS "-D_GNU_SOURCE")
345 CHECK_INCLUDE_FILE("valgrind/valgrind.h" HAVE_VALGRIND_H)
346 CHECK_INCLUDE_FILE("unistd.h" HAVE_UNISTD_H)
347 CHECK_INCLUDE_FILE("linux/futex.h" HAVE_FUTEX_H)
349 CHECK_FUNCTION_EXISTS(dlfunc HAVE_DLFUNC)
350 CHECK_FUNCTION_EXISTS(gettimeofday HAVE_GETTIMEOFDAY)
351 CHECK_FUNCTION_EXISTS(nanosleep HAVE_NANOSLEEP)
352 CHECK_FUNCTION_EXISTS(sysconf HAVE_SYSCONF)
353 CHECK_FUNCTION_EXISTS(process_vm_readv HAVE_PROCESS_VM_READV)
354 CHECK_FUNCTION_EXISTS(mmap HAVE_MMAP)
355 CHECK_FUNCTION_EXISTS(mremap HAVE_MREMAP)
357 CHECK_SYMBOL_EXISTS(vasprintf stdio.h HAVE_VASPRINTF)
359 # The detection of vasprintf fails on MinGW, assumingly because it's
360 # defined as an inline function in stdio.h instead of a regular
361 # function. So force the result to be 1 despite of the test.
362 set(HAVE_VASPRINTF 1)
365 CHECK_INCLUDE_FILE("sys/sendfile.h" HAVE_SENDFILE_H)
366 CHECK_FUNCTION_EXISTS(sendfile HAVE_SENDFILE)
367 if(HAVE_SENDFILE_H AND HAVE_SENDFILE)
368 set(SG_HAVE_SENDFILE 1)
370 set(SG_HAVE_SENDFILE 0)
373 if(enable_model-checking AND NOT "${CMAKE_SYSTEM}" MATCHES "Linux|FreeBSD")
374 message(WARNING "Support for model-checking has not been enabled on ${CMAKE_SYSTEM}: disabling it")
375 set(enable_model-checking FALSE)
378 if(enable_model-checking AND minimal-bindings)
379 message(FATAL_ERROR "Compile-time option 'minimal-bindings' cannot be enabled with 'model-checking'")
386 if(enable_model-checking)
387 message(STATUS "Warning: support for model-checking has been disabled because you are missing either mmap or __thread.")
389 SET(enable_model-checking 0)
392 if(enable_mallocators)
393 SET(SIMGRID_HAVE_MALLOCATOR 1)
395 SET(SIMGRID_HAVE_MALLOCATOR 0)
398 if(enable_model-checking)
399 include(FindLibunwind)
401 SET(SIMGRID_DEP "${SIMGRID_DEP} ${LIBUNWIND_LIBRARIES}")
403 message(FATAL_ERROR "Please install libunwind-dev libdw-dev libelf-dev libevent-dev if you want to compile the SimGrid model checker.")
405 find_package(Libdw REQUIRED)
406 find_package(Libelf REQUIRED)
407 find_package(Libevent REQUIRED)
408 include_directories(${LIBDW_INCLUDE_DIR} ${LIBELF_INCLUDE_DIR} ${LIBEVENT_INCLUDE_DIR})
409 set(SIMGRID_DEP "${SIMGRID_DEP} ${LIBEVENT_LIBRARIES} ${LIBELF_LIBRARIES} ${LIBDW_LIBRARIES}")
410 set(SIMGRID_HAVE_MC 1)
411 if("${CMAKE_SYSTEM}" MATCHES "FreeBSD" AND enable_java)
412 message(WARNING "FreeBSD + Model-Checking + Java = too much for now. Disabling the Java bindings.")
413 set(enable_java FALSE)
415 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -gdwarf-4")
416 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -gdwarf-4")
418 SET(SIMGRID_HAVE_MC 0)
421 mark_as_advanced(PATH_LIBDW_H)
422 mark_as_advanced(PATH_LIBDW_LIB)
424 if(enable_java AND NOT enable_msg)
425 message(FATAL_ERROR "Cannot activate the Java bindings without the MSG module. Either add -Denable_msg=ON or -Denable_java=OFF")
428 if (enable_model-checking AND enable_ns3)
429 message(WARNING "Activating both model-checking and ns-3 bindings is considered experimental.")
435 message (STATUS "Warning: no support for SMPI automatic privatization on Windows.")
436 SET(HAVE_PRIVATIZATION 0)
438 SET(HAVE_PRIVATIZATION 1)
444 #--------------------------------------------------------------------------------------------------
445 ### Check what context backends are available
447 set(HAVE_UCONTEXT_CONTEXTS 0)
448 CHECK_INCLUDE_FILE("ucontext.h" HAVE_UCONTEXT_H)
449 if(NOT HAVE_UCONTEXT_H)
450 message(STATUS "No ucontext factory: <ucontext.h> not found.")
452 message(STATUS "No ucontext factory: Apple don't want us to use them.")
453 set(HAVE_UCONTEXT_H 0)
455 try_compile(compile_makecontext ${CMAKE_BINARY_DIR} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_makecontext.c
456 OUTPUT_VARIABLE compile_makecontext_output)
458 #If can have both context
459 if(NOT compile_makecontext)
460 message(STATUS "Error: <ucontext.h> exists, but makecontext is not compilable. Compilation output:\n ${compile_makecontext_output}")
461 message(STATUS "No ucontext factory: makecontext() is not compilable.")
463 message(STATUS "Support for ucontext factory ok.")
464 set(HAVE_UCONTEXT_CONTEXTS 1)
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}")
483 # Stack growth direction (upward or downward). Used for the following contexts: SysV, raw, Boost
484 try_run(RUN_stackgrowth_VAR COMPILE_stackgrowth_VAR
486 ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_stackgrowth.c
487 RUN_OUTPUT_VARIABLE stack
488 COPY_FILE test_stackgrowth)
490 if("${stack}" STREQUAL "down")
491 set(PTH_STACKGROWTH "-1")
492 elseif("${stack}" STREQUAL "up")
493 set(PTH_STACKGROWTH "1")
495 if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64")
496 set(PTH_STACKGROWTH "-1")
497 elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "i686")
498 set(PTH_STACKGROWTH "-1")
500 message(FATAL_ERROR "Could not figure out the stack direction. Test prog returned: ${stack}; CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}.")
503 # If the test ran well, remove the test binary
504 file(REMOVE test_stackgrowth)
505 #--------------------------------------------------------------------------------------------------
510 if(EXISTS ${CMAKE_HOME_DIRECTORY}/.git/)
511 execute_process(COMMAND git rev-parse --verify --short HEAD
512 WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}
513 OUTPUT_VARIABLE GIT_VERSION
514 OUTPUT_STRIP_TRAILING_WHITESPACE)
515 # Check for uncommitted changes
516 execute_process(COMMAND git diff --name-only HEAD
517 WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}
518 OUTPUT_VARIABLE files_changed)
520 set(GIT_VERSION "${GIT_VERSION}-dirty")
522 elseif(EXISTS ${CMAKE_HOME_DIRECTORY}/.gitversion)
523 FILE(STRINGS ${CMAKE_HOME_DIRECTORY}/.gitversion GIT_VERSION)
525 set(GIT_VERSION "none, release version")
527 message(STATUS "Git version: ${GIT_VERSION}")
529 ### Define source packages for Libs
530 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/DefinePackages.cmake)
532 ### Setup gcc & clang flags (include after DefinePackage.cmake, and before generating header files)
534 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Flags.cmake)
537 ### Generate the required headers and scripts
538 #############################################
540 # Avoid triggering a (full) rebuild by touching the files if they did not really change
541 configure_file("${CMAKE_HOME_DIRECTORY}/src/internal_config.h.in" "${CMAKE_BINARY_DIR}/src/internal_config.h.generated" @ONLY IMMEDIATE)
542 configure_file("${CMAKE_HOME_DIRECTORY}/include/simgrid/version.h.in" "${CMAKE_BINARY_DIR}/include/simgrid/version.h.generated" @ONLY IMMEDIATE)
543 configure_file("${CMAKE_HOME_DIRECTORY}/include/simgrid/config.h.in" "${CMAKE_BINARY_DIR}/include/simgrid/config.h.generated" @ONLY IMMEDIATE)
544 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/src/internal_config.h.generated ${CMAKE_BINARY_DIR}/src/internal_config.h)
545 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/include/simgrid/version.h.generated ${CMAKE_BINARY_DIR}/include/simgrid/version.h)
546 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/include/simgrid/config.h.generated ${CMAKE_BINARY_DIR}/include/simgrid/config.h)
547 file(REMOVE ${CMAKE_BINARY_DIR}/src/internal_config.h.generated)
548 file(REMOVE ${CMAKE_BINARY_DIR}/include/simgrid/config.h.generated)
549 file(REMOVE ${CMAKE_BINARY_DIR}/include/simgrid/version.h.generated)
551 # We need two versions of the SMPI scripts because they contain the path to the library
552 # so, it depends of whether SimGrid is installed, or run from the sources (during the build)
554 file(READ ${CMAKE_HOME_DIRECTORY}/src/smpi/smpitools.sh SMPITOOLS_SH) # Definitions shared amongst all SMPI scripts, inlined in each of them
556 ### SMPI script used when simgrid is installed
557 set(exec_prefix ${CMAKE_INSTALL_PREFIX})
558 set(includedir "${CMAKE_INSTALL_FULL_INCLUDEDIR}")
559 set(libdir "${CMAKE_INSTALL_FULL_LIBDIR}")
560 set(includeflag "\"-I${includedir}\" \"-I${includedir}/smpi\"")
561 set(CMAKE_SMPI_COMMAND "export LD_LIBRARY_PATH=\"${libdir}")
563 set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}:${NS3_LIBRARY_PATH}")
565 set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}\${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}\"")
566 set(SMPIMAIN ${libdir}/simgrid/smpimain)
567 set(SMPIREPLAYMAIN ${libdir}/simgrid/smpireplaymain)
569 configure_file(${CMAKE_HOME_DIRECTORY}/include/smpi/mpif.h.in ${CMAKE_BINARY_DIR}/include/smpi/mpif.h @ONLY)
570 #configure mpif.f90 to build mpi.mod
572 set(MODULE_MPIF_IN "module mpi")
573 set(MODULE_MPIF_OUT "end module mpi")
574 configure_file(${CMAKE_HOME_DIRECTORY}/include/smpi/mpif.h.in ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90.generated @ONLY)
575 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90.generated ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90)
576 file(REMOVE ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90.generated)
577 set(CMAKE_Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/include/smpi)
578 add_library(mpi SHARED ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90)
581 foreach(script cc cxx ff f90 run)
582 configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpi${script}.in ${CMAKE_BINARY_DIR}/bin/smpi${script} @ONLY)
585 ### SMPI scripts used when compiling simgrid
586 set(exec_prefix "${CMAKE_BINARY_DIR}/smpi_script/")
587 set(includedir "${CMAKE_HOME_DIRECTORY}/include")
588 set(libdir "${CMAKE_BINARY_DIR}/lib")
589 set(includeflag "\"-I${includedir}\" \"-I${includedir}/smpi\"")
590 set(includeflag "${includeflag} \"-I${CMAKE_BINARY_DIR}/include\" \"-I${CMAKE_BINARY_DIR}/include/smpi\"")
591 set(CMAKE_SMPI_COMMAND "export LD_LIBRARY_PATH=\"${libdir}")
593 set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}:${NS3_LIBRARY_PATH}")
595 set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}\${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}\"")
596 set(SMPIMAIN ${libdir}/simgrid/smpimain)
597 set(SMPIREPLAYMAIN ${libdir}/simgrid/smpireplaymain)
599 foreach(script cc cxx ff f90 run)
600 configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpi${script}.in ${CMAKE_BINARY_DIR}/smpi_script/bin/smpi${script} @ONLY)
604 foreach(script cc cxx ff f90 run)
605 execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpi${script})
606 execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/smpi_script/bin/smpi${script})
610 set(generated_headers_to_install
611 ${CMAKE_CURRENT_BINARY_DIR}/include/smpi/mpif.h
612 ${CMAKE_CURRENT_BINARY_DIR}/include/simgrid/config.h
613 ${CMAKE_CURRENT_BINARY_DIR}/include/simgrid/version.h
616 set(generated_headers ${CMAKE_CURRENT_BINARY_DIR}/src/internal_config.h )
618 set(generated_files_to_clean
620 ${generated_headers_to_install}
621 ${CMAKE_BINARY_DIR}/bin/smpicc
622 ${CMAKE_BINARY_DIR}/bin/smpicxx
623 ${CMAKE_BINARY_DIR}/bin/smpiff
624 ${CMAKE_BINARY_DIR}/bin/smpif90
625 ${CMAKE_BINARY_DIR}/bin/smpirun
626 ${CMAKE_BINARY_DIR}/bin/colorize
627 ${CMAKE_BINARY_DIR}/bin/simgrid_update_xml
628 ${CMAKE_BINARY_DIR}/examples/smpi/tracing/smpi_traced.trace
631 if(NOT "${CMAKE_BINARY_DIR}" STREQUAL "${CMAKE_HOME_DIRECTORY}")
632 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions0.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions0.txt COPYONLY)
633 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions1.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions1.txt COPYONLY)
634 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_allreduce.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allreduce.txt COPYONLY)
635 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_barrier.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_barrier.txt COPYONLY)
636 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_bcast.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_bcast.txt COPYONLY)
637 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_with_isend.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_with_isend.txt COPYONLY)
638 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_alltoall.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoall.txt COPYONLY)
639 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_alltoallv.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoallv.txt COPYONLY)
640 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_waitall.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_waitall.txt COPYONLY)
641 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_reducescatter.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_reducescatter.txt COPYONLY)
642 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_gather.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_gather.txt COPYONLY)
643 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_allgatherv.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allgatherv.txt COPYONLY)
644 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile COPYONLY)
645 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_cluster ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_cluster COPYONLY)
646 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_griffon ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_griffon COPYONLY)
647 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_coll ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_coll COPYONLY)
648 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_io ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_io COPYONLY)
649 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_empty ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_empty COPYONLY)
651 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/description_file ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/description_file COPYONLY)
652 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/README ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/README COPYONLY)
653 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/smpi_replay.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/smpi_replay.txt COPYONLY)
654 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)
655 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)
656 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)
657 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)
658 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)
659 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)
660 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)
661 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)
662 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)
663 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)
664 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)
665 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)
666 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)
667 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)
668 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)
669 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)
670 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)
671 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)
672 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)
673 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)
674 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)
675 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)
676 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)
677 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)
678 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)
679 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)
680 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)
681 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)
682 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)
683 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)
684 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)
685 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)
687 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)
688 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)
689 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)
690 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)
691 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)
692 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)
693 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)
694 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)
695 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)
696 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)
697 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)
698 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)
699 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)
700 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)
701 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)
703 set(generated_files_to_clean
704 ${generated_files_to_clean}
705 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions0.txt
706 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions1.txt
707 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allreduce.txt
708 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_barrier.txt
709 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_bcast.txt
710 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_with_isend.txt
711 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoall.txt
712 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoallv.txt
713 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_waitall.txt
714 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_gather.txt
715 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allgatherv.txt
716 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_reducescatter.txt
717 ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile
718 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/description_file
719 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/README
720 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/smpi_replay.txt
721 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace0.txt
722 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace1.txt
723 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace2.txt
724 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace3.txt
725 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace4.txt
726 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace5.txt
727 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace6.txt
728 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace7.txt
729 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace8.txt
730 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace9.txt
731 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace10.txt
732 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace11.txt
733 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace12.txt
734 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace13.txt
735 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace14.txt
736 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace15.txt
737 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace16.txt
738 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace17.txt
739 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace18.txt
740 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace19.txt
741 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace20.txt
742 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace21.txt
743 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace22.txt
744 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace23.txt
745 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace24.txt
746 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace25.txt
747 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace26.txt
748 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace27.txt
749 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace28.txt
750 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace29.txt
751 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace30.txt
752 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace31.txt
753 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/compute_only.txt
754 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/compute_only/actions0.txt
755 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/compute_only/actions1.txt
756 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/empty.txt
757 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/empty/actions0.txt
758 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/empty/actions1.txt
759 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/mixed.txt
760 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/mixed/actions0.txt
761 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/mixed/actions1.txt
762 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/replay_multiple_manual.tesh
763 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute
764 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute_consecutive
765 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute_consecutive2
766 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute_simple
767 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty1
768 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2
769 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2_same_resources
770 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2_same_time
771 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2_same_time_and_resources
772 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed1
773 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2
774 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2_same_resources
775 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2_same_time
776 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2_same_time_and_resources
777 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_nojob
781 SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES
782 "${generated_files_to_clean}")
784 add_custom_target(tests COMMENT "Recompiling the tests")
785 add_custom_target(tests-mc COMMENT "Recompiling the MC tests and tools.")
786 add_dependencies(tests tests-mc)
788 ### Build some Maintainer files
789 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/MaintainerMode.cmake)
793 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/MakeLib.cmake)
795 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/MakeLibWin.cmake)
799 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Java.cmake)
802 # Python binding (with pybind11)
804 if((NOT DEFINED enable_python) OR enable_python)
805 if(EXISTS ${CMAKE_HOME_DIRECTORY}/pybind11) # Try to use a local copy of pybind11, if any
806 message(STATUS "Use the internal copy of pybind11.")
807 add_subdirectory(${CMAKE_HOME_DIRECTORY}/pybind11)
808 set(pybind11_FOUND ON)
810 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_HOME_DIRECTORY}/pybind11/tools/)
811 set(Python_ADDITIONAL_VERSIONS 3.9 3.8 3.7 3.6 3.5 3.4)
812 find_package(PythonLibsNew ${PYBIND11_PYTHON_VERSION} REQUIRED)
815 find_package(pybind11 CONFIG)
816 message(STATUS "Pybind11 version: ${pybind11_VERSION}")
817 if (pybind11_VERSION VERSION_LESS 2.4)
818 message(STATUS "SimGrid needs at least v2.4 of pybind11. Disabling the Python bindings.")
819 set(pybind11_FOUND OFF)
823 if(NOT PYTHONLIBS_FOUND AND NOT Python3_Development_FOUND)
824 message(STATUS "Python libs not found. Turn pybind11 off.")
826 set(pybind11_FOUND OFF)
830 option(enable_python "Whether the Python bindings are activated." ${pybind11_FOUND}) # ON by default if dependencies are met
832 if("${CMAKE_SYSTEM}" MATCHES "FreeBSD" AND enable_model-checking AND enable_python)
833 message(WARNING "FreeBSD + Model-Checking + Python = too much for now. Disabling the Python bindings.")
834 set(enable_python FALSE)
839 message(STATUS "Found pybind11.")
841 set(pybind11_options NO_EXTRAS)
843 pybind11_add_module(python-bindings src/bindings/python/simgrid_python.cpp ${pybind11_options})
844 target_compile_features(python-bindings PRIVATE cxx_std_14)
845 target_link_libraries(python-bindings PUBLIC simgrid)
846 set_target_properties(python-bindings PROPERTIES
847 LIBRARY_OUTPUT_NAME simgrid
848 CXX_VISIBILITY_PRESET "default"
849 INTERPROCEDURAL_OPTIMIZATION FALSE)
850 # LTO is disabled here from the python bindings because this makes a
851 # cmake warning about CMP0069 even when this policy is set. This
852 # problem may be in cmake, in pybind11 or even in our code, not sure.
853 # It may get eventually solved in cmake or pybind11. Or not.
854 # The sure thing is that our python bindings are in one file only,
855 # so there is no need for LTO here. Problem solved :)
857 add_dependencies(tests python-bindings)
858 set_property(TARGET python-bindings
859 APPEND PROPERTY INCLUDE_DIRECTORIES "${INTERNAL_INCLUDES}")
861 if("${SIMGRID_PYTHON_LIBDIR}" STREQUAL "") # value not manually set
862 if("${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr")
863 set(SIMGRID_PYTHON_LIBDIR ${Python3_SITEARCH})
864 else("${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr")
865 string(REGEX REPLACE "^/usr/" "${CMAKE_INSTALL_PREFIX}/" SIMGRID_PYTHON_LIBDIR ${Python3_SITEARCH})
866 endif("${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr")
868 install(TARGETS python-bindings
869 LIBRARY DESTINATION "${SIMGRID_PYTHON_LIBDIR}")
871 message(FATAL_ERROR "Please install pybind11-dev to build the Python bindings (or disable that option).")
874 mark_as_advanced(PYBIND11_PYTHON_VERSION)
875 mark_as_advanced(pybind11_DIR)
878 if(enable_memcheck_xml)
879 set(enable_memcheck true)
884 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Tests.cmake)
885 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/CTestConfig.cmake)
887 ### Define subdirectories
888 foreach(cmakefile ${CMAKEFILES_TXT})
889 string(REPLACE "/CMakeLists.txt" "" repository ${cmakefile})
890 add_subdirectory("${CMAKE_HOME_DIRECTORY}/${repository}")
893 ### Setup the distrib
894 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Distrib.cmake)
896 ### Build the docs if asked to
897 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Documentation.cmake)
899 ### Print the result of configuration
901 message("##########################################")
902 message("#### Content of src/internal_config.h ####")
903 message("##########################################")
904 file(STRINGS ${CMAKE_CURRENT_BINARY_DIR}/src/internal_config.h config_output)
905 LIST(REMOVE_AT config_output 0 1 2 3 4 5 6 7 8 9 10) # Pass the file header
906 foreach(line ${config_output})
909 message("##########################################")
910 message("#### Content of simgrid/config.h ####")
911 message("##########################################")
912 file(STRINGS ${CMAKE_CURRENT_BINARY_DIR}/include/simgrid/config.h config_output)
913 LIST(REMOVE_AT config_output 0 1 2 3 4 5 6 7 8 9 -1) # Pass the file header
914 foreach(line ${config_output})
917 message("##########################################")
918 message("#### End of configuration headers ####")
919 message("##########################################")
921 message("\nConfiguration of package `simgrid':")
922 message(" Home directory ..............: ${CMAKE_HOME_DIRECTORY}")
923 message(" Build Name ..................: ${BUILDNAME}")
924 message(" Cmake Generator .............: ${CMAKE_GENERATOR}")
925 message(" Site ........................: ${SITE}")
926 message(" Install prefix ..............: ${CMAKE_INSTALL_PREFIX}")
927 message(" Release .....................: simgrid-${release_version}")
929 message(" Compiler: C .................: ${CMAKE_C_COMPILER} (id: ${CMAKE_C_COMPILER_ID})")
930 message(" version .............: ${CMAKE_C_COMPILER_VERSION}")
931 message(" is gnu ..............: ${CMAKE_COMPILER_IS_GNUCC}")
932 message(" Compiler: C++ ...............: ${CMAKE_CXX_COMPILER} (id: ${CMAKE_CXX_COMPILER_ID})")
933 message(" version .............: ${CMAKE_CXX_COMPILER_VERSION}")
935 message(" Compiler: Javac .............: ${Java_JAVAC_EXECUTABLE}")
936 message(" version .............: ${Java_VERSION_STRING}")
937 message(" runtime .............: ${Java_JAVA_EXECUTABLE}")
939 if(CMAKE_Fortran_COMPILER)
940 message(" Compiler: Fortran ...........: ${SMPI_Fortran_COMPILER} (id: ${CMAKE_Fortran_COMPILER_ID})")
941 message(" version .............: ${CMAKE_Fortran_COMPILER_VERSION}")
943 message(" Linker: .....................: ${CMAKE_LINKER}")
944 message(" version .............: ${LINKER_VERSION}")
945 message(" Make program: ...............: ${CMAKE_MAKE_PROGRAM}")
947 message(" CFlags ......................: ${CMAKE_C_FLAGS}")
948 message(" CXXFlags ....................: ${CMAKE_CXX_FLAGS}")
949 message(" LDFlags .....................: ${CMAKE_C_LINK_FLAGS}")
950 message(" with LTO ....................: ${enable_lto}")
953 if (SIMGRID_HAVE_MSG)
954 message(" Compile MSG .................: ON")
956 message(" Compile MSG .................: OFF")
959 if (SIMGRID_HAVE_NS3)
960 message(" Compile ns-3 ................: ON (path: ${NS3_PATH})")
962 message(" Compile ns-3 ................: OFF (hint: ${NS3_HINT})")
966 message(" Compile Java ................: ON")
967 message(" Native lib in jar .........: ${enable_lib_in_jar}")
969 message(" Compile Java ................: OFF")
972 message(" Compile Python bindings .....: ${enable_python}")
973 message(" module ....................: ${PYTHON_MODULE_PREFIX}simgrid${PYTHON_MODULE_EXTENSION}")
974 message(" install path ..............: ${SIMGRID_PYTHON_LIBDIR} (force another value with -DSIMGRID_PYTHON_LIBDIR)")
976 message(" Compile Python bindings .....: OFF (disabled, or pybind11 not found)")
979 message(" Eigen3 library ..............: ${EIGEN3_VERSION_STRING} in ${EIGEN3_INCLUDE_DIR}")
981 message(" Eigen3 library ..............: not found (EIGEN3_HINT='${EIGEN3_HINT}').")
983 message(" Compile Smpi ................: ${HAVE_SMPI}")
984 message(" Smpi fortran ..............: ${SMPI_FORTRAN}")
985 message(" MPICH3 testsuite ..........: ${enable_smpi_MPICH3_testsuite}")
986 message(" MBI testsuite .............: ${enable_smpi_MBI_testsuite}")
987 message(" Privatization .............: ${HAVE_PRIVATIZATION}")
988 message(" PAPI support...............: ${HAVE_PAPI}")
989 message(" Compile Boost.Context support: ${HAVE_BOOST_CONTEXTS}")
991 message(" Maintainer mode .............: ${enable_maintainer_mode}")
992 message(" Documentation................: ${enable_documentation}")
993 message(" Model checking ..............: ${SIMGRID_HAVE_MC}")
994 message(" Graphviz mode ...............: ${HAVE_GRAPHVIZ}")
995 message(" Mallocators .................: ${enable_mallocators}")
997 message(" Simgrid dependencies ........: ${SIMGRID_DEP}")
1000 execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_BINARY_DIR}/Testing/Notes/)
1001 file(WRITE ${PROJECT_BINARY_DIR}/Testing/Notes/Build "GIT version : ${GIT_VERSION}\n")
1002 file(APPEND ${PROJECT_BINARY_DIR}/Testing/Notes/Build "Release : simgrid-${release_version}\n")