Skip to content

build: use bazel to install orjson #1

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jun 17, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
4 changes: 2 additions & 2 deletions 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 All @@ -80,7 +80,7 @@ def refresh_compile_commands(
# Generate runnable python script from template
script_name = name + ".py"
_expand_template(name = script_name, labels_to_flags = targets, exclude_headers = exclude_headers, exclude_external_sources = exclude_external_sources, **kwargs)
native.py_binary(name = name, srcs = [script_name], **kwargs)
py_binary(name = name, srcs = [script_name], deps = ["@pip_orjson//:pkg"], **kwargs)

def _expand_template_impl(ctx):
"""Inject targets of interest into refresh.template.py, and set it up to be run."""
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()