summaryrefslogtreecommitdiffstats
path: root/soong
diff options
context:
space:
mode:
authorhscham <hscham@google.com>2020-03-12 16:28:26 +0900
committerGrace Cham <hscham@google.com>2020-04-22 00:26:27 +0000
commitbc0492570ba29b81b5b4b428c27acd481dd9a091 (patch)
tree682194561b299d8c848b409583145a7cfdba6eed /soong
parent649dae672c5a775fd1c78dd02a3f4f8c0fd88012 (diff)
downloadplatform_external_libchrome-bc0492570ba29b81b5b4b428c27acd481dd9a091.tar.gz
platform_external_libchrome-bc0492570ba29b81b5b4b428c27acd481dd9a091.tar.bz2
platform_external_libchrome-bc0492570ba29b81b5b4b428c27acd481dd9a091.zip
libchrome: downgrade mojom types at arc build time
This is to prepare for synchronizing .mojom files with those in chromium/src which are in new syntax. Add the mojom downgrading python script from crrev.com/c/2082513. In soong/bindings_generator.go, define new ModuleFactory executing it and register as new Module generate_mojom_downgraded_files. The change will be cherry-picked to ARC branches to use in Android.bp: downgraded .mojom files are generated from the original .mojom files using the new module, then they would (replace the original .mojom files to) be used as input to generate bindings. Files in old syntax will be output as is. Note that previously, when generating the bindings, it is assumed that the input .mojom files are located under the module's local source directory, which is then given as value of argument depth to mojo/public/tools/bindings/mojom_bindings_generator.py. The mojom_bindings_generator.py computes the relative path (hence output path) accordingly. Since this is no longer true, the source root would now be computed per input .mojom file. Bug: 149070836, chromium:1035484 Test: local build; compare downgraded mojom files and generated bindings Change-Id: I86a6c67c5ae7056f3c9f617a1c5a9c954c10aa0d
Diffstat (limited to 'soong')
-rw-r--r--soong/bindings_generator.go90
1 files changed, 84 insertions, 6 deletions
diff --git a/soong/bindings_generator.go b/soong/bindings_generator.go
index 2c5e3f672..7ff98262e 100644
--- a/soong/bindings_generator.go
+++ b/soong/bindings_generator.go
@@ -12,6 +12,7 @@ import (
)
func init() {
+ android.RegisterModuleType("generate_mojom_downgraded_files", mojomDowngradedFilesFactory)
android.RegisterModuleType("generate_mojom_pickles", mojomPicklesFactory)
android.RegisterModuleType("generate_mojom_headers", mojomHeadersFactory)
android.RegisterModuleType("generate_mojom_srcs", mojomSrcsFactory)
@@ -22,8 +23,19 @@ var (
pctx = android.NewPackageContext("android/soong/external/libchrome")
mojomBindingsGenerator = pctx.HostBinToolVariable("mojomBindingsGenerator", "mojom_bindings_generator")
+ mojomTypesDowngrader = pctx.HostBinToolVariable("mojomTypesDowngrader", "mojom_types_downgrader")
mergeZips = pctx.HostBinToolVariable("mergeZips", "merge_zips")
+ downgradeMojomTypesRule = pctx.StaticRule("downgradeMojomTypesRule", blueprint.RuleParams{
+ Command: `${mojomTypesDowngrader}
+ ${in}
+ --outdir ${outDir}`,
+ CommandDeps: []string{
+ "${mojomTypesDowngrader}",
+ },
+ Description: "Downgrade mojom files $in => $out",
+ }, "outDir")
+
generateMojomPicklesRule = pctx.StaticRule("generateMojomPicklesRule", blueprint.RuleParams{
Command: `${mojomBindingsGenerator}
--use_bundled_pylibs parse
@@ -65,6 +77,72 @@ var (
})
)
+type mojomDowngradedFilesProperties struct {
+ // list of input files
+ Srcs []string
+}
+
+type mojomDowngradedFiles struct {
+ android.ModuleBase
+
+ properties mojomDowngradedFilesProperties
+
+ generatedSrcs android.Paths
+ outDir android.Path
+}
+
+var _ genrule.SourceFileGenerator = (*mojomDowngradedFiles)(nil)
+
+func (m *mojomDowngradedFiles) DepsMutator(ctx android.BottomUpMutatorContext) {
+ android.ExtractSourcesDeps(ctx, m.properties.Srcs)
+}
+
+func (m *mojomDowngradedFiles) GenerateAndroidBuildActions(ctx android.ModuleContext) {
+ m.outDir = android.PathForModuleGen(ctx, "")
+
+ for _, in := range ctx.ExpandSources(m.properties.Srcs, nil) {
+ if !strings.HasSuffix(in.Rel(), ".mojom") {
+ ctx.PropertyErrorf("srcs", "Source is not a .mojom file: %s", in.Rel())
+ continue
+ }
+
+ out := android.PathForModuleGen(ctx, in.Rel())
+ m.generatedSrcs = append(m.generatedSrcs, out)
+
+ ctx.ModuleBuild(pctx, android.ModuleBuildParams{
+ Rule: downgradeMojomTypesRule,
+ Input: in,
+ Output: out,
+ Args: map[string]string{
+ "outDir": path.Dir(out.String()),
+ },
+ })
+ }
+}
+
+func (m *mojomDowngradedFiles) GeneratedHeaderDirs() android.Paths {
+ return nil
+}
+
+func (m *mojomDowngradedFiles) GeneratedDeps() android.Paths {
+ return append(android.Paths{}, m.generatedSrcs...)
+}
+
+func (m *mojomDowngradedFiles) GeneratedSourceFiles() android.Paths {
+ return append(android.Paths{}, m.generatedSrcs...)
+}
+
+func (m *mojomDowngradedFiles) Srcs() android.Paths {
+ return append(android.Paths{}, m.generatedSrcs...)
+}
+
+func mojomDowngradedFilesFactory() android.Module {
+ m := &mojomDowngradedFiles{}
+ m.AddProperties(&m.properties)
+ android.InitAndroidModule(m)
+ return m
+}
+
type mojomPicklesProperties struct {
// list of input files
Srcs []string
@@ -88,13 +166,14 @@ func (m *mojomPickles) DepsMutator(ctx android.BottomUpMutatorContext) {
func (m *mojomPickles) GenerateAndroidBuildActions(ctx android.ModuleContext) {
m.outDir = android.PathForModuleGen(ctx, "")
- packagePath := android.PathForModuleSrc(ctx, "")
-
for _, in := range ctx.ExpandSources(m.properties.Srcs, nil) {
if !strings.HasSuffix(in.Rel(), ".mojom") {
ctx.PropertyErrorf("srcs", "Source is not a .mojom file: %s", in.Rel())
continue
}
+
+ srcRoot := strings.TrimSuffix(in.String(), in.Rel())
+
relStem := strings.TrimSuffix(in.Rel(), ".mojom")
out := android.PathForModuleGen(ctx, relStem+".p")
@@ -105,9 +184,8 @@ func (m *mojomPickles) GenerateAndroidBuildActions(ctx android.ModuleContext) {
Input: in,
Output: out,
Args: map[string]string{
- "package": packagePath.Rel(),
+ "package": srcRoot,
"outDir": m.outDir.String(),
- "flags": fmt.Sprintf("-I=%s:%s", packagePath, packagePath),
},
})
}
@@ -237,7 +315,6 @@ func (p *mojomGenerationProperties) generateBuildActions(
mojomGenerator string,
descriptions []mojomSrcsRuleDescription,
) android.Paths {
- packageName := android.PathForModuleSrc(ctx, "").Rel()
outDir := android.PathForModuleGen(ctx, "")
implicitDeps := p.implicitDeps(ctx)
templateDir := p.templateDir(ctx)
@@ -249,6 +326,7 @@ func (p *mojomGenerationProperties) generateBuildActions(
continue
}
relStem := strings.TrimSuffix(in.Rel(), ".mojom")
+ srcRoot := strings.TrimSuffix(in.String(), in.Rel())
for _, description := range descriptions {
outs := android.WritablePaths{}
@@ -264,7 +342,7 @@ func (p *mojomGenerationProperties) generateBuildActions(
Outputs: outs,
Args: map[string]string{
"mojomGenerator": mojomGenerator,
- "package": packageName,
+ "package": srcRoot,
"flags": fmt.Sprintf("%s %s", p.flags(ctx), description.extraFlags),
"outDir": outDir.String(),
"templateDir": templateDir,