From 0b510a994692df0137b39d38427e7c7311bdad27 Mon Sep 17 00:00:00 2001 From: "korniltsev.anatoly" Date: Tue, 5 Sep 2017 08:12:30 -0700 Subject: [PATCH] Add --build_dir arg to build_aar.py This will enable incremental build for aar BUG=None Review-Url: https://codereview.webrtc.org/3008973002 Cr-Commit-Position: refs/heads/master@{#19689} --- tools_webrtc/android/build_aar.py | 35 +++++++++++++++++-------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/tools_webrtc/android/build_aar.py b/tools_webrtc/android/build_aar.py index 50f1ff4e7c..cc56abda14 100755 --- a/tools_webrtc/android/build_aar.py +++ b/tools_webrtc/android/build_aar.py @@ -50,6 +50,8 @@ from generate_licenses import LicenseBuilder def _ParseArgs(): parser = argparse.ArgumentParser(description='libwebrtc.aar generator.') + parser.add_argument('--build-dir', + help='Build dir. By default will create and use temporary dir.') parser.add_argument('--output', default='libwebrtc.aar', help='Output file of the script.') parser.add_argument('--arch', default=DEFAULT_ARCHS, nargs='*', @@ -87,9 +89,9 @@ def _EncodeForGN(value): return repr(value) -def _GetOutputDirectory(tmp_dir, arch): +def _GetOutputDirectory(build_dir, arch): """Returns the GN output directory for the target architecture.""" - return os.path.join(tmp_dir, arch) + return os.path.join(build_dir, arch) def _GetTargetCpu(arch): @@ -118,10 +120,10 @@ def _GetArmVersion(arch): raise Exception('Unknown arch: ' + arch) -def Build(tmp_dir, arch, use_goma, extra_gn_args): +def Build(build_dir, arch, use_goma, extra_gn_args): """Generates target architecture using GN and builds it using ninja.""" logging.info('Building: %s', arch) - output_directory = _GetOutputDirectory(tmp_dir, arch) + output_directory = _GetOutputDirectory(build_dir, arch) gn_args = { 'target_os': 'android', 'is_debug': False, @@ -144,18 +146,18 @@ def Build(tmp_dir, arch, use_goma, extra_gn_args): _RunNinja(output_directory, ninja_args) -def CollectCommon(aar_file, tmp_dir, arch): +def CollectCommon(aar_file, build_dir, arch): """Collects architecture independent files into the .aar-archive.""" logging.info('Collecting common files.') - output_directory = _GetOutputDirectory(tmp_dir, arch) + output_directory = _GetOutputDirectory(build_dir, arch) aar_file.write(MANIFEST_FILE, 'AndroidManifest.xml') aar_file.write(os.path.join(output_directory, JAR_FILE), 'classes.jar') -def Collect(aar_file, tmp_dir, arch): +def Collect(aar_file, build_dir, arch): """Collects architecture specific files into the .aar-archive.""" logging.info('Collecting: %s', arch) - output_directory = _GetOutputDirectory(tmp_dir, arch) + output_directory = _GetOutputDirectory(build_dir, arch) abi_dir = os.path.join('jni', arch) for so_file in NEEDED_SO_FILES: @@ -163,9 +165,9 @@ def Collect(aar_file, tmp_dir, arch): os.path.join(abi_dir, so_file)) -def GenerateLicenses(output_dir, tmp_dir, archs): +def GenerateLicenses(output_dir, build_dir, archs): builder = LicenseBuilder( - [_GetOutputDirectory(tmp_dir, arch) for arch in archs], TARGETS) + [_GetOutputDirectory(build_dir, arch) for arch in archs], TARGETS) builder.GenerateLicenseText(output_dir) @@ -173,21 +175,22 @@ def main(): args = _ParseArgs() logging.basicConfig(level=logging.DEBUG if args.verbose else logging.INFO) - tmp_dir = tempfile.mkdtemp() + build_dir = args.build_dir if args.build_dir else tempfile.mkdtemp() for arch in args.arch: - Build(tmp_dir, arch, args.use_goma, args.extra_gn_args) + Build(build_dir, arch, args.use_goma, args.extra_gn_args) with zipfile.ZipFile(args.output, 'w') as aar_file: # Architecture doesn't matter here, arbitrarily using the first one. - CollectCommon(aar_file, tmp_dir, args.arch[0]) + CollectCommon(aar_file, build_dir, args.arch[0]) for arch in args.arch: - Collect(aar_file, tmp_dir, arch) + Collect(aar_file, build_dir, arch) license_dir = os.path.dirname(os.path.realpath(args.output)) - GenerateLicenses(license_dir, tmp_dir, args.arch) + GenerateLicenses(license_dir, build_dir, args.arch) - shutil.rmtree(tmp_dir, True) + if not args.build_dir: + shutil.rmtree(build_dir, True) if __name__ == '__main__':