diff --git a/BUILD b/BUILD index 1a36e6d1176..cb286132203 100644 --- a/BUILD +++ b/BUILD @@ -1,12 +1,11 @@ load("@bazel_skylib//rules:common_settings.bzl", "string_flag") -load("@bazel_skylib//rules:copy_file.bzl", "copy_file") load("@bazel_skylib//rules:write_file.bzl", "write_file") load("@hedron_compile_commands//:refresh_compile_commands.bzl", "refresh_compile_commands") load("@repo_license//:license.bzl", "REPO_LICENSE") -load("@rules_proto//proto:defs.bzl", "proto_library") load("@rules_uv//uv:pip.bzl", "pip_compile") load("@rules_uv//uv:venv.bzl", "create_venv") load("//bazel/rules:copy_to_directory.bzl", "copy_to_directory") +load("//bazel/rules:proto.bzl", "proto_library_as") exports_files( [ @@ -196,33 +195,17 @@ create_venv( }), ) -copy_file( - name = "_cmc_config_proto", - src = "//non-free/packages/cmc-protocols/protocols:cmc_config/config.proto", - out = "cmc_proto/config.proto", -) - -copy_file( - name = "_cmc_cycletime_proto", - src = "//non-free/packages/cmc-protocols/protocols:cmc_config/cycletime.proto", - out = "cmc_proto/cycletime.proto", -) - -copy_file( - name = "_cmc_state_proto", - src = "//non-free/packages/cmc-protocols/protocols:cmc_config/state.proto", - out = "cmc_proto/state.proto", -) - -proto_library( +proto_library_as( name = "cycletime_proto", - srcs = ["cmc_proto/cycletime.proto"], + as_proto = "cmc_proto/cycletime.proto", + proto = "//non-free/packages/cmc-protocols/protocols:cmc_config/cycletime.proto", visibility = ["//visibility:public"], ) -proto_library( +proto_library_as( name = "config_proto", - srcs = ["cmc_proto/config.proto"], + as_proto = "cmc_proto/config.proto", + proto = "//non-free/packages/cmc-protocols/protocols:cmc_config/config.proto", visibility = ["//visibility:public"], deps = [ ":cycletime_proto", @@ -231,9 +214,10 @@ proto_library( ], ) -proto_library( +proto_library_as( name = "state_proto", - srcs = ["cmc_proto/state.proto"], + as_proto = "cmc_proto/state.proto", + proto = "//non-free/packages/cmc-protocols/protocols:cmc_config/state.proto", visibility = ["//visibility:public"], deps = [ ":cycletime_proto", diff --git a/bazel/rules/proto.bzl b/bazel/rules/proto.bzl index faa058c844c..be737bffdf5 100644 --- a/bazel/rules/proto.bzl +++ b/bazel/rules/proto.bzl @@ -1,3 +1,5 @@ +load("@bazel_skylib//rules:copy_file.bzl", _copy_file = "copy_file") +load("@rules_proto//proto:defs.bzl", _proto_library = "proto_library") load( "@rules_proto_grpc//:defs.bzl", "ProtoPluginInfo", @@ -8,6 +10,23 @@ load( load("@rules_python//python:defs.bzl", _py_library = "py_library") load("@rules_python//python:proto.bzl", _py_proto_library = "py_proto_library") +def proto_library_as(name, proto, as_proto, **kwargs): + """Macro to create a proto_library after moving the proto to a different path. + + This avoids errors such as + "Error in fail: Cannot generate Python code for a .proto whose path contains '-'" + + Args: + name: the name of the target. + proto: the proto file. + as_proto: new path to the proto file under the current directory. + **kwargs: arguments forwarded to the proto_library. + + """ + name_cp = name + "_cp" + _copy_file(name = name_cp, src = proto, out = as_proto) + _proto_library(name = name, srcs = [as_proto], **kwargs) + py_proto_compile = rule( implementation = proto_compile_impl, attrs = dict(