# Build the version number
set(SIMGRID_VERSION_MAJOR "3")
-set(SIMGRID_VERSION_MINOR "25")
+set(SIMGRID_VERSION_MINOR "31")
set(SIMGRID_VERSION_PATCH "1") # odd => git branch; even => stable release or released snapshot
if(${SIMGRID_VERSION_PATCH} EQUAL "0")
# customizable installation directories
include(GNUInstallDirs)
-## Save compiler flags preset with environment variables CFLAGS or CXXFLAGS;
-## they will used within smpicc, smpicxx.
-## Do it early so that we get their genuine values. The same will be done later for Fortran.
-string(REGEX REPLACE " *-f[a-z]+-prefix-map=[^ ]*" "" SMPI_C_FLAGS "${CMAKE_C_FLAGS}")
-string(REGEX REPLACE " *-f[a-z]+-prefix-map=[^ ]*" "" SMPI_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
-
#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
# Check for the compiler #
#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
-##
+##
## Check the C/C++ standard that we need
## See also tools/cmake/Flags.cmake that sets our paranoid warning flags
INCLUDE(CheckCCompilerFlag)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g3")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g3")
-if (CMAKE_COMPILER_IS_GNUCC)
- if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.7")
+if (CMAKE_COMPILER_IS_GNUCC)
+ if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "7.0")
message(FATAL_ERROR
- "SimGrid needs at least g++ version 4.7 to compile but you have ${CMAKE_CXX_COMPILER_VERSION}."
- "You need a sufficient support of c++11 to compile SimGrid.")
+ "SimGrid needs at least g++ version 7.0 to compile but you have ${CMAKE_CXX_COMPILER_VERSION}."
+ "You need a sufficient support of c++17 to compile SimGrid.")
endif()
endif()
-## We need a decent support of the C++11 and C11 standards
-set(CMAKE_CXX_STANDARD 11)
+## We need a decent support of the C++14 and C11 standards
+set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_C_STANDARD 11)
include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Option.cmake)
### SMPI vs. Fortran
-if ((NOT DEFINED enable_smpi) OR enable_smpi)
+if ((NOT DEFINED enable_smpi) OR enable_smpi)
# First unset the compiler in case we're re-running cmake over a previous
# configuration where it was saved as smpiff
unset(CMAKE_Fortran_COMPILER)
-
+
SET(SMPI_FORTRAN 0)
if(enable_fortran)
enable_language(Fortran OPTIONAL)
endif()
-
+
if(CMAKE_Fortran_COMPILER)
# Fortran compiler detected: save it, then replace by smpiff
# Set flags/libs to be used in smpiff
if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU")
- set(SMPI_Fortran_FLAGS "\"-fpic\" \"-ff2c\" \"-fno-second-underscore\"")
+ set(SMPI_Fortran_FLAGS_ "\"-fpic\" \"-ff2c\" \"-fno-second-underscore\"")
set(SMPI_Fortran_LIBS "\"-lgfortran\"")
set(SMPI_GFORTRAN 1)
elseif(CMAKE_Fortran_COMPILER_ID MATCHES "Intel")
- set(SMPI_Fortran_FLAGS "\"-fPIC\" \"-nofor-main\"")
+ set(SMPI_Fortran_FLAGS_ "\"-fPIC\" \"-nofor-main\"")
set(SMPI_Fortran_LIBS "\"-lifcore\"")
set(SMPI_IFORT 1)
elseif(CMAKE_Fortran_COMPILER_ID MATCHES "PGI|Flang") # flang
- set(SMPI_Fortran_FLAGS "\"-fPIC\"")
+ set(SMPI_Fortran_FLAGS_ "\"-fPIC\"")
set(SMPI_Fortran_LIBS "")
set(SMPI_FLANG 1)
endif()
- string(REGEX REPLACE " *-f[a-z]+-prefix-map=[^ ]*" "" SMPI_Fortran_FLAGS "${SMPI_Fortran_FLAGS} ${CMAKE_Fortran_FLAGS}")
+ set(SMPI_Fortran_FLAGS "${SMPI_Fortran_FLAGS_} ${SMPI_Fortran_FLAGS}")
## Request debugging flags for Fortran too
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -g")
endif()
-### SET THE LIBRARY EXTENSION
+### SET THE LIBRARY EXTENSION
if(APPLE)
set(LIB_EXE "dylib")
elseif(WIN32)
endif()
# tesh.py needs python 3 (or the module python-subprocess32 on python2.8+)
-set(PythonInterp_FIND_VERSION 3)
-set(PythonInterp_FIND_VERSION_COUNT 1)
-set(PythonInterp_FIND_VERSION_MAJOR 3)
-include(FindPythonInterp)
-if(NOT PYTHONINTERP_FOUND)
- message(FATAL_ERROR "Please install Python (version 3 or higher) to compile SimGrid.")
+if(CMAKE_VERSION VERSION_LESS "3.12")
+ set(PythonInterp_FIND_VERSION 3)
+ set(PythonInterp_FIND_VERSION_COUNT 1)
+ set(PythonInterp_FIND_VERSION_MAJOR 3)
+ include(FindPythonInterp)
+ if(NOT PYTHONINTERP_FOUND)
+ message(FATAL_ERROR "Please install Python (version 3 or higher) to compile SimGrid.")
+ endif()
+else()
+ find_package(Python3 COMPONENTS Interpreter Development)
+ if(NOT Python3_Interpreter_FOUND)
+ message(FATAL_ERROR "Please install Python (version 3 or higher) to compile SimGrid.")
+ endif()
+ set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE})
endif()
SET(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib)
endif()
# library dependency cannot start with a space (CMP0004), so initialize it with something that is never deactivated.
-set(SIMGRID_DEP "-lm")
+set(SIMGRID_DEP "-lm")
### Determine the assembly flavor that we need today
set(HAVE_RAW_CONTEXTS 0)
include(CheckSymbolExists)
set(HAVE_GRAPHVIZ 0)
-set(SIMGRID_HAVE_LUA 0)
if(minimal-bindings)
- message(STATUS "Don't even look for graphviz nor lua, as we build minimal binding libraries.")
+ message(STATUS "Don't even look for graphviz, as we build minimal binding libraries.")
else()
include(FindGraphviz)
- if(enable_lua)
- include(FindLuaSimgrid)
- endif()
endif()
set(SIMGRID_HAVE_NS3 0)
if(enable_ns3)
include(FindNS3)
if (SIMGRID_HAVE_NS3)
+ if (NOT NS3_VERSION EQUAL "3-dev" AND NS3_VERSION VERSION_LESS "3.28")
+ message(FATAL_ERROR "SimGrid needs ns-3 in version 3.28 or higher. Please upgrade or disable that cmake option.")
+ endif()
set(SIMGRID_HAVE_NS3 1)
- foreach(lib core csma point-to-point internet network applications wifi)
- set(SIMGRID_DEP "${SIMGRID_DEP} -lns${NS3_VERSION}-${lib}${NS3_SUFFIX}")
- endforeach()
+ set(SIMGRID_DEP "${SIMGRID_DEP} ${NS3_LIBRARIES}")
else()
message(FATAL_ERROR "Cannot find ns-3. Please install it (apt-get install ns3 libns3-dev) or disable that cmake option")
endif()
endif()
+### Check for Eigen library
+set(SIMGRID_HAVE_EIGEN3 0)
+find_package (Eigen3 3.3 CONFIG
+ HINTS ${EIGEN3_HINT})
+if (Eigen3_FOUND)
+ set(SIMGRID_HAVE_EIGEN3 1)
+ message(STATUS "Found Eigen3: ${EIGEN3_INCLUDE_DIR}")
+ include_directories(${EIGEN3_INCLUDE_DIR})
+ if ("3.3.4" VERSION_EQUAL EIGEN3_VERSION_STRING AND CMAKE_COMPILER_IS_GNUCC)
+ message(STATUS "Avoid build error of Eigen3 v3.3.4 using -Wno-error=int-in-bool-context")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-error=int-in-bool-context")
+ endif()
+else()
+ 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")
+endif()
+
set(SIMGRID_HAVE_MSG 0)
if(enable_msg)
set(SIMGRID_HAVE_MSG 1)
message(STATUS "Mandatory components found. SimGrid is compilable.")
endif()
endif()
- endif()
+ endif()
# Checks for header libraries functions.
CHECK_LIBRARY_EXISTS(rt clock_gettime "" HAVE_POSIX_GETTIME)
CHECK_INCLUDE_FILE("valgrind/valgrind.h" HAVE_VALGRIND_H)
CHECK_INCLUDE_FILE("unistd.h" HAVE_UNISTD_H)
-CHECK_INCLUDE_FILE("signal.h" HAVE_SIGNAL_H)
-CHECK_INCLUDE_FILE("sys/param.h" HAVE_SYS_PARAM_H)
-CHECK_INCLUDE_FILE("sys/sysctl.h" HAVE_SYS_SYSCTL_H)
CHECK_INCLUDE_FILE("linux/futex.h" HAVE_FUTEX_H)
CHECK_FUNCTION_EXISTS(dlfunc HAVE_DLFUNC)
CHECK_FUNCTION_EXISTS(gettimeofday HAVE_GETTIMEOFDAY)
CHECK_FUNCTION_EXISTS(nanosleep HAVE_NANOSLEEP)
-CHECK_FUNCTION_EXISTS(getdtablesize HAVE_GETDTABLESIZE)
CHECK_FUNCTION_EXISTS(sysconf HAVE_SYSCONF)
CHECK_FUNCTION_EXISTS(process_vm_readv HAVE_PROCESS_VM_READV)
CHECK_FUNCTION_EXISTS(mmap HAVE_MMAP)
set(enable_model-checking FALSE)
endif()
+if(enable_model-checking AND minimal-bindings)
+ message(FATAL_ERROR "Compile-time option 'minimal-bindings' cannot be enabled with 'model-checking'")
+endif()
+
if(HAVE_MMAP)
SET(HAVE_MMALLOC 1)
else()
SET(enable_model-checking 0)
endif()
-if(enable_jedule)
- set(SIMGRID_HAVE_JEDULE 1)
-else()
- set(SIMGRID_HAVE_JEDULE 0)
-endif()
-
if(enable_mallocators)
SET(SIMGRID_HAVE_MALLOCATOR 1)
else()
SET(SIMGRID_HAVE_MALLOCATOR 0)
endif()
-if (minimal-bindings)
- message(STATUS "Don't look for libunwind as we build minimal binding libraries.")
- if(enable_model-checking)
- message(FATAL_ERROR "You cannot enable model-checking and minimal-bindings at the same time.")
- endif()
-else()
+if(enable_model-checking)
include(FindLibunwind)
if(HAVE_LIBUNWIND)
SET(SIMGRID_DEP "${SIMGRID_DEP} ${LIBUNWIND_LIBRARIES}")
else()
- if(enable_model-checking)
- message(FATAL_ERROR "Please install libunwind-dev libdw-dev libelf-dev libevent-dev if you want to compile the SimGrid model checker.")
- endif()
+ message(FATAL_ERROR "Please install libunwind-dev libdw-dev libelf-dev libevent-dev if you want to compile the SimGrid model checker.")
endif()
-endif()
-
-if(enable_model-checking)
find_package(Libdw REQUIRED)
find_package(Libelf REQUIRED)
find_package(Libevent REQUIRED)
set(enable_java FALSE)
endif()
else()
- SET(SIMGRID_HAVE_MC 0)
+ SET(SIMGRID_HAVE_MC 0)
set(HAVE_MMALLOC 0)
endif()
mark_as_advanced(PATH_LIBDW_H)
endif()
if (enable_model-checking AND enable_ns3)
- message(FATAL_ERROR "Cannot activate both model-checking and ns-3 bindings: ns-3 pulls too much dependencies for the MC to work")
+ message(WARNING "Activating both model-checking and ns-3 bindings is considered experimental.")
endif()
-get_property(known_features GLOBAL PROPERTY CMAKE_CXX_KNOWN_FEATURES)
-
if(enable_smpi)
SET(HAVE_SMPI 1)
if(WIN32)
### SMPI script used when simgrid is installed
set(exec_prefix ${CMAKE_INSTALL_PREFIX})
-set(includedir "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}")
-set(libdir "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}")
-set(includeflag "-I${includedir} -I${includedir}/smpi")
+set(includedir "${CMAKE_INSTALL_FULL_INCLUDEDIR}")
+set(libdir "${CMAKE_INSTALL_FULL_LIBDIR}")
+set(includeflag "\"-I${includedir}\" \"-I${includedir}/smpi\"")
set(CMAKE_SMPI_COMMAND "export LD_LIBRARY_PATH=\"${libdir}")
if(NS3_LIBRARY_PATH)
set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}:${NS3_LIBRARY_PATH}")
configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpi${script}.in ${CMAKE_BINARY_DIR}/bin/smpi${script} @ONLY)
endforeach()
-### SMPI scripts used when compiling simgrid
+### SMPI scripts used when compiling simgrid
set(exec_prefix "${CMAKE_BINARY_DIR}/smpi_script/")
set(includedir "${CMAKE_HOME_DIRECTORY}/include")
set(libdir "${CMAKE_BINARY_DIR}/lib")
-set(includeflag "-I${includedir} -I${includedir}/smpi")
-set(includeflag "${includeflag} -I${CMAKE_BINARY_DIR}/include -I${CMAKE_BINARY_DIR}/include/smpi")
+set(includeflag "\"-I${includedir}\" \"-I${includedir}/smpi\"")
+set(includeflag "${includeflag} \"-I${CMAKE_BINARY_DIR}/include\" \"-I${CMAKE_BINARY_DIR}/include/smpi\"")
set(CMAKE_SMPI_COMMAND "export LD_LIBRARY_PATH=\"${libdir}")
if(NS3_LIBRARY_PATH)
set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}:${NS3_LIBRARY_PATH}")
configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_allgatherv.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allgatherv.txt COPYONLY)
configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile COPYONLY)
configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_cluster ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_cluster COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_griffon ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_griffon COPYONLY)
configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_coll ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_coll COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_io ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_io COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile_empty ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile_empty COPYONLY)
configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/description_file ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/description_file COPYONLY)
configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple/README ${CMAKE_BINARY_DIR}/examples/smpi/replay_multiple/README COPYONLY)
SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES
"${generated_files_to_clean}")
-add_custom_target(tests COMMENT "Recompiling the tests")
+add_custom_target(tests COMMENT "Recompiling the tests")
+add_custom_target(tests-mc COMMENT "Recompiling the MC tests and tools.")
+add_dependencies(tests tests-mc)
### Build some Maintainer files
include(${CMAKE_HOME_DIRECTORY}/tools/cmake/MaintainerMode.cmake)
include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Java.cmake)
endif()
-if (enable_model-checking AND (NOT ("cxx_std_14" IN_LIST known_features)))
- message(WARNING "C++14 not found. The model-checker will use a slow hash function. You should upgrade your compiler")
-else()
- set_property(TARGET simgrid PROPERTY CXX_STANDARD 14)
-endif()
-
# Python binding (with pybind11)
################
-# Our usage of pybind11::overload_cast mandates C++14
if((NOT DEFINED enable_python) OR enable_python)
- if("cxx_std_14" IN_LIST known_features)
-
- if(EXISTS ${CMAKE_HOME_DIRECTORY}/pybind11) # Try to use a local copy of pybind11, if any
- message(STATUS "Use the internal copy of pybind11 (using C++14).")
- add_subdirectory(${CMAKE_HOME_DIRECTORY}/pybind11)
- set(pybind11_FOUND ON)
-
- set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_HOME_DIRECTORY}/pybind11/tools/)
- set(Python_ADDITIONAL_VERSIONS 3.7 3.6 3.5 3.4)
- find_package(PythonLibsNew ${PYBIND11_PYTHON_VERSION} REQUIRED)
-
- else()
- find_package(pybind11 CONFIG)
- message(STATUS "Pybind11 version: ${pybind11_VERSION}")
- if (pybind11_VERSION VERSION_LESS 2.4)
- message(STATUS "SimGrid needs at least v2.4 of pybind11. Disabling the Python bindings.")
- set(pybind11_FOUND OFF)
- endif()
- endif()
+ if(EXISTS ${CMAKE_HOME_DIRECTORY}/pybind11) # Try to use a local copy of pybind11, if any
+ message(STATUS "Use the internal copy of pybind11.")
+ add_subdirectory(${CMAKE_HOME_DIRECTORY}/pybind11)
+ set(pybind11_FOUND ON)
- if(NOT PYTHONLIBS_FOUND)
- message(STATUS "Python libs not found. Turn pybind11 off.")
+ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_HOME_DIRECTORY}/pybind11/tools/)
+ set(Python_ADDITIONAL_VERSIONS 3.9 3.8 3.7 3.6 3.5 3.4)
+ find_package(PythonLibsNew ${PYBIND11_PYTHON_VERSION} REQUIRED)
+ else()
+ find_package(pybind11 CONFIG)
+ message(STATUS "Pybind11 version: ${pybind11_VERSION}")
+ if (pybind11_VERSION VERSION_LESS 2.4)
+ message(STATUS "SimGrid needs at least v2.4 of pybind11. Disabling the Python bindings.")
set(pybind11_FOUND OFF)
endif()
+ endif()
+
+ if(NOT PYTHONLIBS_FOUND AND NOT Python3_Development_FOUND)
+ message(STATUS "Python libs not found. Turn pybind11 off.")
- else()
- message(STATUS "No support for C++14 detected, don't even search for pybind11.")
set(pybind11_FOUND OFF)
endif()
- unset(known_features)
endif()
option(enable_python "Whether the Python bindings are activated." ${pybind11_FOUND}) # ON by default if dependencies are met
if(enable_python)
if(pybind11_FOUND)
- message(STATUS "Found pybind11, with C++14.")
+ message(STATUS "Found pybind11.")
if(NOT enable_lto)
set(pybind11_options NO_EXTRAS)
endif()
add_dependencies(tests python-bindings)
set_property(TARGET python-bindings
APPEND PROPERTY INCLUDE_DIRECTORIES "${INTERNAL_INCLUDES}")
+
+ if("${SIMGRID_PYTHON_LIBDIR}" STREQUAL "") # value not manually set
+ if("${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr")
+ set(SIMGRID_PYTHON_LIBDIR ${Python3_SITEARCH})
+ else("${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr")
+ string(REGEX REPLACE "^/usr/" "${CMAKE_INSTALL_PREFIX}/" SIMGRID_PYTHON_LIBDIR ${Python3_SITEARCH})
+ endif("${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr")
+ endif()
+ install(TARGETS python-bindings
+ LIBRARY DESTINATION "${SIMGRID_PYTHON_LIBDIR}")
else()
message(FATAL_ERROR "Please install pybind11-dev to build the Python bindings (or disable that option).")
endif()
if(pybind11_FOUND)
message(" Compile Python bindings .....: ${enable_python}")
message(" module ....................: ${PYTHON_MODULE_PREFIX}simgrid${PYTHON_MODULE_EXTENSION}")
+ message(" install path ..............: ${SIMGRID_PYTHON_LIBDIR} (force another value with -DSIMGRID_PYTHON_LIBDIR)")
else()
message(" Compile Python bindings .....: OFF (disabled, or pybind11 not found)")
endif()
-message(" Compile Lua .................: ${SIMGRID_HAVE_LUA}")
+if(Eigen3_FOUND)
+ message(" Eigen3 library ..............: ${EIGEN3_VERSION_STRING} in ${EIGEN3_INCLUDE_DIR}")
+else()
+ message(" Eigen3 library ..............: not found (EIGEN3_HINT='${EIGEN3_HINT}').")
+endif()
message(" Compile Smpi ................: ${HAVE_SMPI}")
message(" Smpi fortran ..............: ${SMPI_FORTRAN}")
message(" MPICH3 testsuite ..........: ${enable_smpi_MPICH3_testsuite}")
+message(" MBI testsuite .............: ${enable_smpi_MBI_testsuite}")
message(" Privatization .............: ${HAVE_PRIVATIZATION}")
message(" PAPI support...............: ${HAVE_PAPI}")
message(" Compile Boost.Context support: ${HAVE_BOOST_CONTEXTS}")
message(" Maintainer mode .............: ${enable_maintainer_mode}")
message(" Documentation................: ${enable_documentation}")
message(" Model checking ..............: ${SIMGRID_HAVE_MC}")
-message(" Jedule mode ................: ${SIMGRID_HAVE_JEDULE}")
message(" Graphviz mode ...............: ${HAVE_GRAPHVIZ}")
message(" Mallocators .................: ${enable_mallocators}")
message("")