# Build the version number
set(SIMGRID_VERSION_MAJOR "3")
-set(SIMGRID_VERSION_MINOR "25")
+set(SIMGRID_VERSION_MINOR "26")
set(SIMGRID_VERSION_PATCH "1") # odd => git branch; even => stable release or released snapshot
if(${SIMGRID_VERSION_PATCH} EQUAL "0")
message(STATUS "Cmake version ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION}")
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_HOME_DIRECTORY}/tools/cmake/Modules)
-project(SimGrid C CXX)
+project(simgrid C CXX)
+
+# customizable installation directories
+include(GNUInstallDirs)
## Save compiler flags preset with environment variables CFLAGS or CXXFLAGS;
## they will used within smpicc, smpicxx.
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g3")
if (CMAKE_COMPILER_IS_GNUCC)
- if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.7")
+ if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "5.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 5.0 to compile but you have ${CMAKE_CXX_COMPILER_VERSION}."
+ "You need a sufficient support of c++14 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 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_C_STANDARD 11)
set(LIB_EXE "so")
endif()
-execute_process(COMMAND ${CMAKE_LINKER} -version OUTPUT_VARIABLE LINKER_VERSION ERROR_VARIABLE LINKER_VERSION)
+execute_process(COMMAND ${CMAKE_LINKER} -v OUTPUT_VARIABLE LINKER_VERSION ERROR_VARIABLE LINKER_VERSION)
string(REGEX MATCH "[0-9].[0-9]*" LINKER_VERSION "${LINKER_VERSION}")
### Find programs and paths
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)
unset(CMAKE_INCLUDE_WIN)
endif()
-# library dependency cannot start with a space (CMP0004), so initialize it with something that is never desactivated.
+# library dependency cannot start with a space (CMP0004), so initialize it with something that is never deactivated.
set(SIMGRID_DEP "-lm")
### Determine the assembly flavor that we need today
ENDIF()
if (WIN32)
message(STATUS "Disable fast raw contexts on Windows.")
+ elseif(CMAKE_SIZEOF_VOID_P EQUAL 4 AND CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
+ message(STATUS "Disable fast raw contexts on x32 ABI.")
else()
set(HAVE_RAW_CONTEXTS 1)
endif()
if(enable_ns3)
include(FindNS3)
if (SIMGRID_HAVE_NS3)
+ if (NS3_VERSION VERSION_LESS "3.28")
+ message(FATAL_ERROR "SimGrid needs at least ns-3.28. Please upgrade or disable that cmake option.")
+ endif()
set(SIMGRID_HAVE_NS3 1)
- foreach(lib core csma point-to-point internet network applications)
+ foreach(lib core csma point-to-point internet network applications wifi)
set(SIMGRID_DEP "${SIMGRID_DEP} -lns${NS3_VERSION}-${lib}${NS3_SUFFIX}")
endforeach()
else()
message(FATAL_ERROR "Cannot activate both model-checking and ns-3 bindings: ns-3 pulls too much dependencies for the MC to work")
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(includeflag "-I${CMAKE_INSTALL_PREFIX}/include -I${CMAKE_INSTALL_PREFIX}/include/smpi")
-set(includedir "${CMAKE_INSTALL_PREFIX}/include")
-set(libdir ${exec_prefix}/lib)
-set(CMAKE_SMPI_COMMAND "export LD_LIBRARY_PATH=\"${CMAKE_INSTALL_PREFIX}/lib")
+set(includedir "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}")
+set(libdir "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_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}")
endif()
### SMPI scripts used when compiling simgrid
set(exec_prefix "${CMAKE_BINARY_DIR}/smpi_script/")
-set(includeflag "-I${CMAKE_HOME_DIRECTORY}/include -I${CMAKE_HOME_DIRECTORY}/include/smpi")
-set(includeflag "${includeflag} -I${CMAKE_BINARY_DIR}/include -I${CMAKE_BINARY_DIR}/include/smpi")
set(includedir "${CMAKE_HOME_DIRECTORY}/include")
set(libdir "${CMAKE_BINARY_DIR}/lib")
-set(CMAKE_SMPI_COMMAND "export LD_LIBRARY_PATH=\"${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(CMAKE_SMPI_COMMAND "export LD_LIBRARY_PATH=\"${libdir}")
if(NS3_LIBRARY_PATH)
set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}:${NS3_LIBRARY_PATH}")
endif()
set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}\${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}\"")
-set(SMPIMAIN ${CMAKE_BINARY_DIR}/lib/simgrid/smpimain)
-set(SMPIREPLAYMAIN ${CMAKE_BINARY_DIR}/lib/simgrid/smpireplaymain)
+set(SMPIMAIN ${libdir}/simgrid/smpimain)
+set(SMPIREPLAYMAIN ${libdir}/simgrid/smpireplaymain)
foreach(script cc cxx ff f90 run)
configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpi${script}.in ${CMAKE_BINARY_DIR}/smpi_script/bin/smpi${script} @ONLY)
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")
- set(SG_HAVE_CPP14 0)
-else()
- set(SG_HAVE_CPP14 1)
- 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()
target_link_libraries(python-bindings PUBLIC simgrid)
set_target_properties(python-bindings PROPERTIES
LIBRARY_OUTPUT_NAME simgrid
- CXX_VISIBILITY_PRESET "default")
+ CXX_VISIBILITY_PRESET "default"
+ INTERPROCEDURAL_OPTIMIZATION FALSE)
+ # LTO is disabled here from the python bindings because this makes a
+ # cmake warning about CMP0069 even when this policy is set. This
+ # problem may be in cmake, in pybind11 or even in our code, not sure.
+ # It may get eventually solved in cmake or pybind11. Or not.
+ # The sure thing is that our python bindings are in one file only,
+ # so there is no need for LTO here. Problem solved :)
+
add_dependencies(tests python-bindings)
set_property(TARGET python-bindings
APPEND PROPERTY INCLUDE_DIRECTORIES "${INTERNAL_INCLUDES}")