Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
we cannot use PYBIND11 without PYTHONLIBS
[simgrid.git] / CMakeLists.txt
index 3d9417b..c8cbaee 100644 (file)
@@ -139,7 +139,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 +254,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")
@@ -847,6 +847,26 @@ 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)
+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 -Wno-attributes)
+    set_source_files_properties(src/bindings/python/simgrid_python.cpp PROPERTIES COMPILE_FLAGS -std=gnu++14)
+    target_link_libraries(simgrid_python PUBLIC simgrid)
+    set_target_properties(simgrid_python PROPERTIES LIBRARY_OUTPUT_NAME simgrid)
+  else()
+    message(FATAL_ERROR "Please install pybind11-dev to build the Python bindings (or disable that option).")
+  endif()
+endif()
+
 ### Make tests
 if(enable_memcheck_xml)
   set(enable_memcheck true)
@@ -938,6 +958,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}")