| # Protobuf Rust runtime packages. | |
| load("@rules_rust//rust:defs.bzl", "rust_library", "rust_test") | |
| load("@bazel_skylib//rules:common_settings.bzl", "string_flag") | |
| load("@rules_proto//proto:defs.bzl", "proto_lang_toolchain") | |
| package( | |
| default_visibility = ["//src/google/protobuf:__subpackages__"], | |
| ) | |
| rust_library( | |
| name = "protobuf", | |
| srcs = ["protobuf.rs"], | |
| rustc_flags = select({ | |
| ":use_upb_kernel": ["--cfg=upb_kernel"], | |
| "//conditions:default": ["--cfg=cpp_kernel"], | |
| }), | |
| deps = select({ | |
| ":use_upb_kernel": [":protobuf_upb"], | |
| "//conditions:default": [":protobuf_cpp"], | |
| }), | |
| ) | |
| rust_library( | |
| name = "protobuf_upb", | |
| srcs = ["shared.rs"], | |
| rustc_flags = ["--cfg=upb_kernel"], | |
| deps = ["//rust/upb_kernel:upb"], | |
| ) | |
| rust_test( | |
| name = "protobuf_upb_test", | |
| crate = ":protobuf_upb", | |
| rustc_flags = ["--cfg=upb_kernel"], | |
| tags = [ | |
| # TODO(b/270274576): Enable testing on arm once we have a Rust Arm toolchain. | |
| "not_build:arm", | |
| # TODO(b/243126140): Enable tsan once we support sanitizers with Rust. | |
| "notsan", | |
| # TODO(b/243126140): Enable msan once we support sanitizers with Rust. | |
| "nomsan", | |
| ], | |
| ) | |
| rust_library( | |
| name = "protobuf_cpp", | |
| srcs = ["shared.rs"], | |
| rustc_flags = ["--cfg=cpp_kernel"], | |
| deps = ["//rust/cpp_kernel:cpp"], | |
| ) | |
| rust_test( | |
| name = "protobuf_cpp_test", | |
| crate = ":protobuf_cpp", | |
| rustc_flags = ["--cfg=cpp_kernel"], | |
| tags = [ | |
| # TODO(b/270274576): Enable testing on arm once we have a Rust Arm toolchain. | |
| "not_build:arm", | |
| # TODO(b/243126140): Enable tsan once we support sanitizers with Rust. | |
| "notsan", | |
| # TODO(b/243126140): Enable msan once we support sanitizers with Rust. | |
| "nomsan", | |
| ], | |
| ) | |
| # TODO(b/270125787): Move to the right location once rust_proto_library is no longer experimental. | |
| proto_lang_toolchain( | |
| name = "proto_rust_upb_toolchain", | |
| command_line = "--rust_out=experimental-codegen=enabled,kernel=upb:$(OUT)", | |
| progress_message = "Generating Rust proto_library %{label}", | |
| runtime = ":protobuf_upb", | |
| visibility = ["//visibility:public"], | |
| ) | |
| proto_lang_toolchain( | |
| name = "proto_rust_cpp_toolchain", | |
| command_line = "--rust_out=experimental-codegen=enabled,kernel=cpp:$(OUT)", | |
| progress_message = "Generating Rust proto_library %{label}", | |
| runtime = ":protobuf_cpp", | |
| visibility = ["//visibility:public"], | |
| ) | |
| # This flag controls what kernel all Rust Protobufs are using in the current build. | |
| string_flag( | |
| name = "rust_proto_library_kernel", | |
| build_setting_default = "cpp", | |
| values = [ | |
| "upb", | |
| "cpp", | |
| ], | |
| ) | |
| config_setting( | |
| name = "use_upb_kernel", | |
| flag_values = { | |
| ":rust_proto_library_kernel": "upb", | |
| }, | |
| ) |