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.
11 from util
import build_utils
12 from util
import md5_check
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')
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
,
29 input_strings
=dex_cmd
,
30 force
=not os
.path
.exists(options
.dex_path
))
31 build_utils
.WriteJson(paths
, options
.dex_path
+ '.inputs')
35 args
= build_utils
.ExpandFileArgs(sys
.argv
[1:])
37 parser
= optparse
.OptionParser()
38 build_utils
.AddDepfileOption(parser
)
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 '
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',
54 help='A list of paths to exclude from the dex file.')
56 options
, paths
= parser
.parse_args(args
)
58 required_options
= ('android_sdk_tools',)
59 build_utils
.CheckOptions(options
, parser
, required
=required_options
)
61 if (options
.proguard_enabled
== 'true'
62 and options
.configuration_name
== 'Release'):
63 paths
= [options
.proguard_enabled_input_path
]
66 paths
+= build_utils
.ParseGypList(options
.inputs
)
68 if options
.excluded_paths
:
69 exclude_paths
= build_utils
.ParseGypList(options
.excluded_paths
)
70 paths
= [p
for p
in paths
if not p
in exclude_paths
]
75 build_utils
.WriteDepfile(
77 paths
+ build_utils
.GetPythonDependencies())
81 if __name__
== '__main__':