diff options
author | hscham <hscham@google.com> | 2020-03-12 16:28:26 +0900 |
---|---|---|
committer | Grace Cham <hscham@google.com> | 2020-04-22 00:26:27 +0000 |
commit | bc0492570ba29b81b5b4b428c27acd481dd9a091 (patch) | |
tree | 682194561b299d8c848b409583145a7cfdba6eed /soong | |
parent | 649dae672c5a775fd1c78dd02a3f4f8c0fd88012 (diff) | |
download | platform_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.go | 90 |
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, |