X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/354b481c19526a34cde110b3cadf49dbde8feec5..54853b1923321ab0bf3bbf337bc8b6736552eb2f:/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index 666520def4..583e482268 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,7 @@ # Build the version number set(SIMGRID_VERSION_MAJOR "3") -set(SIMGRID_VERSION_MINOR "30") +set(SIMGRID_VERSION_MINOR "32") set(SIMGRID_VERSION_PATCH "1") # odd => git branch; even => stable release or released snapshot if(${SIMGRID_VERSION_PATCH} EQUAL "0") @@ -10,6 +10,10 @@ else() set(release_version "${SIMGRID_VERSION_MAJOR}.${SIMGRID_VERSION_MINOR}.${SIMGRID_VERSION_PATCH}") endif() +if(WIN32 OR MINGW) + message(FATAL "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}") @@ -23,6 +27,7 @@ cmake_minimum_required(VERSION 3.5) if(NOT CMAKE_VERSION VERSION_LESS "3.9") cmake_policy(SET CMP0069 NEW) endif() +# once we move >= 3.13, we should use target_link_option in examples/sthread 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) @@ -45,15 +50,15 @@ 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 "5.0") + if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "7.0") message(FATAL_ERROR - "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.") + "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++14 and C11 standards -set(CMAKE_CXX_STANDARD 14) +## 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) @@ -113,9 +118,6 @@ endif() ### SET THE LIBRARY EXTENSION if(APPLE) set(LIB_EXE "dylib") -elseif(WIN32) - set(LIB_EXE "a") - set(BIN_EXE ".exe") else() set(LIB_EXE "so") endif() @@ -172,15 +174,6 @@ if(NOT CMAKE_CROSSCOMPILING AND EXISTS /usr/include/) 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 deactivated. set(SIMGRID_DEP "-lm") @@ -197,9 +190,7 @@ IF(CMAKE_SYSTEM_PROCESSOR MATCHES ".86|AMD64|amd64") set(SIMGRID_PROCESSOR_i686 0) set(SIMGRID_PROCESSOR_x86_64 1) 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") + 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) @@ -227,13 +218,11 @@ set(SIMGRID_HAVE_NS3 0) 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.") + 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() @@ -243,11 +232,11 @@ endif() set(SIMGRID_HAVE_EIGEN3 0) find_package (Eigen3 3.3 CONFIG HINTS ${EIGEN3_HINT}) -if (Eigen3_FOUND) +if (Eigen3_FOUND) set(SIMGRID_HAVE_EIGEN3 1) message(STATUS "Found Eigen3: ${EIGEN3_INCLUDE_DIR}") include_directories(${EIGEN3_INCLUDE_DIR}) - if ("3.3.4" EQUAL EIGEN3_VERSION_STRING AND CMAKE_COMPILER_IS_GNUCC) + 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() @@ -260,10 +249,6 @@ if(enable_msg) set(SIMGRID_HAVE_MSG 1) endif() -if(WIN32) - set(Boost_USE_STATIC_LIBS 1) -endif() - set(HAVE_PAPI 0) if(enable_smpi_papi) include(FindPAPI) @@ -335,10 +320,6 @@ 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") -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() @@ -351,17 +332,14 @@ CHECK_FUNCTION_EXISTS(dlfunc HAVE_DLFUNC) CHECK_FUNCTION_EXISTS(gettimeofday HAVE_GETTIMEOFDAY) CHECK_FUNCTION_EXISTS(nanosleep HAVE_NANOSLEEP) 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(mmap HAVE_MMAP) 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) @@ -372,8 +350,7 @@ else() 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) + message(FATAL_ERROR "Support for model-checking has not been enabled on ${CMAKE_SYSTEM}. Please use a Linux docker to use the model checker.") endif() if(enable_model-checking AND minimal-bindings) @@ -413,6 +390,8 @@ if(enable_model-checking) message(WARNING "FreeBSD + Model-Checking + Java = too much for now. Disabling the Java bindings.") set(enable_java FALSE) endif() + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -gdwarf-4") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -gdwarf-4") else() SET(SIMGRID_HAVE_MC 0) set(HAVE_MMALLOC 0) @@ -430,12 +409,7 @@ endif() if(enable_smpi) SET(HAVE_SMPI 1) - if(WIN32) - message (STATUS "Warning: no support for SMPI automatic privatization on Windows.") - SET(HAVE_PRIVATIZATION 0) - else() - SET(HAVE_PRIVATIZATION 1) - endif() + SET(HAVE_PRIVATIZATION 1) else() SET(HAVE_SMPI 0) endif() @@ -455,27 +429,27 @@ else() 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: 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() - 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() @@ -572,6 +546,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) + 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() @@ -598,12 +573,10 @@ 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 @@ -787,11 +760,7 @@ add_dependencies(tests tests-mc) 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() +include(${CMAKE_HOME_DIRECTORY}/tools/cmake/MakeLib.cmake) if(enable_java) include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Java.cmake) @@ -863,7 +832,7 @@ if(enable_python) string(REGEX REPLACE "^/usr/" "${CMAKE_INSTALL_PREFIX}/" SIMGRID_PYTHON_LIBDIR ${Python3_SITEARCH}) endif("${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr") endif() - install(TARGETS python-bindings + 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).")