Update AOSP reference
This updates the pinned AOSP to a version where USE_D8 is used for building
with d8.
Updates the related scripts.
Bug: 65865951
Change-Id: I9a7251855ad1079752dfa5f63bd9b8e2df221d01
diff --git a/tools/build_aosp.py b/tools/build_aosp.py
index 0079554..b62ec02 100755
--- a/tools/build_aosp.py
+++ b/tools/build_aosp.py
@@ -26,7 +26,7 @@
description = 'Checkout the AOSP source tree.')
utils_aosp.add_common_arguments(parser)
parser.add_argument('--tool',
- choices = ['jack', 'd8', 'r8', 'default'],
+ choices = ['d8', 'r8', 'default'],
default = 'd8',
help='Compiler tool to use. Defaults to d8.')
parser.add_argument('--mmm',
@@ -35,130 +35,51 @@
parser.add_argument('--mmma',
action = 'store_true',
help='Use mmma instead of make')
- parser.add_argument('--rebuild-system-image-after-mmm',
+ parser.add_argument('--show-commands',
action = 'store_true',
- help='Build the system image after building a package with mmm or mmma')
- parser.add_argument('--clean-dex',
- action = 'store_true',
- help = 'Remove all dex files before the build. By default they'
- " are removed only if '--tool=d8' and if they are older than the D8 tool")
+ help='Show commands executed during build.')
parser.add_argument('-j',
help='Projects to fetch simultaneously. ' +
'Defaults to ' + str(J_DEFAULT) + '.',
type=int,
- default=J_DEFAULT)
+ default=-1)
parser.add_argument('target', nargs='?')
return parser.parse_args()
-def setup_and_clean_dex(aosp_root, tool, clean_dex):
- print "Running AOSP build in " + aosp_root
+def build_aosp(aosp_root, lunch, make, tool,
+ concurrency, target, show_commands):
+ d8_option = 'USE_D8=false'
+ if tool == 'd8' or tool == 'r8' :
+ d8_option = 'USE_D8=true'
- out = join(aosp_root, 'out')
- utils.makedirs_if_needed(out)
-
- # remove dex files older than the current d8 tool
- counter = 0
- if tool == 'd8' or clean_dex:
- if not clean_dex:
- d8jar_mtime = os.path.getmtime(utils.D8_JAR)
- dex_files = (chain.from_iterable(glob(join(x[0], '*.dex'))
- for x in os.walk(out)))
- for f in dex_files:
- if clean_dex or os.path.getmtime(f) <= d8jar_mtime:
- os.remove(f)
- counter += 1
- if counter > 0:
- print('Removed {} dex files.'.format(counter))
-
-PROGUARD_SCRIPT = """#!/bin/sh
-#
-# Start-up script for ProGuard -- free class file shrinker, optimizer,
-# obfuscator, and preverifier for Java bytecode.
-#
-# Note: when passing file names containing spaces to this script,
-# you\'ll have to add escaped quotes around them, e.g.
-# "\"/My Directory/My File.txt\""
-
-# Account for possibly missing/basic readlink.
-# POSIX conformant (dash/ksh/zsh/bash).
-PROGUARD=`readlink -f "$0" 2>/dev/null`
-if test "$PROGUARD" = \'\'
-then
- PROGUARD=`readlink "$0" 2>/dev/null`
- if test "$PROGUARD" = \'\'
- then
- PROGUARD="$0"
- fi
-fi
-
-PROGUARD_HOME=`dirname "$PROGUARD"`/..
-
-# BEGIN android-changed Added -Xmx2G for Mac builds
-java -Xmx2G -jar "$PROGUARD_HOME/lib/proguard.jar" "$@"
-# END android-changed
-"""
-
-def prepare_for_proguard(aosp_root):
- # Write the default proguard.sh script.
- proguard_script = join(aosp_root, 'external', 'proguard', 'bin', 'proguard.sh')
- with open(proguard_script, 'w') as f:
- f.write(PROGUARD_SCRIPT)
-
- os.chmod(proguard_script, S_IRWXU)
-
-def prepare_for_r8(aosp_root):
- # Write the proguard.sh script invoking R8.
- compat_proguard_jar = join(
- utils.REPO_ROOT, 'build', 'libs', 'compatproguard.jar')
- proguard_script = join(aosp_root, 'external', 'proguard', 'bin', 'proguard.sh')
- with open(proguard_script, 'w') as f:
- f.write('java -jar ' + compat_proguard_jar + ' "$@" --min-api 10000')
- os.chmod(proguard_script, S_IRWXU)
-
-def build_aosp(aosp_root, lunch, make, tool, concurrency, target):
- jack_option = 'ANDROID_COMPILE_WITH_JACK=' \
- + ('true' if tool == 'jack' else 'false')
-
- # DX_ALT_JAR need to be cleared if not set, for 'make' to work properly
- alt_jar_option = 'DX_ALT_JAR='
- if tool == 'd8':
- alt_jar_option += utils.COMPATDX_JAR
-
+ r8_option = 'USE_R8=false'
if tool == 'r8':
- prepare_for_r8(aosp_root)
- # Use D8 compatdx dexer with hack for forwarding the R8 dex file.
- alt_jar_option += utils.COMPATDX_JAR
- else:
- prepare_for_proguard(aosp_root)
+ r8_option = 'USE_R8=true'
- j_option = '-j' + str(concurrency);
- print("-- Building Android image with '{} {} {} {}'." \
- .format(make, j_option, jack_option, alt_jar_option))
+ j_option = '-j'
+ if concurrency > 0:
+ j_option += str(concurrency)
- command = [make, j_option, jack_option, alt_jar_option]
+ command = [make, j_option]
+ if show_commands:
+ command.append('showcommands')
+ command.extend([d8_option, r8_option])
if target:
command.append(target)
+ print 'Building using: ' + ' '.join(command)
utils_aosp.run_through_aosp_helper(lunch, command, aosp_root)
def Main():
args = parse_arguments()
- # Build the required tools.
- if args.tool == 'd8' or args.tool == 'r8':
- gradle.RunGradle(['d8', 'r8', 'compatdx', 'compatproguard'])
-
- setup_and_clean_dex(args.aosp_root, args.tool, args.clean_dex)
-
- make = 'make'
+ make = 'm'
if args.mmm:
make = 'mmm'
if args.mmma:
make = 'mmma'
- build_aosp(args.aosp_root, args.lunch, make, args.tool, args.j, args.target)
- # Call make to re-build the system image if requested.
- if args.rebuild_system_image_after_mmm and (args.mmm or args.mmma):
- build_aosp(args.aosp_root, args.lunch, 'make', 'd8', args.j, None)
+ build_aosp(args.aosp_root, args.lunch, make, args.tool,
+ args.j, args.target, args.show_commands)
if __name__ == '__main__':
sys.exit(Main())