This PR adds a generator for Python bindings, using pybind11 and libclang. It is intended as a MVP for Python bindings; additional features (e.g. bidirectional bindings to allow overriding of virtual methods from Python) would be good to add in the future.
This isn't 100% ready for merge yet, but it's done enough that I wanted to make a draft PR to start getting eyes on the work. Currently, the generate_bindings.py script can successfully generate pybind11 code for the entirety of robowflex_library, with the following caveats/TODOs which should be resolved prior to merge.
[ ] It doesn't currently recognize and filter out template methods (these are only supported in specific instantiations)
[ ] No support for keyword/default arguments
[ ] generate_bindings could use some cleanup and commenting/documentation
[ ] We don't yet have a solution for generating bindings for external types that robowflex needs, e.g. moveit_msgs::RobotState (which currently blocks fetch_test.py from executing correctly)
[ ] Integration with the build isn't quite right: the extension library isn't installed to Python's search path
[ ] [optional] Should allow multiple modules/a hierarchical structure
[ ] [optional] Should allow combination with manual bindings for special cases
Should consider switching to https://github.com/wjakob/nanobind - it's pybind11 (by the same author), but for C++17 and faster (compile time and run time) as a result.
This PR adds a generator for Python bindings, using
pybind11
andlibclang
. It is intended as a MVP for Python bindings; additional features (e.g. bidirectional bindings to allow overriding of virtual methods from Python) would be good to add in the future.This isn't 100% ready for merge yet, but it's done enough that I wanted to make a draft PR to start getting eyes on the work. Currently, the
generate_bindings.py
script can successfully generatepybind11
code for the entirety ofrobowflex_library
, with the following caveats/TODOs which should be resolved prior to merge.generate_bindings
could use some cleanup and commenting/documentationrobowflex
needs, e.g.moveit_msgs::RobotState
(which currently blocksfetch_test.py
from executing correctly)