| Index: tools-webrtc/android/build_aar.py
|
| diff --git a/tools-webrtc/android/build_aar.py b/tools-webrtc/android/build_aar.py
|
| deleted file mode 100755
|
| index 9db8f8f2b5010e2b9df4d40152850233f862e854..0000000000000000000000000000000000000000
|
| --- a/tools-webrtc/android/build_aar.py
|
| +++ /dev/null
|
| @@ -1,180 +0,0 @@
|
| -#!/usr/bin/env python
|
| -
|
| -# Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.
|
| -#
|
| -# Use of this source code is governed by a BSD-style license
|
| -# that can be found in the LICENSE file in the root of the source
|
| -# tree. An additional intellectual property rights grant can be found
|
| -# in the file PATENTS. All contributing project authors may
|
| -# be found in the AUTHORS file in the root of the source tree.
|
| -
|
| -"""Script to generate libwebrtc.aar for distribution.
|
| -
|
| -The script has to be run from the root src folder.
|
| -./tools-webrtc/android/build_aar.py
|
| -
|
| -.aar-file is just a zip-archive containing the files of the library. The file
|
| -structure generated by this script looks like this:
|
| - - AndroidManifest.xml
|
| - - classes.jar
|
| - - libs/
|
| - - armeabi-v7a/
|
| - - libjingle_peerconnection_so.so
|
| - - x86/
|
| - - libjingle_peerconnection_so.so
|
| -"""
|
| -
|
| -import argparse
|
| -import logging
|
| -import os
|
| -import shutil
|
| -import subprocess
|
| -import sys
|
| -import tempfile
|
| -import zipfile
|
| -
|
| -
|
| -DEFAULT_ARCHS = ['armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64']
|
| -NEEDED_SO_FILES = ['libjingle_peerconnection_so.so']
|
| -JAR_FILE = 'lib.java/webrtc/sdk/android/libwebrtc.jar'
|
| -MANIFEST_FILE = 'webrtc/sdk/android/AndroidManifest.xml'
|
| -TARGETS = [
|
| - 'webrtc/sdk/android:libwebrtc',
|
| - 'webrtc/sdk/android:libjingle_peerconnection_so',
|
| -]
|
| -
|
| -
|
| -def _ParseArgs():
|
| - parser = argparse.ArgumentParser(description='libwebrtc.aar generator.')
|
| - parser.add_argument('--output', default='libwebrtc.aar',
|
| - help='Output file of the script.')
|
| - parser.add_argument('--arch', default=DEFAULT_ARCHS, nargs='*',
|
| - help='Architectures to build. Defaults to %(default)s.')
|
| - parser.add_argument('--use-goma', action='store_true', default=False,
|
| - help='Use goma.')
|
| - parser.add_argument('--verbose', action='store_true', default=False,
|
| - help='Debug logging.')
|
| - parser.add_argument('--extra-gn-args', default=[], nargs='*',
|
| - help='Additional GN args to be used during Ninja generation.')
|
| - return parser.parse_args()
|
| -
|
| -
|
| -def _RunGN(args):
|
| - cmd = ['gn']
|
| - cmd.extend(args)
|
| - logging.debug('Running: %r', cmd)
|
| - subprocess.check_call(cmd)
|
| -
|
| -
|
| -def _RunNinja(output_directory, args):
|
| - cmd = ['ninja', '-C', output_directory]
|
| - cmd.extend(args)
|
| - logging.debug('Running: %r', cmd)
|
| - subprocess.check_call(cmd)
|
| -
|
| -
|
| -def _EncodeForGN(value):
|
| - """Encodes value as a GN literal."""
|
| - if type(value) is str:
|
| - return '"' + value + '"'
|
| - elif type(value) is bool:
|
| - return repr(value).lower()
|
| - else:
|
| - return repr(value)
|
| -
|
| -
|
| -def _GetOutputDirectory(tmp_dir, arch):
|
| - """Returns the GN output directory for the target architecture."""
|
| - return os.path.join(tmp_dir, arch)
|
| -
|
| -
|
| -def _GetTargetCpu(arch):
|
| - """Returns target_cpu for the GN build with the given architecture."""
|
| - if arch in ['armeabi', 'armeabi-v7a']:
|
| - return 'arm'
|
| - elif arch == 'arm64-v8a':
|
| - return 'arm64'
|
| - elif arch == 'x86':
|
| - return 'x86'
|
| - elif arch == 'x86_64':
|
| - return 'x64'
|
| - else:
|
| - raise Exception('Unknown arch: ' + arch)
|
| -
|
| -
|
| -def _GetArmVersion(arch):
|
| - """Returns arm_version for the GN build with the given architecture."""
|
| - if arch == 'armeabi':
|
| - return 6
|
| - elif arch == 'armeabi-v7a':
|
| - return 7
|
| - elif arch in ['arm64-v8a', 'x86', 'x86_64']:
|
| - return None
|
| - else:
|
| - raise Exception('Unknown arch: ' + arch)
|
| -
|
| -
|
| -def Build(tmp_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)
|
| - gn_args = {
|
| - 'target_os': 'android',
|
| - 'is_debug': False,
|
| - 'is_component_build': False,
|
| - 'target_cpu': _GetTargetCpu(arch),
|
| - 'use_goma': use_goma
|
| - }
|
| - arm_version = _GetArmVersion(arch)
|
| - if arm_version:
|
| - gn_args['arm_version'] = arm_version
|
| - gn_args_str = '--args=' + ' '.join([
|
| - k + '=' + _EncodeForGN(v) for k, v in gn_args.items()] + extra_gn_args)
|
| -
|
| - _RunGN(['gen', output_directory, gn_args_str])
|
| -
|
| - ninja_args = TARGETS
|
| - if use_goma:
|
| - ninja_args.extend(['-j', '200'])
|
| - _RunNinja(output_directory, ninja_args)
|
| -
|
| -
|
| -def CollectCommon(aar_file, tmp_dir, arch):
|
| - """Collects architecture independent files into the .aar-archive."""
|
| - logging.info('Collecting common files.')
|
| - output_directory = _GetOutputDirectory(tmp_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):
|
| - """Collects architecture specific files into the .aar-archive."""
|
| - logging.info('Collecting: %s', arch)
|
| - output_directory = _GetOutputDirectory(tmp_dir, arch)
|
| -
|
| - abi_dir = os.path.join('jni', arch)
|
| - for so_file in NEEDED_SO_FILES:
|
| - aar_file.write(os.path.join(output_directory, so_file),
|
| - os.path.join(abi_dir, so_file))
|
| -
|
| -
|
| -def main():
|
| - args = _ParseArgs()
|
| - logging.basicConfig(level=logging.DEBUG if args.verbose else logging.INFO)
|
| -
|
| - tmp_dir = tempfile.mkdtemp()
|
| -
|
| - for arch in args.arch:
|
| - Build(tmp_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])
|
| - for arch in args.arch:
|
| - Collect(aar_file, tmp_dir, arch)
|
| -
|
| - shutil.rmtree(tmp_dir, True)
|
| -
|
| -
|
| -if __name__ == '__main__':
|
| - sys.exit(main())
|
|
|