aboutsummaryrefslogtreecommitdiff
path: root/setup.py
Commit message (Collapse)AuthorAge
* Bump oldest supported Python to 3.10, eliminate setuptools-scm (#1842)HEADmainNicholas Junge2024-09-04
| | | | | | | | | | | | | | | | | | | | | * Supply MacOS deployment target to delocate, use build+uv frontend This shaves off multiple minutes from the wheel builds alone. Also revert to trusted publishing for wheel uploads as it is now set up. * Bump oldest supported Python to 3.10, eliminate setuptools-scm The version is now a string again, under the same attribute as it was before. This is a pragmatic decision in order to be able to upload wheels again, possibly directly from main. We could in the future also set the Python version to a development version if we want to avoid accidental uploads of `main`. * Add a note on supported Python versions in the docs Also fixes the setuptools failure observed in the latest CI by pinning to the last version before v73 until the problem is identified and resolved.
* Bump nanobind-bazel to v2.1.0, add stubgen target (#1824)Nicholas Junge2024-07-30
| | | | | | | | | | | Adds a stub file for the `google_benchmark._benchmark` submodule, generated with the new `nanobind_stubgen` rule released in nanobind_bazel v2.1.0. Tweaks the setup.py logic a little bit to package stub files with the rest of the build artifacts. Also explicitly adds the generated stub and marker files to the list of package data artifacts. Co-authored-by: dominic <510002+dmah42@users.noreply.github.com>
* Modernize wheel building job config (#1783)Nicholas Junge2024-04-15
| | | | | | | | | | | | | | | | | | | | It is now possible to build Mac wheels on native machines in Github Actions, so ARM64 Mac wheels are now built and tested on M1 machines. Also, the artifact up-/download was migrated to v4, which made it necessary to upload wheels to unique artifact names, and then later stitch them together again in a subsequent job. The cross-platform Mac build injection in setup.py was removed, since it is no longer necessary. I relanded a monkey-patching of Bazel build files, this time for MODULE.bazel. This is because `rules_python` does not allow running as the root user, which is the case in cibuildwheel+Linux (happens in a Docker container). Since I did not see a quick way of switching to rootless containers, and did not want to hardcode the config change (it can apparently cause cache misses and build failures), I inject the "ignore_root_user_error" flag into the MODULE.bazel file when running in cibuildwheel on Linux.
* Add Python bindings build using bzlmod (#1764)Nicholas Junge2024-03-07
| | | | | | | | | | | | | | | | | | | * Add a bzlmod Python bindings build Uses the newly started `@nanobind_bazel` project to build nanobind extensions. This means that we can drop all in-tree custom build defs and build files for nanobind and the C++ Python headers. Additionally, the temporary WORKSPACE overwrite hack naturally goes away due to the WORKSPACE system being obsolete. * Bump ruff -> v0.3.1, change ruff settings The latest minor releases incurred some formatting and configuration changes, this commit rolls them out. --------- Co-authored-by: dominic <510002+dmah42@users.noreply.github.com>
* Run `pre-commit autoupdate`, fix stale pyproject.toml comments (#1712)Nicholas Junge2023-12-13
| | | | | | | | | | | * Run `pre-commit autoupdate`, fix stale pyproject.toml comments * Set `--enable_bzlmod=false` for the moment Until the newer nanobind tags are pushed to the BCR, it's best to disable bzlmod for the bindings, because the Python CI breaks due to Bazel 7 enabling bzlmod by default. * Remove E203 ignore, add linebreaks to semantically group ruff options
* Fix editable install by unsetting `build_ext.copy_extensions_to_source` (#1710)Nicholas Junge2023-12-07
| | | | | | | | | | | | | | | | | | This method was the culprit for the recent editable install breakage, since it just tries to copy the generated extension file without checking its existence. Since the `BazelExtension` uses a non-standard location to store the build artifacts, calling the copy method fails the build since the extension is not found in the expected location. But, since we already copy the file into the source tree as part of the `BazelExtension.bazel_build` method, it's fine - the extension appears in the right place, and the egg info is generated correctly as well. This method also does not affect the general install, so it solves the editable problem without regressing the fixed install. Co-authored-by: dominic <510002+dmah42@users.noreply.github.com>
* Add pre-commit config and GitHub Actions job (#1688)Nicholas Junge2023-10-30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Add pre-commit config and GitHub Actions job Contains the following hooks: * buildifier - for formatting and linting Bazel files. * mypy, ruff, isort, black - for Python typechecking, import hygiene, static analysis, and formatting. The pylint CI job was changed to be a pre-commit CI job, where pre-commit is bootstrapped via Python. Pylint is currently no longer part of the code checks, but can be re-added if requested. The reason to drop was that it does not play nicely with pre-commit, and lots of its functionality and responsibilities are actually covered in ruff. * Add dev extra to pyproject.toml for development installs * Clarify that pre-commit contains only Python and Bazel hooks * Add one-line docstrings to Bazel modules * Apply buildifier pre-commit fixes to Bazel files * Apply pre-commit fixes to Python files * Supply --profile=black to isort to prevent conflicts * Fix nanobind build file formatting * Add tooling configs to `pyproject.toml` In particular, set line length 80 for all Python files. * Reformat all Python files to line length 80, fix return type annotations Also ignores the `tools/compare.py` and `tools/gbench/report.py` files for mypy, since they emit a barrage of errors which we can deal with later. The errors are mostly related to dynamic classmethod definition.
* Change nanobind linkage to response file approach on macOS (#1638)Nicholas Junge2023-10-24
| | | | | | | | | | | | | * Change nanobind linkage to response file approach This change needs https://github.com/bazelbuild/bazel/pull/18952 to be merged first. Fixes macOS linkage of GBM's nanobind bindings on macOS by supplying a linker response file instead of `-undefined dynamic_lookup`. The latter has since been deprecated on macOS. * Fix bazel_skylib checksum, bump skylib version in MODULE.bazel * Bump Bazel to version 6.4.0 for linker response file support
* Add pyproject.toml file for PEP518 compliance (#1625)Nicholas Junge2023-07-10
| | | | | | | | The newly created `pyproject.toml` contains all static metadata as well as the readme and version as dynamic arguments, to be read by setuptools during the build. What is left in the `setup.py` for now is the custom Bazel extension class, since that is not properly supported yet.
* Switch bindings implementation to `nanobind` (#1526)Nicholas Junge2023-02-06
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * End support for Python 3.7, update cibuildwheel and publish actions Removes Python 3.7 from the support matrix, since it does not support PEP590 vectorcalls. Bumps the `cibuildwheel` and `pypa-publish` actions to their latest available versions respectively. * Add nanobind to the Bazel dependencies, add a BUILD file The build file builds nanobind as a static `cc_library`. Currently, the git SHA points to HEAD, since some necessary features have not been included in a release yet. * Delete pybind11 BUILD file * Switch bindings implementation to nanobind Switches over the binding tool to `nanobind` from `pybind11`. Most changes in the build setup itself were drop-in replacements of existing code changed to nanobind names, no new concepts needed to be implemented. Sets the minimum required macOS to 10.14 for full C++17 support. Also, to avoid ambiguities in Bazel, build for macOS 11 on Mac ARM64. * Use Bazel select for linker options Guards against unknown linker option errors by selecting required linker options for nanobind only on macOS, where they are relevant. Other changes: * Bump cibuildwheel action to v2.12.0 * Bump Bazel for aarch64 linux wheels to 6.0.0 * Remove C++17 flag from build files since it is present in setup.py `bazel build` command * Bump nanobind commit to current HEAD (TBD: Bump to next stable release) * Unbreak Windows builds of nanobind-based bindings Guards compiler options behind a new `select` macro choosing between MSVC and not MSVC. Other changes: * Inject the proper C++17 standard cxxopt in the `setup.py` build command. * Bump nanobind to current HEAD. * Make `macos` a benchmark-wide condition, with public visibility to allow its use in the nanobind BUILD file. * Fall back to `nb::implicitly_convertible` for Counter construction Since `benchmark::Counter` only has a constructor for `double`, the nanobind `nb::init_implicit` template cannot be used. Therefore, to support implicit construction from ints, we fall back to the `nb::implicitly_convertible` template instead.
* Modernize setup.py, extend Python bindings CI (#1535)Nicholas Junge2023-02-03
| | | | | | | | | | | | | | | | | | distutils is deprecated and will be removed in Python 3.12, so this commit modernizes the Python bindings `setup.py` file in order to future-proof the code. On top of this, type hints were added for all of the convenience functions to make static type checking adoption easier in the future, if desired. A context manager was added to temporarily write the Python include path to the Bazel WORKSPACE file - but unlike previously, the WORKSPACE file is reverted to its previous state after the build to not produce changes on every rebuild. Lastly, the Python bindings test matrix was extended to all major platforms to create a more complete picture of the current state of the bindings, especially with regards to upcoming wheel builds.
* Add information for supported Python versions to setup.py (#1502)Nicholas Junge2022-10-18
| | | | | Adds qualifiers for Python 3.9-3.11 indicating them being supported in the Python bindings building. Support for Python 3.6 was removed, so the indicator for Python 3.6 was removed.
* Shut down Bazel gracefully and revert wheel build strategy to job matrix (#1383)Nicholas Junge2022-04-08
| | | | | | | | | This commit adds a `bazel shutdown` command to the setuptools BazelExtension. This has the effect that wheel builds shut down the Bazel server and terminate gracefully after the build, something that was previously an issue on Windows builds. Since the windows-specific `--no-clean` flag option to `pip wheel` becomes unnecessary due to this change, this change has the side-effect that GitHub Actions wheel builds via `cibuildwheel` can now be written as a compact job matrix again, which leads to a lot of deduplicated code in the corresponding workflow file. Lastly, some GitHub-provided actions (checkout, setup-python, upload/download-artifact) were bumped to the latest v3 version.
* Add long description and content type for proper PyPI presentation (#1361)Nicholas Junge2022-03-08
| | | This commit adds the two fields `long_description` and `long_description_content_type` to `setup.py`. These can be used for proper project presentation on the PyPI project page, which is currently a placeholder.
* Fix cross compilation for macOS ARM builds in `cibuildwheel` (#1334)Nicholas Junge2022-01-26
| | | | | | | | | | | | This commit contains a fix for macOS ARM64 wheel buils in Google Benchmark's wheel building CI. Previously, while `cibuildwheel` itself properly identified the need for cross-compilations and produced valid ARM platform wheels, the included shared library containing the Python bindings built by `bazel` was built for x86, resulting in immediate errors upon import. To fix this, logic was added to the setup.py file that adds the "--cpu=darwin_arm64" and "--macos_cpus=arm64" switches to the `bazel build` command if 1) The current system platform is macOS Darwin running on the x86_64 architecture, and 2) The ARCHFLAGS environment variable, set by wheel build systems like conda and cibuildwheel, contains the tag "arm64". This way, bazel correctly sets the target CPU to ARM64, and produces functional wheels for the macOS ARM line of CPUs.
* Fix dependency typo and unpin cibuildwheel version in wheel building … (#1263)Nicholas Junge2021-11-11
| | | | | | | | | | | | | | | | * Fix dependency typo and unpin cibuildwheel version in wheel building action * Move to monolithic build jobs, restrict to x64 architectures As of this commit, all wheel building jobs complete on GitHub Actions. Since some platform-specific options had to be set to fix different types of build problems underway, the build job matrix was unrolled. Still left TODO: * Wheel testing after build (running the Python bindings test) * Emulating bazel on other architectures to build aarch64/i686/ppc64le * Enabling Win32 (this fails due to linker errors). * Add binding test commands for all wheels, set macOSX deployment target to 10.9 * Add instructions for updating Python __version__ variable before release creation
* Bind benchmark builder to Python (#1040)v1.5.2Antoine Prouvost2020-09-11
| | | | | | | | | | | | | | | * Fix setup.py and reformat * Bind benchmark * Add benchmark option to Python * Add Python examples for range, complexity, and thread * Remove invalid multithreading in Python * Bump Python bindings version to 0.2.0 Co-authored-by: Dominic Hamon <dominichamon@users.noreply.github.com>
* Add workflow to exercise bindings (#1041)Dominic Hamon2020-09-10
| | | | | | | * Initial version to try to run python bindings example * python indent issue in setup.py * better naming
* Create pylint.yml (#1039)Dominic Hamon2020-09-09
| | | | | | | | | | | | | | | | | * Create pylint.yml * improve file matching * fix some pylint issues * run on PR and push (force on master only) * more pylint fixes * suppress noisy exit code and filter to fatals * add conan as a dep so the module is importable * fix lint error on unreachable branch
* Rename python bindings package to `google_benchmark`. (#999)Chris Jones2020-07-09
| | | | A few people have complained that `benchmark` is too generic. Also, add Python 3.8.
* Add Python bindings. (#957)Chris Jones2020-05-06
* Add Python bindings. * Add license headers. * Change example to a test. * Add example usage to module docstring.