blob: 56d1d16e1ff250ca3d4c75468b0655a4f6fd3286 [file] [log] [blame]
#!/usr/bin/env python
#
# Copyright (c) 2013 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.
"""Builds the WebRTC Video Demo for Android.
This script is designed as an annotation script to be run by a Chrome Buildbot.
PREREQUISITES: You must have built WebRTC with the right environment set (the
one you get when sourcing build/android/envsetup.sh) before building with this
script.
NOTICE: To build successfully, you have to have Ant installed and have your
.gclient file setup with the target_os = ["android"] variable appended to the
last line of your WebRTC solution, so it looks like this:
];target_os = ["android"]
Then run 'gclient sync' to sync out the required Android SDK and NDK files into
the third_party directory.
If you want to get additional platform-specific dependencies in the same
checkout, add them to the list too, e.g. target_os = ["android", "unix"].
"""
import optparse
import os
import subprocess
import sys
_CURRENT_DIR = os.path.abspath(os.path.dirname(__file__))
_ROOT_DIR = os.path.abspath(os.path.join(_CURRENT_DIR, '..', '..', '..', '..'))
_ANDROID_ENV_SCRIPT = os.path.join(_ROOT_DIR, 'build', 'android', 'envsetup.sh')
def main():
parser = optparse.OptionParser('usage: %prog -t <target> -a <arch>')
parser.add_option('-t', '--target', default='debug',
help='Compile target (debug/release). Default: %default')
parser.add_option('-a', '--arch', type='choice', choices=['arm', 'ia32'],
help='Compile arch (arm/ia32).')
# Build and factory properties are currently unused but are required to avoid
# errors when the script is executed by the buildbots.
parser.add_option('--build-properties', help='Build properties (unused)')
parser.add_option('--factory-properties', help='Factory properties (unused)')
options, _args = parser.parse_args()
if options.arch.lower() == 'ia32':
target_arch = 'x86'
app_abi = 'x86'
elif options.arch.lower() == 'arm':
target_arch = 'arm'
app_abi = 'armeabi-v7a'
else:
print 'Unsupported target platform'
raise
def RunInAndroidEnv(cmd):
return 'source %s --target-arch=%s && %s' % (_ANDROID_ENV_SCRIPT,
target_arch, cmd)
print '@@@BUILD_STEP ndk-build@@@'
cmd = RunInAndroidEnv('ndk-build APP_ABI=%s' % app_abi)
print cmd
try:
subprocess.check_call(cmd, cwd=_CURRENT_DIR, executable='/bin/bash',
shell=True)
except subprocess.CalledProcessError as e:
print 'NDK build failed: %s' % e
print '@@@STEP_FAILURE@@@'
return 1
print '@@@BUILD_STEP ant-build@@@'
cmd = RunInAndroidEnv('ant %s' % options.target.lower())
print cmd
try:
subprocess.check_call(cmd, cwd=_CURRENT_DIR, executable='/bin/bash',
shell=True)
except subprocess.CalledProcessError as e:
print 'Ant build failed: %s' % e
print '@@@STEP_FAILURE@@@'
return 2
print 'WebRTC Demo build completed.'
return 0
if __name__ == '__main__':
sys.exit(main())