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 ns-3 in version 3.28 or higher. Please upgrade or disable that cmake option.")
233 set(SIMGRID_HAVE_NS3 1)
234 set(SIMGRID_DEP "${SIMGRID_DEP} ${NS3_LIBRARIES}")
236 message(FATAL_ERROR "Cannot find ns-3. Please install it (apt-get install ns3 libns3-dev) or disable that cmake option")
240 ### Check for Eigen library
241 set(SIMGRID_HAVE_EIGEN3 0)
242 find_package (Eigen3 3.3 CONFIG
243 HINTS ${EIGEN3_HINT})
245 set(SIMGRID_HAVE_EIGEN3 1)
246 message(STATUS "Found Eigen3: ${EIGEN3_INCLUDE_DIR}")
247 include_directories(${EIGEN3_INCLUDE_DIR})
248 if ("3.3.4" VERSION_EQUAL EIGEN3_VERSION_STRING AND CMAKE_COMPILER_IS_GNUCC)
249 message(STATUS "Avoid build error of Eigen3 v3.3.4 using -Wno-error=int-in-bool-context")
250 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-error=int-in-bool-context")
253 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")
256 set(SIMGRID_HAVE_MSG 0)
258 set(SIMGRID_HAVE_MSG 1)
262 set(Boost_USE_STATIC_LIBS 1)
269 message(FATAL_ERROR "Cannot find PAPI. Please install it (apt-get install papi-tools libpapi-dev) or disable PAPI bindings.")
273 # But we do need the core of Boost
274 # cmake before 3.13.1 does not know about stacktrace components. Fix it.
275 # Usable components: https://www.boost.org/doc/libs/1_65_1/doc/html/stacktrace/configuration_and_build.html
276 set(_Boost_STACKTRACE_HEADERS "boost/stacktrace.hpp")
277 set(_Boost_STACKTRACE_BACKTRACE_HEADERS "boost/stacktrace.hpp")
278 set(_Boost_STACKTRACE_ADDR2LINE_HEADERS "boost/stacktrace.hpp")
280 if(minimal-bindings) # When we want a minimal jarfile, don't even search for boost optional components
281 message(STATUS "Don't even look for boost optional components, as we build minimal binding libraries.")
282 find_package(Boost 1.48)
284 find_package(Boost 1.59 OPTIONAL_COMPONENTS context stacktrace_backtrace stacktrace_addr2line)
287 include_directories(${Boost_INCLUDE_DIRS})
288 message(STATUS "Mandatory components found. SimGrid is compilable.")
289 if (NOT minimal-bindings)
290 message(STATUS "Looking for optional Boost components:")
291 set(Boost_FOUND 1) # These components are optionals
292 CHECK_INCLUDE_FILE("backtrace.h" HAVE_BACKTRACE_H) # check that backtrace is actually possible
293 if (Boost_STACKTRACE_BACKTRACE_FOUND AND HAVE_BACKTRACE_H)
294 message (STATUS " stacktrace: found the fast 'backtrace' implementation. Activating human-readable stack traces.")
295 set(HAVE_BOOST_STACKTRACE_BACKTRACE 1)
297 set(HAVE_BOOST_STACKTRACE_BACKTRACE 0)
298 if (Boost_STACKTRACE_ADDR2LINE_FOUND)
299 message (STATUS " stacktrace: found the slow 'addr2line' implementation. Activating human-readable stack traces.")
300 set(HAVE_BOOST_STACKTRACE_ADDR2LINE 1)
302 message (STATUS " stacktrace: MISSING. Install libboost-stacktrace-dev to display the stacktraces.")
303 set(HAVE_BOOST_STACKTRACE_ADDR2LINE 0)
307 if(Boost_CONTEXT_FOUND)
308 message (STATUS " context: found. Activating Boost contexts.")
309 set(HAVE_BOOST_CONTEXTS 1)
311 message (STATUS " context: MISSING. Install libboost-context-dev for this optional feature.")
312 set(HAVE_BOOST_CONTEXTS 0)
317 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'")
319 find_package(Boost 1.48) #try without optional libraries
321 message(FATAL_ERROR "Boost libraries not found. Install libboost-dev (>= 1.48.0).")
323 include_directories(${Boost_INCLUDE_DIRS})
324 message(STATUS "Mandatory components found. SimGrid is compilable.")
329 # Checks for header libraries functions.
330 CHECK_LIBRARY_EXISTS(rt clock_gettime "" HAVE_POSIX_GETTIME)
331 CHECK_LIBRARY_EXISTS(pthread pthread_setaffinity_np "" HAVE_PTHREAD_SETAFFINITY)
332 CHECK_INCLUDE_FILE("pthread_np.h" HAVE_PTHREAD_NP_H) # for pthread_setaffinity_np() on FreeBSD
334 if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
335 set(CMAKE_REQUIRED_DEFINITIONS "-D_XOPEN_SOURCE=700 -D_DARWIN_C_SOURCE")
337 # Use the GNU version of unusual modifiers like PRIx64
338 add_definitions(-D__USE_MINGW_ANSI_STDIO=1)
339 set(CMAKE_REQUIRED_DEFINITIONS "-D__USE_MINGW_ANSI_STDIO=1")
341 set(CMAKE_REQUIRED_DEFINITIONS "-D_GNU_SOURCE")
344 CHECK_INCLUDE_FILE("valgrind/valgrind.h" HAVE_VALGRIND_H)
345 CHECK_INCLUDE_FILE("unistd.h" HAVE_UNISTD_H)
346 CHECK_INCLUDE_FILE("linux/futex.h" HAVE_FUTEX_H)
348 CHECK_FUNCTION_EXISTS(dlfunc HAVE_DLFUNC)
349 CHECK_FUNCTION_EXISTS(gettimeofday HAVE_GETTIMEOFDAY)
350 CHECK_FUNCTION_EXISTS(nanosleep HAVE_NANOSLEEP)
351 CHECK_FUNCTION_EXISTS(sysconf HAVE_SYSCONF)
352 CHECK_FUNCTION_EXISTS(process_vm_readv HAVE_PROCESS_VM_READV)
353 CHECK_FUNCTION_EXISTS(mmap HAVE_MMAP)
354 CHECK_FUNCTION_EXISTS(mremap HAVE_MREMAP)
356 CHECK_SYMBOL_EXISTS(vasprintf stdio.h HAVE_VASPRINTF)
358 # The detection of vasprintf fails on MinGW, assumingly because it's
359 # defined as an inline function in stdio.h instead of a regular
360 # function. So force the result to be 1 despite of the test.
361 set(HAVE_VASPRINTF 1)
364 CHECK_INCLUDE_FILE("sys/sendfile.h" HAVE_SENDFILE_H)
365 CHECK_FUNCTION_EXISTS(sendfile HAVE_SENDFILE)
366 if(HAVE_SENDFILE_H AND HAVE_SENDFILE)
367 set(SG_HAVE_SENDFILE 1)
369 set(SG_HAVE_SENDFILE 0)
372 if(enable_model-checking AND NOT "${CMAKE_SYSTEM}" MATCHES "Linux|FreeBSD")
373 message(WARNING "Support for model-checking has not been enabled on ${CMAKE_SYSTEM}: disabling it")
374 set(enable_model-checking FALSE)
377 if(enable_model-checking AND minimal-bindings)
378 message(FATAL_ERROR "Compile-time option 'minimal-bindings' cannot be enabled with 'model-checking'")
385 if(enable_model-checking)
386 message(STATUS "Warning: support for model-checking has been disabled because you are missing either mmap or __thread.")
388 SET(enable_model-checking 0)
391 if(enable_mallocators)
392 SET(SIMGRID_HAVE_MALLOCATOR 1)
394 SET(SIMGRID_HAVE_MALLOCATOR 0)
397 if(enable_model-checking)
398 include(FindLibunwind)
400 SET(SIMGRID_DEP "${SIMGRID_DEP} ${LIBUNWIND_LIBRARIES}")
402 message(FATAL_ERROR "Please install libunwind-dev libdw-dev libelf-dev libevent-dev if you want to compile the SimGrid model checker.")
404 find_package(Libdw REQUIRED)
405 find_package(Libelf REQUIRED)
406 find_package(Libevent REQUIRED)
407 include_directories(${LIBDW_INCLUDE_DIR} ${LIBELF_INCLUDE_DIR} ${LIBEVENT_INCLUDE_DIR})
408 set(SIMGRID_DEP "${SIMGRID_DEP} ${LIBEVENT_LIBRARIES} ${LIBELF_LIBRARIES} ${LIBDW_LIBRARIES}")
409 set(SIMGRID_HAVE_MC 1)
410 if("${CMAKE_SYSTEM}" MATCHES "FreeBSD" AND enable_java)
411 message(WARNING "FreeBSD + Model-Checking + Java = too much for now. Disabling the Java bindings.")
412 set(enable_java FALSE)
415 SET(SIMGRID_HAVE_MC 0)
418 mark_as_advanced(PATH_LIBDW_H)
419 mark_as_advanced(PATH_LIBDW_LIB)
421 if(enable_java AND NOT enable_msg)
422 message(FATAL_ERROR "Cannot activate the Java bindings without the MSG module. Either add -Denable_msg=ON or -Denable_java=OFF")
425 if (enable_model-checking AND enable_ns3)
426 message(WARNING "Activating both model-checking and ns-3 bindings is considered experimental.")
432 message (STATUS "Warning: no support for SMPI automatic privatization on Windows.")
433 SET(HAVE_PRIVATIZATION 0)
435 SET(HAVE_PRIVATIZATION 1)
441 #--------------------------------------------------------------------------------------------------
442 ### Check what context backends are available
444 set(HAVE_UCONTEXT_CONTEXTS 0)
445 CHECK_INCLUDE_FILE("ucontext.h" HAVE_UCONTEXT_H)
446 if(NOT HAVE_UCONTEXT_H)
447 message(STATUS "No ucontext factory: <ucontext.h> not found.")
449 message(STATUS "No ucontext factory: Apple don't want us to use them.")
450 set(HAVE_UCONTEXT_H 0)
452 try_compile(compile_makecontext ${CMAKE_BINARY_DIR} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_makecontext.c
453 OUTPUT_VARIABLE compile_makecontext_output)
455 #If can have both context
456 if(compile_makecontext)
457 set(HAVE_UCONTEXT_CONTEXTS 1)
458 message(STATUS "Support for ucontext factory ok.")
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.")
464 # Stack setup (size and address)
465 try_run(RUN_makecontext_VAR COMPILE_makecontext_VAR
466 ${CMAKE_BINARY_DIR} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_stacksetup.c
467 RUN_OUTPUT_VARIABLE stack_setup)
469 LIST(LENGTH stack_setup stack_setup_len)
470 if("${stack_setup_len}" STREQUAL "2")
471 LIST(GET stack_setup 0 makecontext_addr)
472 LIST(GET stack_setup 1 makecontext_size)
473 set(sg_makecontext_stack_addr "#define sg_makecontext_stack_addr(skaddr) (${makecontext_addr})")
474 set(sg_makecontext_stack_size "#define sg_makecontext_stack_size(sksize) (${makecontext_size})")
476 message(FATAL_ERROR "Could not figure out the stack setup. Compil: ${RUN_makecontext_VAR}. Exec: ${COMPILE_makecontext_VAR}. Output: ${stack_setup}")
480 # Stack growth direction (upward or downward). Used for the following contexts: SysV, raw, Boost
481 try_run(RUN_stackgrowth_VAR COMPILE_stackgrowth_VAR
483 ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_stackgrowth.c
484 RUN_OUTPUT_VARIABLE stack
485 COPY_FILE test_stackgrowth)
487 if("${stack}" STREQUAL "down")
488 set(PTH_STACKGROWTH "-1")
489 elseif("${stack}" STREQUAL "up")
490 set(PTH_STACKGROWTH "1")
492 if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64")
493 set(PTH_STACKGROWTH "-1")
494 elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "i686")
495 set(PTH_STACKGROWTH "-1")
497 message(FATAL_ERROR "Could not figure out the stack direction. Test prog returned: ${stack}; CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}.")
500 # If the test ran well, remove the test binary
501 file(REMOVE test_stackgrowth)
502 #--------------------------------------------------------------------------------------------------
507 if(EXISTS ${CMAKE_HOME_DIRECTORY}/.git/)
508 execute_process(COMMAND git rev-parse --verify --short HEAD
509 WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}
510 OUTPUT_VARIABLE GIT_VERSION
511 OUTPUT_STRIP_TRAILING_WHITESPACE)
512 # Check for uncommitted changes
513 execute_process(COMMAND git diff --name-only HEAD
514 WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}
515 OUTPUT_VARIABLE files_changed)
517 set(GIT_VERSION "${GIT_VERSION}-dirty")
519 elseif(EXISTS ${CMAKE_HOME_DIRECTORY}/.gitversion)
520 FILE(STRINGS ${CMAKE_HOME_DIRECTORY}/.gitversion GIT_VERSION)
522 set(GIT_VERSION "none, release version")
524 message(STATUS "Git version: ${GIT_VERSION}")
526 ### Define source packages for Libs
527 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/DefinePackages.cmake)
529 ### Setup gcc & clang flags (include after DefinePackage.cmake, and before generating header files)
531 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Flags.cmake)
534 ### Generate the required headers and scripts
535 #############################################
537 # Avoid triggering a (full) rebuild by touching the files if they did not really change
538 configure_file("${CMAKE_HOME_DIRECTORY}/src/internal_config.h.in" "${CMAKE_BINARY_DIR}/src/internal_config.h.generated" @ONLY IMMEDIATE)
539 configure_file("${CMAKE_HOME_DIRECTORY}/include/simgrid/version.h.in" "${CMAKE_BINARY_DIR}/include/simgrid/version.h.generated" @ONLY IMMEDIATE)
540 configure_file("${CMAKE_HOME_DIRECTORY}/include/simgrid/config.h.in" "${CMAKE_BINARY_DIR}/include/simgrid/config.h.generated" @ONLY IMMEDIATE)
541 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/src/internal_config.h.generated ${CMAKE_BINARY_DIR}/src/internal_config.h)
542 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/include/simgrid/version.h.generated ${CMAKE_BINARY_DIR}/include/simgrid/version.h)
543 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/include/simgrid/config.h.generated ${CMAKE_BINARY_DIR}/include/simgrid/config.h)
544 file(REMOVE ${CMAKE_BINARY_DIR}/src/internal_config.h.generated)
545 file(REMOVE ${CMAKE_BINARY_DIR}/include/simgrid/config.h.generated)
546 file(REMOVE ${CMAKE_BINARY_DIR}/include/simgrid/version.h.generated)
548 # We need two versions of the SMPI scripts because they contain the path to the library
549 # so, it depends of whether SimGrid is installed, or run from the sources (during the build)
551 file(READ ${CMAKE_HOME_DIRECTORY}/src/smpi/smpitools.sh SMPITOOLS_SH) # Definitions shared amongst all SMPI scripts, inlined in each of them
553 ### SMPI script used when simgrid is installed
554 set(exec_prefix ${CMAKE_INSTALL_PREFIX})
555 set(includedir "${CMAKE_INSTALL_FULL_INCLUDEDIR}")
556 set(libdir "${CMAKE_INSTALL_FULL_LIBDIR}")
557 set(includeflag "\"-I${includedir}\" \"-I${includedir}/smpi\"")
558 set(CMAKE_SMPI_COMMAND "export LD_LIBRARY_PATH=\"${libdir}")
560 set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}:${NS3_LIBRARY_PATH}")
562 set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}\${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}\"")
563 set(SMPIMAIN ${libdir}/simgrid/smpimain)
564 set(SMPIREPLAYMAIN ${libdir}/simgrid/smpireplaymain)
566 configure_file(${CMAKE_HOME_DIRECTORY}/include/smpi/mpif.h.in ${CMAKE_BINARY_DIR}/include/smpi/mpif.h @ONLY)
567 #configure mpif.f90 to build mpi.mod
569 set(MODULE_MPIF_IN "module mpi")
570 set(MODULE_MPIF_OUT "end module mpi")
571 configure_file(${CMAKE_HOME_DIRECTORY}/include/smpi/mpif.h.in ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90.generated @ONLY)
572 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90.generated ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90)
573 set(CMAKE_Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/include/smpi)
574 add_library(mpi SHARED ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90)
577 foreach(script cc cxx ff f90 run)
578 configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpi${script}.in ${CMAKE_BINARY_DIR}/bin/smpi${script} @ONLY)
581 ### SMPI scripts used when compiling simgrid
582 set(exec_prefix "${CMAKE_BINARY_DIR}/smpi_script/")
583 set(includedir "${CMAKE_HOME_DIRECTORY}/include")
584 set(libdir "${CMAKE_BINARY_DIR}/lib")
585 set(includeflag "\"-I${includedir}\" \"-I${includedir}/smpi\"")
586 set(includeflag "${includeflag} \"-I${CMAKE_BINARY_DIR}/include\" \"-I${CMAKE_BINARY_DIR}/include/smpi\"")
587 set(CMAKE_SMPI_COMMAND "export LD_LIBRARY_PATH=\"${libdir}")
589 set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}:${NS3_LIBRARY_PATH}")
591 set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}\${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}\"")
592 set(SMPIMAIN ${libdir}/simgrid/smpimain)
593 set(SMPIREPLAYMAIN ${libdir}/simgrid/smpireplaymain)
595 foreach(script cc cxx ff f90 run)
596 configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpi${script}.in ${CMAKE_BINARY_DIR}/smpi_script/bin/smpi${script} @ONLY)
600 foreach(script cc cxx ff f90 run)
601 execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpi${script})
602 execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/smpi_script/bin/smpi${script})
606 set(generated_headers_to_install
607 ${CMAKE_CURRENT_BINARY_DIR}/include/smpi/mpif.h
608 ${CMAKE_CURRENT_BINARY_DIR}/include/simgrid/config.h
609 ${CMAKE_CURRENT_BINARY_DIR}/include/simgrid/version.h
612 set(generated_headers ${CMAKE_CURRENT_BINARY_DIR}/src/internal_config.h )
614 set(generated_files_to_clean
616 ${generated_headers_to_install}
617 ${CMAKE_BINARY_DIR}/bin/smpicc
618 ${CMAKE_BINARY_DIR}/bin/smpicxx
619 ${CMAKE_BINARY_DIR}/bin/smpiff
620 ${CMAKE_BINARY_DIR}/bin/smpif90
621 ${CMAKE_BINARY_DIR}/bin/smpirun
622 ${CMAKE_BINARY_DIR}/bin/colorize
623 ${CMAKE_BINARY_DIR}/bin/simgrid_update_xml
624 ${CMAKE_BINARY_DIR}/examples/smpi/tracing/smpi_traced.trace
627 if(NOT "${CMAKE_BINARY_DIR}" STREQUAL "${CMAKE_HOME_DIRECTORY}")
628 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions0.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions0.txt COPYONLY)
629 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions1.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions1.txt COPYONLY)
630 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_allreduce.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allreduce.txt COPYONLY)
631 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_barrier.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_barrier.txt COPYONLY)
632 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_bcast.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_bcast.txt COPYONLY)
633 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_with_isend.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_with_isend.txt COPYONLY)
634 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_alltoall.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoall.txt COPYONLY)
635 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_alltoallv.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoallv.txt COPYONLY)
636 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_waitall.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_waitall.txt COPYONLY)
637 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_reducescatter.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_reducescatter.txt COPYONLY)
638 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_gather.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_gather.txt COPYONLY)
639 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_allgatherv.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allgatherv.txt COPYONLY)
640 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile COPYONLY)
641 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_cluster ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_cluster COPYONLY)
642 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_griffon ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_griffon COPYONLY)
643 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_coll ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_coll COPYONLY)
644 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_io ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_io COPYONLY)
645 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_empty ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_empty COPYONLY)
647 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/description_file ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/description_file COPYONLY)
648 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/README ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/README COPYONLY)
649 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/smpi_replay.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/smpi_replay.txt COPYONLY)
650 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)
651 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)
652 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)
653 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)
654 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)
655 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)
656 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)
657 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)
658 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)
659 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)
660 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)
661 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)
662 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)
663 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)
664 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)
665 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)
666 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)
667 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)
668 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)
669 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)
670 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)
671 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)
672 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)
673 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)
674 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)
675 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)
676 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)
677 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)
678 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)
679 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)
680 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)
681 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)
683 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)
684 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)
685 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)
686 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)
687 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)
688 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)
689 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)
690 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)
691 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)
692 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)
693 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)
694 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)
695 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)
696 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)
697 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)
699 set(generated_files_to_clean
700 ${generated_files_to_clean}
701 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions0.txt
702 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions1.txt
703 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allreduce.txt
704 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_barrier.txt
705 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_bcast.txt
706 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_with_isend.txt
707 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoall.txt
708 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoallv.txt
709 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_waitall.txt
710 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_gather.txt
711 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allgatherv.txt
712 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_reducescatter.txt
713 ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile
714 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/description_file
715 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/README
716 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/smpi_replay.txt
717 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace0.txt
718 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace1.txt
719 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace2.txt
720 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace3.txt
721 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace4.txt
722 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace5.txt
723 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace6.txt
724 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace7.txt
725 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace8.txt
726 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace9.txt
727 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace10.txt
728 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace11.txt
729 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace12.txt
730 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace13.txt
731 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace14.txt
732 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace15.txt
733 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace16.txt
734 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace17.txt
735 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace18.txt
736 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace19.txt
737 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace20.txt
738 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace21.txt
739 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace22.txt
740 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace23.txt
741 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace24.txt
742 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace25.txt
743 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace26.txt
744 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace27.txt
745 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace28.txt
746 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace29.txt
747 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace30.txt
748 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace31.txt
749 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/compute_only.txt
750 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/compute_only/actions0.txt
751 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/compute_only/actions1.txt
752 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/empty.txt
753 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/empty/actions0.txt
754 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/empty/actions1.txt
755 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/mixed.txt
756 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/mixed/actions0.txt
757 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/mixed/actions1.txt
758 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/replay_multiple_manual.tesh
759 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute
760 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute_consecutive
761 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute_consecutive2
762 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute_simple
763 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty1
764 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2
765 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2_same_resources
766 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2_same_time
767 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2_same_time_and_resources
768 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed1
769 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2
770 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2_same_resources
771 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2_same_time
772 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2_same_time_and_resources
773 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_nojob
777 SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES
778 "${generated_files_to_clean}")
780 add_custom_target(tests COMMENT "Recompiling the tests")
781 add_custom_target(tests-mc COMMENT "Recompiling the MC tests and tools.")
782 add_dependencies(tests tests-mc)
784 ### Build some Maintainer files
785 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/MaintainerMode.cmake)
789 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/MakeLib.cmake)
791 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/MakeLibWin.cmake)
795 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Java.cmake)
798 # Python binding (with pybind11)
800 if((NOT DEFINED enable_python) OR enable_python)
801 if(EXISTS ${CMAKE_HOME_DIRECTORY}/pybind11) # Try to use a local copy of pybind11, if any
802 message(STATUS "Use the internal copy of pybind11.")
803 add_subdirectory(${CMAKE_HOME_DIRECTORY}/pybind11)
804 set(pybind11_FOUND ON)
806 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_HOME_DIRECTORY}/pybind11/tools/)
807 set(Python_ADDITIONAL_VERSIONS 3.9 3.8 3.7 3.6 3.5 3.4)
808 find_package(PythonLibsNew ${PYBIND11_PYTHON_VERSION} REQUIRED)
811 find_package(pybind11 CONFIG)
812 message(STATUS "Pybind11 version: ${pybind11_VERSION}")
813 if (pybind11_VERSION VERSION_LESS 2.4)
814 message(STATUS "SimGrid needs at least v2.4 of pybind11. Disabling the Python bindings.")
815 set(pybind11_FOUND OFF)
819 if(NOT PYTHONLIBS_FOUND AND NOT Python3_Development_FOUND)
820 message(STATUS "Python libs not found. Turn pybind11 off.")
822 set(pybind11_FOUND OFF)
826 option(enable_python "Whether the Python bindings are activated." ${pybind11_FOUND}) # ON by default if dependencies are met
828 if("${CMAKE_SYSTEM}" MATCHES "FreeBSD" AND enable_model-checking AND enable_python)
829 message(WARNING "FreeBSD + Model-Checking + Python = too much for now. Disabling the Python bindings.")
830 set(enable_python FALSE)
835 message(STATUS "Found pybind11.")
837 set(pybind11_options NO_EXTRAS)
839 pybind11_add_module(python-bindings src/bindings/python/simgrid_python.cpp ${pybind11_options})
840 target_compile_features(python-bindings PRIVATE cxx_std_14)
841 target_link_libraries(python-bindings PUBLIC simgrid)
842 set_target_properties(python-bindings PROPERTIES
843 LIBRARY_OUTPUT_NAME simgrid
844 CXX_VISIBILITY_PRESET "default"
845 INTERPROCEDURAL_OPTIMIZATION FALSE)
846 # LTO is disabled here from the python bindings because this makes a
847 # cmake warning about CMP0069 even when this policy is set. This
848 # problem may be in cmake, in pybind11 or even in our code, not sure.
849 # It may get eventually solved in cmake or pybind11. Or not.
850 # The sure thing is that our python bindings are in one file only,
851 # so there is no need for LTO here. Problem solved :)
853 add_dependencies(tests python-bindings)
854 set_property(TARGET python-bindings
855 APPEND PROPERTY INCLUDE_DIRECTORIES "${INTERNAL_INCLUDES}")
857 if("${SIMGRID_PYTHON_LIBDIR}" STREQUAL "") # value not manually set
858 if("${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr")
859 set(SIMGRID_PYTHON_LIBDIR ${Python3_SITEARCH})
860 else("${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr")
861 string(REGEX REPLACE "^/usr/" "${CMAKE_INSTALL_PREFIX}/" SIMGRID_PYTHON_LIBDIR ${Python3_SITEARCH})
862 endif("${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr")
864 install(TARGETS python-bindings
865 LIBRARY DESTINATION "${SIMGRID_PYTHON_LIBDIR}")
867 message(FATAL_ERROR "Please install pybind11-dev to build the Python bindings (or disable that option).")
870 mark_as_advanced(PYBIND11_PYTHON_VERSION)
871 mark_as_advanced(pybind11_DIR)
874 if(enable_memcheck_xml)
875 set(enable_memcheck true)
880 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Tests.cmake)
881 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/CTestConfig.cmake)
883 ### Define subdirectories
884 foreach(cmakefile ${CMAKEFILES_TXT})
885 string(REPLACE "/CMakeLists.txt" "" repository ${cmakefile})
886 add_subdirectory("${CMAKE_HOME_DIRECTORY}/${repository}")
889 ### Setup the distrib
890 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Distrib.cmake)
892 ### Build the docs if asked to
893 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Documentation.cmake)
895 ### Print the result of configuration
897 message("##########################################")
898 message("#### Content of src/internal_config.h ####")
899 message("##########################################")
900 file(STRINGS ${CMAKE_CURRENT_BINARY_DIR}/src/internal_config.h config_output)
901 LIST(REMOVE_AT config_output 0 1 2 3 4 5 6 7 8 9 10) # Pass the file header
902 foreach(line ${config_output})
905 message("##########################################")
906 message("#### Content of simgrid/config.h ####")
907 message("##########################################")
908 file(STRINGS ${CMAKE_CURRENT_BINARY_DIR}/include/simgrid/config.h config_output)
909 LIST(REMOVE_AT config_output 0 1 2 3 4 5 6 7 8 9 -1) # Pass the file header
910 foreach(line ${config_output})
913 message("##########################################")
914 message("#### End of configuration headers ####")
915 message("##########################################")
917 message("\nConfiguration of package `simgrid':")
918 message(" Home directory ..............: ${CMAKE_HOME_DIRECTORY}")
919 message(" Build Name ..................: ${BUILDNAME}")
920 message(" Cmake Generator .............: ${CMAKE_GENERATOR}")
921 message(" Site ........................: ${SITE}")
922 message(" Install prefix ..............: ${CMAKE_INSTALL_PREFIX}")
923 message(" Release .....................: simgrid-${release_version}")
925 message(" Compiler: C .................: ${CMAKE_C_COMPILER} (id: ${CMAKE_C_COMPILER_ID})")
926 message(" version .............: ${CMAKE_C_COMPILER_VERSION}")
927 message(" is gnu ..............: ${CMAKE_COMPILER_IS_GNUCC}")
928 message(" Compiler: C++ ...............: ${CMAKE_CXX_COMPILER} (id: ${CMAKE_CXX_COMPILER_ID})")
929 message(" version .............: ${CMAKE_CXX_COMPILER_VERSION}")
931 message(" Compiler: Javac .............: ${Java_JAVAC_EXECUTABLE}")
932 message(" version .............: ${Java_VERSION_STRING}")
933 message(" runtime .............: ${Java_JAVA_EXECUTABLE}")
935 if(CMAKE_Fortran_COMPILER)
936 message(" Compiler: Fortran ...........: ${SMPI_Fortran_COMPILER} (id: ${CMAKE_Fortran_COMPILER_ID})")
937 message(" version .............: ${CMAKE_Fortran_COMPILER_VERSION}")
939 message(" Linker: .....................: ${CMAKE_LINKER}")
940 message(" version .............: ${LINKER_VERSION}")
941 message(" Make program: ...............: ${CMAKE_MAKE_PROGRAM}")
943 message(" CFlags ......................: ${CMAKE_C_FLAGS}")
944 message(" CXXFlags ....................: ${CMAKE_CXX_FLAGS}")
945 message(" LDFlags .....................: ${CMAKE_C_LINK_FLAGS}")
946 message(" with LTO ....................: ${enable_lto}")
949 if (SIMGRID_HAVE_MSG)
950 message(" Compile MSG .................: ON")
952 message(" Compile MSG .................: OFF")
955 if (SIMGRID_HAVE_NS3)
956 message(" Compile ns-3 ................: ON (path: ${NS3_PATH})")
958 message(" Compile ns-3 ................: OFF (hint: ${NS3_HINT})")
962 message(" Compile Java ................: ON")
963 message(" Native lib in jar .........: ${enable_lib_in_jar}")
965 message(" Compile Java ................: OFF")
968 message(" Compile Python bindings .....: ${enable_python}")
969 message(" module ....................: ${PYTHON_MODULE_PREFIX}simgrid${PYTHON_MODULE_EXTENSION}")
970 message(" install path ..............: ${SIMGRID_PYTHON_LIBDIR} (force another value with -DSIMGRID_PYTHON_LIBDIR)")
972 message(" Compile Python bindings .....: OFF (disabled, or pybind11 not found)")
975 message(" Eigen3 library ..............: ${EIGEN3_VERSION_STRING} in ${EIGEN3_INCLUDE_DIR}")
977 message(" Eigen3 library ..............: not found (EIGEN3_HINT='${EIGEN3_HINT}').")
979 message(" Compile Smpi ................: ${HAVE_SMPI}")
980 message(" Smpi fortran ..............: ${SMPI_FORTRAN}")
981 message(" MPICH3 testsuite ..........: ${enable_smpi_MPICH3_testsuite}")
982 message(" MBI testsuite .............: ${enable_smpi_MBI_testsuite}")
983 message(" Privatization .............: ${HAVE_PRIVATIZATION}")
984 message(" PAPI support...............: ${HAVE_PAPI}")
985 message(" Compile Boost.Context support: ${HAVE_BOOST_CONTEXTS}")
987 message(" Maintainer mode .............: ${enable_maintainer_mode}")
988 message(" Documentation................: ${enable_documentation}")
989 message(" Model checking ..............: ${SIMGRID_HAVE_MC}")
990 message(" Graphviz mode ...............: ${HAVE_GRAPHVIZ}")
991 message(" Mallocators .................: ${enable_mallocators}")
993 message(" Simgrid dependencies ........: ${SIMGRID_DEP}")
996 execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_BINARY_DIR}/Testing/Notes/)
997 file(WRITE ${PROJECT_BINARY_DIR}/Testing/Notes/Build "GIT version : ${GIT_VERSION}\n")
998 file(APPEND ${PROJECT_BINARY_DIR}/Testing/Notes/Build "Release : simgrid-${release_version}\n")