+# Build the version number
+
+set(SIMGRID_VERSION_MAJOR "3")
+set(SIMGRID_VERSION_MINOR "24")
+set(SIMGRID_VERSION_PATCH "1") # odd => git branch; even => stable release or released snapshot
+
+set(SIMGRID_VERSION_DATE "2019") # Year for copyright information
+
+if(${SIMGRID_VERSION_PATCH} EQUAL "0")
+ set(release_version "${SIMGRID_VERSION_MAJOR}.${SIMGRID_VERSION_MINOR}")
+else()
+ set(release_version "${SIMGRID_VERSION_MAJOR}.${SIMGRID_VERSION_MINOR}.${SIMGRID_VERSION_PATCH}")
+endif()
+
+message(STATUS "Configuring SimGrid v${release_version}")
+
+set(SIMGRID_VERSION_STRING "SimGrid version ${release_version}")
+
+set(libsimgrid_version "${release_version}")
+set(libsimgrid-java_version "${release_version}")
+
+# Basic checks on cmake
cmake_minimum_required(VERSION 3.5)
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)
## 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.
-set(SMPI_C_FLAGS "${CMAKE_C_FLAGS}")
-set(SMPI_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
+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 #
set(SMPI_Fortran_LIBS "")
set(SMPI_FLANG 1)
endif()
- set(SMPI_Fortran_FLAGS "${SMPI_Fortran_FLAGS} ${CMAKE_Fortran_FLAGS}")
+ string(REGEX REPLACE " *-f[a-z]+-prefix-map=[^ ]*" "" SMPI_Fortran_FLAGS "${SMPI_Fortran_FLAGS} ${CMAKE_Fortran_FLAGS}")
## Request debugging flags for Fortran too
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -g")
endif()
-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
-# Build the version number #
-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
-
-set(SIMGRID_VERSION_MAJOR "3")
-set(SIMGRID_VERSION_MINOR "23")
-set(SIMGRID_VERSION_PATCH "0") # odd => git branch; even => stable release or released snapshot
-
-set(SIMGRID_VERSION_DATE "2019") # Year for copyright information
-
-if(${SIMGRID_VERSION_PATCH} EQUAL "0")
- set(release_version "${SIMGRID_VERSION_MAJOR}.${SIMGRID_VERSION_MINOR}")
-else()
- set(release_version "${SIMGRID_VERSION_MAJOR}.${SIMGRID_VERSION_MINOR}.${SIMGRID_VERSION_PATCH}")
-endif()
-
-set(SIMGRID_VERSION_STRING "SimGrid version ${release_version}${SIMGRID_VERSION_EXTRA}")
-
-set(libsimgrid_version "${release_version}")
-set(libsimgrid-java_version "${release_version}")
-
### SET THE LIBRARY EXTENSION
if(APPLE)
set(LIB_EXE "dylib")
endif()
# But we do need the core of Boost
-find_package(Boost 1.48)
-if(Boost_FOUND)
- include_directories(${Boost_INCLUDE_DIRS})
-else()
- if(APPLE)
- 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'")
- else()
- message(FATAL_ERROR "Boost libraries not found. Install libboost-dev (>= 1.48.0).")
- endif()
-endif()
-
# cmake before 3.13.1 does not know about stacktrace components. Fix it.
# Usable components: https://www.boost.org/doc/libs/1_65_1/doc/html/stacktrace/configuration_and_build.html
set(_Boost_STACKTRACE_HEADERS "boost/stacktrace.hpp")
set(_Boost_STACKTRACE_BACKTRACE_HEADERS "boost/stacktrace.hpp")
set(_Boost_STACKTRACE_ADDR2LINE_HEADERS "boost/stacktrace.hpp")
-if(minimal-bindings) # When we want a minimal jarfile, don't even search for boost optional components
- message(STATUS "Don't even look for boost optional components, as we build minimal binding libraries.")
-else()
- find_package(Boost 1.59 COMPONENTS context stacktrace_backtrace stacktrace_addr2line)
- set(Boost_FOUND 1) # These components are optionals
- message(STATUS "Mandatory components found. SimGrid is compilable.")
- message(STATUS "Looking for optional Boost components:")
-
- if (Boost_STACKTRACE_BACKTRACE_FOUND)
- message (STATUS " stacktrace: found the fast 'backtrace' implementation. Activating human-readable stack traces.")
- set(HAVE_BOOST_STACKTRACE_BACKTRACE 1)
- set(SIMGRID_DEP "${SIMGRID_DEP} -lboost_stacktrace_backtrace")
+ if(minimal-bindings) # When we want a minimal jarfile, don't even search for boost optional components
+ message(STATUS "Don't even look for boost optional components, as we build minimal binding libraries.")
+ find_package(Boost 1.48)
else()
- set(HAVE_BOOST_STACKTRACE_BACKTRACE 0)
-
- if (Boost_STACKTRACE_ADDR2LINE_FOUND)
- message (STATUS " stacktrace: found the slow 'addr2line' implementation. Activating human-readable stack traces.")
- set(HAVE_BOOST_STACKTRACE_ADDR2LINE 1)
- set(SIMGRID_DEP "${SIMGRID_DEP} -lboost_stacktrace_addr2line")
- else()
- message (STATUS " stacktrace: MISSING. Install libboost-stacktrace-dev to display the stacktraces.")
- set(HAVE_BOOST_STACKTRACE_ADDR2LINE 0)
- endif()
+ find_package(Boost 1.59 OPTIONAL_COMPONENTS context stacktrace_backtrace stacktrace_addr2line)
endif()
+ if(Boost_FOUND)
+ include_directories(${Boost_INCLUDE_DIRS})
+ message(STATUS "Mandatory components found. SimGrid is compilable.")
+ if (NOT minimal-bindings)
+ message(STATUS "Looking for optional Boost components:")
+ set(Boost_FOUND 1) # These components are optionals
+ CHECK_INCLUDE_FILE("backtrace.h" HAVE_BACKTRACE_H) # check that backtrace is actually possible
+ if (Boost_STACKTRACE_BACKTRACE_FOUND AND HAVE_BACKTRACE_H)
+ message (STATUS " stacktrace: found the fast 'backtrace' implementation. Activating human-readable stack traces.")
+ set(HAVE_BOOST_STACKTRACE_BACKTRACE 1)
+ else()
+ set(HAVE_BOOST_STACKTRACE_BACKTRACE 0)
+ if (Boost_STACKTRACE_ADDR2LINE_FOUND)
+ message (STATUS " stacktrace: found the slow 'addr2line' implementation. Activating human-readable stack traces.")
+ set(HAVE_BOOST_STACKTRACE_ADDR2LINE 1)
+ else()
+ message (STATUS " stacktrace: MISSING. Install libboost-stacktrace-dev to display the stacktraces.")
+ set(HAVE_BOOST_STACKTRACE_ADDR2LINE 0)
+ endif()
+ endif()
- if(Boost_CONTEXT_FOUND)
- message (STATUS " context: found. Activating Boost contexts.")
- set(HAVE_BOOST_CONTEXTS 1)
+ if(Boost_CONTEXT_FOUND)
+ message (STATUS " context: found. Activating Boost contexts.")
+ set(HAVE_BOOST_CONTEXTS 1)
+ else()
+ message (STATUS " context: MISSING. Install libboost-context-dev for this optional feature.")
+ set(HAVE_BOOST_CONTEXTS 0)
+ endif()
+ endif()
else()
- message (STATUS " context: MISSING. Install libboost-context-dev for this optional feature.")
- set(HAVE_BOOST_CONTEXTS 0)
- endif()
-endif()
-
+ if(APPLE)
+ 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'")
+ else()
+ find_package(Boost 1.48) #try without optional libraries
+ if(NOT Boost_FOUND)
+ message(FATAL_ERROR "Boost libraries not found. Install libboost-dev (>= 1.48.0).")
+ else()
+ include_directories(${Boost_INCLUDE_DIRS})
+ message(STATUS "Mandatory components found. SimGrid is compilable.")
+ endif()
+ endif()
+ endif()
# Checks for header libraries functions.
CHECK_LIBRARY_EXISTS(rt clock_gettime "" HAVE_POSIX_GETTIME)
message(FATAL_ERROR "Cannot activate both model-checking and ns-3 bindings: ns-3 pull 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(NOT WIN32)
# Avoid triggering a (full) rebuild by touching the files if they did not really change
configure_file("${CMAKE_HOME_DIRECTORY}/src/internal_config.h.in" "${CMAKE_BINARY_DIR}/src/internal_config.h.generated" @ONLY IMMEDIATE)
-configure_file("${CMAKE_HOME_DIRECTORY}/src/simgrid/version.h.in" "${CMAKE_BINARY_DIR}/src/simgrid/version.h.generated" @ONLY IMMEDIATE)
+configure_file("${CMAKE_HOME_DIRECTORY}/include/simgrid/version.h.in" "${CMAKE_BINARY_DIR}/include/simgrid/version.h.generated" @ONLY IMMEDIATE)
configure_file("${CMAKE_HOME_DIRECTORY}/include/simgrid/config.h.in" "${CMAKE_BINARY_DIR}/include/simgrid/config.h.generated" @ONLY IMMEDIATE)
execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/src/internal_config.h.generated ${CMAKE_BINARY_DIR}/src/internal_config.h)
-execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/src/simgrid/version.h.generated ${CMAKE_BINARY_DIR}/src/simgrid/version.h)
+execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/include/simgrid/version.h.generated ${CMAKE_BINARY_DIR}/include/simgrid/version.h)
execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/include/simgrid/config.h.generated ${CMAKE_BINARY_DIR}/include/simgrid/config.h)
file(REMOVE ${CMAKE_BINARY_DIR}/src/internal_config.h.generated)
file(REMOVE ${CMAKE_BINARY_DIR}/include/simgrid/config.h.generated)
-file(REMOVE ${CMAKE_BINARY_DIR}/src/simgrid/version.h.generated)
+file(REMOVE ${CMAKE_BINARY_DIR}/include/simgrid/version.h.generated)
# We need two versions of the SMPI scripts because they contain the path to the library
# so, it depends of whether SimGrid is installed, or run from the sources (during the build)
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(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}\${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}\"")
set(SMPIMAIN ${libdir}/simgrid/smpimain)
set(SMPIREPLAYMAIN ${libdir}/simgrid/smpireplaymain)
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(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(generated_headers_to_install
${CMAKE_CURRENT_BINARY_DIR}/include/smpi/mpif.h
${CMAKE_CURRENT_BINARY_DIR}/include/simgrid/config.h
+ ${CMAKE_CURRENT_BINARY_DIR}/include/simgrid/version.h
)
set(generated_headers ${CMAKE_CURRENT_BINARY_DIR}/src/internal_config.h )
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)
- get_property(known_features GLOBAL PROPERTY CMAKE_CXX_KNOWN_FEATURES)
-
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(" Cmake Generator .............: ${CMAKE_GENERATOR}")
message(" Site ........................: ${SITE}")
message(" Install prefix ..............: ${CMAKE_INSTALL_PREFIX}")
-if(release)
- message(" Release .....................: simgrid-${release_version}${SIMGRID_VERSION_EXTRA} (release build)")
-else()
- message(" Release .....................: simgrid-${release_version}${SIMGRID_VERSION_EXTRA} (development build)")
-endif()
+message(" Release .....................: simgrid-${release_version}")
message("")
message(" Compiler: C .................: ${CMAKE_C_COMPILER} (id: ${CMAKE_C_COMPILER_ID})")
message(" version .............: ${CMAKE_C_COMPILER_VERSION}")