Skip to content

Commit

Permalink
build: use bazel to install orjson (#1)
Browse files Browse the repository at this point in the history
  • Loading branch information
garymm authored and aminya committed Sep 5, 2023
1 parent 4b42634 commit 8c2d310
Show file tree
Hide file tree
Showing 6 changed files with 105 additions and 7 deletions.
47 changes: 45 additions & 2 deletions WORKSPACE
Original file line number Diff line number Diff line change
@@ -1,8 +1,51 @@
# This file existed originally to enable quick local development via local_repository.
# See ./ImplementationReadme.md for details on local development.
# Why? local_repository didn't work without a WORKSPACE, and new_local_repository required overwriting the BUILD file (as of Bazel 5.0).
# See ./ImplementationReadme.md for details on local development.
# Why? local_repository didn't work without a WORKSPACE, and new_local_repository required overwriting the BUILD file (as of Bazel 5.0).

workspace(name = "hedron_compile_commands")

load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

# TODO(cpsauer): move everything above hedron_compile_commands_setup() into setup macros.
BAZEL_SKYLIB_VERSION = "1.4.2"

http_archive(
name = "bazel_skylib",
sha256 = "66ffd9315665bfaafc96b52278f57c7e2dd09f5ede279ea6d39b2be471e7e3aa",
urls = [
"https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/{0}/bazel-skylib-{0}.tar.gz".format(BAZEL_SKYLIB_VERSION),
"https://github.com/bazelbuild/bazel-skylib/releases/download/{0}/bazel-skylib-{0}.tar.gz".format(BAZEL_SKYLIB_VERSION),
],
)

http_archive(
name = "rules_python",
sha256 = "84aec9e21cc56fbc7f1335035a71c850d1b9b5cc6ff497306f84cced9a769841",
strip_prefix = "rules_python-0.23.1",
url = "https://github.com/bazelbuild/rules_python/releases/download/0.23.1/rules_python-0.23.1.tar.gz",
)

load("@rules_python//python:repositories.bzl", "python_register_toolchains")

python_register_toolchains(
name = "python_toolchain",
python_version = "3.11",
)

# For re-generating python_requirements_lock.bzl:
# * update python_requirements_lock.txt
# * Un-comment the below
# * run `bazel build @pip//...`,
# * cp external/pip/requirements.bzl python_requirements_lock.bzl

# load("@python_toolchain//:defs.bzl", "interpreter")
# load("@rules_python//python:pip.bzl", "pip_parse")
# pip_parse(
# name = "pip",
# python_interpreter_target = interpreter,
# requirements_lock = "//:python_requirements_lock.txt",
# )

load("@hedron_compile_commands//:workspace_setup.bzl", "hedron_compile_commands_setup")

hedron_compile_commands_setup()
52 changes: 52 additions & 0 deletions python_requirements_lock.bzl
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
"""Starlark representation of locked requirements.
@generated by rules_python pip_parse repository rule
from @//:python_requirements_lock.txt
"""

load("@rules_python//python/pip_install:pip_repository.bzl", "whl_library")

all_requirements = ["@pip_orjson//:pkg"]

all_whl_requirements = ["@pip_orjson//:whl"]

_packages = [("pip_orjson", "orjson==3.9.1")]
_config = {"download_only": False, "enable_implicit_namespace_pkgs": False, "environment": {}, "extra_pip_args": [], "isolated": True, "pip_data_exclude": [], "python_interpreter": "python3", "python_interpreter_target": "@python_toolchain_x86_64-unknown-linux-gnu//:bin/python3", "quiet": True, "repo": "pip", "repo_prefix": "pip_", "timeout": 600}
_annotations = {}

def _clean_name(name):
return name.replace("-", "_").replace(".", "_").lower()

def requirement(name):
return "@pip_" + _clean_name(name) + "//:pkg"

def whl_requirement(name):
return "@pip_" + _clean_name(name) + "//:whl"

def data_requirement(name):
return "@pip_" + _clean_name(name) + "//:data"

def dist_info_requirement(name):
return "@pip_" + _clean_name(name) + "//:dist_info"

def entry_point(pkg, script = None):
if not script:
script = pkg
return "@pip_" + _clean_name(pkg) + "//:rules_python_wheel_entry_point_" + script

def _get_annotation(requirement):
# This expects to parse `setuptools==58.2.0 --hash=sha256:2551203ae6955b9876741a26ab3e767bb3242dafe86a32a749ea0d78b6792f11`
# down to `setuptools`.
name = requirement.split(" ")[0].split("=")[0].split("[")[0]
return _annotations.get(name)

def install_deps(**whl_library_kwargs):
whl_config = dict(_config)
whl_config.update(whl_library_kwargs)
for name, requirement in _packages:
whl_library(
name = name,
requirement = requirement,
annotation = _get_annotation(requirement),
**whl_config
)
1 change: 1 addition & 0 deletions python_requirements_lock.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
orjson==3.9.1
3 changes: 2 additions & 1 deletion refresh_compile_commands.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -52,11 +52,11 @@ refresh_compile_commands(
```
"""


########################################
# Implementation

load("@bazel_tools//tools/cpp:toolchain_utils.bzl", "find_cpp_toolchain")
load("@rules_python//python:defs.bzl", "py_binary")

def refresh_compile_commands(
name,
Expand Down Expand Up @@ -99,6 +99,7 @@ def refresh_compile_commands(
script_name,
],
imports = [''], # Allows binary to import templated script, even if this macro is being called inside a sub package. See https://github.com/hedronvision/bazel-compile-commands-extractor/issues/137
deps = ["@pip_orjson//:pkg"],
**kwargs
)

Expand Down
Empty file added requirements.bzl
Empty file.
9 changes: 5 additions & 4 deletions workspace_setup.bzl
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
"""Workspace setup macros."""

# Do not change the filename; it is part of the user interface.

load("//:python_requirements_lock.bzl", install_python_deps = "install_deps")

def hedron_compile_commands_setup():
"""Set up a WORKSPACE to have hedron_compile_commands used within it."""

# Unified setup for users' WORKSPACES and this workspace when used standalone.
# See invocations in:
# README.md (for users)
# WORKSPACE (for working on this repo standalone)

# Currently nothing to do -> no-op.
# So why is this even here? Enables future expansion (e.g to add transitive dependencies) without changing the user interface.
pass
install_python_deps()

0 comments on commit 8c2d310

Please sign in to comment.