Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
initial support for pybind11: Python bindings of S4U are underway
[simgrid.git] / CMakeLists.txt
index 786e63d..02a0859 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)
@@ -847,6 +847,23 @@ 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)
+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 +955,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}")