Clone this repo:
  1. d5f6a11 ci: enable examples/embed test on macos runners by Mizux Seiha · 7 weeks ago upstream/master v3.0.1
  2. 9d8c6b4 pybind_library_test: fix PYTHONHOME setup by Corentin Le Molgat · 7 weeks ago
  3. 6a29558 bazel: update MODULE.bazel by Mizux Seiha · 7 weeks ago
  4. 4632727 example: improve basic test by Corentin Le Molgat · 7 weeks ago
  5. ad746f3 use cc_binary to generate .pyd instead of copy file by Mizux Seiha · 7 weeks ago

Bazel extensions for pybind11

Github-CI:

OS \ Build systemBazel
Linux (amd64)Build Status
MacOS (amd64)Build Status
MacOS (arm64)Build Status
Windows (amd64)Build Status

Provided rules:

  • pybind_extension: Builds a python extension, automatically adding the required build flags and pybind11 dependencies. It defines a 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.

To embed Python, add @rules_python//python/cc:current_py_cc_libs as a dependency to your cc_binary.

Installation

In your WORKSPACE file:

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

Then, in your BUILD file:

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

Bzlmod

In your MODULE.bazel file:

bazel_dep(name = "pybind11_bazel", version = "<version>")

Usage in your BUILD file is as described previously.