summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuis Hector Chavez <lhchavez@google.com>2018-09-05 16:05:30 -0700
committerLuis Hector Chavez <lhchavez@google.com>2018-09-14 08:42:47 -0700
commitd958dea15649e2e146dad8cf6410eb9a3867cd05 (patch)
tree38e7b49c0e718b731ca37bbfc34e24a16f1043ec
parenta5a2dc0f6a321af198bf65a15e97026e5099286a (diff)
downloadlibchrome-d958dea15649e2e146dad8cf6410eb9a3867cd05.tar.gz
libchrome: Create a soong plugin to clean up source/header generation
This change adds a soong plugin that significantly cleans up the generation of source/header files from .mojom files. Bug: 109924413 Test: m Change-Id: Ic2cf32f1bb914f826eee4c8559285e0ed4e23ced
-rw-r--r--Android.bp183
-rwxr-xr-xlibchrome_tools/merge_srcjars.py26
-rw-r--r--soong/Android.bp14
-rw-r--r--soong/bindings_generator.go427
4 files changed, 521 insertions, 129 deletions
diff --git a/Android.bp b/Android.bp
index 051e18eca7..4dd1aa904e 100644
--- a/Android.bp
+++ b/Android.bp
@@ -685,12 +685,44 @@ python_binary_host {
defaults: ["libmojo_scripts"],
}
+python_binary_host {
+ name: "merge_srcjars",
+ main: "libchrome_tools/merge_srcjars.py",
+ srcs: ["libchrome_tools/merge_srcjars.py"],
+ version: {
+ py3: {
+ enabled: true,
+ },
+ py2: {
+ enabled: false,
+ },
+ },
+}
+
+// TODO(lhchavez): Delete this once all other projects have been migrated.
cc_prebuilt_binary {
name: "mojom_source_generator_sh",
srcs: ["libchrome_tools/mojom_source_generator.sh"],
host_supported: true,
}
+genrule {
+ name: "libmojo_mojom_templates",
+ cmd: "$(location mojom_bindings_generator)" +
+ " --use_bundled_pylibs precompile" +
+ " -o $(genDir)",
+
+ tools: [
+ "mojom_bindings_generator",
+ ],
+
+ out: [
+ "cpp_templates.zip",
+ "java_templates.zip",
+ "js_templates.zip",
+ ],
+}
+
python_binary_host {
name: "mojom_generate_type_mappings",
main: "libchrome_tools/mojom_generate_type_mappings.py",
@@ -723,115 +755,27 @@ genrule {
out: ["common_custom_types__type_mappings"],
}
-genrule {
- name: "libmojo_mojom_headers",
- cmd: "$(location mojom_source_generator_sh)" +
- " --mojom_bindings_generator=$(location mojom_bindings_generator)" +
- " --package=external/libchrome" +
- " --output_dir=$(genDir)" +
- " --bytecode_path=$(genDir)" +
- " --typemap=$(location common_custom_types__type_mappings)" +
- " --generators=c++" +
- " --use_new_wrapper_types" +
- " $(in)",
-
- tools: [
- "mojom_bindings_generator",
- "mojom_source_generator_sh",
- ],
-
- tool_files: [":libmojo_common_custom_types__type_mappings"],
-
+generate_mojom_pickles {
+ name: "libmojo_mojom_pickles",
srcs: [":libmojo_mojom_files"],
+}
- out: [
- "ipc/ipc.mojom.h",
- "ipc/ipc.mojom-shared.h",
- "ipc/ipc.mojom-shared-internal.h",
- "mojo/common/file.mojom.h",
- "mojo/common/file.mojom-shared.h",
- "mojo/common/file.mojom-shared-internal.h",
- "mojo/common/file_path.mojom.h",
- "mojo/common/file_path.mojom-shared.h",
- "mojo/common/file_path.mojom-shared-internal.h",
- "mojo/common/string16.mojom.h",
- "mojo/common/string16.mojom-shared.h",
- "mojo/common/string16.mojom-shared-internal.h",
- "mojo/common/text_direction.mojom.h",
- "mojo/common/text_direction.mojom-shared.h",
- "mojo/common/text_direction.mojom-shared-internal.h",
- "mojo/common/time.mojom.h",
- "mojo/common/time.mojom-shared.h",
- "mojo/common/time.mojom-shared-internal.h",
- "mojo/common/unguessable_token.mojom.h",
- "mojo/common/unguessable_token.mojom-shared.h",
- "mojo/common/unguessable_token.mojom-shared-internal.h",
- "mojo/common/values.mojom.h",
- "mojo/common/values.mojom-shared.h",
- "mojo/common/values.mojom-shared-internal.h",
- "mojo/common/version.mojom.h",
- "mojo/common/version.mojom-shared.h",
- "mojo/common/version.mojom-shared-internal.h",
- "mojo/public/interfaces/bindings/interface_control_messages.mojom.h",
- "mojo/public/interfaces/bindings/interface_control_messages.mojom-shared.h",
- "mojo/public/interfaces/bindings/interface_control_messages.mojom-shared-internal.h",
- "mojo/public/interfaces/bindings/pipe_control_messages.mojom.h",
- "mojo/public/interfaces/bindings/pipe_control_messages.mojom-shared.h",
- "mojo/public/interfaces/bindings/pipe_control_messages.mojom-shared-internal.h",
- "ui/gfx/geometry/mojo/geometry.mojom.h",
- "ui/gfx/geometry/mojo/geometry.mojom-shared.h",
- "ui/gfx/geometry/mojo/geometry.mojom-shared-internal.h",
- "ui/gfx/range/mojo/range.mojom.h",
- "ui/gfx/range/mojo/range.mojom-shared.h",
- "ui/gfx/range/mojo/range.mojom-shared-internal.h",
- ],
+generate_mojom_headers {
+ name: "libmojo_mojom_headers",
+ srcs: [":libmojo_mojom_files"],
+ pickles: [":libmojo_mojom_pickles"],
+ templates: ":libmojo_mojom_templates",
+ flags: "--disallow_native_types",
+ typemaps: [":libmojo_common_custom_types__type_mappings"],
}
-genrule {
+generate_mojom_srcs {
name: "libmojo_mojom_srcs",
- cmd: "$(location mojom_source_generator_sh)" +
- " --mojom_bindings_generator=$(location mojom_bindings_generator)" +
- " --package=external/libchrome" +
- " --output_dir=$(genDir)" +
- " --bytecode_path=$(genDir)" +
- " --typemap=$(location common_custom_types__type_mappings)" +
- " --generators=c++" +
- " --use_new_wrapper_types" +
- " $(in)",
-
- tools: [
- "mojom_bindings_generator",
- "mojom_source_generator_sh",
- ],
-
- tool_files: [":libmojo_common_custom_types__type_mappings"],
-
srcs: [":libmojo_mojom_files"],
-
- out: [
- "ipc/ipc.mojom.cc",
- "ipc/ipc.mojom-shared.cc",
- "mojo/common/file.mojom.cc",
- "mojo/common/file.mojom-shared.cc",
- "mojo/common/string16.mojom.cc",
- "mojo/common/string16.mojom-shared.cc",
- "mojo/common/text_direction.mojom.cc",
- "mojo/common/text_direction.mojom-shared.cc",
- "mojo/common/time.mojom.cc",
- "mojo/common/time.mojom-shared.cc",
- "mojo/common/unguessable_token.mojom.cc",
- "mojo/common/unguessable_token.mojom-shared.cc",
- "mojo/common/version.mojom.cc",
- "mojo/common/version.mojom-shared.cc",
- "mojo/public/interfaces/bindings/interface_control_messages.mojom.cc",
- "mojo/public/interfaces/bindings/interface_control_messages.mojom-shared.cc",
- "mojo/public/interfaces/bindings/pipe_control_messages.mojom.cc",
- "mojo/public/interfaces/bindings/pipe_control_messages.mojom-shared.cc",
- "ui/gfx/geometry/mojo/geometry.mojom.cc",
- "ui/gfx/geometry/mojo/geometry.mojom-shared.cc",
- "ui/gfx/range/mojo/range.mojom.cc",
- "ui/gfx/range/mojo/range.mojom-shared.cc",
- ],
+ pickles: [":libmojo_mojom_pickles"],
+ templates: ":libmojo_mojom_templates",
+ flags: "--disallow_native_types",
+ typemaps: [":libmojo_common_custom_types__type_mappings"],
}
// TODO(hidehiko): Remove JNI for ContextUtils, after cleaning up the
@@ -875,15 +819,11 @@ cc_library_shared {
name: "libmojo",
vendor_available: true,
+ generated_sources: ["libmojo_mojom_srcs"],
generated_headers: [
"libmojo_jni_headers",
"libmojo_mojom_headers",
],
-
- generated_sources: [
- "libmojo_mojom_srcs",
- ],
-
export_generated_headers: [
"libmojo_jni_headers",
"libmojo_mojom_headers",
@@ -936,29 +876,14 @@ cc_library_shared {
export_include_dirs: ["."],
}
-genrule {
+generate_mojom_srcjar {
name: "libmojo_mojom_java_srcs",
- cmd: "$(location mojom_source_generator_sh)" +
- " --mojom_bindings_generator=$(location mojom_bindings_generator)" +
- " --package=external/libchrome" +
- " --output_dir=$(genDir)" +
- " --bytecode_path=$(genDir)" +
- " --typemap=$(location common_custom_types__type_mappings)" +
- " --generators=java" +
- " --use_new_wrapper_types" +
- " --srcjar=$(out)" +
- " $(in)",
-
- tools: [
- "mojom_bindings_generator",
- "mojom_source_generator_sh",
- ],
-
- tool_files: [":libmojo_common_custom_types__type_mappings"],
-
srcs: [":libmojo_mojom_files"],
-
- out: ["libmojo_mojom.srcjar"],
+ pickles: [":libmojo_mojom_pickles"],
+ srcjar: "libmojo_mojom.srcjar",
+ templates: ":libmojo_mojom_templates",
+ flags: "--disallow_native_types",
+ typemaps: [":libmojo_common_custom_types__type_mappings"],
}
java_library {
diff --git a/libchrome_tools/merge_srcjars.py b/libchrome_tools/merge_srcjars.py
new file mode 100755
index 0000000000..f774764087
--- /dev/null
+++ b/libchrome_tools/merge_srcjars.py
@@ -0,0 +1,26 @@
+#!/usr/bin/env python3
+
+"""Merges several .srcjar files."""
+
+import argparse
+import zipfile
+
+
+def _main():
+ parser = argparse.ArgumentParser(description="Merge several .srcjar files")
+ parser.add_argument("--output", type=argparse.FileType("wb"),
+ help="The path of the output .srcjar")
+ parser.add_argument("srcjar", metavar="SRCJAR", type=argparse.FileType("rb"),
+ nargs="+",
+ help="The path of the .srcjar files to merge")
+ args = parser.parse_args()
+
+ with zipfile.ZipFile(args.output, "w") as output:
+ for srcjar_path in args.srcjar:
+ with zipfile.ZipFile(srcjar_path, "r") as srcjar:
+ for path in srcjar.namelist():
+ output.writestr(path, srcjar.read(path))
+
+
+if __name__ == "__main__":
+ _main()
diff --git a/soong/Android.bp b/soong/Android.bp
new file mode 100644
index 0000000000..7230b812d2
--- /dev/null
+++ b/soong/Android.bp
@@ -0,0 +1,14 @@
+bootstrap_go_package {
+ name: "soong-libchrome",
+ pkgPath: "android/soong/external/libchrome",
+ deps: [
+ "blueprint",
+ "soong",
+ "soong-android",
+ "soong-genrule",
+ ],
+ srcs: [
+ "bindings_generator.go",
+ ],
+ pluginFor: ["soong_build"],
+}
diff --git a/soong/bindings_generator.go b/soong/bindings_generator.go
new file mode 100644
index 0000000000..36462cb036
--- /dev/null
+++ b/soong/bindings_generator.go
@@ -0,0 +1,427 @@
+package libchrome
+
+import (
+ "fmt"
+ "path"
+ "path/filepath"
+ "strings"
+
+ "android/soong/android"
+ "android/soong/genrule"
+
+ "github.com/google/blueprint"
+)
+
+func init() {
+ android.RegisterModuleType("generate_mojom_pickles", mojomPicklesFactory)
+ android.RegisterModuleType("generate_mojom_headers", mojomHeadersFactory)
+ android.RegisterModuleType("generate_mojom_srcs", mojomSrcsFactory)
+ android.RegisterModuleType("generate_mojom_srcjar", mojomSrcjarFactory)
+}
+
+var (
+ pctx = android.NewPackageContext("android/soong/external/libchrome")
+
+ mojomBindingsGenerator = pctx.HostBinToolVariable("mojomBindingsGenerator", "mojom_bindings_generator")
+ mergeSrcjars = pctx.HostBinToolVariable("mergeSrcjars", "merge_srcjars")
+
+ generateMojomPicklesRule = pctx.StaticRule("generateMojomPicklesRule", blueprint.RuleParams{
+ Command: `${mojomBindingsGenerator}
+ --use_bundled_pylibs parse
+ -d ${package}
+ ${flags}
+ -o ${outDir}
+ ${in}`,
+ CommandDeps: []string{
+ "${mojomBindingsGenerator}",
+ },
+ Description: "Mojo pickles generation $in => $out",
+ }, "package", "flags", "outDir")
+
+ generateMojomSrcsRule = pctx.StaticRule("generateMojomSrcsRule", blueprint.RuleParams{
+ Command: `${mojomBindingsGenerator}
+ --use_bundled_pylibs generate
+ -o ${outDir}
+ -I=${package}:${package}
+ -d ${package}
+ ${flags}
+ --bytecode_path=${templateDir}
+ --generators=${generator}
+ --use_new_wrapper_types
+ ${in}`,
+ CommandDeps: []string{
+ "${mojomBindingsGenerator}",
+ },
+ Description: "Mojo sources generation $in => $out",
+ }, "generator", "package", "flags", "outDir", "templateDir")
+
+ mergeSrcjarsRule = pctx.StaticRule("mergeSrcjarsRule", blueprint.RuleParams{
+ Command: "${mergeSrcjars} --output=${out} ${in}",
+ CommandDeps: []string{
+ "${mergeSrcjars}",
+ },
+ Description: "Merge .srcjars $in => $out",
+ })
+)
+
+type mojomPicklesProperties struct {
+ // list of input files
+ Srcs []string
+}
+
+type mojomPickles struct {
+ android.ModuleBase
+
+ properties mojomPicklesProperties
+
+ generatedSrcs android.Paths
+ outDir android.Path
+}
+
+var _ genrule.SourceFileGenerator = (*mojomPickles)(nil)
+
+func (m *mojomPickles) DepsMutator(ctx android.BottomUpMutatorContext) {
+ android.ExtractSourcesDeps(ctx, m.properties.Srcs)
+}
+
+func (m *mojomPickles) GenerateAndroidBuildActions(ctx android.ModuleContext) {
+ m.outDir = android.PathForModuleGen(ctx, "")
+ // TODO(lhchavez): Actually make this generate files once libchrome
+ // roll progresses.
+}
+
+func (m *mojomPickles) GeneratedHeaderDirs() android.Paths {
+ return nil
+}
+
+func (m *mojomPickles) GeneratedDeps() android.Paths {
+ return append(android.Paths{}, m.generatedSrcs...)
+}
+
+func (m *mojomPickles) GeneratedSourceFiles() android.Paths {
+ return append(android.Paths{}, m.generatedSrcs...)
+}
+
+func (m *mojomPickles) Srcs() android.Paths {
+ return append(android.Paths{}, m.generatedSrcs...)
+}
+
+func mojomPicklesFactory() android.Module {
+ m := &mojomPickles{}
+ m.AddProperties(&m.properties)
+ android.InitAndroidModule(m)
+ return m
+}
+
+// mojomGenerationProperties are the common properties across the header,
+// source and Java source modules.
+type mojomGenerationProperties struct {
+ // list of input files
+ Srcs []string
+
+ // name of the output .srcjar
+ Srcjar string
+
+ // name of the templates module
+ Templates string
+
+ // Additional flags to pass to the bindings generation script
+ Flags string
+
+ // list of pickles modules that will be imported
+ Pickles []string
+
+ // list of include paths
+ Includes []string
+
+ // list of typemaps modules that will be imported
+ Typemaps []string
+}
+
+// extractSources adds any necessary dependencies to satisfy filegroup or
+// generated sources modules listed in the properties using ":module" syntax,
+// if any.
+func (p *mojomGenerationProperties) extractSources(ctx android.BottomUpMutatorContext) {
+ android.ExtractSourcesDeps(ctx, p.Srcs)
+ android.ExtractSourcesDeps(ctx, p.Typemaps)
+ android.ExtractSourcesDeps(ctx, p.Pickles)
+ android.ExtractSourceDeps(ctx, &p.Templates)
+}
+
+// flags generates all needed flags for the build rule.
+func (p *mojomGenerationProperties) flags(ctx android.ModuleContext) string {
+ flags := []string{}
+
+ for _, typemap := range ctx.ExpandSources(p.Typemaps, nil) {
+ flags = append(flags, fmt.Sprintf("--typemap=%s", typemap.String()))
+ }
+ for _, include := range p.Includes {
+ includePath, err := filepath.Abs(include)
+ if err != nil {
+ ctx.PropertyErrorf("includes", "Failed to get the absolute path for %s: %q", include, err)
+ }
+ flags = append(flags, fmt.Sprintf("-I=%s:%s", includePath, includePath))
+ }
+ for _, pickle := range p.Pickles {
+ m := android.SrcIsModule(pickle)
+ if m == "" {
+ ctx.PropertyErrorf("pickles", "not a module: %q", m)
+ continue
+ }
+ module := ctx.GetDirectDepWithTag(m, android.SourceDepTag).(*mojomPickles)
+ flags = append(flags, fmt.Sprintf("--gen_dir=%s", module.outDir.String()))
+ }
+ if p.Flags != "" {
+ flags = append(flags, p.Flags)
+ }
+
+ return strings.Join(flags, " ")
+}
+
+// implicitDeps collects all dependencies of the module.
+func (p *mojomGenerationProperties) implicitDeps(ctx android.ModuleContext) android.Paths {
+ deps := android.Paths{}
+ deps = append(deps, ctx.ExpandSources(p.Pickles, nil)...)
+ deps = append(deps, ctx.ExpandSources(p.Typemaps, nil)...)
+ deps = append(deps, ctx.ExpandSources([]string{p.Templates}, nil)...)
+ return deps
+}
+
+// templateDir returns the path where the template .zips are located.
+func (p *mojomGenerationProperties) templateDir(ctx android.ModuleContext) string {
+ srcFiles := ctx.ExpandSources([]string{p.Templates}, nil)
+ if len(srcFiles) == 0 {
+ ctx.PropertyErrorf("templates", "module %s does not produce any files", p.Templates)
+ return ""
+ }
+ return path.Dir(srcFiles[0].String())
+}
+
+// mojomSrcsRuleDescription has the necessary arguments to perform one
+// invocation of generateMojomSrcsRule.
+type mojomSrcsRuleDescription struct {
+ generatedExtensions []string
+ extraFlags string
+}
+
+// generateBuildActions generates all the necessary build actions for the
+// current module.
+func (p *mojomGenerationProperties) generateBuildActions(
+ ctx android.ModuleContext,
+ generator string,
+ descriptions []mojomSrcsRuleDescription,
+) android.Paths {
+ packageName := android.PathForModuleSrc(ctx, "").Rel()
+ outDir := android.PathForModuleGen(ctx, "")
+ implicitDeps := p.implicitDeps(ctx)
+ templateDir := p.templateDir(ctx)
+ generatedSrcs := android.Paths{}
+
+ for _, in := range ctx.ExpandSources(p.Srcs, nil) {
+ if !strings.HasSuffix(in.Rel(), ".mojom") {
+ ctx.PropertyErrorf("srcs", "Source is not a .mojom file: %s", in.Rel())
+ continue
+ }
+ relStem := strings.TrimSuffix(in.Rel(), ".mojom")
+
+ for _, description := range descriptions {
+ outs := android.WritablePaths{}
+ for _, ext := range description.generatedExtensions {
+ out := android.PathForModuleGen(ctx, relStem+ext)
+ outs = append(outs, out)
+ generatedSrcs = append(generatedSrcs, out)
+ }
+ ctx.ModuleBuild(pctx, android.ModuleBuildParams{
+ Rule: generateMojomSrcsRule,
+ Input: in,
+ Implicits: implicitDeps,
+ Outputs: outs,
+ Args: map[string]string{
+ "generator": generator,
+ "package": packageName,
+ "flags": fmt.Sprintf("%s %s", p.flags(ctx), description.extraFlags),
+ "outDir": outDir.String(),
+ "templateDir": templateDir,
+ },
+ })
+ }
+ }
+
+ return generatedSrcs
+}
+
+// mojomHeaders generates all the .h files for a .mojom source.
+type mojomHeaders struct {
+ android.ModuleBase
+
+ properties mojomGenerationProperties
+
+ exportedHeaderDirs android.Paths
+ generatedSrcs android.Paths
+}
+
+var _ genrule.SourceFileGenerator = (*mojomHeaders)(nil)
+
+func (m *mojomHeaders) DepsMutator(ctx android.BottomUpMutatorContext) {
+ m.properties.extractSources(ctx)
+}
+
+func (m *mojomHeaders) GenerateAndroidBuildActions(ctx android.ModuleContext) {
+ m.generatedSrcs = m.properties.generateBuildActions(
+ ctx,
+ "c++",
+ []mojomSrcsRuleDescription{
+ {
+ generatedExtensions: []string{".mojom.h"},
+ extraFlags: "",
+ },
+ {
+ generatedExtensions: []string{".mojom-shared.h", ".mojom-shared-internal.h"},
+ extraFlags: "--generate_non_variant_code",
+ },
+ {
+ generatedExtensions: []string{".mojom-shared-message-ids.h"},
+ extraFlags: "--generate_message_ids --generate_non_variant_code",
+ },
+ },
+ )
+ m.exportedHeaderDirs = append(m.exportedHeaderDirs, android.PathForModuleGen(ctx, ""))
+}
+
+func (m *mojomHeaders) GeneratedHeaderDirs() android.Paths {
+ return m.exportedHeaderDirs
+}
+
+func (m *mojomHeaders) GeneratedDeps() android.Paths {
+ return append(android.Paths{}, m.generatedSrcs...)
+}
+
+func (m *mojomHeaders) GeneratedSourceFiles() android.Paths {
+ return append(android.Paths{}, m.generatedSrcs...)
+}
+
+func (m *mojomHeaders) Srcs() android.Paths {
+ return append(android.Paths{}, m.generatedSrcs...)
+}
+
+func mojomHeadersFactory() android.Module {
+ m := &mojomHeaders{}
+ m.AddProperties(&m.properties)
+ android.InitAndroidModule(m)
+ return m
+}
+
+// mojomHeaders generates all the .cc files for a .mojom source.
+type mojomSrcs struct {
+ android.ModuleBase
+
+ properties mojomGenerationProperties
+
+ generatedSrcs android.Paths
+}
+
+var _ genrule.SourceFileGenerator = (*mojomSrcs)(nil)
+
+func (m *mojomSrcs) DepsMutator(ctx android.BottomUpMutatorContext) {
+ m.properties.extractSources(ctx)
+}
+
+func (m *mojomSrcs) GenerateAndroidBuildActions(ctx android.ModuleContext) {
+ m.generatedSrcs = m.properties.generateBuildActions(
+ ctx,
+ "c++",
+ []mojomSrcsRuleDescription{
+ {
+ generatedExtensions: []string{".mojom.cc"},
+ extraFlags: "",
+ },
+ {
+ generatedExtensions: []string{".mojom-shared.cc"},
+ extraFlags: "--generate_non_variant_code",
+ },
+ },
+ )
+}
+
+func (m *mojomSrcs) GeneratedHeaderDirs() android.Paths {
+ return nil
+}
+
+func (m *mojomSrcs) GeneratedDeps() android.Paths {
+ return append(android.Paths{}, m.generatedSrcs...)
+}
+
+func (m *mojomSrcs) GeneratedSourceFiles() android.Paths {
+ return append(android.Paths{}, m.generatedSrcs...)
+}
+
+func (m *mojomSrcs) Srcs() android.Paths {
+ return append(android.Paths{}, m.generatedSrcs...)
+}
+
+func mojomSrcsFactory() android.Module {
+ m := &mojomSrcs{}
+ m.AddProperties(&m.properties)
+ android.InitAndroidModule(m)
+ return m
+}
+
+// mojomHeaders generates the .srcjar file for a set of .mojom source.
+type mojomSrcjar struct {
+ android.ModuleBase
+
+ properties mojomGenerationProperties
+
+ outDir android.Path
+ generatedSrcs android.Paths
+}
+
+var _ genrule.SourceFileGenerator = (*mojomSrcjar)(nil)
+
+func (m *mojomSrcjar) DepsMutator(ctx android.BottomUpMutatorContext) {
+ m.properties.extractSources(ctx)
+}
+
+func (m *mojomSrcjar) GenerateAndroidBuildActions(ctx android.ModuleContext) {
+ srcjars := m.properties.generateBuildActions(
+ ctx,
+ "java",
+ []mojomSrcsRuleDescription{
+ {
+ generatedExtensions: []string{".mojom.srcjar"},
+ extraFlags: "",
+ },
+ },
+ )
+
+ out := android.PathForModuleGen(ctx, m.properties.Srcjar)
+ ctx.ModuleBuild(pctx, android.ModuleBuildParams{
+ Rule: mergeSrcjarsRule,
+ Inputs: srcjars,
+ Output: out,
+ })
+ m.generatedSrcs = append(m.generatedSrcs, out)
+}
+
+func (m *mojomSrcjar) GeneratedHeaderDirs() android.Paths {
+ return nil
+}
+
+func (m *mojomSrcjar) GeneratedDeps() android.Paths {
+ return append(android.Paths{}, m.generatedSrcs...)
+}
+
+func (m *mojomSrcjar) GeneratedSourceFiles() android.Paths {
+ return append(android.Paths{}, m.generatedSrcs...)
+}
+
+func (m *mojomSrcjar) Srcs() android.Paths {
+ return append(android.Paths{}, m.generatedSrcs...)
+}
+
+func mojomSrcjarFactory() android.Module {
+ m := &mojomSrcjar{}
+ m.AddProperties(&m.properties)
+ android.InitAndroidModule(m)
+ return m
+}