Rust protobuf 2->3: Update build system
tldr: remove protobuf2 from Android Rust and upgrade everything to pb3. These commits update: - The grpcio rust crate to use protobuf 3 - The build system to always use the new libprotobuf (pb3) instead of the _deprecated variant (for pb2); they also force-enable libprotobuf everywhere, ignoring the use_protobuf3 flag, removes the tests related to pb2 - The following modules, which required syntax changes: -- packages/modules/Bluetooth -- device/google/cuttlefish -- vendor/auto Bug: 308790516 Test: m rust Ignore-AOSP-First: must be done in main to upgrade cuttlefish+vendor with the rest all at once (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:7d0783ce22b3d7d369786d4b16067c79c033185b) Merged-In: I1d07c433aca41ccfe2e710821cf930c413dc12d6 Change-Id: I1d07c433aca41ccfe2e710821cf930c413dc12d6
This commit is contained in:
parent
a4a923019d
commit
28216dbe8d
3 changed files with 4 additions and 82 deletions
|
@ -59,6 +59,7 @@ type ProtobufProperties struct {
|
|||
|
||||
// Use protobuf version 3.x. This will be deleted once we migrate all current users
|
||||
// of protobuf off of 2.x.
|
||||
// ludovicb@: DEPRECATED, to be removed
|
||||
Use_protobuf3 *bool
|
||||
|
||||
// List of exported include paths containing proto files for dependent rust_protobuf modules.
|
||||
|
@ -77,10 +78,6 @@ type protobufDecorator struct {
|
|||
protoFlags android.ProtoFlags
|
||||
}
|
||||
|
||||
func (proto *protobufDecorator) useProtobuf3() bool {
|
||||
return Bool(proto.Properties.Use_protobuf3)
|
||||
}
|
||||
|
||||
func (proto *protobufDecorator) GenerateSource(ctx ModuleContext, deps PathDeps) android.Path {
|
||||
var protoFlags android.ProtoFlags
|
||||
var grpcProtoFlags android.ProtoFlags
|
||||
|
@ -90,12 +87,7 @@ func (proto *protobufDecorator) GenerateSource(ctx ModuleContext, deps PathDeps)
|
|||
protoFiles := android.PathsForModuleSrc(ctx, proto.Properties.Protos)
|
||||
grpcFiles := android.PathsForModuleSrc(ctx, proto.Properties.Grpc_protos)
|
||||
|
||||
// For now protobuf2 (the deprecated version) remains the default. This will change in the
|
||||
// future as we update the various users.
|
||||
protoPluginPath := ctx.Config().HostToolPath(ctx, "protoc-gen-rust-deprecated")
|
||||
if proto.useProtobuf3() == true {
|
||||
protoPluginPath = ctx.Config().HostToolPath(ctx, "protoc-gen-rust")
|
||||
}
|
||||
protoPluginPath := ctx.Config().HostToolPath(ctx, "protoc-gen-rust")
|
||||
|
||||
commonProtoFlags = append(commonProtoFlags, defaultProtobufFlags...)
|
||||
commonProtoFlags = append(commonProtoFlags, proto.Properties.Proto_flags...)
|
||||
|
@ -219,13 +211,7 @@ func (proto *protobufDecorator) genModFileContents() string {
|
|||
lines = append(
|
||||
lines,
|
||||
"pub mod empty {",
|
||||
" pub use protobuf::well_known_types::Empty;",
|
||||
"}",
|
||||
"pub mod wrappers {",
|
||||
" pub use protobuf::well_known_types::{",
|
||||
" DoubleValue, FloatValue, Int64Value, UInt64Value, Int32Value, UInt32Value,",
|
||||
" BoolValue, StringValue, BytesValue",
|
||||
" };",
|
||||
" pub use protobuf::well_known_types::empty::Empty;",
|
||||
"}")
|
||||
}
|
||||
|
||||
|
@ -238,20 +224,10 @@ func (proto *protobufDecorator) SourceProviderProps() []interface{} {
|
|||
|
||||
func (proto *protobufDecorator) SourceProviderDeps(ctx DepsContext, deps Deps) Deps {
|
||||
deps = proto.BaseSourceProvider.SourceProviderDeps(ctx, deps)
|
||||
useProtobuf3 := proto.useProtobuf3()
|
||||
if useProtobuf3 == true {
|
||||
deps.Rustlibs = append(deps.Rustlibs, "libprotobuf")
|
||||
} else {
|
||||
deps.Rustlibs = append(deps.Rustlibs, "libprotobuf_deprecated")
|
||||
}
|
||||
deps.Rustlibs = append(deps.Rustlibs, "libprotobuf")
|
||||
deps.HeaderLibs = append(deps.SharedLibs, proto.Properties.Header_libs...)
|
||||
|
||||
if len(proto.Properties.Grpc_protos) > 0 {
|
||||
if useProtobuf3 == true {
|
||||
ctx.PropertyErrorf("protos", "rust_protobuf with grpc_protos defined must currently use "+
|
||||
"`use_protobuf3: false,` in the Android.bp file. This is temporary until the "+
|
||||
"grpcio crate is updated to use the current version of the protobuf crate.")
|
||||
}
|
||||
deps.Rustlibs = append(deps.Rustlibs, "libgrpcio", "libfutures")
|
||||
deps.HeaderLibs = append(deps.HeaderLibs, "libprotobuf-cpp-full")
|
||||
}
|
||||
|
|
|
@ -21,54 +21,6 @@ import (
|
|||
"android/soong/android"
|
||||
)
|
||||
|
||||
func TestRustProtobuf(t *testing.T) {
|
||||
ctx := testRust(t, `
|
||||
rust_protobuf {
|
||||
name: "librust_proto",
|
||||
protos: ["buf.proto", "proto.proto"],
|
||||
crate_name: "rust_proto",
|
||||
source_stem: "buf",
|
||||
shared_libs: ["libfoo_shared"],
|
||||
static_libs: ["libfoo_static"],
|
||||
}
|
||||
cc_library_shared {
|
||||
name: "libfoo_shared",
|
||||
export_include_dirs: ["shared_include"],
|
||||
}
|
||||
cc_library_static {
|
||||
name: "libfoo_static",
|
||||
export_include_dirs: ["static_include"],
|
||||
}
|
||||
`)
|
||||
// Check that libprotobuf is added as a dependency.
|
||||
librust_proto := ctx.ModuleForTests("librust_proto", "android_arm64_armv8-a_dylib").Module().(*Module)
|
||||
if !android.InList("libprotobuf_deprecated", librust_proto.Properties.AndroidMkDylibs) {
|
||||
t.Errorf("libprotobuf_deprecated dependency missing for rust_protobuf (dependency missing from AndroidMkDylibs)")
|
||||
}
|
||||
|
||||
// Make sure the correct plugin is being used.
|
||||
librust_proto_out := ctx.ModuleForTests("librust_proto", "android_arm64_armv8-a_source").Output("buf.rs")
|
||||
cmd := librust_proto_out.RuleParams.Command
|
||||
if w := "protoc-gen-rust-deprecated"; !strings.Contains(cmd, w) {
|
||||
t.Errorf("expected %q in %q", w, cmd)
|
||||
}
|
||||
|
||||
// Check exported include directories
|
||||
if w := "-Ishared_include"; !strings.Contains(cmd, w) {
|
||||
t.Errorf("expected %q in %q", w, cmd)
|
||||
}
|
||||
if w := "-Istatic_include"; !strings.Contains(cmd, w) {
|
||||
t.Errorf("expected %q in %q", w, cmd)
|
||||
}
|
||||
|
||||
// Check proto.rs, the second protobuf, is listed as an output
|
||||
librust_proto_outputs := ctx.ModuleForTests("librust_proto", "android_arm64_armv8-a_source").AllOutputs()
|
||||
if android.InList("proto.rs", librust_proto_outputs) {
|
||||
t.Errorf("rust_protobuf is not producing multiple outputs; expected 'proto.rs' in list, got: %#v ",
|
||||
librust_proto_outputs)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRustProtobuf3(t *testing.T) {
|
||||
ctx := testRust(t, `
|
||||
rust_protobuf {
|
||||
|
|
|
@ -132,12 +132,6 @@ func GatherRequiredDepsForTest() string {
|
|||
srcs: ["foo.rs"],
|
||||
host_supported: true,
|
||||
}
|
||||
rust_library {
|
||||
name: "libprotobuf_deprecated",
|
||||
crate_name: "protobuf",
|
||||
srcs: ["foo.rs"],
|
||||
host_supported: true,
|
||||
}
|
||||
rust_library {
|
||||
name: "libgrpcio",
|
||||
crate_name: "grpcio",
|
||||
|
|
Loading…
Reference in a new issue