| Index: build/android/gradle/generate_gradle.py
|
| diff --git a/build/android/gradle/generate_gradle.py b/build/android/gradle/generate_gradle.py
|
| index 7a8ec3219da3879e133c3b2eae041febc58a9b58..2044aa375775905240472d0042bb002f3246c282 100755
|
| --- a/build/android/gradle/generate_gradle.py
|
| +++ b/build/android/gradle/generate_gradle.py
|
| @@ -197,7 +197,10 @@ class _ProjectEntry(object):
|
| return self.DepsInfo()['type']
|
|
|
| def ResZips(self):
|
| - return self.DepsInfo().get('owned_resources_zips')
|
| + return self.DepsInfo().get('owned_resources_zips', [])
|
| +
|
| + def ResDirs(self):
|
| + return self.DepsInfo().get('owned_resources_dirs', [])
|
|
|
| def JavaFiles(self):
|
| if self._java_files is None:
|
| @@ -213,7 +216,7 @@ class _ProjectEntry(object):
|
| return [p for p in self.JavaFiles() if not p.startswith('..')]
|
|
|
| def PrebuiltJars(self):
|
| - return self.Gradle()['dependent_prebuilt_jars']
|
| + return self.Gradle().get('dependent_prebuilt_jars', [])
|
|
|
| def AllEntries(self):
|
| """Returns a list of all entries that the current entry depends on.
|
| @@ -236,36 +239,30 @@ class _ProjectEntry(object):
|
| class _ProjectContextGenerator(object):
|
| """Helper class to generate gradle build files"""
|
| def __init__(self, project_dir, build_vars, use_gradle_process_resources,
|
| - jinja_processor):
|
| + jinja_processor, split_projects):
|
| self.project_dir = project_dir
|
| self.build_vars = build_vars
|
| self.use_gradle_process_resources = use_gradle_process_resources
|
| self.jinja_processor = jinja_processor
|
| + self.split_projects = split_projects
|
| +
|
| + def _GenJniLibs(self, root_entry):
|
| + libraries = []
|
| + for entry in self._GetEntries(root_entry):
|
| + libraries += entry.BuildConfig().get('native', [])
|
| + if libraries:
|
| + return _CreateJniLibsDir(constants.GetOutDirectory(),
|
| + self.EntryOutputDir(root_entry), libraries)
|
| + return []
|
|
|
| - def _GenJniLibs(self, entry):
|
| - native_section = entry.BuildConfig().get('native')
|
| - if native_section:
|
| - jni_libs = _CreateJniLibsDir(
|
| - constants.GetOutDirectory(), self.EntryOutputDir(entry),
|
| - native_section.get('libraries'))
|
| - else:
|
| - jni_libs = []
|
| - return jni_libs
|
| -
|
| - def _GenJavaDirs(self, entry):
|
| + def _GenJavaDirs(self, root_entry):
|
| + java_files = []
|
| + for entry in self._GetEntries(root_entry):
|
| + java_files += entry.JavaFiles()
|
| java_dirs, excludes = _ComputeJavaSourceDirsAndExcludes(
|
| - constants.GetOutDirectory(), entry.JavaFiles())
|
| - if self.Srcjars(entry):
|
| - java_dirs.append(
|
| - os.path.join(self.EntryOutputDir(entry), _SRCJARS_SUBDIR))
|
| + constants.GetOutDirectory(), java_files)
|
| return java_dirs, excludes
|
|
|
| - def _GenResDirs(self, entry):
|
| - res_dirs = list(entry.DepsInfo().get('owned_resources_dirs', []))
|
| - if entry.ResZips():
|
| - res_dirs.append(os.path.join(self.EntryOutputDir(entry), _RES_SUBDIR))
|
| - return res_dirs
|
| -
|
| def _GenCustomManifest(self, entry):
|
| """Returns the path to the generated AndroidManifest.xml.
|
|
|
| @@ -297,43 +294,75 @@ class _ProjectContextGenerator(object):
|
| def _Relativize(self, entry, paths):
|
| return _RebasePath(paths, self.EntryOutputDir(entry))
|
|
|
| - def EntryOutputDir(self, entry):
|
| - return os.path.join(self.project_dir, entry.GradleSubdir())
|
| -
|
| - def Srcjars(self, entry):
|
| + def _Srcjars(self, entry):
|
| srcjars = _RebasePath(entry.Gradle().get('bundled_srcjars', []))
|
| if not self.use_gradle_process_resources:
|
| srcjars += _RebasePath(entry.BuildConfig()['javac']['srcjars'])
|
| return srcjars
|
|
|
| - def GeneratedInputs(self, entry):
|
| - generated_inputs = []
|
| - generated_inputs.extend(self.Srcjars(entry))
|
| - generated_inputs.extend(_RebasePath(entry.ResZips()))
|
| - generated_inputs.extend(entry.GeneratedJavaFiles())
|
| - generated_inputs.extend(entry.PrebuiltJars())
|
| - return generated_inputs
|
| + def _GetEntries(self, entry):
|
| + if self.split_projects:
|
| + return [entry]
|
| + return entry.AllEntries()
|
|
|
| - def Generate(self, entry):
|
| + def EntryOutputDir(self, entry):
|
| + return os.path.join(self.project_dir, entry.GradleSubdir())
|
| +
|
| + def AllSrcjars(self, root_entry):
|
| + srcjars = []
|
| + for entry in self._GetEntries(root_entry):
|
| + srcjars += self._Srcjars(entry)
|
| + return set(srcjars)
|
| +
|
| + def AllResZips(self, root_entry):
|
| + res_zips = []
|
| + for entry in self._GetEntries(root_entry):
|
| + res_zips += entry.ResZips()
|
| + return set(_RebasePath(res_zips))
|
| +
|
| + def GeneratedInputs(self, root_entry):
|
| + generated_inputs = set(self.AllResZips(root_entry))
|
| + generated_inputs.update(self.AllSrcjars(root_entry))
|
| + for entry in self._GetEntries(root_entry):
|
| + generated_inputs.update(entry.GeneratedJavaFiles())
|
| + generated_inputs.update(entry.PrebuiltJars())
|
| + return set(generated_inputs)
|
| +
|
| + def Generate(self, root_entry):
|
| + # TODO(agrieve): Add an option to use interface jars and see if that speeds
|
| + # things up at all.
|
| variables = {}
|
| - java_dirs, excludes = self._GenJavaDirs(entry)
|
| - variables['java_dirs'] = self._Relativize(entry, java_dirs)
|
| + java_dirs, excludes = self._GenJavaDirs(root_entry)
|
| + java_dirs.sort()
|
| + variables['java_dirs'] = self._Relativize(root_entry, java_dirs)
|
| + variables['java_dirs'].append(_SRCJARS_SUBDIR)
|
| variables['java_excludes'] = excludes
|
| - variables['jni_libs'] = self._Relativize(entry, self._GenJniLibs(entry))
|
| - variables['res_dirs'] = self._Relativize(entry, self._GenResDirs(entry))
|
| - android_manifest = entry.Gradle().get('android_manifest')
|
| + variables['jni_libs'] = self._Relativize(
|
| + root_entry, set(self._GenJniLibs(root_entry)))
|
| + variables['prebuilts'] = [
|
| + p for e in self._GetEntries(root_entry) for p in e.PrebuiltJars()]
|
| + variables['res_dirs'] = [
|
| + p for e in self._GetEntries(root_entry) for p in e.ResDirs()]
|
| + for entry in self._GetEntries(root_entry):
|
| + variables['prebuilts'] += entry.PrebuiltJars()
|
| + variables['res_dirs'] += entry.ResDirs()
|
| + variables['prebuilts'] = self._Relativize(
|
| + root_entry, set(variables['prebuilts']))
|
| + variables['res_dirs'] = self._Relativize(
|
| + root_entry, set(variables['res_dirs']))
|
| + variables['res_dirs'].append(_RES_SUBDIR)
|
| + android_manifest = root_entry.Gradle().get('android_manifest')
|
| if not android_manifest:
|
| - android_manifest = self._GenCustomManifest(entry)
|
| - variables['android_manifest'] = self._Relativize(entry, android_manifest)
|
| - # TODO(agrieve): Add an option to use interface jars and see if that speeds
|
| - # things up at all.
|
| - variables['prebuilts'] = self._Relativize(entry, entry.PrebuiltJars())
|
| - deps = [_ProjectEntry.FromBuildConfigPath(p)
|
| - for p in entry.Gradle()['dependent_android_projects']]
|
| - variables['android_project_deps'] = [d.ProjectName() for d in deps]
|
| - deps = [_ProjectEntry.FromBuildConfigPath(p)
|
| - for p in entry.Gradle()['dependent_java_projects']]
|
| - variables['java_project_deps'] = [d.ProjectName() for d in deps]
|
| + android_manifest = self._GenCustomManifest(root_entry)
|
| + variables['android_manifest'] = self._Relativize(
|
| + root_entry, android_manifest)
|
| + if self.split_projects:
|
| + deps = [_ProjectEntry.FromBuildConfigPath(p)
|
| + for p in root_entry.Gradle()['dependent_android_projects']]
|
| + variables['android_project_deps'] = [d.ProjectName() for d in deps]
|
| + deps = [_ProjectEntry.FromBuildConfigPath(p)
|
| + for p in root_entry.Gradle()['dependent_java_projects']]
|
| + variables['java_project_deps'] = [d.ProjectName() for d in deps]
|
| return variables
|
|
|
|
|
| @@ -611,6 +640,10 @@ def main():
|
| parser.add_argument('--use-gradle-process-resources',
|
| action='store_true',
|
| help='Have gradle generate R.java rather than ninja')
|
| + parser.add_argument('--split-projects',
|
| + action='store_true',
|
| + help='Split projects by their gn deps rather than '
|
| + 'combining all the dependencies of each target')
|
| args = parser.parse_args()
|
| if args.output_directory:
|
| constants.SetOutputDirectory(args.output_directory)
|
| @@ -619,12 +652,17 @@ def main():
|
| devil_chromium.Initialize(output_directory=output_dir)
|
| run_tests_helper.SetLogLevel(args.verbose_count)
|
|
|
| + # TODO(wnwen): Fix packaging so that gradle resources work in this case.
|
| + if args.use_gradle_process_resources:
|
| + assert args.split_projects, (
|
| + 'Gradle resources does not yet work without --split-projects.')
|
| +
|
| _gradle_output_dir = os.path.abspath(
|
| args.project_dir.replace('$CHROMIUM_OUTPUT_DIR', output_dir))
|
| jinja_processor = jinja_template.JinjaProcessor(_FILE_DIR)
|
| build_vars = _ReadBuildVars(output_dir)
|
| generator = _ProjectContextGenerator(_gradle_output_dir, build_vars,
|
| - args.use_gradle_process_resources, jinja_processor)
|
| + args.use_gradle_process_resources, jinja_processor, args.split_projects)
|
| logging.warning('Creating project at: %s', generator.project_dir)
|
|
|
| if args.all:
|
| @@ -649,9 +687,10 @@ def main():
|
| if args.all:
|
| main_entries = [e for e in main_entries if e.GetType() == 'android_apk']
|
|
|
| - all_entries = _FindAllProjectEntries(main_entries)
|
| - logging.info('Found %d dependent build_config targets.', len(all_entries))
|
| - entries = _CombineTestEntries(all_entries)
|
| + if args.split_projects:
|
| + main_entries = _FindAllProjectEntries(main_entries)
|
| + logging.info('Found %d dependent build_config targets.', len(main_entries))
|
| + entries = _CombineTestEntries(main_entries)
|
| logging.info('Creating %d projects for targets.', len(entries))
|
|
|
| logging.warning('Writing .gradle files...')
|
| @@ -669,10 +708,10 @@ def main():
|
| generated_inputs.extend(generator.GeneratedInputs(entry))
|
| zip_tuples.extend(
|
| (s, os.path.join(generator.EntryOutputDir(entry), _SRCJARS_SUBDIR))
|
| - for s in generator.Srcjars(entry))
|
| + for s in generator.AllSrcjars(entry))
|
| zip_tuples.extend(
|
| (s, os.path.join(generator.EntryOutputDir(entry), _RES_SUBDIR))
|
| - for s in _RebasePath(entry.ResZips()))
|
| + for s in generator.AllResZips(entry))
|
| _WriteFile(
|
| os.path.join(generator.EntryOutputDir(entry), 'build.gradle'), data)
|
|
|
|
|