aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Millikin <jmillikin@gmail.com>2022-07-12 23:15:25 +0900
committerGitHub <noreply@github.com>2022-07-12 10:15:25 -0400
commit0dd41e67e91779e413b01ef62e6db632f9016f8f (patch)
tree2b8c249335240e730e0f6653e3693da2c603714b
parentf1cd5229e3e581f2178399f12f76427faf21c5c3 (diff)
downloadbazelbuild-remote-apis-0dd41e67e91779e413b01ef62e6db632f9016f8f.tar.gz
Move language-specific targets to subdirectories. (#220)
* Move language-specific targets for Go and Java to subdirectories. * Add a `cc_grpc_codegen` rule for internal use. * Move language-specific targets for C++ to subdirectories. * Stub out switched_rules_by_language and update README.
-rw-r--r--README.md20
-rw-r--r--WORKSPACE9
-rw-r--r--build/bazel/remote/asset/v1/BUILD34
-rw-r--r--build/bazel/remote/asset/v1/cc/BUILD25
-rw-r--r--build/bazel/remote/asset/v1/go/BUILD22
-rw-r--r--build/bazel/remote/asset/v1/java/BUILD6
-rw-r--r--build/bazel/remote/execution/v2/BUILD36
-rw-r--r--build/bazel/remote/execution/v2/cc/BUILD25
-rw-r--r--build/bazel/remote/execution/v2/go/BUILD23
-rw-r--r--build/bazel/remote/execution/v2/java/BUILD6
-rw-r--r--build/bazel/remote/logstream/v1/BUILD29
-rw-r--r--build/bazel/remote/logstream/v1/cc/BUILD25
-rw-r--r--build/bazel/remote/logstream/v1/go/BUILD17
-rw-r--r--build/bazel/remote/logstream/v1/java/BUILD6
-rw-r--r--build/bazel/semver/BUILD23
-rw-r--r--build/bazel/semver/cc/BUILD6
-rw-r--r--build/bazel/semver/go/BUILD16
-rw-r--r--build/bazel/semver/java/BUILD6
-rw-r--r--internal/BUILD0
-rw-r--r--internal/cc_grpc_library.bzl118
-rw-r--r--repository_rules.bzl119
21 files changed, 341 insertions, 230 deletions
diff --git a/README.md b/README.md
index 01cd318..1d9a81a 100644
--- a/README.md
+++ b/README.md
@@ -82,26 +82,6 @@ packages from that repository in order to generate code using this API. If you
build the repository using the included `BUILD` files, Bazel will fetch the
protobuf compiler and googleapis automatically.
-## Selecting language support
-
-The repository provides a rule that you can use in your `WORKSPACE` file to
-select which languages you are using. This allows you to depend on this
-repository without pulling in Go rules, for instance, if you aren't using Go
-rules.
-
-For instance, if you only use Java in your project, add the following to your
-`WORKSPACE` file:
-
-```starlark
-load("@bazel_remote_apis//:repository_rules.bzl", "switched_rules_by_language")
-switched_rules_by_language(
- name = "bazel_remote_apis_imports",
- java = True,
-)
-```
-
-You can find the complete list of supported languages in `repository_rules.bzl`.
-
## Using the APIs
The repository contains `BUILD` files to build the protobuf library with
diff --git a/WORKSPACE b/WORKSPACE
index b9ca7b0..7ef7349 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -87,14 +87,9 @@ bind(
actual = "@com_github_grpc_grpc//:grpc++",
)
-load("//:repository_rules.bzl", "switched_rules_by_language")
+load("//:remote_apis_deps.bzl", "remote_apis_go_deps")
-switched_rules_by_language(
- name = "bazel_remote_apis_imports",
- cc = True,
- go = True,
- java = True,
-)
+remote_apis_go_deps()
# Needed for the googleapis protos.
http_archive(
diff --git a/build/bazel/remote/asset/v1/BUILD b/build/bazel/remote/asset/v1/BUILD
index aadc6e4..a09bea4 100644
--- a/build/bazel/remote/asset/v1/BUILD
+++ b/build/bazel/remote/asset/v1/BUILD
@@ -1,7 +1,6 @@
package(default_visibility = ["//visibility:public"])
load("@rules_proto//proto:defs.bzl", "proto_library")
-load("@bazel_remote_apis_imports//:imports.bzl", "java_proto_library", "go_library", "go_proto_library", "cc_grpc_library")
licenses(["notice"])
@@ -18,39 +17,22 @@ proto_library(
],
)
-java_proto_library(
+alias(
name = "remote_asset_java_proto",
- deps = [":remote_asset_proto"],
+ actual = "//build/bazel/remote/asset/v1/java:remote_asset_java_proto",
)
-cc_grpc_library(
+alias(
name = "remote_asset_cc_proto",
- srcs = ["remote_asset.proto"],
- proto_only = False,
- use_external = False,
- well_known_protos = True,
- deps = [
- "//build/bazel/remote/execution/v2:remote_execution_cc_proto",
- "@googleapis//:google_api_annotations_cc_proto",
- "@googleapis//:google_api_http_cc_proto",
- "@googleapis//:google_rpc_status_cc_proto",
- ],
+ actual = "//build/bazel/remote/asset/v1/cc:remote_asset_cc_grpc",
)
-go_proto_library(
+alias(
name = "remote_asset_go_proto",
- compilers = ["@io_bazel_rules_go//proto:go_grpc"],
- importpath = "github.com/bazelbuild/remote-apis/build/bazel/remote/asset/v1",
- proto = ":remote_asset_proto",
- deps = [
- "//build/bazel/remote/execution/v2:go_default_library",
- "@go_googleapis//google/api:annotations_go_proto",
- "@go_googleapis//google/rpc:status_go_proto",
- ],
+ actual = "//build/bazel/remote/asset/v1/go:remote_asset_go_proto",
)
-go_library(
+alias(
name = "go_default_library",
- embed = [":remote_asset_go_proto"],
- importpath = "github.com/bazelbuild/remote-apis/build/bazel/remote/asset/v1",
+ actual = "//build/bazel/remote/asset/v1/go:go_default_library",
)
diff --git a/build/bazel/remote/asset/v1/cc/BUILD b/build/bazel/remote/asset/v1/cc/BUILD
new file mode 100644
index 0000000..f4bcddb
--- /dev/null
+++ b/build/bazel/remote/asset/v1/cc/BUILD
@@ -0,0 +1,25 @@
+package(default_visibility = ["//build/bazel/remote/asset/v1:__pkg__"])
+
+load("//internal:cc_grpc_library.bzl", "cc_grpc_codegen")
+
+cc_proto_library(
+ name = "remote_asset_cc_proto",
+ deps = ["//build/bazel/remote/asset/v1:remote_asset_proto"],
+)
+
+cc_grpc_codegen(
+ name = "remote_asset_cc_grpc_codegen",
+ proto = "//build/bazel/remote/asset/v1:remote_asset_proto",
+)
+
+cc_library(
+ name = "remote_asset_cc_grpc",
+ srcs = [":remote_asset_cc_grpc_codegen"],
+ hdrs = [":remote_asset_cc_grpc_codegen"],
+ include_prefix = "build/bazel/remote/asset/v1",
+ strip_include_prefix = "/" + package_name(),
+ deps = [
+ ":remote_asset_cc_proto",
+ "@com_github_grpc_grpc//:grpc++_codegen_proto",
+ ],
+)
diff --git a/build/bazel/remote/asset/v1/go/BUILD b/build/bazel/remote/asset/v1/go/BUILD
new file mode 100644
index 0000000..076422c
--- /dev/null
+++ b/build/bazel/remote/asset/v1/go/BUILD
@@ -0,0 +1,22 @@
+package(default_visibility = ["//build/bazel/remote/asset/v1:__pkg__"])
+
+load("@io_bazel_rules_go//go:def.bzl", "go_library")
+load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library")
+
+go_proto_library(
+ name = "remote_asset_go_proto",
+ compilers = ["@io_bazel_rules_go//proto:go_grpc"],
+ importpath = "github.com/bazelbuild/remote-apis/build/bazel/remote/asset/v1",
+ proto = "//build/bazel/remote/asset/v1:remote_asset_proto",
+ deps = [
+ "//build/bazel/remote/execution/v2:remote_execution_go_proto",
+ "@go_googleapis//google/api:annotations_go_proto",
+ "@go_googleapis//google/rpc:status_go_proto",
+ ],
+)
+
+go_library(
+ name = "go_default_library",
+ embed = [":remote_asset_go_proto"],
+ importpath = "github.com/bazelbuild/remote-apis/build/bazel/remote/asset/v1",
+)
diff --git a/build/bazel/remote/asset/v1/java/BUILD b/build/bazel/remote/asset/v1/java/BUILD
new file mode 100644
index 0000000..6346656
--- /dev/null
+++ b/build/bazel/remote/asset/v1/java/BUILD
@@ -0,0 +1,6 @@
+package(default_visibility = ["//build/bazel/remote/asset/v1:__pkg__"])
+
+java_proto_library(
+ name = "remote_asset_java_proto",
+ deps = ["//build/bazel/remote/asset/v1:remote_asset_proto"],
+)
diff --git a/build/bazel/remote/execution/v2/BUILD b/build/bazel/remote/execution/v2/BUILD
index 5cbf4d2..01f415b 100644
--- a/build/bazel/remote/execution/v2/BUILD
+++ b/build/bazel/remote/execution/v2/BUILD
@@ -1,7 +1,6 @@
package(default_visibility = ["//visibility:public"])
load("@rules_proto//proto:defs.bzl", "proto_library")
-load("@bazel_remote_apis_imports//:imports.bzl", "java_proto_library", "go_library", "go_proto_library", "cc_grpc_library")
licenses(["notice"])
@@ -21,41 +20,22 @@ proto_library(
],
)
-java_proto_library(
+alias(
name = "remote_execution_java_proto",
- deps = [":remote_execution_proto"],
+ actual = "//build/bazel/remote/execution/v2/java:remote_execution_java_proto",
)
-cc_grpc_library(
+alias(
name = "remote_execution_cc_proto",
- srcs = ["remote_execution.proto"],
- proto_only = False,
- use_external = False,
- well_known_protos = True,
- deps = [
- "//build/bazel/semver:semver_cc_proto",
- "@googleapis//:google_api_annotations_cc_proto",
- "@googleapis//:google_api_http_cc_proto",
- "@googleapis//:google_longrunning_operations_cc_proto",
- "@googleapis//:google_rpc_status_cc_proto",
- ],
+ actual = "//build/bazel/remote/execution/v2/cc:remote_execution_cc_grpc",
)
-go_proto_library(
+alias(
name = "remote_execution_go_proto",
- compilers = ["@io_bazel_rules_go//proto:go_grpc"],
- importpath = "github.com/bazelbuild/remote-apis/build/bazel/remote/execution/v2",
- proto = ":remote_execution_proto",
- deps = [
- "//build/bazel/semver:go_default_library",
- "@go_googleapis//google/api:annotations_go_proto",
- "@go_googleapis//google/longrunning:longrunning_go_proto",
- "@go_googleapis//google/rpc:status_go_proto",
- ],
+ actual = "//build/bazel/remote/execution/v2/go:remote_execution_go_proto",
)
-go_library(
+alias(
name = "go_default_library",
- embed = [":remote_execution_go_proto"],
- importpath = "github.com/bazelbuild/remote-apis/build/bazel/remote/execution/v2",
+ actual = "//build/bazel/remote/execution/v2/go:go_default_library",
)
diff --git a/build/bazel/remote/execution/v2/cc/BUILD b/build/bazel/remote/execution/v2/cc/BUILD
new file mode 100644
index 0000000..541b645
--- /dev/null
+++ b/build/bazel/remote/execution/v2/cc/BUILD
@@ -0,0 +1,25 @@
+package(default_visibility = ["//build/bazel/remote/execution/v2:__pkg__"])
+
+load("//internal:cc_grpc_library.bzl", "cc_grpc_codegen")
+
+cc_proto_library(
+ name = "remote_execution_cc_proto",
+ deps = ["//build/bazel/remote/execution/v2:remote_execution_proto"],
+)
+
+cc_grpc_codegen(
+ name = "remote_execution_cc_grpc_codegen",
+ proto = "//build/bazel/remote/execution/v2:remote_execution_proto",
+)
+
+cc_library(
+ name = "remote_execution_cc_grpc",
+ srcs = [":remote_execution_cc_grpc_codegen"],
+ hdrs = [":remote_execution_cc_grpc_codegen"],
+ include_prefix = "build/bazel/remote/execution/v2",
+ strip_include_prefix = "/" + package_name(),
+ deps = [
+ ":remote_execution_cc_proto",
+ "@com_github_grpc_grpc//:grpc++_codegen_proto",
+ ],
+)
diff --git a/build/bazel/remote/execution/v2/go/BUILD b/build/bazel/remote/execution/v2/go/BUILD
new file mode 100644
index 0000000..2f5dd2d
--- /dev/null
+++ b/build/bazel/remote/execution/v2/go/BUILD
@@ -0,0 +1,23 @@
+package(default_visibility = ["//build/bazel/remote/execution/v2:__pkg__"])
+
+load("@io_bazel_rules_go//go:def.bzl", "go_library")
+load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library")
+
+go_proto_library(
+ name = "remote_execution_go_proto",
+ compilers = ["@io_bazel_rules_go//proto:go_grpc"],
+ importpath = "github.com/bazelbuild/remote-apis/build/bazel/remote/execution/v2",
+ proto = "//build/bazel/remote/execution/v2:remote_execution_proto",
+ deps = [
+ "//build/bazel/semver:semver_go_proto",
+ "@go_googleapis//google/api:annotations_go_proto",
+ "@go_googleapis//google/longrunning:longrunning_go_proto",
+ "@go_googleapis//google/rpc:status_go_proto",
+ ],
+)
+
+go_library(
+ name = "go_default_library",
+ embed = [":remote_execution_go_proto"],
+ importpath = "github.com/bazelbuild/remote-apis/build/bazel/remote/execution/v2",
+)
diff --git a/build/bazel/remote/execution/v2/java/BUILD b/build/bazel/remote/execution/v2/java/BUILD
new file mode 100644
index 0000000..e6bb022
--- /dev/null
+++ b/build/bazel/remote/execution/v2/java/BUILD
@@ -0,0 +1,6 @@
+package(default_visibility = ["//build/bazel/remote/execution/v2:__pkg__"])
+
+java_proto_library(
+ name = "remote_execution_java_proto",
+ deps = ["//build/bazel/remote/execution/v2:remote_execution_proto"],
+)
diff --git a/build/bazel/remote/logstream/v1/BUILD b/build/bazel/remote/logstream/v1/BUILD
index ce07b5f..d189c9c 100644
--- a/build/bazel/remote/logstream/v1/BUILD
+++ b/build/bazel/remote/logstream/v1/BUILD
@@ -1,43 +1,30 @@
package(default_visibility = ["//visibility:public"])
load("@rules_proto//proto:defs.bzl", "proto_library")
-load("@bazel_remote_apis_imports//:imports.bzl", "java_proto_library", "go_library", "go_proto_library", "cc_grpc_library")
licenses(["notice"])
proto_library(
name = "remote_logstream_proto",
srcs = ["remote_logstream.proto"],
- deps = [
- ],
)
-java_proto_library(
+alias(
name = "remote_logstream_java_proto",
- deps = [":remote_logstream_proto"],
+ actual = "//build/bazel/remote/logstream/v1/java:remote_logstream_java_proto",
)
-cc_grpc_library(
+alias(
name = "remote_logstream_cc_proto",
- srcs = ["remote_logstream.proto"],
- proto_only = False,
- use_external = False,
- well_known_protos = True,
- deps = [
- ],
+ actual = "//build/bazel/remote/logstream/v1/cc:remote_logstream_cc_grpc",
)
-go_proto_library(
+alias(
name = "remote_logstream_go_proto",
- compilers = ["@io_bazel_rules_go//proto:go_grpc"],
- importpath = "github.com/bazelbuild/remote-apis/build/bazel/remote/logstream/v1",
- proto = ":remote_logstream_proto",
- deps = [
- ],
+ actual = "//build/bazel/remote/logstream/v1/go:remote_logstream_go_proto",
)
-go_library(
+alias(
name = "go_default_library",
- embed = [":remote_logstream_go_proto"],
- importpath = "github.com/bazelbuild/remote-apis/build/bazel/remote/logstream/v1",
+ actual = "//build/bazel/remote/logstream/v1/go:go_default_library",
)
diff --git a/build/bazel/remote/logstream/v1/cc/BUILD b/build/bazel/remote/logstream/v1/cc/BUILD
new file mode 100644
index 0000000..21458e0
--- /dev/null
+++ b/build/bazel/remote/logstream/v1/cc/BUILD
@@ -0,0 +1,25 @@
+package(default_visibility = ["//build/bazel/remote/logstream/v1:__pkg__"])
+
+load("//internal:cc_grpc_library.bzl", "cc_grpc_codegen")
+
+cc_proto_library(
+ name = "remote_logstream_cc_proto",
+ deps = ["//build/bazel/remote/logstream/v1:remote_logstream_proto"],
+)
+
+cc_grpc_codegen(
+ name = "remote_logstream_cc_grpc_codegen",
+ proto = "//build/bazel/remote/logstream/v1:remote_logstream_proto",
+)
+
+cc_library(
+ name = "remote_logstream_cc_grpc",
+ srcs = [":remote_logstream_cc_grpc_codegen"],
+ hdrs = [":remote_logstream_cc_grpc_codegen"],
+ include_prefix = "build/bazel/remote/logstream/v1",
+ strip_include_prefix = "/" + package_name(),
+ deps = [
+ ":remote_logstream_cc_proto",
+ "@com_github_grpc_grpc//:grpc++_codegen_proto",
+ ],
+)
diff --git a/build/bazel/remote/logstream/v1/go/BUILD b/build/bazel/remote/logstream/v1/go/BUILD
new file mode 100644
index 0000000..df86f75
--- /dev/null
+++ b/build/bazel/remote/logstream/v1/go/BUILD
@@ -0,0 +1,17 @@
+package(default_visibility = ["//build/bazel/remote/logstream/v1:__pkg__"])
+
+load("@io_bazel_rules_go//go:def.bzl", "go_library")
+load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library")
+
+go_proto_library(
+ name = "remote_logstream_go_proto",
+ compilers = ["@io_bazel_rules_go//proto:go_grpc"],
+ importpath = "github.com/bazelbuild/remote-apis/build/bazel/remote/logstream/v1",
+ proto = "//build/bazel/remote/logstream/v1:remote_logstream_proto",
+)
+
+go_library(
+ name = "go_default_library",
+ embed = [":remote_logstream_go_proto"],
+ importpath = "github.com/bazelbuild/remote-apis/build/bazel/remote/logstream/v1",
+)
diff --git a/build/bazel/remote/logstream/v1/java/BUILD b/build/bazel/remote/logstream/v1/java/BUILD
new file mode 100644
index 0000000..23f3a2c
--- /dev/null
+++ b/build/bazel/remote/logstream/v1/java/BUILD
@@ -0,0 +1,6 @@
+package(default_visibility = ["//build/bazel/remote/logstream/v1:__pkg__"])
+
+java_proto_library(
+ name = "remote_logstream_java_proto",
+ deps = ["//build/bazel/remote/logstream/v1:remote_logstream_proto"],
+)
diff --git a/build/bazel/semver/BUILD b/build/bazel/semver/BUILD
index 27c0cb2..9663c94 100644
--- a/build/bazel/semver/BUILD
+++ b/build/bazel/semver/BUILD
@@ -1,7 +1,6 @@
package(default_visibility = ["//visibility:public"])
load("@rules_proto//proto:defs.bzl", "proto_library")
-load("@bazel_remote_apis_imports//:imports.bzl", "java_proto_library", "go_library", "go_proto_library", "cc_grpc_library")
licenses(["notice"])
@@ -10,28 +9,22 @@ proto_library(
srcs = ["semver.proto"],
)
-java_proto_library(
+alias(
name = "semver_java_proto",
- deps = [":semver_proto"],
+ actual = "//build/bazel/semver/java:semver_java_proto",
)
-cc_grpc_library(
+alias(
name = "semver_cc_proto",
- srcs = ["semver.proto"],
- proto_only = False,
- use_external = False,
- well_known_protos = True,
- deps = [],
+ actual = "//build/bazel/semver/cc:semver_cc_proto",
)
-go_proto_library(
+alias(
name = "semver_go_proto",
- importpath = "github.com/bazelbuild/remote-apis/build/bazel/semver",
- proto = ":semver_proto",
+ actual = "//build/bazel/semver/go:semver_go_proto",
)
-go_library(
+alias(
name = "go_default_library",
- embed = [":semver_go_proto"],
- importpath = "github.com/bazelbuild/remote-apis/build/bazel/semver",
+ actual = "//build/bazel/semver/go:go_default_library",
)
diff --git a/build/bazel/semver/cc/BUILD b/build/bazel/semver/cc/BUILD
new file mode 100644
index 0000000..ceda8a5
--- /dev/null
+++ b/build/bazel/semver/cc/BUILD
@@ -0,0 +1,6 @@
+package(default_visibility = ["//build/bazel/semver:__pkg__"])
+
+cc_proto_library(
+ name = "semver_cc_proto",
+ deps = ["//build/bazel/semver:semver_proto"],
+)
diff --git a/build/bazel/semver/go/BUILD b/build/bazel/semver/go/BUILD
new file mode 100644
index 0000000..3023c19
--- /dev/null
+++ b/build/bazel/semver/go/BUILD
@@ -0,0 +1,16 @@
+package(default_visibility = ["//build/bazel/semver:__pkg__"])
+
+load("@io_bazel_rules_go//go:def.bzl", "go_library")
+load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library")
+
+go_proto_library(
+ name = "semver_go_proto",
+ importpath = "github.com/bazelbuild/remote-apis/build/bazel/semver",
+ proto = "//build/bazel/semver:semver_proto",
+)
+
+go_library(
+ name = "go_default_library",
+ embed = [":semver_go_proto"],
+ importpath = "github.com/bazelbuild/remote-apis/build/bazel/semver",
+)
diff --git a/build/bazel/semver/java/BUILD b/build/bazel/semver/java/BUILD
new file mode 100644
index 0000000..7148af3
--- /dev/null
+++ b/build/bazel/semver/java/BUILD
@@ -0,0 +1,6 @@
+package(default_visibility = ["//build/bazel/semver:__pkg__"])
+
+java_proto_library(
+ name = "semver_java_proto",
+ deps = ["//build/bazel/semver:semver_proto"],
+)
diff --git a/internal/BUILD b/internal/BUILD
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/internal/BUILD
diff --git a/internal/cc_grpc_library.bzl b/internal/cc_grpc_library.bzl
new file mode 100644
index 0000000..a6e8ab0
--- /dev/null
+++ b/internal/cc_grpc_library.bzl
@@ -0,0 +1,118 @@
+"""Rule for running the gRPC C++ code generator.
+
+This is a simplified and modernised version of the upstream gRPC
+`bazel/cc_grpc_library.bzl` file, which as of release v1.45
+(published 2022-03-19) does not support separating the `proto_library` and
+`cc_proto_library` targets into separate packages or repositories.
+
+The following logic should eventually find a home in upstream gRPC, rules_proto,
+or rules_cc so that the Bazel Remote APIs repository can be further decoupled
+from language-specific concerns.
+"""
+
+load("@com_github_grpc_grpc//bazel:protobuf.bzl", "get_include_protoc_args")
+
+_EXT_PROTO = ".proto"
+_EXT_PROTODEVEL = ".protodevel"
+_EXT_GRPC_HDR = ".grpc.pb.h"
+_EXT_GRPC_SRC = ".grpc.pb.cc"
+
+def _drop_proto_ext(name):
+ if name.endswith(_EXT_PROTO):
+ return name[:-len(_EXT_PROTO)]
+ if name.endswith(_EXT_PROTODEVEL):
+ return name[:-len(_EXT_PROTODEVEL)]
+ fail("{!r} does not end with {!r} or {!r}".format(
+ name,
+ _EXT_PROTO,
+ _EXT_PROTODEVEL,
+ ))
+
+def _proto_srcname(file):
+ """Return the Protobuf source name for a proto_library source file.
+
+ The source name is what the Protobuf compiler uses to identify a .proto
+ source file. It is relative to the compiler's `--proto_path` flag.
+ """
+ ws_root = file.owner.workspace_root
+ if ws_root != "" and file.path.startswith(ws_root):
+ return file.path[len(ws_root) + 1:]
+ return file.short_path
+
+def _cc_grpc_codegen(ctx):
+ """Run the gRPC C++ code generator to produce sources and headers"""
+ proto = ctx.attr.proto[ProtoInfo]
+ proto_srcs = proto.check_deps_sources.to_list()
+ proto_imports = proto.transitive_imports.to_list()
+
+ protoc_out = ctx.actions.declare_directory(ctx.attr.name + "_protoc_out")
+ protoc_outputs = [protoc_out]
+ rule_outputs = []
+
+ for proto_src in proto_srcs:
+ srcname = _drop_proto_ext(_proto_srcname(proto_src))
+ basename = _drop_proto_ext(proto_src.basename)
+
+ out_hdr = ctx.actions.declare_file(basename + _EXT_GRPC_HDR)
+ out_src = ctx.actions.declare_file(basename + _EXT_GRPC_SRC)
+
+ protoc_out_prefix = protoc_out.basename
+ protoc_out_hdr = ctx.actions.declare_file(
+ "{}/{}".format(protoc_out_prefix, srcname + _EXT_GRPC_HDR),
+ )
+ protoc_out_src = ctx.actions.declare_file(
+ "{}/{}".format(protoc_out_prefix, srcname + _EXT_GRPC_SRC),
+ )
+
+ rule_outputs.extend([out_hdr, out_src])
+ protoc_outputs.extend([protoc_out_hdr, protoc_out_src])
+
+ ctx.actions.expand_template(
+ template = protoc_out_hdr,
+ output = out_hdr,
+ substitutions = {},
+ )
+ ctx.actions.expand_template(
+ template = protoc_out_src,
+ output = out_src,
+ substitutions = {},
+ )
+
+ plugin = ctx.executable._protoc_gen_grpc
+ protoc_args = ctx.actions.args()
+ protoc_args.add("--plugin", "protoc-gen-grpc=" + plugin.path)
+ protoc_args.add("--grpc_out", protoc_out.path)
+
+ protoc_args.add_all(get_include_protoc_args(proto_imports))
+ protoc_args.add_all(proto_srcs, map_each = _proto_srcname)
+
+ ctx.actions.run(
+ executable = ctx.executable._protoc,
+ arguments = [protoc_args],
+ inputs = proto_srcs + proto_imports,
+ outputs = protoc_outputs,
+ tools = [plugin],
+ )
+
+ return DefaultInfo(files = depset(rule_outputs))
+
+cc_grpc_codegen = rule(
+ implementation = _cc_grpc_codegen,
+ attrs = {
+ "proto": attr.label(
+ mandatory = True,
+ allow_single_file = True,
+ providers = [ProtoInfo],
+ ),
+ "_protoc_gen_grpc": attr.label(
+ default = Label("@com_github_grpc_grpc//src/compiler:grpc_cpp_plugin"),
+ executable = True,
+ cfg = "host",
+ ),
+ "_protoc": attr.label(
+ default = Label("//external:protocol_compiler"),
+ executable = True,
+ cfg = "host",
+ ),
+ },
+)
diff --git a/repository_rules.bzl b/repository_rules.bzl
index 2b36886..b6174ce 100644
--- a/repository_rules.bzl
+++ b/repository_rules.bzl
@@ -1,125 +1,18 @@
-"""Repository rules and macros which are expected to be called from WORKSPACE
-file of either bazel_remote_apis itself or any third_party repository which
-consumes bazel_remote_apis as its dependency.
-
-This is adapted from
-https://github.com/googleapis/googleapis/blob/master/repository_rules.bzl
-"""
+"""Deprecated stub for compatibility with previous releases."""
load("//:remote_apis_deps.bzl", "remote_apis_go_deps")
-def _switched_rules_impl(ctx):
- disabled_rule_script = """
-def {rule_name}(**kwargs):
- pass
-"""
- enabled_native_rule_script = """
-{rule_name} = {native_rule_name}
-"""
- enabled_rule_script = """
-load("{file_label}", _{rule_name} = "{rule_name}")
-"""
- elabled_rule_scrip_alias = """
-{rule_name} = _{rule_name}
-"""
- load_rules = [] # load() must go before everything else in .bzl files since Bazel 0.25.0
- rules = []
-
- for rule_name, value in ctx.attr.rules.items():
- if not value:
- rules.append(disabled_rule_script.format(rule_name = rule_name))
- elif value.startswith("@"):
- load_rules.append(enabled_rule_script.format(file_label = value, rule_name = rule_name))
- rules.append(elabled_rule_scrip_alias.format(rule_name = rule_name))
- elif value.startswith("native."):
- rules.append(
- enabled_native_rule_script.format(rule_name = rule_name, native_rule_name = value),
- )
- else:
- rules.append(value)
-
- ctx.file("BUILD.bazel", "")
- ctx.file("imports.bzl", "".join(load_rules + rules))
-
-switched_rules = repository_rule(
- implementation = _switched_rules_impl,
- attrs = {
- "rules": attr.string_dict(
- allow_empty = True,
- mandatory = False,
- default = {},
- ),
- },
-)
-
def switched_rules_by_language(
name,
java = False,
go = False,
cc = False,
rules_override = {}):
- """Switches rules in the generated imports.bzl between no-op and the actual
- implementation.
-
- This defines which language-specific rules should be enabled during the
- build. All non-enabled language-specific rules will default to no-op
- implementations.
-
- For example, to use this rule and enable Java and Go rules, add the
- following in the external repository which imports bazel_remote_apis
- repository and its corresponding dependencies:
-
- load("@bazel_remote_apis//:repository_rules.bzl", "switched_rules_by_language")
-
- switched_rules_by_language(
- name = "bazel_remote_apis_imports",
- go = True,
- java = True,
- )
-
- Then import e.g. "go_library" from @bazel_remote_apis_imports in your BUILD files:
-
- load("@bazel_remote_apis_imports//:imports.bzl", "go_library")
-
- Note, for build to work you must also import the language-specific transitive dependencies.
-
- Args:
- name (str): name of a target, is expected to be "bazel_remote_apis_imports".
- java (bool): Enable Java specific rules. False by default.
- go (bool): Enable Go specific rules. False by default.
- cc (bool): Enable C++ specific rules. False by default.
- rules_override (dict): Custom rule overrides (for advanced usage).
- """
-
- rules = {}
-
- rules["java_proto_library"] = _switch(
- java,
- "native.java_proto_library",
- )
-
- rules["go_proto_library"] = _switch(
- go,
- "@io_bazel_rules_go//proto:def.bzl",
- )
- rules["go_library"] = _switch(
- go,
- "@io_bazel_rules_go//go:def.bzl",
- )
-
- rules["cc_grpc_library"] = _switch(
- cc,
- "@com_github_grpc_grpc//bazel:cc_grpc_library.bzl",
- )
-
- rules.update(rules_override)
-
- switched_rules(
- name = name,
- rules = rules,
+ """Deprecated stub for compatibility with previous releases."""
+ print(
+ "The switched_rules_by_language macro is deprecated. Consumers of" +
+ " @bazel_remote_apis should specify per-language dependencies in" +
+ " their own workspace.",
)
if go:
remote_apis_go_deps()
-
-def _switch(enabled, enabled_value):
- return enabled_value if enabled else ""