Add bp2build for rust_protobuf module

We only supported bp2build for rust_protobuf_host because the non-host toolchain for rust is not checked in yet. aosp/2759750 changed a converted module from rust_protobuf_host to rust_protobuf and broke CI.

This CL adds bp2build support for rust_protobuf but makes the target incompatible with android os for now untilnon-host rust toolchain is checked in.

Bug: 301956497
Test: b build //build/make/tools/aconfig:all --config=android
Change-Id: I739896c79f32674000c2603e394f16860a6fc57d
This commit is contained in:
Vinh Tran 2023-09-25 14:47:19 -04:00 committed by usta
parent b95a8b33be
commit 47faaad254
3 changed files with 39 additions and 4 deletions

View file

@ -27,7 +27,7 @@ func runRustProtobufTestCase(t *testing.T, tc Bp2buildTestCase) {
func registerRustProtobufModuleTypes(ctx android.RegistrationContext) {
ctx.RegisterModuleType("rust_protobuf_host", rust.RustProtobufHostFactory)
ctx.RegisterModuleType("rust_protobuf", rust.RustProtobufHostFactory)
}
func TestRustProtobufHostTestCase(t *testing.T) {
@ -58,3 +58,32 @@ rust_protobuf_host {
},
)
}
func TestRustProtobufTestCase(t *testing.T) {
runRustProtobufTestCase(t, Bp2buildTestCase{
Dir: "external/rust/crates/foo",
Blueprint: "",
Filesystem: map[string]string{
"external/rust/crates/foo/src/lib.rs": "",
"external/rust/crates/foo/src/helper.rs": "",
"external/rust/crates/foo/Android.bp": `
rust_protobuf {
name: "libfoo",
crate_name: "foo",
protos: ["src/foo.proto"],
bazel_module: { bp2build_available: true },
}
`,
},
ExpectedBazelTargets: []string{
makeBazelTargetHostOrDevice("proto_library", "libfoo_proto", AttrNameToString{
"srcs": `["src/foo.proto"]`,
}, android.HostSupported),
makeBazelTargetHostOrDevice("rust_proto_library", "libfoo", AttrNameToString{
"crate_name": `"foo"`,
"deps": `[":libfoo_proto"]`,
}, android.HostSupported),
},
},
)
}

View file

@ -305,7 +305,11 @@ func protoLibraryBp2build(ctx android.Bp2buildMutatorContext, m *Module) {
},
}
ctx.CreateBazelTargetModule(
// TODO(b/295918553): Remove androidRestriction after rust toolchain for android is checked in.
var androidRestriction bazel.BoolAttribute
androidRestriction.SetSelectValue(bazel.OsConfigurationAxis, "android", proptools.BoolPtr(false))
ctx.CreateBazelTargetModuleWithRestrictions(
bazel.BazelTargetModuleProperties{
Rule_class: "proto_library",
},
@ -317,9 +321,10 @@ func protoLibraryBp2build(ctx android.Bp2buildMutatorContext, m *Module) {
android.BazelLabelForModuleSrc(ctx, protoFiles),
),
},
androidRestriction,
)
ctx.CreateBazelTargetModule(
ctx.CreateBazelTargetModuleWithRestrictions(
bazel.BazelTargetModuleProperties{
Rule_class: "rust_proto_library",
Bzl_load_location: "@rules_rust//proto/protobuf:defs.bzl",
@ -333,5 +338,6 @@ func protoLibraryBp2build(ctx android.Bp2buildMutatorContext, m *Module) {
},
Deps: protoDeps,
},
androidRestriction,
)
}

View file

@ -1853,7 +1853,7 @@ func (m *Module) ConvertWithBp2build(ctx android.Bp2buildMutatorContext) {
procMacroBp2build(ctx, m)
} else if ctx.ModuleType() == "rust_binary_host" {
binaryBp2build(ctx, m)
} else if ctx.ModuleType() == "rust_protobuf_host" {
} else if ctx.ModuleType() == "rust_protobuf_host" || ctx.ModuleType() == "rust_protobuf" {
protoLibraryBp2build(ctx, m)
} else {
ctx.MarkBp2buildUnconvertible(bp2build_metrics_proto.UnconvertedReasonType_TYPE_UNSUPPORTED, "")