summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosh Morman <mormjb@gmail.com>2020-04-23 09:45:23 -0400
committerJosh Morman <mormjb@gmail.com>2020-06-04 10:05:47 -0400
commit5322a1ff0066bee025b2ea9af550aad4b461d5e0 (patch)
tree84a82752e6b13ee87504ce00cb42ecf6e1c9428d
parentac45d95b4ee421b1e1a76ba199a490a603c15c6b (diff)
cmake: add GrPybind for making with pybind11
-rw-r--r--cmake/Modules/GrPybind.cmake106
1 files changed, 106 insertions, 0 deletions
diff --git a/cmake/Modules/GrPybind.cmake b/cmake/Modules/GrPybind.cmake
new file mode 100644
index 0000000000..7f3880c759
--- /dev/null
+++ b/cmake/Modules/GrPybind.cmake
@@ -0,0 +1,106 @@
+include(GrPython)
+
+macro(GR_PYBIND_MAKE name updir filter files)
+
+configure_file(${CMAKE_SOURCE_DIR}/docs/doxygen/pydoc_macros.h ${CMAKE_CURRENT_BINARY_DIR} COPYONLY)
+
+pybind11_add_module(${name}_python ${files})
+
+SET(MODULE_NAME ${name})
+if (${name} STREQUAL gr)
+ SET(MODULE_NAME "runtime")
+endif()
+
+if(ENABLE_DOXYGEN)
+ add_custom_command(
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/docstring_status
+ COMMAND python3 ${CMAKE_SOURCE_DIR}/docs/doxygen/update_pydoc.py "sub"
+ "--json_path" ${CMAKE_BINARY_DIR}/docs/doxygen/gnuradio_docstrings.json
+ "--bindings_dir" ${CMAKE_CURRENT_SOURCE_DIR}/docstrings
+ "--output_dir" ${CMAKE_CURRENT_BINARY_DIR}
+ "--filter" ${filter}
+ COMMENT "Adding docstrings into ${name} pybind headers ..."
+ DEPENDS gnuradio_docstrings gnuradio-${MODULE_NAME})
+ add_custom_target(${name}_docstrings ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/docstring_status)
+else(ENABLE_DOXYGEN)
+ add_custom_command(
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/docstring_status
+ COMMAND python3 ${CMAKE_SOURCE_DIR}/docs/doxygen/update_pydoc.py "copy"
+ "--bindings_dir" ${CMAKE_CURRENT_SOURCE_DIR}/docstrings
+ "--output_dir" ${CMAKE_CURRENT_BINARY_DIR}
+ COMMENT "Copying ${name} docstring templates as pybind headers ...")
+ add_custom_target(${name}_docstrings ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/docstring_status)
+endif(ENABLE_DOXYGEN)
+
+target_include_directories(${name}_python PUBLIC
+ ${CMAKE_CURRENT_BINARY_DIR}
+ ${PYTHON_NUMPY_INCLUDE_DIR}
+ ${CMAKE_CURRENT_SOURCE_DIR}/${updir}/lib
+ ${CMAKE_CURRENT_SOURCE_DIR}/${updir}/include
+ ${PYBIND11_INCLUDE_DIR}
+)
+target_link_libraries(${name}_python PUBLIC ${Boost_LIBRARIES} ${PYTHON_LIBRARIES} gnuradio-${MODULE_NAME})
+target_compile_options(${name}_python PRIVATE -Wno-unused-variable) # disable warnings for docstring templates
+add_dependencies(${name}_python ${name}_docstrings)
+
+endmacro(GR_PYBIND_MAKE)
+
+
+macro(GR_PYBIND_MAKE_OOT name updir filter files)
+
+configure_file(${CMAKE_SOURCE_DIR}/docs/doxygen/pydoc_macros.h ${CMAKE_CURRENT_BINARY_DIR} COPYONLY)
+
+pybind11_add_module(${name}_python ${files})
+
+SET(MODULE_NAME ${name})
+if (${name} STREQUAL gr)
+ SET(MODULE_NAME "runtime")
+endif()
+
+if(ENABLE_DOXYGEN)
+
+ add_custom_command(
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/extracted_docstrings.json
+ COMMAND python3 ${CMAKE_SOURCE_DIR}/docs/doxygen/update_pydoc.py "scrape"
+ "--xml_path" ${CMAKE_BINARY_DIR}/docs/doxygen/xml
+ "--json_path" ${CMAKE_CURRENT_BINARY_DIR}/extracted_docstrings.json
+ COMMENT "Scraping generated documentation for docstrings ..."
+ DEPENDS gnuradio-${MODULE_NAME} doxygen_target)
+
+ add_custom_target(
+ extracted_docstrings ALL
+ DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/extracted_docstrings.json
+ )
+
+ add_custom_command(
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/docstring_status
+ COMMAND python3 ${CMAKE_SOURCE_DIR}/docs/doxygen/update_pydoc.py "sub"
+ "--json_path" ${CMAKE_CURRENT_BINARY_DIR}/extracted_docstrings.json
+ "--bindings_dir" ${CMAKE_CURRENT_SOURCE_DIR}/docstrings
+ "--output_dir" ${CMAKE_CURRENT_BINARY_DIR}
+ "--filter" ${filter}
+ COMMENT "Adding docstrings into ${name} pybind headers ..."
+ DEPENDS extracted_docstrings gnuradio-${MODULE_NAME})
+ add_custom_target(${name}_docstrings ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/docstring_status)
+else(ENABLE_DOXYGEN)
+ add_custom_command(
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/docstring_status
+ COMMAND python3 ${CMAKE_SOURCE_DIR}/docs/doxygen/update_pydoc.py "copy"
+ "--bindings_dir" ${CMAKE_CURRENT_SOURCE_DIR}/docstrings
+ "--output_dir" ${CMAKE_CURRENT_BINARY_DIR}
+ COMMENT "Copying ${name} docstring templates as pybind headers ...")
+ add_custom_target(${name}_docstrings ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/docstring_status)
+endif(ENABLE_DOXYGEN)
+
+target_include_directories(${name}_python PUBLIC
+ ${CMAKE_CURRENT_BINARY_DIR}
+ ${PYTHON_NUMPY_INCLUDE_DIR}
+ ${CMAKE_CURRENT_SOURCE_DIR}/${updir}/lib
+ ${CMAKE_CURRENT_SOURCE_DIR}/${updir}/include
+ ${PYBIND11_INCLUDE_DIR}
+)
+target_link_libraries(${name}_python PUBLIC ${Boost_LIBRARIES} ${PYTHON_LIBRARIES} gnuradio-${MODULE_NAME})
+target_compile_options(${name}_python PRIVATE -Wno-unused-variable) # disable warnings for docstring templates
+add_dependencies(${name}_python ${name}_docstrings)
+
+endmacro(GR_PYBIND_MAKE_OOT) \ No newline at end of file