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   dex_cmd += paths
     22 
     23   record_path = '%s.md5.stamp' % options.dex_path
     24   md5_check.CallAndRecordIfStale(
     25       lambda: build_utils.CheckOutput(dex_cmd, print_stderr=False),
     26       record_path=record_path,
     27       input_paths=paths,
     28       input_strings=dex_cmd)
     29 
     30   build_utils.Touch(options.dex_path)
     31 
     32 
     33 def main(argv):
     34   parser = optparse.OptionParser()
     35   parser.add_option('--android-sdk-tools',
     36                     help='Android sdk build tools directory.')
     37   parser.add_option('--dex-path', help='Dex output path.')
     38   parser.add_option('--configuration-name',
     39                     help='The build CONFIGURATION_NAME.')
     40   parser.add_option('--proguard-enabled',
     41                     help='"true" if proguard is enabled.')
     42   parser.add_option('--proguard-enabled-input-path',
     43                     help=('Path to dex in Release mode when proguard '
     44                           'is enabled.'))
     45   parser.add_option('--no-locals',
     46                     help='Exclude locals list from the dex file.')
     47   parser.add_option('--stamp', help='Path to touch on success.')
     48 
     49   # TODO(newt): remove this once http://crbug.com/177552 is fixed in ninja.
     50   parser.add_option('--ignore', help='Ignored.')
     51 
     52   options, paths = parser.parse_args()
     53 
     54   if (options.proguard_enabled == 'true'
     55       and options.configuration_name == 'Release'):
     56     paths = [options.proguard_enabled_input_path]
     57 
     58   DoDex(options, paths)
     59 
     60   if options.stamp:
     61     build_utils.Touch(options.stamp)
     62 
     63 
     64 if __name__ == '__main__':
     65   sys.exit(main(sys.argv))
     66