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

Side by Side Diff: build/android/gradle/gn_to_cmake.py

Issue 2866863003: [Android, Tools] Speed up gn_to_cmake.py with caching (Closed)
Patch Set: Created 3 years, 7 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright 2016 The Chromium Authors. All rights reserved. 2 # Copyright 2016 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """ 6 """
7 Usage: gn_to_cmake.py <json_file_name> 7 Usage: gn_to_cmake.py <json_file_name>
8 8
9 gn gen out/config --ide=json --json-ide-script=../../gn/gn_to_cmake.py 9 gn gen out/config --ide=json --json-ide-script=../../gn/gn_to_cmake.py
10 10
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
182 return CMakeTargetEscape(cmake_target_name) 182 return CMakeTargetEscape(cmake_target_name)
183 183
184 184
185 class Project(object): 185 class Project(object):
186 def __init__(self, project_json): 186 def __init__(self, project_json):
187 self.targets = project_json['targets'] 187 self.targets = project_json['targets']
188 build_settings = project_json['build_settings'] 188 build_settings = project_json['build_settings']
189 self.root_path = build_settings['root_path'] 189 self.root_path = build_settings['root_path']
190 self.build_path = posixpath.join(self.root_path, 190 self.build_path = posixpath.join(self.root_path,
191 build_settings['build_dir'][2:]) 191 build_settings['build_dir'][2:])
192 self.object_source_deps = {}
192 193
193 def GetAbsolutePath(self, path): 194 def GetAbsolutePath(self, path):
194 if path.startswith("//"): 195 if path.startswith("//"):
195 return self.root_path + "/" + path[2:] 196 return self.root_path + "/" + path[2:]
196 else: 197 else:
197 return path 198 return path
198 199
199 def GetObjectSourceDependencies(self, gn_target_name, object_dependencies): 200 def GetObjectSourceDependencies(self, gn_target_name, object_dependencies):
200 """All OBJECT libraries whose sources have not been absorbed.""" 201 """All OBJECT libraries whose sources have not been absorbed."""
202 if gn_target_name in self.object_source_deps:
203 object_dependencies.update(self.object_source_deps[gn_target_name])
204 return
205 target_deps = set()
201 dependencies = self.targets[gn_target_name].get('deps', []) 206 dependencies = self.targets[gn_target_name].get('deps', [])
202 for dependency in dependencies: 207 for dependency in dependencies:
203 dependency_type = self.targets[dependency].get('type', None) 208 dependency_type = self.targets[dependency].get('type', None)
204 if dependency_type == 'source_set': 209 if dependency_type == 'source_set':
205 object_dependencies.add(dependency) 210 target_deps.add(dependency)
206 if dependency_type not in gn_target_types_that_absorb_objects: 211 if dependency_type not in gn_target_types_that_absorb_objects:
207 self.GetObjectSourceDependencies(dependency, object_dependencies) 212 self.GetObjectSourceDependencies(dependency, target_deps)
213 self.object_source_deps[gn_target_name] = target_deps
214 object_dependencies.update(target_deps)
208 215
209 def GetObjectLibraryDependencies(self, gn_target_name, object_dependencies): 216 def GetObjectLibraryDependencies(self, gn_target_name, object_dependencies):
210 """All OBJECT libraries whose libraries have not been absorbed.""" 217 """All OBJECT libraries whose libraries have not been absorbed."""
211 dependencies = self.targets[gn_target_name].get('deps', []) 218 dependencies = self.targets[gn_target_name].get('deps', [])
212 for dependency in dependencies: 219 for dependency in dependencies:
213 dependency_type = self.targets[dependency].get('type', None) 220 dependency_type = self.targets[dependency].get('type', None)
214 if dependency_type == 'source_set': 221 if dependency_type == 'source_set':
215 object_dependencies.add(dependency) 222 object_dependencies.add(dependency)
216 self.GetObjectLibraryDependencies(dependency, object_dependencies) 223 self.GetObjectLibraryDependencies(dependency, object_dependencies)
217 224
(...skipping 453 matching lines...) Expand 10 before | Expand all | Expand 10 after
671 json_path = sys.argv[1] 678 json_path = sys.argv[1]
672 project = None 679 project = None
673 with open(json_path, 'r') as json_file: 680 with open(json_path, 'r') as json_file:
674 project = json.loads(json_file.read()) 681 project = json.loads(json_file.read())
675 682
676 WriteProject(Project(project)) 683 WriteProject(Project(project))
677 684
678 685
679 if __name__ == "__main__": 686 if __name__ == "__main__":
680 main() 687 main()
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698