Initial commit to add embedding support via pybind11_embed target (#15)

* Initial commit to add embedding support via pybind11_embed target

Currently, only MacOS 10.13.3 tested and Python 3 supported

    //python_configure.bzl:
        _find_python_config() function to find the local Python's python-config script
        _get_embed_flags() function to identify the copts and linkopts flags required to embed the Python interpreter.

    //py/BUILD.tpl: cc_library(name= "python_embed") combines python headers with embed flags.

    //pybind11.BUILD: pybind11_embed target that depends on python_embed.

To embed the python interpreter, add "@pybind11//:pybind11_embed" as a dependency
to your cc_binary target that embeds Python.

* Removed unused found_config variable

* Added pybind11_embed instructions

* Updated README to reflect Linux support

* readme formatting fixes

* Improved python_configure.bzl organization
4 files changed
tree: 7c678be6d9707e9bb71380cc205f433486e7e997
  1. py/
  2. AUTHORS
  3. BUILD
  4. build_defs.bzl
  5. CONTRIBUTING.md
  6. LICENSE
  7. pybind11.BUILD
  8. python_configure.bzl
  9. README.md
README.md

Bazel extensions for pybind11

Provided rules:

  • pybind_extension: Builds a python extension, automatically adding the required build flags and pybind11 dependencies. It defines a *.so target which can be included as a data dependency of a py_* target.
  • pybind_library: Builds a C++ library, automatically adding the required build flags and pybind11 dependencies. This library can then be used as a dependency of a pybind_extension. The arguments match a cc_library.
  • pybind_library_test: Builds a C++ test for a pybind_library. The arguments match a cc_test.

To test a pybind_extension, the most common approach is to write the test in python and use the standard py_test build rule.

Provided targets:

  • @pybind11//:pybind11_embed: Automatically adds required build flags to embed Python. Add as a dependency to your cc_binary.

    @pybind11//:pybind11_embed currently supports Python 3 MacOS/Ubuntu/Debian environments:

    • pyenv
    • pipenv
    • virtualenv

    If pybind11_embed doesn't work with your embedded Python project, add @pybind11 as a dependency to your cc_binary and follow the instructions for manually retrieving the build flags.

Installation

In your WORKSPACE file:

http_archive(
  name = "pybind11_bazel",
  strip_prefix = "pybind11_bazel-<stable-commit>",
  urls = ["https://github.com/pybind/pybind11_bazel/archive/<stable-commit>.zip"],
)
# We still require the pybind library.
http_archive(
  name = "pybind11",
  build_file = "@pybind11_bazel//:pybind11.BUILD",
  strip_prefix = "pybind11-<stable-version>",
  urls = ["https://github.com/pybind/pybind11/archive/v<stable-version>.tar.gz"],
)
load("@pybind11_bazel//:python_configure.bzl", "python_configure")
python_configure(name = "local_config_python")

Then, in your BUILD file:

load("@pybind11_bazel//:build_defs.bzl", "pybind_extension")