1 # Build the version number
3 set(SIMGRID_VERSION_MAJOR "3")
4 set(SIMGRID_VERSION_MINOR "30")
5 set(SIMGRID_VERSION_PATCH "1") # odd => git branch; even => stable release or released snapshot
7 if(${SIMGRID_VERSION_PATCH} EQUAL "0")
8 set(release_version "${SIMGRID_VERSION_MAJOR}.${SIMGRID_VERSION_MINOR}")
10 set(release_version "${SIMGRID_VERSION_MAJOR}.${SIMGRID_VERSION_MINOR}.${SIMGRID_VERSION_PATCH}")
13 message(STATUS "Configuring SimGrid v${release_version}")
15 set(SIMGRID_VERSION_STRING "SimGrid version ${release_version}")
17 set(libsimgrid_version "${release_version}")
18 set(libsimgrid-java_version "${release_version}")
20 # Basic checks on cmake
21 cmake_minimum_required(VERSION 3.5)
22 #for lto, to avoid warning (should be removed when switching to requiring cmake >= 3.9)
23 if(NOT CMAKE_VERSION VERSION_LESS "3.9")
24 cmake_policy(SET CMP0069 NEW)
26 message(STATUS "Cmake version ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION}")
27 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_HOME_DIRECTORY}/tools/cmake/Modules)
29 project(simgrid C CXX)
31 # customizable installation directories
32 include(GNUInstallDirs)
34 #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
35 # Check for the compiler #
36 #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
38 ## Check the C/C++ standard that we need
39 ## See also tools/cmake/Flags.cmake that sets our paranoid warning flags
40 INCLUDE(CheckCCompilerFlag)
41 CHECK_C_COMPILER_FLAG(-fstack-cleaner HAVE_C_STACK_CLEANER)
43 ## Request full debugging flags
44 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g3")
45 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g3")
47 if (CMAKE_COMPILER_IS_GNUCC)
48 if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "5.0")
50 "SimGrid needs at least g++ version 5.0 to compile but you have ${CMAKE_CXX_COMPILER_VERSION}."
51 "You need a sufficient support of c++14 to compile SimGrid.")
55 ## We need a decent support of the C++14 and C11 standards
56 set(CMAKE_CXX_STANDARD 14)
57 set(CMAKE_CXX_STANDARD_REQUIRED ON)
59 set(CMAKE_C_STANDARD 11)
60 set(CMAKE_C_STANDARD_REQUIRED ON)
62 if (CMAKE_C_COMPILER_ID STREQUAL "Intel" AND CMAKE_C11_EXTENSION_COMPILE_OPTION STREQUAL "-std=c11")
63 set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=gnu11")
66 ### Check threading support
67 set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
70 ### Check for Eigen library
71 find_package (Eigen3 3.3 REQUIRED NO_MODULE)
72 message(STATUS "Found Eigen3: ${EIGEN3_INCLUDE_DIR}")
73 include_directories(${EIGEN3_INCLUDE_DIR})
76 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Option.cmake)
79 if ((NOT DEFINED enable_smpi) OR enable_smpi)
80 # First unset the compiler in case we're re-running cmake over a previous
81 # configuration where it was saved as smpiff
82 unset(CMAKE_Fortran_COMPILER)
86 enable_language(Fortran OPTIONAL)
89 if(CMAKE_Fortran_COMPILER)
91 # Fortran compiler detected: save it, then replace by smpiff
92 set(SMPI_Fortran_COMPILER "${CMAKE_Fortran_COMPILER}" CACHE FILEPATH "The real Fortran compiler")
94 # Set flags/libs to be used in smpiff
95 if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU")
96 set(SMPI_Fortran_FLAGS_ "\"-fpic\" \"-ff2c\" \"-fno-second-underscore\"")
97 set(SMPI_Fortran_LIBS "\"-lgfortran\"")
99 elseif(CMAKE_Fortran_COMPILER_ID MATCHES "Intel")
100 set(SMPI_Fortran_FLAGS_ "\"-fPIC\" \"-nofor-main\"")
101 set(SMPI_Fortran_LIBS "\"-lifcore\"")
103 elseif(CMAKE_Fortran_COMPILER_ID MATCHES "PGI|Flang") # flang
104 set(SMPI_Fortran_FLAGS_ "\"-fPIC\"")
105 set(SMPI_Fortran_LIBS "")
108 set(SMPI_Fortran_FLAGS "${SMPI_Fortran_FLAGS_} ${SMPI_Fortran_FLAGS}")
110 ## Request debugging flags for Fortran too
111 set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -g")
114 endif(CMAKE_Fortran_COMPILER)
118 ### SET THE LIBRARY EXTENSION
128 execute_process(COMMAND ${CMAKE_LINKER} -v OUTPUT_VARIABLE LINKER_VERSION ERROR_VARIABLE LINKER_VERSION)
129 string(REGEX MATCH "[0-9].[0-9]*" LINKER_VERSION "${LINKER_VERSION}")
131 ### Find programs and paths
132 FIND_PROGRAM(GCOV_PATH gcov)
135 message(FATAL_ERROR "Please install Perl to compile SimGrid.")
138 # tesh.py needs python 3 (or the module python-subprocess32 on python2.8+)
139 if(CMAKE_VERSION VERSION_LESS "3.12")
140 set(PythonInterp_FIND_VERSION 3)
141 set(PythonInterp_FIND_VERSION_COUNT 1)
142 set(PythonInterp_FIND_VERSION_MAJOR 3)
143 include(FindPythonInterp)
144 if(NOT PYTHONINTERP_FOUND)
145 message(FATAL_ERROR "Please install Python (version 3 or higher) to compile SimGrid.")
148 find_package(Python3 COMPONENTS Interpreter Development)
149 if(NOT Python3_Interpreter_FOUND)
150 message(FATAL_ERROR "Please install Python (version 3 or higher) to compile SimGrid.")
152 set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE})
155 SET(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib)
157 ### Compute the include paths
159 # Only include public headers by default
161 ${CMAKE_BINARY_DIR}/include
162 ${CMAKE_HOME_DIRECTORY}/include
165 # Compute the ones that should be added when compiling the library
166 set(INTERNAL_INCLUDES
168 ${CMAKE_HOME_DIRECTORY}
169 ${CMAKE_HOME_DIRECTORY}/src/include
173 set (INTERNAL_INCLUDES ${INTERNAL_INCLUDES} ${CMAKE_HOME_DIRECTORY}/src/smpi/include)
176 if(NOT CMAKE_CROSSCOMPILING AND EXISTS /usr/include/)
177 set(INTERNAL_INCLUDES ${INTERNAL_INCLUDES} /usr/include/)
181 set(CMAKE_INCLUDE_WIN "${CMAKE_C_COMPILER}")
182 set(CMAKE_LIB_WIN "${CMAKE_C_COMPILER}")
183 string(REGEX REPLACE "/bin/gcc.*" "/include" CMAKE_INCLUDE_WIN "${CMAKE_INCLUDE_WIN}")
184 string(REGEX REPLACE "/bin/gcc.*" "/lib" CMAKE_LIB_WIN "${CMAKE_LIB_WIN}")
185 set(INTERNAL_INCLUDES ${INTERNAL_INCLUDES} ${CMAKE_INCLUDE_WIN})
186 unset(CMAKE_INCLUDE_WIN)
189 # library dependency cannot start with a space (CMP0004), so initialize it with something that is never deactivated.
190 set(SIMGRID_DEP "-lm")
192 ### Determine the assembly flavor that we need today
193 set(HAVE_RAW_CONTEXTS 0)
194 include(CMakeDetermineSystem)
195 IF(CMAKE_SYSTEM_PROCESSOR MATCHES ".86|AMD64|amd64")
196 IF(CMAKE_SIZEOF_VOID_P EQUAL 4) # 32 bits
197 message(STATUS "System processor: i686 (${CMAKE_SYSTEM_PROCESSOR}, 32 bits)")
198 set(SIMGRID_PROCESSOR_i686 1)
199 set(SIMGRID_PROCESSOR_x86_64 0)
201 message(STATUS "System processor: x86_64 (${CMAKE_SYSTEM_PROCESSOR}, 64 bits)")
202 set(SIMGRID_PROCESSOR_i686 0)
203 set(SIMGRID_PROCESSOR_x86_64 1)
206 message(STATUS "Disable fast raw contexts on Windows.")
207 elseif(CMAKE_SIZEOF_VOID_P EQUAL 4 AND CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
208 message(STATUS "Disable fast raw contexts on x32 ABI.")
210 set(HAVE_RAW_CONTEXTS 1)
213 set(SIMGRID_PROCESSOR_i686 0)
214 set(SIMGRID_PROCESSOR_x86_64 0)
217 include(CheckFunctionExists)
218 include(CheckTypeSize)
219 include(CheckIncludeFile)
220 include(CheckIncludeFiles)
221 include(CheckLibraryExists)
222 include(CheckSymbolExists)
226 message(STATUS "Don't even look for graphviz, as we build minimal binding libraries.")
228 include(FindGraphviz)
231 set(SIMGRID_HAVE_NS3 0)
234 if (SIMGRID_HAVE_NS3)
235 if (NS3_VERSION VERSION_LESS "3.28")
236 message(FATAL_ERROR "SimGrid needs at least ns-3.28. Please upgrade or disable that cmake option.")
238 set(SIMGRID_HAVE_NS3 1)
239 foreach(lib core csma point-to-point internet network applications wifi)
240 set(SIMGRID_DEP "${SIMGRID_DEP} -lns${NS3_VERSION}-${lib}${NS3_SUFFIX}")
243 message(FATAL_ERROR "Cannot find ns-3. Please install it (apt-get install ns3 libns3-dev) or disable that cmake option")
247 set(SIMGRID_HAVE_MSG 0)
249 set(SIMGRID_HAVE_MSG 1)
253 set(Boost_USE_STATIC_LIBS 1)
260 message(FATAL_ERROR "Cannot find PAPI. Please install it (apt-get install papi-tools libpapi-dev) or disable PAPI bindings.")
264 # But we do need the core of Boost
265 # cmake before 3.13.1 does not know about stacktrace components. Fix it.
266 # Usable components: https://www.boost.org/doc/libs/1_65_1/doc/html/stacktrace/configuration_and_build.html
267 set(_Boost_STACKTRACE_HEADERS "boost/stacktrace.hpp")
268 set(_Boost_STACKTRACE_BACKTRACE_HEADERS "boost/stacktrace.hpp")
269 set(_Boost_STACKTRACE_ADDR2LINE_HEADERS "boost/stacktrace.hpp")
271 if(minimal-bindings) # When we want a minimal jarfile, don't even search for boost optional components
272 message(STATUS "Don't even look for boost optional components, as we build minimal binding libraries.")
273 find_package(Boost 1.48)
275 find_package(Boost 1.59 OPTIONAL_COMPONENTS context stacktrace_backtrace stacktrace_addr2line)
278 include_directories(${Boost_INCLUDE_DIRS})
279 message(STATUS "Mandatory components found. SimGrid is compilable.")
280 if (NOT minimal-bindings)
281 message(STATUS "Looking for optional Boost components:")
282 set(Boost_FOUND 1) # These components are optionals
283 CHECK_INCLUDE_FILE("backtrace.h" HAVE_BACKTRACE_H) # check that backtrace is actually possible
284 if (Boost_STACKTRACE_BACKTRACE_FOUND AND HAVE_BACKTRACE_H)
285 message (STATUS " stacktrace: found the fast 'backtrace' implementation. Activating human-readable stack traces.")
286 set(HAVE_BOOST_STACKTRACE_BACKTRACE 1)
288 set(HAVE_BOOST_STACKTRACE_BACKTRACE 0)
289 if (Boost_STACKTRACE_ADDR2LINE_FOUND)
290 message (STATUS " stacktrace: found the slow 'addr2line' implementation. Activating human-readable stack traces.")
291 set(HAVE_BOOST_STACKTRACE_ADDR2LINE 1)
293 message (STATUS " stacktrace: MISSING. Install libboost-stacktrace-dev to display the stacktraces.")
294 set(HAVE_BOOST_STACKTRACE_ADDR2LINE 0)
298 if(Boost_CONTEXT_FOUND)
299 message (STATUS " context: found. Activating Boost contexts.")
300 set(HAVE_BOOST_CONTEXTS 1)
302 message (STATUS " context: MISSING. Install libboost-context-dev for this optional feature.")
303 set(HAVE_BOOST_CONTEXTS 0)
308 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'")
310 find_package(Boost 1.48) #try without optional libraries
312 message(FATAL_ERROR "Boost libraries not found. Install libboost-dev (>= 1.48.0).")
314 include_directories(${Boost_INCLUDE_DIRS})
315 message(STATUS "Mandatory components found. SimGrid is compilable.")
320 # Checks for header libraries functions.
321 CHECK_LIBRARY_EXISTS(rt clock_gettime "" HAVE_POSIX_GETTIME)
322 CHECK_LIBRARY_EXISTS(pthread pthread_setaffinity_np "" HAVE_PTHREAD_SETAFFINITY)
323 CHECK_INCLUDE_FILE("pthread_np.h" HAVE_PTHREAD_NP_H) # for pthread_setaffinity_np() on FreeBSD
325 if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
326 set(CMAKE_REQUIRED_DEFINITIONS "-D_XOPEN_SOURCE=700 -D_DARWIN_C_SOURCE")
328 # Use the GNU version of unusual modifiers like PRIx64
329 add_definitions(-D__USE_MINGW_ANSI_STDIO=1)
330 set(CMAKE_REQUIRED_DEFINITIONS "-D__USE_MINGW_ANSI_STDIO=1")
332 set(CMAKE_REQUIRED_DEFINITIONS "-D_GNU_SOURCE")
335 CHECK_INCLUDE_FILE("valgrind/valgrind.h" HAVE_VALGRIND_H)
336 CHECK_INCLUDE_FILE("unistd.h" HAVE_UNISTD_H)
337 CHECK_INCLUDE_FILE("linux/futex.h" HAVE_FUTEX_H)
339 CHECK_FUNCTION_EXISTS(dlfunc HAVE_DLFUNC)
340 CHECK_FUNCTION_EXISTS(gettimeofday HAVE_GETTIMEOFDAY)
341 CHECK_FUNCTION_EXISTS(nanosleep HAVE_NANOSLEEP)
342 CHECK_FUNCTION_EXISTS(sysconf HAVE_SYSCONF)
343 CHECK_FUNCTION_EXISTS(process_vm_readv HAVE_PROCESS_VM_READV)
344 CHECK_FUNCTION_EXISTS(mmap HAVE_MMAP)
345 CHECK_FUNCTION_EXISTS(mremap HAVE_MREMAP)
347 CHECK_SYMBOL_EXISTS(vasprintf stdio.h HAVE_VASPRINTF)
349 # The detection of vasprintf fails on MinGW, assumingly because it's
350 # defined as an inline function in stdio.h instead of a regular
351 # function. So force the result to be 1 despite of the test.
352 set(HAVE_VASPRINTF 1)
355 CHECK_INCLUDE_FILE("sys/sendfile.h" HAVE_SENDFILE_H)
356 CHECK_FUNCTION_EXISTS(sendfile HAVE_SENDFILE)
357 if(HAVE_SENDFILE_H AND HAVE_SENDFILE)
358 set(SG_HAVE_SENDFILE 1)
360 set(SG_HAVE_SENDFILE 0)
363 if(enable_model-checking AND NOT "${CMAKE_SYSTEM}" MATCHES "Linux|FreeBSD")
364 message(WARNING "Support for model-checking has not been enabled on ${CMAKE_SYSTEM}: disabling it")
365 set(enable_model-checking FALSE)
368 if(enable_model-checking AND minimal-bindings)
369 message(FATAL_ERROR "Compile-time option 'minimal-bindings' cannot be enabled with 'model-checking'")
376 if(enable_model-checking)
377 message(STATUS "Warning: support for model-checking has been disabled because you are missing either mmap or __thread.")
379 SET(enable_model-checking 0)
382 if(enable_mallocators)
383 SET(SIMGRID_HAVE_MALLOCATOR 1)
385 SET(SIMGRID_HAVE_MALLOCATOR 0)
388 if(enable_model-checking)
389 include(FindLibunwind)
391 SET(SIMGRID_DEP "${SIMGRID_DEP} ${LIBUNWIND_LIBRARIES}")
393 message(FATAL_ERROR "Please install libunwind-dev libdw-dev libelf-dev libevent-dev if you want to compile the SimGrid model checker.")
395 find_package(Libdw REQUIRED)
396 find_package(Libelf REQUIRED)
397 find_package(Libevent REQUIRED)
398 include_directories(${LIBDW_INCLUDE_DIR} ${LIBELF_INCLUDE_DIR} ${LIBEVENT_INCLUDE_DIR})
399 set(SIMGRID_DEP "${SIMGRID_DEP} ${LIBEVENT_LIBRARIES} ${LIBELF_LIBRARIES} ${LIBDW_LIBRARIES}")
400 set(SIMGRID_HAVE_MC 1)
401 if("${CMAKE_SYSTEM}" MATCHES "FreeBSD" AND enable_java)
402 message(WARNING "FreeBSD + Model-Checking + Java = too much for now. Disabling the Java bindings.")
403 set(enable_java FALSE)
406 SET(SIMGRID_HAVE_MC 0)
409 mark_as_advanced(PATH_LIBDW_H)
410 mark_as_advanced(PATH_LIBDW_LIB)
412 if(enable_java AND NOT enable_msg)
413 message(FATAL_ERROR "Cannot activate the Java bindings without the MSG module. Either add -Denable_msg=ON or -Denable_java=OFF")
416 if (enable_model-checking AND enable_ns3)
417 message(WARNING "Activating both model-checking and ns-3 bindings is considered experimental.")
423 message (STATUS "Warning: no support for SMPI automatic privatization on Windows.")
424 SET(HAVE_PRIVATIZATION 0)
426 SET(HAVE_PRIVATIZATION 1)
432 #--------------------------------------------------------------------------------------------------
433 ### Check what context backends are available
435 set(HAVE_UCONTEXT_CONTEXTS 0)
436 CHECK_INCLUDE_FILE("ucontext.h" HAVE_UCONTEXT_H)
437 if(NOT HAVE_UCONTEXT_H)
438 message(STATUS "No ucontext factory: <ucontext.h> not found.")
440 message(STATUS "No ucontext factory: Apple don't want us to use them.")
441 set(HAVE_UCONTEXT_H 0)
443 try_compile(compile_makecontext ${CMAKE_BINARY_DIR} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_makecontext.c
444 OUTPUT_VARIABLE compile_makecontext_output)
446 #If can have both context
447 if(compile_makecontext)
448 set(HAVE_UCONTEXT_CONTEXTS 1)
449 message(STATUS "Support for ucontext factory ok.")
451 message(STATUS "Error: <ucontext.h> exists, but makecontext is not compilable. Compilation output:\n ${compile_makecontext_output}")
452 message(STATUS "No ucontext factory: makecontext() is not compilable.")
455 # Stack setup (size and address)
456 try_run(RUN_makecontext_VAR COMPILE_makecontext_VAR
457 ${CMAKE_BINARY_DIR} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_stacksetup.c
458 RUN_OUTPUT_VARIABLE stack_setup)
460 LIST(LENGTH stack_setup stack_setup_len)
461 if("${stack_setup_len}" STREQUAL "2")
462 LIST(GET stack_setup 0 makecontext_addr)
463 LIST(GET stack_setup 1 makecontext_size)
464 set(sg_makecontext_stack_addr "#define sg_makecontext_stack_addr(skaddr) (${makecontext_addr})")
465 set(sg_makecontext_stack_size "#define sg_makecontext_stack_size(sksize) (${makecontext_size})")
467 message(FATAL_ERROR "Could not figure out the stack setup. Compil: ${RUN_makecontext_VAR}. Exec: ${COMPILE_makecontext_VAR}. Output: ${stack_setup}")
471 # Stack growth direction (upward or downward). Used for the following contexts: SysV, raw, Boost
472 try_run(RUN_stackgrowth_VAR COMPILE_stackgrowth_VAR
474 ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_stackgrowth.c
475 RUN_OUTPUT_VARIABLE stack
476 COPY_FILE test_stackgrowth)
478 if("${stack}" STREQUAL "down")
479 set(PTH_STACKGROWTH "-1")
480 elseif("${stack}" STREQUAL "up")
481 set(PTH_STACKGROWTH "1")
483 if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "x86_64")
484 set(PTH_STACKGROWTH "-1")
485 elseif("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "i686")
486 set(PTH_STACKGROWTH "-1")
488 message(FATAL_ERROR "Could not figure out the stack direction. Test prog returned: ${stack}; CMAKE_SYSTEM_PROCESSOR: ${CMAKE_SYSTEM_PROCESSOR}.")
491 # If the test ran well, remove the test binary
492 file(REMOVE test_stackgrowth)
493 #--------------------------------------------------------------------------------------------------
498 if(EXISTS ${CMAKE_HOME_DIRECTORY}/.git/)
499 execute_process(COMMAND git rev-parse --verify --short HEAD
500 WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}
501 OUTPUT_VARIABLE GIT_VERSION
502 OUTPUT_STRIP_TRAILING_WHITESPACE)
503 # Check for uncommitted changes
504 execute_process(COMMAND git diff --name-only HEAD
505 WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}
506 OUTPUT_VARIABLE files_changed)
508 set(GIT_VERSION "${GIT_VERSION}-dirty")
510 elseif(EXISTS ${CMAKE_HOME_DIRECTORY}/.gitversion)
511 FILE(STRINGS ${CMAKE_HOME_DIRECTORY}/.gitversion GIT_VERSION)
513 set(GIT_VERSION "none, release version")
515 message(STATUS "Git version: ${GIT_VERSION}")
517 ### Define source packages for Libs
518 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/DefinePackages.cmake)
520 ### Setup gcc & clang flags (include after DefinePackage.cmake, and before generating header files)
522 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Flags.cmake)
525 ### Generate the required headers and scripts
526 #############################################
528 # Avoid triggering a (full) rebuild by touching the files if they did not really change
529 configure_file("${CMAKE_HOME_DIRECTORY}/src/internal_config.h.in" "${CMAKE_BINARY_DIR}/src/internal_config.h.generated" @ONLY IMMEDIATE)
530 configure_file("${CMAKE_HOME_DIRECTORY}/include/simgrid/version.h.in" "${CMAKE_BINARY_DIR}/include/simgrid/version.h.generated" @ONLY IMMEDIATE)
531 configure_file("${CMAKE_HOME_DIRECTORY}/include/simgrid/config.h.in" "${CMAKE_BINARY_DIR}/include/simgrid/config.h.generated" @ONLY IMMEDIATE)
532 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/src/internal_config.h.generated ${CMAKE_BINARY_DIR}/src/internal_config.h)
533 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/include/simgrid/version.h.generated ${CMAKE_BINARY_DIR}/include/simgrid/version.h)
534 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/include/simgrid/config.h.generated ${CMAKE_BINARY_DIR}/include/simgrid/config.h)
535 file(REMOVE ${CMAKE_BINARY_DIR}/src/internal_config.h.generated)
536 file(REMOVE ${CMAKE_BINARY_DIR}/include/simgrid/config.h.generated)
537 file(REMOVE ${CMAKE_BINARY_DIR}/include/simgrid/version.h.generated)
539 # We need two versions of the SMPI scripts because they contain the path to the library
540 # so, it depends of whether SimGrid is installed, or run from the sources (during the build)
542 file(READ ${CMAKE_HOME_DIRECTORY}/src/smpi/smpitools.sh SMPITOOLS_SH) # Definitions shared amongst all SMPI scripts, inlined in each of them
544 ### SMPI script used when simgrid is installed
545 set(exec_prefix ${CMAKE_INSTALL_PREFIX})
546 set(includedir "${CMAKE_INSTALL_FULL_INCLUDEDIR}")
547 set(libdir "${CMAKE_INSTALL_FULL_LIBDIR}")
548 set(includeflag "\"-I${includedir}\" \"-I${includedir}/smpi\"")
549 set(CMAKE_SMPI_COMMAND "export LD_LIBRARY_PATH=\"${libdir}")
551 set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}:${NS3_LIBRARY_PATH}")
553 set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}\${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}\"")
554 set(SMPIMAIN ${libdir}/simgrid/smpimain)
555 set(SMPIREPLAYMAIN ${libdir}/simgrid/smpireplaymain)
557 configure_file(${CMAKE_HOME_DIRECTORY}/include/smpi/mpif.h.in ${CMAKE_BINARY_DIR}/include/smpi/mpif.h @ONLY)
558 #configure mpif.f90 to build mpi.mod
560 set(MODULE_MPIF_IN "module mpi")
561 set(MODULE_MPIF_OUT "end module mpi")
562 configure_file(${CMAKE_HOME_DIRECTORY}/include/smpi/mpif.h.in ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90.generated @ONLY)
563 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90.generated ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90)
564 set(CMAKE_Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/include/smpi)
565 add_library(mpi SHARED ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90)
568 foreach(script cc cxx ff f90 run)
569 configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpi${script}.in ${CMAKE_BINARY_DIR}/bin/smpi${script} @ONLY)
572 ### SMPI scripts used when compiling simgrid
573 set(exec_prefix "${CMAKE_BINARY_DIR}/smpi_script/")
574 set(includedir "${CMAKE_HOME_DIRECTORY}/include")
575 set(libdir "${CMAKE_BINARY_DIR}/lib")
576 set(includeflag "\"-I${includedir}\" \"-I${includedir}/smpi\"")
577 set(includeflag "${includeflag} \"-I${CMAKE_BINARY_DIR}/include\" \"-I${CMAKE_BINARY_DIR}/include/smpi\"")
578 set(CMAKE_SMPI_COMMAND "export LD_LIBRARY_PATH=\"${libdir}")
580 set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}:${NS3_LIBRARY_PATH}")
582 set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}\${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}\"")
583 set(SMPIMAIN ${libdir}/simgrid/smpimain)
584 set(SMPIREPLAYMAIN ${libdir}/simgrid/smpireplaymain)
586 foreach(script cc cxx ff f90 run)
587 configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpi${script}.in ${CMAKE_BINARY_DIR}/smpi_script/bin/smpi${script} @ONLY)
591 foreach(script cc cxx ff f90 run)
592 execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpi${script})
593 execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/smpi_script/bin/smpi${script})
597 set(generated_headers_to_install
598 ${CMAKE_CURRENT_BINARY_DIR}/include/smpi/mpif.h
599 ${CMAKE_CURRENT_BINARY_DIR}/include/simgrid/config.h
600 ${CMAKE_CURRENT_BINARY_DIR}/include/simgrid/version.h
603 set(generated_headers ${CMAKE_CURRENT_BINARY_DIR}/src/internal_config.h )
605 set(generated_files_to_clean
607 ${generated_headers_to_install}
608 ${CMAKE_BINARY_DIR}/bin/smpicc
609 ${CMAKE_BINARY_DIR}/bin/smpicxx
610 ${CMAKE_BINARY_DIR}/bin/smpiff
611 ${CMAKE_BINARY_DIR}/bin/smpif90
612 ${CMAKE_BINARY_DIR}/bin/smpirun
613 ${CMAKE_BINARY_DIR}/bin/colorize
614 ${CMAKE_BINARY_DIR}/bin/simgrid_update_xml
615 ${CMAKE_BINARY_DIR}/examples/smpi/tracing/smpi_traced.trace
618 if(NOT "${CMAKE_BINARY_DIR}" STREQUAL "${CMAKE_HOME_DIRECTORY}")
619 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions0.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions0.txt COPYONLY)
620 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions1.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions1.txt COPYONLY)
621 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_allreduce.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allreduce.txt COPYONLY)
622 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_barrier.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_barrier.txt COPYONLY)
623 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_bcast.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_bcast.txt COPYONLY)
624 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_with_isend.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_with_isend.txt COPYONLY)
625 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_alltoall.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoall.txt COPYONLY)
626 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_alltoallv.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoallv.txt COPYONLY)
627 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_waitall.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_waitall.txt COPYONLY)
628 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_reducescatter.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_reducescatter.txt COPYONLY)
629 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_gather.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_gather.txt COPYONLY)
630 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_allgatherv.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allgatherv.txt COPYONLY)
631 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile COPYONLY)
632 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_cluster ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_cluster COPYONLY)
633 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_griffon ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_griffon COPYONLY)
634 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_coll ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_coll COPYONLY)
635 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_io ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_io COPYONLY)
636 configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_empty ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_empty COPYONLY)
638 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/description_file ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/description_file COPYONLY)
639 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/README ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/README COPYONLY)
640 configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/smpi_replay.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/smpi_replay.txt COPYONLY)
641 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)
642 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)
643 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)
644 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)
645 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)
646 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)
647 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)
648 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)
649 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)
650 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)
651 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)
652 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)
653 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)
654 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)
655 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)
656 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)
657 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)
658 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)
659 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)
660 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)
661 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)
662 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)
663 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)
664 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)
665 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)
666 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)
667 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)
668 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)
669 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)
670 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)
671 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)
672 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)
674 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)
675 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)
676 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)
677 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)
678 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)
679 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)
680 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)
681 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)
682 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)
683 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)
684 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)
685 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)
686 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)
687 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)
688 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)
690 set(generated_files_to_clean
691 ${generated_files_to_clean}
692 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions0.txt
693 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions1.txt
694 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allreduce.txt
695 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_barrier.txt
696 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_bcast.txt
697 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_with_isend.txt
698 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoall.txt
699 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_alltoallv.txt
700 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_waitall.txt
701 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_gather.txt
702 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allgatherv.txt
703 ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_reducescatter.txt
704 ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile
705 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/description_file
706 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/README
707 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/smpi_replay.txt
708 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace0.txt
709 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace1.txt
710 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace2.txt
711 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace3.txt
712 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace4.txt
713 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace5.txt
714 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace6.txt
715 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace7.txt
716 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace8.txt
717 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace9.txt
718 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace10.txt
719 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace11.txt
720 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace12.txt
721 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace13.txt
722 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace14.txt
723 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace15.txt
724 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace16.txt
725 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace17.txt
726 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace18.txt
727 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace19.txt
728 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace20.txt
729 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace21.txt
730 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace22.txt
731 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace23.txt
732 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace24.txt
733 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace25.txt
734 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace26.txt
735 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace27.txt
736 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace28.txt
737 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace29.txt
738 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace30.txt
739 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/ti_traces_32_1/ti_trace31.txt
740 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/compute_only.txt
741 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/compute_only/actions0.txt
742 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/compute_only/actions1.txt
743 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/empty.txt
744 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/empty/actions0.txt
745 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/empty/actions1.txt
746 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/mixed.txt
747 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/mixed/actions0.txt
748 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/mixed/actions1.txt
749 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/replay_multiple_manual.tesh
750 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute
751 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute_consecutive
752 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute_consecutive2
753 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_compute_simple
754 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty1
755 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2
756 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2_same_resources
757 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2_same_time
758 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_empty2_same_time_and_resources
759 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed1
760 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2
761 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2_same_resources
762 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2_same_time
763 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_mixed2_same_time_and_resources
764 ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple_manual_deploy/workload_nojob
768 SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES
769 "${generated_files_to_clean}")
771 add_custom_target(tests COMMENT "Recompiling the tests")
772 add_custom_target(tests-mc COMMENT "Recompiling the MC tests and tools.")
773 add_dependencies(tests tests-mc)
775 ### Build some Maintainer files
776 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/MaintainerMode.cmake)
780 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/MakeLib.cmake)
782 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/MakeLibWin.cmake)
786 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Java.cmake)
789 # Python binding (with pybind11)
791 if((NOT DEFINED enable_python) OR enable_python)
792 if(EXISTS ${CMAKE_HOME_DIRECTORY}/pybind11) # Try to use a local copy of pybind11, if any
793 message(STATUS "Use the internal copy of pybind11.")
794 add_subdirectory(${CMAKE_HOME_DIRECTORY}/pybind11)
795 set(pybind11_FOUND ON)
797 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_HOME_DIRECTORY}/pybind11/tools/)
798 set(Python_ADDITIONAL_VERSIONS 3.9 3.8 3.7 3.6 3.5 3.4)
799 find_package(PythonLibsNew ${PYBIND11_PYTHON_VERSION} REQUIRED)
802 find_package(pybind11 CONFIG)
803 message(STATUS "Pybind11 version: ${pybind11_VERSION}")
804 if (pybind11_VERSION VERSION_LESS 2.4)
805 message(STATUS "SimGrid needs at least v2.4 of pybind11. Disabling the Python bindings.")
806 set(pybind11_FOUND OFF)
810 if(NOT PYTHONLIBS_FOUND AND NOT Python3_Development_FOUND)
811 message(STATUS "Python libs not found. Turn pybind11 off.")
813 set(pybind11_FOUND OFF)
817 option(enable_python "Whether the Python bindings are activated." ${pybind11_FOUND}) # ON by default if dependencies are met
819 if("${CMAKE_SYSTEM}" MATCHES "FreeBSD" AND enable_model-checking AND enable_python)
820 message(WARNING "FreeBSD + Model-Checking + Python = too much for now. Disabling the Python bindings.")
821 set(enable_python FALSE)
826 message(STATUS "Found pybind11.")
828 set(pybind11_options NO_EXTRAS)
830 pybind11_add_module(python-bindings src/bindings/python/simgrid_python.cpp ${pybind11_options})
831 target_compile_features(python-bindings PRIVATE cxx_std_14)
832 target_link_libraries(python-bindings PUBLIC simgrid)
833 set_target_properties(python-bindings PROPERTIES
834 LIBRARY_OUTPUT_NAME simgrid
835 CXX_VISIBILITY_PRESET "default"
836 INTERPROCEDURAL_OPTIMIZATION FALSE)
837 # LTO is disabled here from the python bindings because this makes a
838 # cmake warning about CMP0069 even when this policy is set. This
839 # problem may be in cmake, in pybind11 or even in our code, not sure.
840 # It may get eventually solved in cmake or pybind11. Or not.
841 # The sure thing is that our python bindings are in one file only,
842 # so there is no need for LTO here. Problem solved :)
844 add_dependencies(tests python-bindings)
845 set_property(TARGET python-bindings
846 APPEND PROPERTY INCLUDE_DIRECTORIES "${INTERNAL_INCLUDES}")
848 if("${SIMGRID_PYTHON_LIBDIR}" STREQUAL "") # value not manually set
849 if("${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr")
850 set(SIMGRID_PYTHON_LIBDIR ${Python3_SITEARCH})
851 else("${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr")
852 string(REGEX REPLACE "^/usr/" "${CMAKE_INSTALL_PREFIX}/" SIMGRID_PYTHON_LIBDIR ${Python3_SITEARCH})
853 endif("${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr")
855 install(TARGETS python-bindings
856 LIBRARY DESTINATION "${SIMGRID_PYTHON_LIBDIR}")
858 message(FATAL_ERROR "Please install pybind11-dev to build the Python bindings (or disable that option).")
861 mark_as_advanced(PYBIND11_PYTHON_VERSION)
862 mark_as_advanced(pybind11_DIR)
865 if(enable_memcheck_xml)
866 set(enable_memcheck true)
871 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Tests.cmake)
872 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/CTestConfig.cmake)
874 ### Define subdirectories
875 foreach(cmakefile ${CMAKEFILES_TXT})
876 string(REPLACE "/CMakeLists.txt" "" repository ${cmakefile})
877 add_subdirectory("${CMAKE_HOME_DIRECTORY}/${repository}")
880 ### Setup the distrib
881 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Distrib.cmake)
883 ### Build the docs if asked to
884 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Documentation.cmake)
886 ### Print the result of configuration
888 message("##########################################")
889 message("#### Content of src/internal_config.h ####")
890 message("##########################################")
891 file(STRINGS ${CMAKE_CURRENT_BINARY_DIR}/src/internal_config.h config_output)
892 LIST(REMOVE_AT config_output 0 1 2 3 4 5 6 7 8 9 10) # Pass the file header
893 foreach(line ${config_output})
896 message("##########################################")
897 message("#### Content of simgrid/config.h ####")
898 message("##########################################")
899 file(STRINGS ${CMAKE_CURRENT_BINARY_DIR}/include/simgrid/config.h config_output)
900 LIST(REMOVE_AT config_output 0 1 2 3 4 5 6 7 8 9 -1) # Pass the file header
901 foreach(line ${config_output})
904 message("##########################################")
905 message("#### End of configuration headers ####")
906 message("##########################################")
908 message("\nConfiguration of package `simgrid':")
909 message(" Home directory ..............: ${CMAKE_HOME_DIRECTORY}")
910 message(" Build Name ..................: ${BUILDNAME}")
911 message(" Cmake Generator .............: ${CMAKE_GENERATOR}")
912 message(" Site ........................: ${SITE}")
913 message(" Install prefix ..............: ${CMAKE_INSTALL_PREFIX}")
914 message(" Release .....................: simgrid-${release_version}")
916 message(" Compiler: C .................: ${CMAKE_C_COMPILER} (id: ${CMAKE_C_COMPILER_ID})")
917 message(" version .............: ${CMAKE_C_COMPILER_VERSION}")
918 message(" is gnu ..............: ${CMAKE_COMPILER_IS_GNUCC}")
919 message(" Compiler: C++ ...............: ${CMAKE_CXX_COMPILER} (id: ${CMAKE_CXX_COMPILER_ID})")
920 message(" version .............: ${CMAKE_CXX_COMPILER_VERSION}")
922 message(" Compiler: Javac .............: ${Java_JAVAC_EXECUTABLE}")
923 message(" version .............: ${Java_VERSION_STRING}")
924 message(" runtime .............: ${Java_JAVA_EXECUTABLE}")
926 if(CMAKE_Fortran_COMPILER)
927 message(" Compiler: Fortran ...........: ${SMPI_Fortran_COMPILER} (id: ${CMAKE_Fortran_COMPILER_ID})")
928 message(" version .............: ${CMAKE_Fortran_COMPILER_VERSION}")
930 message(" Linker: .....................: ${CMAKE_LINKER}")
931 message(" version .............: ${LINKER_VERSION}")
932 message(" Make program: ...............: ${CMAKE_MAKE_PROGRAM}")
934 message(" CFlags ......................: ${CMAKE_C_FLAGS}")
935 message(" CXXFlags ....................: ${CMAKE_CXX_FLAGS}")
936 message(" LDFlags .....................: ${CMAKE_C_LINK_FLAGS}")
937 message(" with LTO ....................: ${enable_lto}")
940 if (SIMGRID_HAVE_MSG)
941 message(" Compile MSG .................: ON")
943 message(" Compile MSG .................: OFF")
946 if (SIMGRID_HAVE_NS3)
947 message(" Compile ns-3 ................: ON (path: ${NS3_PATH})")
949 message(" Compile ns-3 ................: OFF (hint: ${NS3_HINT})")
953 message(" Compile Java ................: ON")
954 message(" Native lib in jar .........: ${enable_lib_in_jar}")
956 message(" Compile Java ................: OFF")
959 message(" Compile Python bindings .....: ${enable_python}")
960 message(" module ....................: ${PYTHON_MODULE_PREFIX}simgrid${PYTHON_MODULE_EXTENSION}")
961 message(" install path ..............: ${SIMGRID_PYTHON_LIBDIR} (force another value with -DSIMGRID_PYTHON_LIBDIR)")
963 message(" Compile Python bindings .....: OFF (disabled, or pybind11 not found)")
965 message(" Compile Smpi ................: ${HAVE_SMPI}")
966 message(" Smpi fortran ..............: ${SMPI_FORTRAN}")
967 message(" MPICH3 testsuite ..........: ${enable_smpi_MPICH3_testsuite}")
968 message(" MBI testsuite .............: ${enable_smpi_MBI_testsuite}")
969 message(" Privatization .............: ${HAVE_PRIVATIZATION}")
970 message(" PAPI support...............: ${HAVE_PAPI}")
971 message(" Compile Boost.Context support: ${HAVE_BOOST_CONTEXTS}")
973 message(" Maintainer mode .............: ${enable_maintainer_mode}")
974 message(" Documentation................: ${enable_documentation}")
975 message(" Model checking ..............: ${SIMGRID_HAVE_MC}")
976 message(" Graphviz mode ...............: ${HAVE_GRAPHVIZ}")
977 message(" Mallocators .................: ${enable_mallocators}")
979 message(" Simgrid dependencies ........: ${SIMGRID_DEP}")
982 execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_BINARY_DIR}/Testing/Notes/)
983 file(WRITE ${PROJECT_BINARY_DIR}/Testing/Notes/Build "GIT version : ${GIT_VERSION}\n")
984 file(APPEND ${PROJECT_BINARY_DIR}/Testing/Notes/Build "Release : simgrid-${release_version}\n")