X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/4a8bc21517c2e7759a0036d879338f84ed6bf56e..d84590a56d4bbb4ade4416d4bd7f19acdb7dd621:/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index 61416d942e..6c8585475b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -121,11 +121,6 @@ endif() execute_process(COMMAND ${CMAKE_LINKER} -version OUTPUT_VARIABLE LINKER_VERSION ERROR_VARIABLE LINKER_VERSION) string(REGEX MATCH "[0-9].[0-9]*" LINKER_VERSION "${LINKER_VERSION}") -### Set the library providing dlopen -if("${CMAKE_SYSTEM_NAME}" MATCHES "kFreeBSD|Linux") - find_library(DL_LIBRARY dl) -endif() - ### Find programs and paths FIND_PROGRAM(GCOV_PATH gcov) include(FindPerl) @@ -139,7 +134,7 @@ 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).") + message(FATAL_ERROR "Please install Python (version 3 or higher) to compile SimGrid.") endif() SET(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib) @@ -254,7 +249,7 @@ else() endif() endif() -# cmake up to 3.12.3 (at least) does not know about stacktrace components. Inform it. +# 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") @@ -306,20 +301,17 @@ endif() CHECK_INCLUDE_FILE("valgrind/valgrind.h" HAVE_VALGRIND_H) CHECK_INCLUDE_FILE("unistd.h" HAVE_UNISTD_H) -CHECK_INCLUDE_FILE("execinfo.h" HAVE_EXECINFO_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(backtrace HAVE_BACKTRACE) 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(popen HAVE_POPEN) CHECK_FUNCTION_EXISTS(process_vm_readv HAVE_PROCESS_VM_READV) CHECK_FUNCTION_EXISTS(mmap HAVE_MMAP) CHECK_FUNCTION_EXISTS(mremap HAVE_MREMAP) @@ -412,81 +404,7 @@ else() endif() #-------------------------------------------------------------------------------------------------- -### Initialize of CONTEXT THREADS - -set(HAVE_THREAD_CONTEXTS 0) -if(CMAKE_USE_PTHREADS_INIT) - ### Test that we have a way to create semaphores - - set(HAVE_SEM_OPEN 0) - CHECK_LIBRARY_EXISTS(pthread sem_open "" HAVE_SEM_OPEN_LIB) - if(HAVE_SEM_OPEN_LIB) - try_run(semopen_retval semopen_compilable - ${CMAKE_BINARY_DIR} - ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_sem_open.c - LINK_LIBRARIES pthread - COMPILE_OUTPUT_VARIABLE semopen_compilmsg - RUN_OUTPUT_VARIABLE semopen_runmsg) - - if(semopen_compilable) - if(NOT semopen_retval) # error if not 0 - message(STATUS "sem_open is compilable and executable") - set(HAVE_SEM_OPEN 1) - else() - message(STATUS "Warning: sem_open seems compilable but not executable") - message(STATUS "Compilation output: ${semopen_compilmsg}") - message(STATUS "Execution output: ${semopen_runmsg}") - message(STATUS "Exit value: ${semopen_retval}") - endif() - else() - message(STATUS "Warning: sem_open not compilable") - message(STATUS "Compilation output: ${semopen_compilmsg}") - endif() - unset(semopen_compilable) - unset(semopen_retval) - unset(semopen_runmsg) - unset(semopen_compilmsg) - endif() - - set(HAVE_SEM_INIT 0) - if(NOT APPLE) # OS X El Capitan deprecates this function - CHECK_LIBRARY_EXISTS(pthread sem_init "" HAVE_SEM_INIT_LIB) - endif() - if(HAVE_SEM_INIT_LIB) - try_run(seminit_retval seminit_compilable - ${CMAKE_BINARY_DIR} - ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_sem_init.c - LINK_LIBRARIES pthread - COMPILE_OUTPUT_VARIABLE seminit_compilmsg - RUN_OUTPUT_VARIABLE seminit_runmsg) - - if(seminit_compilable) - if(NOT seminit_retval) # error if not 0 - message(STATUS "sem_init is compilable and executable") - set(HAVE_SEM_INIT 1) - else() - message(STATUS "Warning: sem_init seems compilable but not executable") - message(STATUS "Compilation output: ${seminit_compilmsg}") - message(STATUS "Execution output: ${seminit_runmsg}") - message(STATUS "Exit value: ${seminit_retval}") - endif() - else() - message(STATUS "Warning: sem_init not compilable") - message(STATUS "Compilation output: ${seminit_compilmsg}") - endif() - unset(seminit_compilable) - unset(seminit_retval) - unset(seminit_runmsg) - unset(seminit_compilmsg) - endif() - - if(NOT HAVE_SEM_OPEN AND NOT HAVE_SEM_INIT) - message(FATAL_ERROR "Semaphores are not usable (failed to use both sem_open and sem_init), but they are mandatory to threads (you may need to mount /dev).") - endif() - - set(HAVE_THREAD_CONTEXTS 1) - message(STATUS "Support for thread context factory ok.") -endif() +### Check what context backends are available set(HAVE_UCONTEXT_CONTEXTS 0) if(NOT HAVE_UCONTEXT_H) @@ -547,12 +465,6 @@ endif() file(REMOVE test_stackgrowth) #-------------------------------------------------------------------------------------------------- -### check for addr2line -find_path(ADDR2LINE NAMES addr2line PATHS NO_DEFAULT_PATHS) -if(ADDR2LINE) - set(ADDR2LINE "${ADDR2LINE}/addr2line") -endif() - ############### ## GIT version check ## @@ -626,6 +538,7 @@ if(NS3_LIBRARY_PATH) endif() set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}:\${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}\"") set(SMPIMAIN ${libdir}/simgrid/smpimain) +set(SMPIREPLAYMAIN ${libdir}/simgrid/smpireplaymain) configure_file(${CMAKE_HOME_DIRECTORY}/include/smpi/mpif.h.in ${CMAKE_BINARY_DIR}/include/smpi/mpif.h @ONLY) #configure mpif.f90 to build mpi.mod @@ -654,6 +567,7 @@ if(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) 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) @@ -854,6 +768,29 @@ if(enable_java) include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Java.cmake) endif() +# Python binding, generated with pybind11 +set(PYBIND11_CPP_STANDARD -std=c++11) +find_package(pybind11 2.2.0) +if(NOT PYTHONLIBS_FOUND) + set(pybind11_FOUND OFF) +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) + pybind11_add_module(simgrid_python src/bindings/python/simgrid_python.cpp) + set_source_files_properties(src/bindings/python/simgrid_python.cpp PROPERTIES COMPILE_FLAGS -std=c++14) + target_link_libraries(simgrid_python PUBLIC simgrid) + set_target_properties(simgrid_python PROPERTIES LIBRARY_OUTPUT_NAME simgrid) + set_property(TARGET simgrid_python + APPEND PROPERTY INCLUDE_DIRECTORIES "${INTERNAL_INCLUDES}") + else() + message(FATAL_ERROR "Please install pybind11-dev to build the Python bindings (or disable that option).") + endif() +endif() +mark_as_advanced(PYBIND11_PYTHON_VERSION) +mark_as_advanced(pybind11_DIR) + ### Make tests if(enable_memcheck_xml) set(enable_memcheck true) @@ -945,6 +882,12 @@ if (${Java_FOUND}) else() message(" Compile Java ................: NO") endif() +if(pybind11_FOUND) + message(" Compile Python bindings .....: ${enable_python}") + message(" module ....................: ${PYTHON_MODULE_PREFIX}simgrid${PYTHON_MODULE_EXTENSION}") +else() + message(" Compile Python bindings .....: NO (disabled, or pybind11 not found)") +endif() message(" Compile Lua .................: ${SIMGRID_HAVE_LUA}") message(" Compile Smpi ................: ${HAVE_SMPI}") message(" Smpi fortran ..............: ${SMPI_FORTRAN}")