summaryrefslogtreecommitdiff
path: root/rust/protobuf.go
diff options
context:
space:
mode:
author Chih-Hung Hsieh <chh@google.com> 2020-10-01 21:25:05 -0700
committer Chih-Hung Hsieh <chh@google.com> 2020-10-09 13:38:37 -0700
commitc49649c059ffa80433f7789250363728ce1f1608 (patch)
tree341708b4379e07d8ee09396127a3e18ccee05f44 /rust/protobuf.go
parent6682ef42a497e5fdf48d0ade03efd23dbf8379dd (diff)
Use protobuf-codegen default and add mod_stem.rs
* Upgrade to new protobuf-codegen; use its standard default output without local change. * Allow a sourceProvider to have multiple output files. For a stem.proto file, output stem.rs and mod_stem.rs. * New protobuf-codegen option gen_mod_rs always generates output file named "mod.rs". To generate multiple .proto files into the same output directory, we need to rename mod.rs to mod_<stem>.rs. * Instead of using the gen_mod_rs option and renaming mod.rs to mod_<stem>.rs, we generate the same mod_<stem>.rs directly with a simple printf command. Bug: 170256643 Test: atest -c --host --include-subdirs external/crosvm Change-Id: Ia09e41029099a6de4d35c96dbabd9ba5514c9019
Diffstat (limited to 'rust/protobuf.go')
-rw-r--r--rust/protobuf.go15
1 files changed, 11 insertions, 4 deletions
diff --git a/rust/protobuf.go b/rust/protobuf.go
index 897300f19..ebb1c3cb6 100644
--- a/rust/protobuf.go
+++ b/rust/protobuf.go
@@ -61,15 +61,22 @@ func (proto *protobufDecorator) GenerateSource(ctx ModuleContext, deps PathDeps)
}
outDir := android.PathForModuleOut(ctx)
- depFile := android.PathForModuleOut(ctx, proto.BaseSourceProvider.getStem(ctx)+".d")
- outputs := android.WritablePaths{android.PathForModuleOut(ctx, proto.BaseSourceProvider.getStem(ctx)+".rs")}
+ stem := proto.BaseSourceProvider.getStem(ctx)
+ // rust protobuf-codegen output <stem>.rs
+ stemFile := android.PathForModuleOut(ctx, stem+".rs")
+ // add mod_<stem>.rs to import <stem>.rs
+ modFile := android.PathForModuleOut(ctx, "mod_"+stem+".rs")
+ // mod_<stem>.rs is the main/first output file to be included/compiled
+ outputs := android.WritablePaths{modFile, stemFile}
+ depFile := android.PathForModuleOut(ctx, "mod_"+stem+".d")
rule := android.NewRuleBuilder()
android.ProtoRule(ctx, rule, protoFile.Path(), protoFlags, protoFlags.Deps, outDir, depFile, outputs)
+ rule.Command().Text("printf '// @generated\\npub mod %s;\\n' '" + stem + "' >").Output(modFile)
rule.Build(pctx, ctx, "protoc_"+protoFile.Path().Rel(), "protoc "+protoFile.Path().Rel())
- proto.BaseSourceProvider.OutputFile = outputs[0]
- return outputs[0]
+ proto.BaseSourceProvider.OutputFiles = android.Paths{modFile, stemFile}
+ return modFile
}
func (proto *protobufDecorator) SourceProviderProps() []interface{} {