Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
More forward declarations
[simgrid.git] / CMakeLists.txt
index 28cb796..80e106c 100644 (file)
@@ -1,38 +1,56 @@
-cmake_minimum_required(VERSION 3.5)
+# Build the version number
+
+set(SIMGRID_VERSION_MAJOR "3")
+set(SIMGRID_VERSION_MINOR "34")
+set(SIMGRID_VERSION_PATCH "1") # odd => git branch; even => stable release or released snapshot
+
+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()
+
+if(WIN32 OR MINGW)
+  message(FATAL_ERROR "SimGrid does not build on native windows, nor with MinGW. Please use WSL2 instead.")
+endif()
+
+message(STATUS "Configuring SimGrid v${release_version}")
+
+set(SIMGRID_VERSION_STRING "SimGrid version ${release_version}")
+
+set(libsimgrid_version "${release_version}")
+
+# Basic checks on cmake
+cmake_minimum_required(VERSION 3.12)
+# once we move CMake to >= 3.13, we should use target_link_option in examples/sthread
+# once we move CMake to >= 3.13.1, we could get rid of _Boost_STACKTRACE_BACKTRACE_HEADERS
 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)
 
 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)
 
 
-## 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}")
+# customizable installation directories
+include(GNUInstallDirs)
 
 #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
 #     Check for the compiler        #
 #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
 
 #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
 #     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)
-CHECK_C_COMPILER_FLAG(-fstack-cleaner HAVE_C_STACK_CLEANER)
 
 
+INCLUDE(CheckCCompilerFlag)
 ## Request full debugging flags
 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g3")
 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g3")
 
 ## Request full debugging flags
 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
     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()
 
   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++17 and C11 standards
+set(CMAKE_CXX_STANDARD 17)
 set(CMAKE_CXX_STANDARD_REQUIRED ON)
 
 set(CMAKE_C_STANDARD 11)
 set(CMAKE_CXX_STANDARD_REQUIRED ON)
 
 set(CMAKE_C_STANDARD 11)
@@ -50,16 +68,16 @@ find_package(Threads)
 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Option.cmake)
 
 ### SMPI vs. Fortran
 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)
   # 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)
+
+  SET(SMPI_FORTRAN OFF)
   if(enable_fortran)
     enable_language(Fortran OPTIONAL)
   endif()
   if(enable_fortran)
     enable_language(Fortran OPTIONAL)
   endif()
-  
+
   if(CMAKE_Fortran_COMPILER)
 
     # Fortran compiler detected: save it, then replace by smpiff
   if(CMAKE_Fortran_COMPILER)
 
     # Fortran compiler detected: save it, then replace by smpiff
@@ -67,60 +85,36 @@ if ((NOT DEFINED enable_smpi) OR enable_smpi)
 
        # Set flags/libs to be used in smpiff
     if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU")
 
        # 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_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_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()
       set(SMPI_Fortran_LIBS "")
       set(SMPI_FLANG 1)
     endif()
-    set(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")
 
 
     ## Request debugging flags for Fortran too
     set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -g")
 
-    set(SMPI_FORTRAN 1)
+    set(SMPI_FORTRAN ON)
   endif(CMAKE_Fortran_COMPILER)
 
 endif()
 
   endif(CMAKE_Fortran_COMPILER)
 
 endif()
 
-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
-#     Build the version number      #
-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
-
-set(SIMGRID_VERSION_MAJOR "3")
-set(SIMGRID_VERSION_MINOR "23")
-set(SIMGRID_VERSION_PATCH "3") # 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 
+### SET THE LIBRARY EXTENSION
 if(APPLE)
   set(LIB_EXE "dylib")
 if(APPLE)
   set(LIB_EXE "dylib")
-elseif(WIN32)
-  set(LIB_EXE "a")
-  set(BIN_EXE ".exe")
 else()
   set(LIB_EXE "so")
 endif()
 
 else()
   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
 string(REGEX MATCH "[0-9].[0-9]*" LINKER_VERSION "${LINKER_VERSION}")
 
 ### Find programs and paths
@@ -130,14 +124,12 @@ if(NOT PERL_FOUND)
   message(FATAL_ERROR "Please install Perl to compile SimGrid.")
 endif()
 
   message(FATAL_ERROR "Please install Perl to compile SimGrid.")
 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)
+# tesh.py needs python 3
+find_package(Python3 COMPONENTS Interpreter)
+if(NOT Python3_Interpreter_FOUND)
   message(FATAL_ERROR "Please install Python (version 3 or higher) to compile SimGrid.")
 endif()
   message(FATAL_ERROR "Please install Python (version 3 or higher) to compile SimGrid.")
 endif()
+set(PYTHON_EXECUTABLE ${Python3_EXECUTABLE})
 
 SET(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib)
 
 
 SET(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib)
 
@@ -153,7 +145,6 @@ include_directories(
 set(INTERNAL_INCLUDES
   ${CMAKE_BINARY_DIR}
   ${CMAKE_HOME_DIRECTORY}
 set(INTERNAL_INCLUDES
   ${CMAKE_BINARY_DIR}
   ${CMAKE_HOME_DIRECTORY}
-  ${CMAKE_HOME_DIRECTORY}/src/include
   )
 
 if(enable_smpi)
   )
 
 if(enable_smpi)
@@ -164,39 +155,33 @@ if(NOT CMAKE_CROSSCOMPILING AND EXISTS /usr/include/)
   set(INTERNAL_INCLUDES ${INTERNAL_INCLUDES} /usr/include/)
 endif()
 
   set(INTERNAL_INCLUDES ${INTERNAL_INCLUDES} /usr/include/)
 endif()
 
-if(WIN32)
-  set(CMAKE_INCLUDE_WIN "${CMAKE_C_COMPILER}")
-  set(CMAKE_LIB_WIN "${CMAKE_C_COMPILER}")
-  string(REGEX REPLACE "/bin/gcc.*" "/include"  CMAKE_INCLUDE_WIN "${CMAKE_INCLUDE_WIN}")
-  string(REGEX REPLACE "/bin/gcc.*" "/lib"  CMAKE_LIB_WIN "${CMAKE_LIB_WIN}")
-  set(INTERNAL_INCLUDES ${INTERNAL_INCLUDES} ${CMAKE_INCLUDE_WIN})
-  unset(CMAKE_INCLUDE_WIN)
-endif()
-
-# library dependency cannot start with a space (CMP0004), so initialize it with something that is never desactivated.
-set(SIMGRID_DEP "-lm") 
+# 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
 set(HAVE_RAW_CONTEXTS 0)
 include(CMakeDetermineSystem)
 
 ### Determine the assembly flavor that we need today
 set(HAVE_RAW_CONTEXTS 0)
 include(CMakeDetermineSystem)
+foreach(arch i686 x86_64 arm64)
+  set(SIMGRID_PROCESSOR_${arch} 0)
+endforeach()
 IF(CMAKE_SYSTEM_PROCESSOR MATCHES ".86|AMD64|amd64")
   IF(CMAKE_SIZEOF_VOID_P EQUAL 4) # 32 bits
     message(STATUS "System processor: i686 (${CMAKE_SYSTEM_PROCESSOR}, 32 bits)")
     set(SIMGRID_PROCESSOR_i686 1)
 IF(CMAKE_SYSTEM_PROCESSOR MATCHES ".86|AMD64|amd64")
   IF(CMAKE_SIZEOF_VOID_P EQUAL 4) # 32 bits
     message(STATUS "System processor: i686 (${CMAKE_SYSTEM_PROCESSOR}, 32 bits)")
     set(SIMGRID_PROCESSOR_i686 1)
-    set(SIMGRID_PROCESSOR_x86_64 0)
   ELSE()
     message(STATUS "System processor: x86_64 (${CMAKE_SYSTEM_PROCESSOR}, 64 bits)")
   ELSE()
     message(STATUS "System processor: x86_64 (${CMAKE_SYSTEM_PROCESSOR}, 64 bits)")
-    set(SIMGRID_PROCESSOR_i686 0)
     set(SIMGRID_PROCESSOR_x86_64 1)
   ENDIF()
     set(SIMGRID_PROCESSOR_x86_64 1)
   ENDIF()
-  if (WIN32)
-    message(STATUS "Disable fast raw contexts on Windows.")
+  if(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()
   else()
     set(HAVE_RAW_CONTEXTS 1)
   endif()
+ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64")
+  message(STATUS "System processor: arm64 (${CMAKE_SYSTEM_PROCESSOR}, 64 bits)")
+  set(SIMGRID_PROCESSOR_arm64 1)
 ELSE()
 ELSE()
-  set(SIMGRID_PROCESSOR_i686 0)
-  set(SIMGRID_PROCESSOR_x86_64 0)
+  message(STATUS "System processor (${CMAKE_SYSTEM_PROCESSOR}) not explicitly accounted for")
 ENDIF()
 
 include(CheckFunctionExists)
 ENDIF()
 
 include(CheckFunctionExists)
@@ -206,41 +191,72 @@ include(CheckIncludeFiles)
 include(CheckLibraryExists)
 include(CheckSymbolExists)
 
 include(CheckLibraryExists)
 include(CheckSymbolExists)
 
-set(HAVE_GRAPHVIZ 0)
-set(SIMGRID_HAVE_LUA 0)
+set(HAVE_GRAPHVIZ OFF)
 if(minimal-bindings)
 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)
 else()
   include(FindGraphviz)
-  if(enable_lua)
-    include(FindLuaSimgrid)
-  endif()
 endif()
 
 endif()
 
-set(SIMGRID_HAVE_NS3 0)
+set(SIMGRID_HAVE_NS3 OFF)
 if(enable_ns3)
   include(FindNS3)
   if (SIMGRID_HAVE_NS3)
 if(enable_ns3)
   include(FindNS3)
   if (SIMGRID_HAVE_NS3)
-    set(SIMGRID_HAVE_NS3 1)
-    foreach(lib core csma point-to-point internet network applications)
-      set(SIMGRID_DEP "${SIMGRID_DEP} -lns${NS3_VERSION}-${lib}${NS3_SUFFIX}")
-    endforeach()
+    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 ON)
+    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()
 
   else()
     message(FATAL_ERROR "Cannot find ns-3. Please install it (apt-get install ns3 libns3-dev) or disable that cmake option")
   endif()
 endif()
 
-if(WIN32)
-  set(Boost_USE_STATIC_LIBS 1)
+### Check for Eigen library
+if ((NOT DEFINED EIGEN3_HINT) OR (NOT EIGEN3_HINT STRLESS_EQUAL "OFF"))
+  set(SIMGRID_HAVE_EIGEN3 OFF)
+  find_package (Eigen3 3.3 CONFIG
+                HINTS ${EIGEN3_HINT})
+  if (Eigen3_FOUND)
+    set(SIMGRID_HAVE_EIGEN3 ON)
+    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()
+  mark_as_advanced(Eigen3_DIR)
+else()
+  message(STATUS "Disabling Eigen3 as requested by the user (EIGEN3_HINT is set to 'OFF')")
+endif()
+
+# Check for our JSON dependency
+set(SIMGRID_HAVE_JSON 0)
+find_package(nlohmann_json 3.7
+             HINTS ${nlohmann_json_HINT})
+if (nlohmann_json_FOUND)
+  set(SIMGRID_HAVE_JSON 1)
+  if (NOT NLOHMANN_JSON_INCLUDE_DIR)
+    get_target_property(NLOHMANN_JSON_INCLUDE_DIR nlohmann_json::nlohmann_json INTERFACE_INCLUDE_DIRECTORIES)
+    list(REMOVE_DUPLICATES NLOHMANN_JSON_INCLUDE_DIR)
+  else()
+    include_directories(${NLOHMANN_JSON_INCLUDE_DIR})
+  endif()
+  message(STATUS "Found nlohmann_json: ${NLOHMANN_JSON_INCLUDE_DIR}")
 endif()
 endif()
+mark_as_advanced(nlohmann_json_DIR)
 
 
-set(HAVE_PAPI 0)
+set(HAVE_PAPI OFF)
 if(enable_smpi_papi)
   include(FindPAPI)
   if (NOT HAVE_PAPI)
     message(FATAL_ERROR "Cannot find PAPI. Please install it (apt-get install papi-tools libpapi-dev) or disable PAPI bindings.")
   endif()
 endif()
 if(enable_smpi_papi)
   include(FindPAPI)
   if (NOT HAVE_PAPI)
     message(FATAL_ERROR "Cannot find PAPI. Please install it (apt-get install papi-tools libpapi-dev) or disable PAPI bindings.")
   endif()
 endif()
+mark_as_advanced(PAPI_PREFIX)
 
 # But we do need the core of Boost
 # cmake before 3.13.1 does not know about stacktrace components. Fix it.
 
 # But we do need the core of Boost
 # cmake before 3.13.1 does not know about stacktrace components. Fix it.
@@ -249,7 +265,7 @@ set(_Boost_STACKTRACE_HEADERS           "boost/stacktrace.hpp")
 set(_Boost_STACKTRACE_BACKTRACE_HEADERS "boost/stacktrace.hpp")
 set(_Boost_STACKTRACE_ADDR2LINE_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
+  if(minimal-bindings) # When we want a minimal python library, 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()
     message(STATUS "Don't even look for boost optional components, as we build minimal binding libraries.")
     find_package(Boost 1.48)
   else()
@@ -278,24 +294,29 @@ set(_Boost_STACKTRACE_ADDR2LINE_HEADERS "boost/stacktrace.hpp")
 
       if(Boost_CONTEXT_FOUND)
         message (STATUS "  context: found. Activating Boost contexts.")
 
       if(Boost_CONTEXT_FOUND)
         message (STATUS "  context: found. Activating Boost contexts.")
-        set(HAVE_BOOST_CONTEXTS 1)
+        set(HAVE_BOOST_CONTEXTS ON)
       else()
         message (STATUS "  context: MISSING. Install libboost-context-dev for this optional feature.")
       else()
         message (STATUS "  context: MISSING. Install libboost-context-dev for this optional feature.")
-        set(HAVE_BOOST_CONTEXTS 0)
+        set(HAVE_BOOST_CONTEXTS OFF)
       endif()
     endif()
   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()
       endif()
     endif()
   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()
-      if (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} LESS 3.11)
-        find_package(Boost 1.48) #try again with just boost, as old cmake may fail.
-      endif()
+      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).")
       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()
     endif()
-  endif() 
+  endif()
+mark_as_advanced(Boost_CONTEXT_LIBRARY_RELEASE)
+mark_as_advanced(Boost_INCLUDE_DIR)
+mark_as_advanced(Boost_STACKTRACE_ADDR2LINE_LIB)
+mark_as_advanced(Boost_STACKTRACE_BACKTRACE_LIB)
 
 # Checks for header libraries functions.
 CHECK_LIBRARY_EXISTS(rt      clock_gettime           "" HAVE_POSIX_GETTIME)
 
 # Checks for header libraries functions.
 CHECK_LIBRARY_EXISTS(rt      clock_gettime           "" HAVE_POSIX_GETTIME)
@@ -304,38 +325,25 @@ CHECK_INCLUDE_FILE("pthread_np.h" HAVE_PTHREAD_NP_H) # for pthread_setaffinity_n
 
 if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
   set(CMAKE_REQUIRED_DEFINITIONS "-D_XOPEN_SOURCE=700 -D_DARWIN_C_SOURCE")
 
 if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
   set(CMAKE_REQUIRED_DEFINITIONS "-D_XOPEN_SOURCE=700 -D_DARWIN_C_SOURCE")
-elseif(MINGW)
-  # Use the GNU version of unusual modifiers like PRIx64
-  add_definitions(-D__USE_MINGW_ANSI_STDIO=1)
-  set(CMAKE_REQUIRED_DEFINITIONS "-D__USE_MINGW_ANSI_STDIO=1")
 else()
   set(CMAKE_REQUIRED_DEFINITIONS "-D_GNU_SOURCE")
 endif()
 
 CHECK_INCLUDE_FILE("valgrind/valgrind.h" HAVE_VALGRIND_H)
 CHECK_INCLUDE_FILE("unistd.h" HAVE_UNISTD_H)
 else()
   set(CMAKE_REQUIRED_DEFINITIONS "-D_GNU_SOURCE")
 endif()
 
 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("ucontext.h" HAVE_UCONTEXT_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_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(sysconf HAVE_SYSCONF)
+if(NOT HAVE_SYSCONF)
+  message(FATAL_ERROR "Cannot build without sysconf.")
+endif()
 CHECK_FUNCTION_EXISTS(process_vm_readv HAVE_PROCESS_VM_READV)
 CHECK_FUNCTION_EXISTS(process_vm_readv HAVE_PROCESS_VM_READV)
-CHECK_FUNCTION_EXISTS(mmap HAVE_MMAP)
 CHECK_FUNCTION_EXISTS(mremap HAVE_MREMAP)
 
 CHECK_SYMBOL_EXISTS(vasprintf stdio.h HAVE_VASPRINTF)
 CHECK_FUNCTION_EXISTS(mremap HAVE_MREMAP)
 
 CHECK_SYMBOL_EXISTS(vasprintf stdio.h HAVE_VASPRINTF)
-if(MINGW)
-  # The detection of vasprintf fails on MinGW, assumingly because it's
-  # defined as an inline function in stdio.h instead of a regular
-  # function. So force the result to be 1 despite of the test.
-  set(HAVE_VASPRINTF 1)
-endif()
 
 CHECK_INCLUDE_FILE("sys/sendfile.h" HAVE_SENDFILE_H)
 CHECK_FUNCTION_EXISTS(sendfile HAVE_SENDFILE)
 
 CHECK_INCLUDE_FILE("sys/sendfile.h" HAVE_SENDFILE_H)
 CHECK_FUNCTION_EXISTS(sendfile HAVE_SENDFILE)
@@ -345,87 +353,40 @@ else()
   set(SG_HAVE_SENDFILE 0)
 endif()
 
   set(SG_HAVE_SENDFILE 0)
 endif()
 
-if(enable_model-checking AND NOT "${CMAKE_SYSTEM}" MATCHES "Linux|FreeBSD")
-  message(WARNING "Support for model-checking has not been enabled on ${CMAKE_SYSTEM}: disabling it")
-  set(enable_model-checking FALSE)
-endif()
-
-if(HAVE_MMAP)
-  SET(HAVE_MMALLOC 1)
-else()
-  SET(HAVE_MMALLOC 0)
-  if(enable_model-checking)
-    message(STATUS "Warning: support for model-checking has been disabled because you are missing either mmap or __thread.")
-  endif()
-  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(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()
-  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()
-  endif()
-endif()
+SET(SIMGRID_HAVE_MC OFF)
 
 if(enable_model-checking)
 
 if(enable_model-checking)
-  find_package(Libdw REQUIRED)
-  find_package(Libelf REQUIRED)
-  find_package(Libevent REQUIRED)
-  include_directories(${LIBDW_INCLUDE_DIR} ${LIBELF_INCLUDE_DIR} ${LIBEVENT_INCLUDE_DIR})
-  set(SIMGRID_DEP "${SIMGRID_DEP} ${LIBEVENT_LIBRARIES} ${LIBELF_LIBRARIES} ${LIBDW_LIBRARIES}")
-  set(SIMGRID_HAVE_MC 1)
-  if("${CMAKE_SYSTEM}" MATCHES "FreeBSD" AND enable_java)
-    message(WARNING "FreeBSD + Model-Checking + Java = too much for now. Disabling the Java bindings.")
-    set(enable_java FALSE)
+  find_package(Libevent)
+  if(Libevent_FOUND)
+    message(STATUS "Found libevent. The stateless model-checking can be enabled.")
+    include_directories(${LIBEVENT_INCLUDE_DIR})
+    set(SIMGRID_DEP "${SIMGRID_DEP} ${LIBEVENT_LIBRARIES}")
+    SET(SIMGRID_HAVE_MC ON)
+  else()
+    message(STATUS "libevent not found. Please install libevent-dev to enable the SimGrid model checker.")
   endif()
   endif()
-else()
-  SET(SIMGRID_HAVE_MC 0)  
-  set(HAVE_MMALLOC 0)
-endif()
-mark_as_advanced(PATH_LIBDW_H)
-mark_as_advanced(PATH_LIBDW_LIB)
-
-if (enable_model-checking AND enable_ns3)
-  message(FATAL_ERROR "Cannot activate both model-checking and ns-3 bindings: ns-3 pull too much dependencies for the MC to work")
+  mark_as_advanced(LIBEVENT_LIBRARY)
+  mark_as_advanced(LIBEVENT_THREADS_LIBRARY)
 endif()
 
 if(enable_smpi)
 endif()
 
 if(enable_smpi)
-  SET(HAVE_SMPI 1)
-  if(NOT WIN32)
-    SET(HAVE_PRIVATIZATION 1)
-  else()
-    message (STATUS "Warning:  no support for SMPI automatic privatization on this platform")
-    SET(HAVE_PRIVATIZATION 0)
-  endif()
+  SET(HAVE_SMPI ON)
+  SET(HAVE_PRIVATIZATION ON)
 else()
 else()
-  SET(HAVE_SMPI 0)
+  SET(HAVE_SMPI OFF)
 endif()
 
 #--------------------------------------------------------------------------------------------------
 ### Check what context backends are available
 
 set(HAVE_UCONTEXT_CONTEXTS 0)
 endif()
 
 #--------------------------------------------------------------------------------------------------
 ### Check what context backends are available
 
 set(HAVE_UCONTEXT_CONTEXTS 0)
+CHECK_INCLUDE_FILE("ucontext.h" HAVE_UCONTEXT_H)
 if(NOT HAVE_UCONTEXT_H)
   message(STATUS "No ucontext factory: <ucontext.h> not found.")
 elseif(APPLE)
 if(NOT HAVE_UCONTEXT_H)
   message(STATUS "No ucontext factory: <ucontext.h> not found.")
 elseif(APPLE)
@@ -436,27 +397,27 @@ else()
     OUTPUT_VARIABLE compile_makecontext_output)
 
   #If can have both context
     OUTPUT_VARIABLE compile_makecontext_output)
 
   #If can have both context
-  if(compile_makecontext)
-    set(HAVE_UCONTEXT_CONTEXTS 1)
-    message(STATUS "Support for ucontext factory ok.")
-  else()
+  if(NOT compile_makecontext)
     message(STATUS "Error: <ucontext.h> exists, but makecontext is not compilable. Compilation output:\n ${compile_makecontext_output}")
     message(STATUS "No ucontext factory: makecontext() is not compilable.")
     message(STATUS "Error: <ucontext.h> exists, but makecontext is not compilable. Compilation output:\n ${compile_makecontext_output}")
     message(STATUS "No ucontext factory: makecontext() is not compilable.")
-  endif()
-
-  # Stack setup (size and address)
-  try_run(RUN_makecontext_VAR COMPILE_makecontext_VAR
-    ${CMAKE_BINARY_DIR} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_stacksetup.c
-    RUN_OUTPUT_VARIABLE stack_setup)
-
-  LIST(LENGTH stack_setup stack_setup_len)
-  if("${stack_setup_len}" STREQUAL "2")
-    LIST(GET stack_setup 0 makecontext_addr)
-    LIST(GET stack_setup 1 makecontext_size)
-    set(sg_makecontext_stack_addr "#define sg_makecontext_stack_addr(skaddr) (${makecontext_addr})")
-    set(sg_makecontext_stack_size "#define sg_makecontext_stack_size(sksize) (${makecontext_size})")
   else()
   else()
-    message(FATAL_ERROR "Could not figure out the stack setup. Compil: ${RUN_makecontext_VAR}. Exec: ${COMPILE_makecontext_VAR}. Output: ${stack_setup}")
+    message(STATUS "Support for ucontext factory ok.")
+    set(HAVE_UCONTEXT_CONTEXTS 1)
+
+    # Stack setup (size and address)
+    try_run(RUN_makecontext_VAR COMPILE_makecontext_VAR
+      ${CMAKE_BINARY_DIR} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_stacksetup.c
+      RUN_OUTPUT_VARIABLE stack_setup)
+
+    LIST(LENGTH stack_setup stack_setup_len)
+    if("${stack_setup_len}" STREQUAL "2")
+      LIST(GET stack_setup 0 makecontext_addr)
+      LIST(GET stack_setup 1 makecontext_size)
+      set(sg_makecontext_stack_addr "#define sg_makecontext_stack_addr(skaddr) (${makecontext_addr})")
+      set(sg_makecontext_stack_size "#define sg_makecontext_stack_size(sksize) (${makecontext_size})")
+    else()
+      message(FATAL_ERROR "Could not figure out the stack setup. Compil: ${RUN_makecontext_VAR}. Exec: ${COMPILE_makecontext_VAR}. Output: ${stack_setup}")
+    endif()
   endif()
 endif()
 
   endif()
 endif()
 
@@ -481,7 +442,7 @@ else()
   endif()
 endif()
 # If the test ran well, remove the test binary
   endif()
 endif()
 # If the test ran well, remove the test binary
-file(REMOVE test_stackgrowth)
+file(REMOVE ${CMAKE_BINARY_DIR}/test_stackgrowth)
 #--------------------------------------------------------------------------------------------------
 
 ###############
 #--------------------------------------------------------------------------------------------------
 
 ###############
@@ -519,14 +480,14 @@ endif()
 
 # 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)
 
 # 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)
 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)
 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)
 
 # 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)
@@ -535,14 +496,14 @@ file(READ ${CMAKE_HOME_DIRECTORY}/src/smpi/smpitools.sh SMPITOOLS_SH) # Definiti
 
 ### SMPI script used when simgrid is installed
 set(exec_prefix ${CMAKE_INSTALL_PREFIX})
 
 ### 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_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}")
 endif()
 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)
 
 set(SMPIMAIN ${libdir}/simgrid/smpimain)
 set(SMPIREPLAYMAIN ${libdir}/simgrid/smpireplaymain)
 
@@ -553,6 +514,7 @@ if(SMPI_FORTRAN)
   set(MODULE_MPIF_OUT "end module mpi")
   configure_file(${CMAKE_HOME_DIRECTORY}/include/smpi/mpif.h.in ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90.generated @ONLY)
   execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90.generated ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90)
   set(MODULE_MPIF_OUT "end module mpi")
   configure_file(${CMAKE_HOME_DIRECTORY}/include/smpi/mpif.h.in ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90.generated @ONLY)
   execute_process(COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90.generated ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90)
+  file(REMOVE ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90.generated)
   set(CMAKE_Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/include/smpi)
   add_library(mpi SHARED ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90)
 endif()
   set(CMAKE_Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/include/smpi)
   add_library(mpi SHARED ${CMAKE_BINARY_DIR}/src/smpi/mpif.f90)
 endif()
@@ -561,34 +523,33 @@ foreach(script cc cxx ff f90 run)
   configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpi${script}.in ${CMAKE_BINARY_DIR}/bin/smpi${script} @ONLY)
 endforeach()
 
   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(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(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()
 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(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}\${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}\"")
+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)
 endforeach()
 
 
 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)
 endforeach()
 
-if(NOT WIN32)
-  foreach(script cc cxx ff f90 run)
-    execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpi${script})
-    execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/smpi_script/bin/smpi${script})
-  endforeach()
-endif()
+foreach(script cc cxx ff f90 run)
+  execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpi${script})
+  execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/smpi_script/bin/smpi${script})
+endforeach()
 
 set(generated_headers_to_install
   ${CMAKE_CURRENT_BINARY_DIR}/include/smpi/mpif.h
   ${CMAKE_CURRENT_BINARY_DIR}/include/simgrid/config.h
 
 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 )
   )
 
 set(generated_headers  ${CMAKE_CURRENT_BINARY_DIR}/src/internal_config.h )
@@ -601,7 +562,6 @@ set(generated_files_to_clean
   ${CMAKE_BINARY_DIR}/bin/smpiff
   ${CMAKE_BINARY_DIR}/bin/smpif90
   ${CMAKE_BINARY_DIR}/bin/smpirun
   ${CMAKE_BINARY_DIR}/bin/smpiff
   ${CMAKE_BINARY_DIR}/bin/smpif90
   ${CMAKE_BINARY_DIR}/bin/smpirun
-  ${CMAKE_BINARY_DIR}/bin/colorize
   ${CMAKE_BINARY_DIR}/bin/simgrid_update_xml
   ${CMAKE_BINARY_DIR}/examples/smpi/tracing/smpi_traced.trace
   )
   ${CMAKE_BINARY_DIR}/bin/simgrid_update_xml
   ${CMAKE_BINARY_DIR}/examples/smpi/tracing/smpi_traced.trace
   )
@@ -621,7 +581,10 @@ if(NOT "${CMAKE_BINARY_DIR}" STREQUAL "${CMAKE_HOME_DIRECTORY}")
   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}/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_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)
 
   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)
@@ -756,70 +719,58 @@ endif()
 SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES
   "${generated_files_to_clean}")
 
 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)
+add_custom_target(tests-ns3 COMMENT "Recompiling the ns3 tests and tools.")
+add_dependencies(tests tests-ns3)
+add_custom_target(examples COMMENT "Recompiling all examples")
+add_dependencies(examples tests)
 
 ### Build some Maintainer files
 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/MaintainerMode.cmake)
 
 ### Make Libs
 
 ### Build some Maintainer files
 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/MaintainerMode.cmake)
 
 ### Make Libs
-if(NOT WIN32)
-  include(${CMAKE_HOME_DIRECTORY}/tools/cmake/MakeLib.cmake)
-else()
-  include(${CMAKE_HOME_DIRECTORY}/tools/cmake/MakeLibWin.cmake)
-endif()
-
-if(enable_java)
-  include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Java.cmake)
-endif()
+include(${CMAKE_HOME_DIRECTORY}/tools/cmake/MakeLib.cmake)
 
 # Python binding (with pybind11)
 ################
 
 # Python binding (with pybind11)
 ################
-# Our usage of pybind11::overload_cast mandates C++14
 if((NOT DEFINED enable_python) OR enable_python)
 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(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)
-      if (pybind11_VERSION VERSION_LESS 2.2)
-        message(STATUS "SimGrid needs at least v2.2 of pybind11. Disabling the Python bindings (found version: ${pybind11_VERSION}).")
-        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()
       set(pybind11_FOUND OFF)
     endif()
-
-  else()
-    message(STATUS "No support for C++14 detected, don't even search for pybind11.")
-    set(pybind11_FOUND OFF)
   endif()
   endif()
-  unset(known_features)
 endif()
 
 endif()
 
-option(enable_python "Whether the Python bindings are activated." ${pybind11_FOUND}) # ON by default if dependencies are met
-
-if("${CMAKE_SYSTEM}" MATCHES "FreeBSD" AND enable_model-checking AND enable_python)
-  message(WARNING "FreeBSD + Model-Checking + Python = too much for now. Disabling the Python bindings.")
-  set(enable_python FALSE)
+find_package(Python3 COMPONENTS Development)
+if(NOT Python3_Development_FOUND OR NOT pybind11_FOUND)
+  message(STATUS "SimGrid Python bindings cannot be built on this system.")
+  set(default_enable_python OFF)
+else()
+  set(default_enable_python ON)
 endif()
 
 endif()
 
+option(enable_python "Whether the Python bindings are activated." ${default_enable_python}) # ON by default if dependencies are met
+
 if(enable_python)
 if(enable_python)
+  if(NOT Python3_Development_FOUND)
+    message(FATAL_ERROR "Please install the development components of Python (python3-dev on Debian) to build the Python bindings (or disable that option).")
+  endif()
   if(pybind11_FOUND)
   if(pybind11_FOUND)
-    message(STATUS "Found pybind11, with C++14.")
+    message(STATUS "Found pybind11.")
     if(NOT enable_lto)
       set(pybind11_options NO_EXTRAS)
     endif()
     if(NOT enable_lto)
       set(pybind11_options NO_EXTRAS)
     endif()
@@ -828,10 +779,28 @@ if(enable_python)
     target_link_libraries(python-bindings PUBLIC simgrid)
     set_target_properties(python-bindings PROPERTIES
                           LIBRARY_OUTPUT_NAME simgrid
     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}")
     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()
   else()
     message(FATAL_ERROR "Please install pybind11-dev to build the Python bindings (or disable that option).")
   endif()
@@ -889,22 +858,13 @@ message("        Build Name ..................: ${BUILDNAME}")
 message("        Cmake Generator .............: ${CMAKE_GENERATOR}")
 message("        Site ........................: ${SITE}")
 message("        Install prefix ..............: ${CMAKE_INSTALL_PREFIX}")
 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}")
 message("                is gnu ..............: ${CMAKE_COMPILER_IS_GNUCC}")
 message("        Compiler: C++ ...............: ${CMAKE_CXX_COMPILER} (id: ${CMAKE_CXX_COMPILER_ID})")
 message("                version .............: ${CMAKE_CXX_COMPILER_VERSION}")
 message("")
 message("        Compiler: C .................: ${CMAKE_C_COMPILER} (id: ${CMAKE_C_COMPILER_ID})")
 message("                version .............: ${CMAKE_C_COMPILER_VERSION}")
 message("                is gnu ..............: ${CMAKE_COMPILER_IS_GNUCC}")
 message("        Compiler: C++ ...............: ${CMAKE_CXX_COMPILER} (id: ${CMAKE_CXX_COMPILER_ID})")
 message("                version .............: ${CMAKE_CXX_COMPILER_VERSION}")
-if(${Java_FOUND})
-  message("        Compiler: Javac .............: ${Java_JAVAC_EXECUTABLE}")
-  message("                version .............: ${Java_VERSION_STRING}")
-  message("                runtime .............: ${Java_JAVA_EXECUTABLE}")
-endif()
 if(CMAKE_Fortran_COMPILER)
   message("        Compiler: Fortran ...........: ${SMPI_Fortran_COMPILER} (id: ${CMAKE_Fortran_COMPILER_ID})")
   message("                version .............: ${CMAKE_Fortran_COMPILER_VERSION}")
 if(CMAKE_Fortran_COMPILER)
   message("        Compiler: Fortran ...........: ${SMPI_Fortran_COMPILER} (id: ${CMAKE_Fortran_COMPILER_ID})")
   message("                version .............: ${CMAKE_Fortran_COMPILER_VERSION}")
@@ -920,43 +880,49 @@ message("        with LTO ....................: ${enable_lto}")
 message("")
 
 if (SIMGRID_HAVE_NS3)
 message("")
 
 if (SIMGRID_HAVE_NS3)
-  message("        Compile ns-3 ................: yes (path: ${NS3_PATH})")
+  message("        Compile ns-3 ................: ON (path: ${NS3_PATH})")
 else()
 else()
-  message("        Compile ns-3 ................: NO  (hint: ${NS3_HINT})")
+  message("        Compile ns-3 ................: OFF  (hint: ${NS3_HINT})")
 endif()
 
 endif()
 
-if (${Java_FOUND})
-  message("        Compile Java ................: yes")
-  message("          Native lib in jar .........: ${enable_lib_in_jar}")
-else()
-  message("        Compile Java ................: NO")
-endif()
 if(pybind11_FOUND)
   message("        Compile Python bindings .....: ${enable_python}")
   message("          module ....................: ${PYTHON_MODULE_PREFIX}simgrid${PYTHON_MODULE_EXTENSION}")
 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()
 else()
-  message("        Compile Python bindings .....: NO (disabled, or pybind11 not found)")
+  message("        Compile Python bindings .....: OFF (disabled, or pybind11 not found)")
+endif()
+if(SIMGRID_HAVE_EIGEN3)
+  message("        Eigen3 library ..............: ${EIGEN3_VERSION_STRING} in ${EIGEN3_INCLUDE_DIR}")
+else()
+  message("        Eigen3 library ..............: not found (EIGEN3_HINT='${EIGEN3_HINT}')")
+endif()
+if(SIMGRID_HAVE_JSON)
+  message("        JSON library ................: ${nlohmann_json_VERSION} in ${NLOHMANN_JSON_INCLUDE_DIR}")
+else()
+  message("        JSON library ................: not found (nlohmann_json_HINT='${nlohmann_json_HINT}')")
 endif()
 endif()
-message("        Compile Lua .................: ${SIMGRID_HAVE_LUA}")
 message("        Compile Smpi ................: ${HAVE_SMPI}")
 message("          Smpi fortran ..............: ${SMPI_FORTRAN}")
 message("        Compile Smpi ................: ${HAVE_SMPI}")
 message("          Smpi fortran ..............: ${SMPI_FORTRAN}")
-message("          MPICH3 testsuite ..........: ${enable_smpi_MPICH3_testsuite}")
+message("          MPICH3 testsuite ..........: ${enable_testsuite_smpi_MPICH3}")
+message("          MBI testsuite .............: ${enable_testsuite_smpi_MBI}")
 message("          Privatization .............: ${HAVE_PRIVATIZATION}")
 message("          Privatization .............: ${HAVE_PRIVATIZATION}")
-message("          PAPI support...............: ${HAVE_PAPI}")
+message("          PAPI support ..............: ${HAVE_PAPI}")
 message("        Compile Boost.Context support: ${HAVE_BOOST_CONTEXTS}")
 message("")
 message("        Compile Boost.Context support: ${HAVE_BOOST_CONTEXTS}")
 message("")
-message("        Maintainer mode .............: ${enable_maintainer_mode}")
-message("        Documentation................: ${enable_documentation}")
 message("        Model checking ..............: ${SIMGRID_HAVE_MC}")
 message("        Model checking ..............: ${SIMGRID_HAVE_MC}")
-message("        Jedule  mode ................: ${SIMGRID_HAVE_JEDULE}")
+message("          MBI testsuite .............: ${enable_testsuite_smpi_MBI}")
+message("          McMini testsuite ..........: ${enable_testsuite_McMini}")
+message("")
+message("        Maintainer mode .............: ${enable_maintainer_mode}")
+message("        Documentation ...............: ${enable_documentation}")
 message("        Graphviz mode ...............: ${HAVE_GRAPHVIZ}")
 message("        Mallocators .................: ${enable_mallocators}")
 message("")
 message("        Graphviz mode ...............: ${HAVE_GRAPHVIZ}")
 message("        Mallocators .................: ${enable_mallocators}")
 message("")
-message("        Simgrid dependencies ........: ${SIMGRID_DEP}")
+message("        SimGrid dependencies ........: ${SIMGRID_DEP}")
 message("")
 
 execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_BINARY_DIR}/Testing/Notes/)
 file(WRITE ${PROJECT_BINARY_DIR}/Testing/Notes/Build  "GIT version : ${GIT_VERSION}\n")
 file(APPEND ${PROJECT_BINARY_DIR}/Testing/Notes/Build "Release     : simgrid-${release_version}\n")
 
 message("")
 
 execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_BINARY_DIR}/Testing/Notes/)
 file(WRITE ${PROJECT_BINARY_DIR}/Testing/Notes/Build  "GIT version : ${GIT_VERSION}\n")
 file(APPEND ${PROJECT_BINARY_DIR}/Testing/Notes/Build "Release     : simgrid-${release_version}\n")
 
-INCLUDE(Dart)