Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(95)

Side by Side Diff: build/android/gyp/write_build_config.py

Issue 456493002: Add native libraries to gn apks (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # 2 #
3 # Copyright 2014 The Chromium Authors. All rights reserved. 3 # Copyright 2014 The Chromium Authors. All rights reserved.
4 # Use of this source code is governed by a BSD-style license that can be 4 # Use of this source code is governed by a BSD-style license that can be
5 # found in the LICENSE file. 5 # found in the LICENSE file.
6 6
7 """Writes a build_config file. 7 """Writes a build_config file.
8 8
9 The build_config file for a target is a json file containing information about 9 The build_config file for a target is a json file containing information about
10 how to build that target based on the target's dependencies. This includes 10 how to build that target based on the target's dependencies. This includes
(...skipping 18 matching lines...) Expand all
29 a. inputs/deps ensure that the action runs whenever one of the files changes 29 a. inputs/deps ensure that the action runs whenever one of the files changes
30 b. the files are added to the action's depfile 30 b. the files are added to the action's depfile
31 """ 31 """
32 32
33 import optparse 33 import optparse
34 import os 34 import os
35 import sys 35 import sys
36 36
37 from util import build_utils 37 from util import build_utils
38 38
39 import write_ordered_libraries
40
41
39 dep_config_cache = {} 42 dep_config_cache = {}
40 def GetDepConfig(path): 43 def GetDepConfig(path):
41 if not path in dep_config_cache: 44 if not path in dep_config_cache:
42 dep_config_cache[path] = build_utils.ReadJson(path)['deps_info'] 45 dep_config_cache[path] = build_utils.ReadJson(path)['deps_info']
43 return dep_config_cache[path] 46 return dep_config_cache[path]
44 47
45 48
46 def DepsOfType(wanted_type, configs): 49 def DepsOfType(wanted_type, configs):
47 return [c for c in configs if c['type'] == wanted_type] 50 return [c for c in configs if c['type'] == wanted_type]
48 51
(...skipping 18 matching lines...) Expand all
67 'files are handled differently based on the type of this target.') 70 'files are handled differently based on the type of this target.')
68 71
69 # android_resources/apk options 72 # android_resources/apk options
70 parser.add_option('--srcjar', help='Path to target\'s resources srcjar.') 73 parser.add_option('--srcjar', help='Path to target\'s resources srcjar.')
71 parser.add_option('--resources-zip', help='Path to target\'s resources zip.') 74 parser.add_option('--resources-zip', help='Path to target\'s resources zip.')
72 75
73 # android_library/apk options 76 # android_library/apk options
74 parser.add_option('--jar-path', help='Path to target\'s jar output.') 77 parser.add_option('--jar-path', help='Path to target\'s jar output.')
75 parser.add_option('--dex-path', help='Path to target\'s dex output.') 78 parser.add_option('--dex-path', help='Path to target\'s dex output.')
76 79
80 # apk native library options
81 parser.add_option('--native-libs', help='List of top-level native libs.')
82 parser.add_option('--readelf-path', help='Path to toolchain\'s readelf.')
83
77 options, args = parser.parse_args(argv) 84 options, args = parser.parse_args(argv)
78 85
79 if args: 86 if args:
80 parser.error('No positional arguments should be given.') 87 parser.error('No positional arguments should be given.')
81 88
82 89
83 if not options.type in [ 90 if not options.type in [
84 'android_library', 'android_resources', 'android_apk']: 91 'android_library', 'android_resources', 'android_apk']:
85 raise Exception('Unknown type: <%s>' % options.type) 92 raise Exception('Unknown type: <%s>' % options.type)
86 93
87 94
88 required_options = ['build_config'] + { 95 required_options = ['build_config'] + {
89 'android_library': ['jar_path', 'dex_path'], 96 'android_library': ['jar_path', 'dex_path'],
90 'android_resources': ['resources_zip'], 97 'android_resources': ['resources_zip'],
91 'android_apk': ['jar_path', 'dex_path', 'resources_zip'] 98 'android_apk': ['jar_path', 'dex_path', 'resources_zip']
92 }[options.type] 99 }[options.type]
93 100
101 if options.native_libs:
102 required_options += ['readelf_path']
103
94 build_utils.CheckOptions(options, parser, required_options) 104 build_utils.CheckOptions(options, parser, required_options)
95 105
96 possible_deps_config_paths = build_utils.ParseGypList( 106 possible_deps_config_paths = build_utils.ParseGypList(
97 options.possible_deps_configs) 107 options.possible_deps_configs)
98 108
99 109
100
101
102 allow_unknown_deps = options.type == 'android_apk' 110 allow_unknown_deps = options.type == 'android_apk'
103 unknown_deps = [ 111 unknown_deps = [
104 c for c in possible_deps_config_paths if not os.path.exists(c)] 112 c for c in possible_deps_config_paths if not os.path.exists(c)]
105 if unknown_deps and not allow_unknown_deps: 113 if unknown_deps and not allow_unknown_deps:
106 raise Exception('Unknown deps: ' + unknown_deps) 114 raise Exception('Unknown deps: ' + unknown_deps)
107 115
108 direct_deps_config_paths = [ 116 direct_deps_config_paths = [
109 c for c in possible_deps_config_paths if not c in unknown_deps] 117 c for c in possible_deps_config_paths if not c in unknown_deps]
110 all_deps_config_paths = GetAllDepsConfigsInOrder(direct_deps_config_paths) 118 all_deps_config_paths = GetAllDepsConfigsInOrder(direct_deps_config_paths)
111 119
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 config['resources']['dependency_zips'] = [ 158 config['resources']['dependency_zips'] = [
151 c['resources_zip'] for c in all_resources_deps] 159 c['resources_zip'] for c in all_resources_deps]
152 160
153 if options.type == 'android_apk': 161 if options.type == 'android_apk':
154 config['apk_dex'] = {} 162 config['apk_dex'] = {}
155 dex_config = config['apk_dex'] 163 dex_config = config['apk_dex']
156 # TODO(cjhopman): proguard version 164 # TODO(cjhopman): proguard version
157 dex_deps_files = [c['dex_path'] for c in all_library_deps] 165 dex_deps_files = [c['dex_path'] for c in all_library_deps]
158 dex_config['dependency_dex_files'] = dex_deps_files 166 dex_config['dependency_dex_files'] = dex_deps_files
159 167
168 library_paths = []
169 java_libraries_list = []
170 if options.native_libs:
171 libraries = build_utils.ParseGypList(options.native_libs)
172 libraries_dir = os.path.dirname(libraries[0])
173 write_ordered_libraries.SetReadelfPath(options.readelf_path)
174 write_ordered_libraries.SetLibraryDirs([libraries_dir])
175 all_native_library_deps = (
176 write_ordered_libraries.GetSortedTransitiveDependenciesForBinaries(
177 libraries))
178 java_libraries_list = '{%s}' % ','.join(
179 ['"%s"' % s for s in all_native_library_deps])
180 library_paths = map(
181 write_ordered_libraries.FullLibraryPath, all_native_library_deps)
182
183 config['native'] = {
184 'libraries': library_paths,
185 'java_libraries_list': java_libraries_list
186 }
187
160 build_utils.WriteJson(config, options.build_config, only_if_changed=True) 188 build_utils.WriteJson(config, options.build_config, only_if_changed=True)
161 189
162 if options.depfile: 190 if options.depfile:
163 build_utils.WriteDepfile( 191 build_utils.WriteDepfile(
164 options.depfile, 192 options.depfile,
165 all_deps_config_paths + build_utils.GetPythonDependencies()) 193 all_deps_config_paths + build_utils.GetPythonDependencies())
166 194
167 195
168 if __name__ == '__main__': 196 if __name__ == '__main__':
169 sys.exit(main(sys.argv[1:])) 197 sys.exit(main(sys.argv[1:]))
OLDNEW
« no previous file with comments | « build/android/gyp/strip_library_for_device.py ('k') | build/android/gyp/write_ordered_libraries.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698