# 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", }, )