OLD | NEW |
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 Loading... |
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 Loading... |
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() |
OLD | NEW |