diff options
-rw-r--r-- | cmake/Modules/GrPybind.cmake | 106 |
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 |