diff options
Diffstat (limited to 'rust/protobuf.go')
-rw-r--r-- | rust/protobuf.go | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/rust/protobuf.go b/rust/protobuf.go index a14ebeaab..c8d2bdaeb 100644 --- a/rust/protobuf.go +++ b/rust/protobuf.go @@ -19,6 +19,9 @@ import ( "strings" "android/soong/android" + "android/soong/bazel" + + "github.com/google/blueprint/proptools" ) var ( @@ -264,5 +267,71 @@ func NewRustProtobuf(hod android.HostOrDeviceSupported) (*Module, *protobufDecor module := NewSourceProviderModule(hod, protobuf, false, false) + android.InitBazelModule(module) + return module, protobuf } + +type rustProtoAttributes struct { + Srcs bazel.LabelListAttribute + Crate_name bazel.StringAttribute + Deps bazel.LabelListAttribute +} + +type protoLibraryAttributes struct { + Srcs bazel.LabelListAttribute +} + +func protoLibraryBp2build(ctx android.Bp2buildMutatorContext, m *Module) { + var protoFiles []string + + for _, propsInterface := range m.sourceProvider.SourceProviderProps() { + if possibleProps, ok := propsInterface.(*ProtobufProperties); ok { + protoFiles = possibleProps.Protos + break + } + } + + protoLibraryName := m.Name() + "_proto" + + protoDeps := bazel.LabelListAttribute{ + Value: bazel.LabelList{ + Includes: []bazel.Label{ + { + Label: ":" + protoLibraryName, + OriginalModuleName: m.Name(), + }, + }, + }, + } + + ctx.CreateBazelTargetModule( + bazel.BazelTargetModuleProperties{ + Rule_class: "proto_library", + }, + android.CommonAttributes{ + Name: protoLibraryName, + }, + &protoLibraryAttributes{ + Srcs: bazel.MakeLabelListAttribute( + android.BazelLabelForModuleSrc(ctx, protoFiles), + ), + }, + ) + + ctx.CreateBazelTargetModule( + bazel.BazelTargetModuleProperties{ + Rule_class: "rust_proto_library", + Bzl_load_location: "@rules_rust//proto/protobuf:defs.bzl", + }, + android.CommonAttributes{ + Name: m.Name(), + }, + &rustProtoAttributes{ + Crate_name: bazel.StringAttribute{ + Value: proptools.StringPtr(m.CrateName()), + }, + Deps: protoDeps, + }, + ) +} |