Home | History | Annotate | Download | only in gyp
      1 #!/usr/bin/env python
      2 #
      3 # Copyright 2013 The Chromium Authors. All rights reserved.
      4 # Use of this source code is governed by a BSD-style license that can be
      5 # found in the LICENSE file.
      6 
      7 import optparse
      8 import os
      9 import sys
     10 
     11 from util import build_utils
     12 from util import md5_check
     13 
     14 
     15 def DoDex(options, paths):
     16   dx_binary = os.path.join(options.android_sdk_tools, 'dx')
     17   # See http://crbug.com/272064 for context on --force-jumbo.
     18   dex_cmd = [dx_binary, '--dex', '--force-jumbo', '--output', options.dex_path]
     19   if options.no_locals != '0':
     20     dex_cmd.append('--no-locals')
     21 
     22   dex_cmd += paths
     23 
     24   record_path = '%s.md5.stamp' % options.dex_path
     25   md5_check.CallAndRecordIfStale(
     26       lambda: build_utils.CheckOutput(dex_cmd, print_stderr=False),
     27       record_path=record_path,
     28       input_paths=paths,
     29       input_strings=dex_cmd,
     30       force=not os.path.exists(options.dex_path))
     31   build_utils.WriteJson(paths, options.dex_path + '.inputs')
     32 
     33 
     34 def main():
     35   args = build_utils.ExpandFileArgs(sys.argv[1:])
     36 
     37   parser = optparse.OptionParser()
     38   build_utils.AddDepfileOption(parser)
     39 
     40   parser.add_option('--android-sdk-tools',
     41                     help='Android sdk build tools directory.')
     42   parser.add_option('--dex-path', help='Dex output path.')
     43   parser.add_option('--configuration-name',
     44                     help='The build CONFIGURATION_NAME.')
     45   parser.add_option('--proguard-enabled',
     46                     help='"true" if proguard is enabled.')
     47   parser.add_option('--proguard-enabled-input-path',
     48                     help=('Path to dex in Release mode when proguard '
     49                           'is enabled.'))
     50   parser.add_option('--no-locals',
     51                     help='Exclude locals list from the dex file.')
     52   parser.add_option('--inputs', help='A list of additional input paths.')
     53   parser.add_option('--excluded-paths-file',
     54                     help='Path to a file containing a list of paths to exclude '
     55                     'from the dex file.')
     56 
     57   options, paths = parser.parse_args(args)
     58 
     59   required_options = ('android_sdk_tools',)
     60   build_utils.CheckOptions(options, parser, required=required_options)
     61 
     62   if (options.proguard_enabled == 'true'
     63       and options.configuration_name == 'Release'):
     64     paths = [options.proguard_enabled_input_path]
     65 
     66   if options.excluded_paths_file:
     67     exclude_paths = build_utils.ReadJson(options.excluded_paths_file)
     68     paths = [p for p in paths if not p in exclude_paths]
     69 
     70   if options.inputs:
     71     paths += build_utils.ParseGypList(options.inputs)
     72 
     73   DoDex(options, paths)
     74 
     75   if options.depfile:
     76     build_utils.WriteDepfile(
     77         options.depfile,
     78         paths + build_utils.GetPythonDependencies())
     79 
     80 
     81 
     82 if __name__ == '__main__':
     83   sys.exit(main())
     84