Index: build/android/gyp/dex.py |
diff --git a/build/android/gyp/dex.py b/build/android/gyp/dex.py |
new file mode 100755 |
index 0000000000000000000000000000000000000000..c26d23a61166627dba6c0acddd189301dd35c18a |
--- /dev/null |
+++ b/build/android/gyp/dex.py |
@@ -0,0 +1,89 @@ |
+#!/usr/bin/env python |
+# |
+# Copyright 2013 The Chromium Authors. All rights reserved. |
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+ |
+import optparse |
+import os |
+import sys |
+ |
+from util import build_utils |
+from util import md5_check |
+ |
+ |
+def DoDex(options, paths): |
+ dx_binary = os.path.join(options.android_sdk_tools, 'dx') |
+ # See http://crbug.com/272064 for context on --force-jumbo. |
+ dex_cmd = [dx_binary, '--dex', '--force-jumbo', '--output', options.dex_path] |
+ if options.no_locals != '0': |
+ dex_cmd.append('--no-locals') |
+ |
+ dex_cmd += paths |
+ |
+ record_path = '%s.md5.stamp' % options.dex_path |
+ md5_check.CallAndRecordIfStale( |
+ lambda: build_utils.CheckOutput(dex_cmd, print_stderr=False), |
+ record_path=record_path, |
+ input_paths=paths, |
+ input_strings=dex_cmd, |
+ force=not os.path.exists(options.dex_path)) |
+ build_utils.WriteJson( |
+ [os.path.relpath(p, options.output_directory) for p in paths], |
+ options.dex_path + '.inputs') |
+ |
+ |
+def main(): |
+ args = build_utils.ExpandFileArgs(sys.argv[1:]) |
+ |
+ parser = optparse.OptionParser() |
+ build_utils.AddDepfileOption(parser) |
+ |
+ parser.add_option('--android-sdk-tools', |
+ help='Android sdk build tools directory.') |
+ parser.add_option('--output-directory', |
+ default=os.getcwd(), |
+ help='Path to the output build directory.') |
+ parser.add_option('--dex-path', help='Dex output path.') |
+ parser.add_option('--configuration-name', |
+ help='The build CONFIGURATION_NAME.') |
+ parser.add_option('--proguard-enabled', |
+ help='"true" if proguard is enabled.') |
+ parser.add_option('--proguard-enabled-input-path', |
+ help=('Path to dex in Release mode when proguard ' |
+ 'is enabled.')) |
+ parser.add_option('--no-locals', |
+ help='Exclude locals list from the dex file.') |
+ parser.add_option('--inputs', help='A list of additional input paths.') |
+ parser.add_option('--excluded-paths', |
+ help='A list of paths to exclude from the dex file.') |
+ |
+ options, paths = parser.parse_args(args) |
+ |
+ required_options = ('android_sdk_tools',) |
+ build_utils.CheckOptions(options, parser, required=required_options) |
+ |
+ if (options.proguard_enabled == 'true' |
+ and options.configuration_name == 'Release'): |
+ paths = [options.proguard_enabled_input_path] |
+ |
+ if options.inputs: |
+ paths += build_utils.ParseGypList(options.inputs) |
+ |
+ if options.excluded_paths: |
+ # Excluded paths are relative to the output directory. |
+ exclude_paths = build_utils.ParseGypList(options.excluded_paths) |
+ paths = [p for p in paths if not |
+ os.path.relpath(p, options.output_directory) in exclude_paths] |
+ |
+ DoDex(options, paths) |
+ |
+ if options.depfile: |
+ build_utils.WriteDepfile( |
+ options.depfile, |
+ paths + build_utils.GetPythonDependencies()) |
+ |
+ |
+ |
+if __name__ == '__main__': |
+ sys.exit(main()) |