Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(20)

Side by Side Diff: build/android/gradle/generate_gradle.py

Issue 2507473002: generate_gradle.py: Build all generated files (not just .srcjars) (Closed)
Patch Set: Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright 2016 The Chromium Authors. All rights reserved. 2 # Copyright 2016 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """Generates an Android Studio project from a GN target.""" 6 """Generates an Android Studio project from a GN target."""
7 7
8 import argparse 8 import argparse
9 import codecs 9 import codecs
10 import logging 10 import logging
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 subpath = os.path.relpath(target_path, prefix) 191 subpath = os.path.relpath(target_path, prefix)
192 symlinked_path = os.path.join(symlink_dir, subpath) 192 symlinked_path = os.path.join(symlink_dir, subpath)
193 symlinked_dir = os.path.dirname(symlinked_path) 193 symlinked_dir = os.path.dirname(symlinked_path)
194 if not os.path.exists(symlinked_dir): 194 if not os.path.exists(symlinked_dir):
195 os.makedirs(symlinked_dir) 195 os.makedirs(symlinked_dir)
196 relpath = os.path.relpath(target_path, symlinked_dir) 196 relpath = os.path.relpath(target_path, symlinked_dir)
197 logging.debug('Creating symlink %s -> %s', symlinked_path, relpath) 197 logging.debug('Creating symlink %s -> %s', symlinked_path, relpath)
198 os.symlink(relpath, symlinked_path) 198 os.symlink(relpath, symlinked_path)
199 199
200 200
201 def _CreateJavaSourceDir(output_dir, entry_output_dir, java_sources_file): 201 def _CreateJavaSourceDir(output_dir, entry_output_dir, java_files):
202 """Computes and constructs when necessary the list of java source directories. 202 """Computes and constructs when necessary the list of java source directories.
203 203
204 1. Computes the root java source directories from the list of files. 204 1. Computes the root java source directories from the list of files.
205 2. Determines whether there are any .java files in them that are not included 205 2. Determines whether there are any .java files in them that are not included
206 in |java_sources_file|. 206 in |java_files|.
207 3. If not, returns the list of java source directories. If so, constructs a 207 3. If not, returns the list of java source directories. If so, constructs a
208 tree of symlinks within |entry_output_dir| of all files in 208 tree of symlinks within |entry_output_dir| of all files in |java_files|.
209 |java_sources_file|.
210 """ 209 """
211 java_dirs = [] 210 java_dirs = []
212 if java_sources_file: 211 if java_files:
213 java_files = _RebasePath(build_utils.ReadSourcesList(java_sources_file)) 212 java_files = _RebasePath(java_files)
214 java_dirs = _ComputeJavaSourceDirs(java_files) 213 java_dirs = _ComputeJavaSourceDirs(java_files)
215 214
216 found_java_files = build_utils.FindInDirectories(java_dirs, '*.java') 215 found_java_files = build_utils.FindInDirectories(java_dirs, '*.java')
217 unwanted_java_files = set(found_java_files) - set(java_files) 216 unwanted_java_files = set(found_java_files) - set(java_files)
218 missing_java_files = set(java_files) - set(found_java_files) 217 missing_java_files = set(java_files) - set(found_java_files)
219 # Warn only about non-generated files that are missing. 218 # Warn only about non-generated files that are missing.
220 missing_java_files = [p for p in missing_java_files 219 missing_java_files = [p for p in missing_java_files
221 if not p.startswith(output_dir)] 220 if not p.startswith(output_dir)]
222 if unwanted_java_files: 221 if unwanted_java_files:
223 logging.debug('Target requires .java symlinks: %s', entry_output_dir) 222 logging.debug('Target requires .java symlinks: %s', entry_output_dir)
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
388 main_entries = [e for e in main_entries if e.GetType() == 'android_apk'] 387 main_entries = [e for e in main_entries if e.GetType() == 'android_apk']
389 388
390 all_entries = _FindAllProjectEntries(main_entries) 389 all_entries = _FindAllProjectEntries(main_entries)
391 logging.info('Found %d dependent build_config targets.', len(all_entries)) 390 logging.info('Found %d dependent build_config targets.', len(all_entries))
392 391
393 logging.warning('Writing .gradle files...') 392 logging.warning('Writing .gradle files...')
394 jinja_processor = jinja_template.JinjaProcessor(host_paths.DIR_SOURCE_ROOT) 393 jinja_processor = jinja_template.JinjaProcessor(host_paths.DIR_SOURCE_ROOT)
395 build_vars = _ReadBuildVars(output_dir) 394 build_vars = _ReadBuildVars(output_dir)
396 project_entries = [] 395 project_entries = []
397 srcjar_tuples = [] 396 srcjar_tuples = []
397 generated_inputs = []
398 for entry in all_entries: 398 for entry in all_entries:
399 if entry.GetType() not in ('android_apk', 'java_library'): 399 if entry.GetType() not in ('android_apk', 'java_library'):
400 continue 400 continue
401 401
402 entry_output_dir = os.path.join(gradle_output_dir, entry.GradleSubdir()) 402 entry_output_dir = os.path.join(gradle_output_dir, entry.GradleSubdir())
403 relativize = lambda x, d=entry_output_dir: _RebasePath(x, d) 403 relativize = lambda x, d=entry_output_dir: _RebasePath(x, d)
404 build_config = entry.BuildConfig() 404 build_config = entry.BuildConfig()
405 405
406 srcjars = _RebasePath(build_config['gradle'].get('bundled_srcjars', [])) 406 srcjars = _RebasePath(build_config['gradle'].get('bundled_srcjars', []))
407 if not args.use_gradle_process_resources: 407 if not args.use_gradle_process_resources:
408 srcjars += _RebasePath(build_config['javac']['srcjars']) 408 srcjars += _RebasePath(build_config['javac']['srcjars'])
409 409
410 java_sources_file = build_config['gradle'].get('java_sources_file') 410 java_sources_file = build_config['gradle'].get('java_sources_file')
411 java_files = []
411 if java_sources_file: 412 if java_sources_file:
412 java_sources_file = _RebasePath(java_sources_file) 413 java_sources_file = _RebasePath(java_sources_file)
414 java_files = build_utils.ReadSourcesList(java_sources_file)
413 415
414 java_dirs = _CreateJavaSourceDir(output_dir, entry_output_dir, 416 java_dirs = _CreateJavaSourceDir(output_dir, entry_output_dir, java_files)
415 java_sources_file)
416 if srcjars: 417 if srcjars:
417 java_dirs.append(os.path.join(entry_output_dir, _SRCJARS_SUBDIR)) 418 java_dirs.append(os.path.join(entry_output_dir, _SRCJARS_SUBDIR))
418 419
419 data = _GenerateGradleFile(build_config, build_vars, java_dirs, relativize, 420 data = _GenerateGradleFile(build_config, build_vars, java_dirs, relativize,
420 args.use_gradle_process_resources, 421 args.use_gradle_process_resources,
421 jinja_processor) 422 jinja_processor)
422 if data: 423 if data:
423 project_entries.append(entry) 424 project_entries.append(entry)
425 # Build all paths references by .gradle that exist within output_dir.
426 generated_inputs.extend(srcjars)
427 generated_inputs.extend(p for p in java_files if not p.startswith('..'))
428 generated_inputs.extend(build_config['gradle']['dependent_prebuilt_jars'])
429
424 srcjar_tuples.extend( 430 srcjar_tuples.extend(
425 (s, os.path.join(entry_output_dir, _SRCJARS_SUBDIR)) for s in srcjars) 431 (s, os.path.join(entry_output_dir, _SRCJARS_SUBDIR)) for s in srcjars)
426 _WriteFile(os.path.join(entry_output_dir, 'build.gradle'), data) 432 _WriteFile(os.path.join(entry_output_dir, 'build.gradle'), data)
427 433
428 _WriteFile(os.path.join(gradle_output_dir, 'build.gradle'), 434 _WriteFile(os.path.join(gradle_output_dir, 'build.gradle'),
429 _GenerateRootGradle(jinja_processor)) 435 _GenerateRootGradle(jinja_processor))
430 436
431 _WriteFile(os.path.join(gradle_output_dir, 'settings.gradle'), 437 _WriteFile(os.path.join(gradle_output_dir, 'settings.gradle'),
432 _GenerateSettingsGradle(project_entries)) 438 _GenerateSettingsGradle(project_entries))
433 439
434 sdk_path = _RebasePath(build_vars['android_sdk_root']) 440 sdk_path = _RebasePath(build_vars['android_sdk_root'])
435 _WriteFile(os.path.join(gradle_output_dir, 'local.properties'), 441 _WriteFile(os.path.join(gradle_output_dir, 'local.properties'),
436 _GenerateLocalProperties(sdk_path)) 442 _GenerateLocalProperties(sdk_path))
437 443
444 if generated_inputs:
445 logging.warning('Building generated source files...')
446 targets = _RebasePath(generated_inputs, output_dir)
447 _RunNinja(output_dir, targets)
448
438 if srcjar_tuples: 449 if srcjar_tuples:
439 logging.warning('Building all .srcjar files...')
440 targets = _RebasePath([s[0] for s in srcjar_tuples], output_dir)
441 _RunNinja(output_dir, targets)
442 _ExtractSrcjars(gradle_output_dir, srcjar_tuples) 450 _ExtractSrcjars(gradle_output_dir, srcjar_tuples)
451
443 logging.warning('Project created! (%d subprojects)', len(project_entries)) 452 logging.warning('Project created! (%d subprojects)', len(project_entries))
444 logging.warning('Generated projects work best with Android Studio 2.2') 453 logging.warning('Generated projects work best with Android Studio 2.2')
445 logging.warning('For more tips: https://chromium.googlesource.com/chromium' 454 logging.warning('For more tips: https://chromium.googlesource.com/chromium'
446 '/src.git/+/master/docs/android_studio.md') 455 '/src.git/+/master/docs/android_studio.md')
447 456
448 457
449 if __name__ == '__main__': 458 if __name__ == '__main__':
450 main() 459 main()
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698