X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/26a6811b6e54b4a9d6274725ca376dbf979972d4..d84590a56d4bbb4ade4416d4bd7f19acdb7dd621:/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index 786e63d830..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) @@ -409,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) @@ -847,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) @@ -938,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}")