Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 # Copyright (c) 2012 Google Inc. All rights reserved. | 1 # Copyright (c) 2012 Google Inc. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 import gyp | 5 import gyp |
| 6 import gyp.common | 6 import gyp.common |
| 7 import gyp.system_test | 7 import gyp.system_test |
| 8 import gyp.xcode_emulation | 8 import gyp.xcode_emulation |
| 9 import os.path | 9 import os.path |
| 10 import re | 10 import re |
| (...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 259 | 259 |
| 260 # If we have actions/rules/copies, we depend directly on those, but | 260 # If we have actions/rules/copies, we depend directly on those, but |
| 261 # otherwise we depend on dependent target's actions/rules/copies etc. | 261 # otherwise we depend on dependent target's actions/rules/copies etc. |
| 262 # We never need to explicitly depend on previous target's link steps, | 262 # We never need to explicitly depend on previous target's link steps, |
| 263 # because no compile ever depends on them. | 263 # because no compile ever depends on them. |
| 264 compile_depends = self.WriteCollapsedDependencies('compile_depends', | 264 compile_depends = self.WriteCollapsedDependencies('compile_depends', |
| 265 sources_depends or compile_depends) | 265 sources_depends or compile_depends) |
| 266 | 266 |
| 267 # Write out the compilation steps, if any. | 267 # Write out the compilation steps, if any. |
| 268 link_deps = [] | 268 link_deps = [] |
| 269 has_binary = True | |
| 269 sources = spec.get('sources', []) + extra_sources | 270 sources = spec.get('sources', []) + extra_sources |
| 270 if sources: | 271 if sources: |
| 271 link_deps = self.WriteSources( | 272 link_deps = self.WriteSources( |
| 272 config_name, config, sources, compile_depends, | 273 config_name, config, sources, compile_depends, |
| 273 gyp.xcode_emulation.MacPrefixHeader( | 274 gyp.xcode_emulation.MacPrefixHeader( |
| 274 self.xcode_settings, self.GypPathToNinja, | 275 self.xcode_settings, self.GypPathToNinja, |
| 275 lambda path, lang: self.GypPathToUniqueOutput(path + '-' + lang))) | 276 lambda path, lang: self.GypPathToUniqueOutput(path + '-' + lang))) |
| 276 # Some actions/rules output 'sources' that are already object files. | 277 # Some actions/rules output 'sources' that are already object files. |
| 277 link_deps += [self.GypPathToNinja(f) for f in sources if f.endswith('.o')] | 278 link_deps += [self.GypPathToNinja(f) for f in sources if f.endswith('.o')] |
| 279 else: | |
| 280 has_binary = False | |
| 278 | 281 |
| 279 # The final output of our target depends on the last output of the | 282 # The final output of our target depends on the last output of the |
| 280 # above steps. | 283 # above steps. |
| 281 output = output_binary = None | 284 output = output_binary = None |
| 282 final_deps = link_deps or sources_depends or actions_depends | 285 final_deps = link_deps or sources_depends or actions_depends |
| 283 if final_deps: | 286 if final_deps: |
| 284 output, output_binary = self.WriteTarget( | 287 output, output_binary = self.WriteTarget( |
| 285 spec, config_name, config, final_deps, mac_bundle_depends, | 288 spec, config_name, config, final_deps, mac_bundle_depends, |
| 286 order_only=actions_depends) | 289 has_binary, order_only=actions_depends) |
| 287 if self.name != output and self.toolset == 'target': | 290 if self.name != output and self.toolset == 'target': |
| 288 # Write a short name to build this target. This benefits both the | 291 # Write a short name to build this target. This benefits both the |
| 289 # "build chrome" case as well as the gyp tests, which expect to be | 292 # "build chrome" case as well as the gyp tests, which expect to be |
| 290 # able to run actions and build libraries by their short name. | 293 # able to run actions and build libraries by their short name. |
| 291 self.ninja.build(self.name, 'phony', output) | 294 self.ninja.build(self.name, 'phony', output) |
| 295 else: | |
| 296 self.ninja.build(self.name, 'phony', output) | |
|
Evan Martin
2012/01/07 21:10:12
Would reusing the above similar line for this case
| |
| 292 return output, output_binary, compile_depends | 297 return output, output_binary, compile_depends |
| 293 | 298 |
| 294 def WriteActionsRulesCopies(self, spec, extra_sources, prebuild, | 299 def WriteActionsRulesCopies(self, spec, extra_sources, prebuild, |
| 295 mac_bundle_depends): | 300 mac_bundle_depends): |
| 296 """Write out the Actions, Rules, and Copies steps. Return any outputs | 301 """Write out the Actions, Rules, and Copies steps. Return any outputs |
| 297 of these steps (or a stamp file if there are lots of outputs).""" | 302 of these steps (or a stamp file if there are lots of outputs).""" |
| 298 outputs = [] | 303 outputs = [] |
| 299 extra_mac_bundle_resources = [] | 304 extra_mac_bundle_resources = [] |
| 300 | 305 |
| 301 if 'actions' in spec: | 306 if 'actions' in spec: |
| (...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 566 'c': 'cflags_pch_c', | 571 'c': 'cflags_pch_c', |
| 567 'cc': 'cflags_pch_cc', | 572 'cc': 'cflags_pch_cc', |
| 568 'm': 'cflags_pch_objc', | 573 'm': 'cflags_pch_objc', |
| 569 'mm': 'cflags_pch_objcc', | 574 'mm': 'cflags_pch_objcc', |
| 570 }[lang] | 575 }[lang] |
| 571 | 576 |
| 572 cmd = { 'c': 'cc', 'cc': 'cxx', 'm': 'objc', 'mm': 'objcxx', }.get(lang) | 577 cmd = { 'c': 'cc', 'cc': 'cxx', 'm': 'objc', 'mm': 'objcxx', }.get(lang) |
| 573 self.ninja.build(gch, cmd, input, variables=[(var_name, lang_flag)]) | 578 self.ninja.build(gch, cmd, input, variables=[(var_name, lang_flag)]) |
| 574 | 579 |
| 575 def WriteTarget(self, spec, config_name, config, final_deps, | 580 def WriteTarget(self, spec, config_name, config, final_deps, |
| 576 mac_bundle_depends, order_only): | 581 mac_bundle_depends, has_binary, order_only): |
| 577 if spec['type'] == 'none': | 582 if spec['type'] == 'none': |
| 578 # This target doesn't have any explicit final output, but is instead | 583 # This target doesn't have any explicit final output, but is instead |
| 579 # used for its effects before the final output (e.g. copies steps). | 584 # used for its effects before the final output (e.g. copies steps). |
| 580 # Reuse the existing output if it's easy. | 585 # Reuse the existing output if it's easy. |
| 581 if len(final_deps) == 1: | 586 if len(final_deps) == 1: |
| 582 return final_deps[0], final_deps[0] | 587 return final_deps[0], final_deps[0] |
| 583 # Otherwise, fall through to writing out a stamp file. | 588 # Otherwise, fall through to writing out a stamp file. |
| 584 | 589 |
| 585 if self.is_mac_bundle: | 590 if self.is_mac_bundle: |
| 586 output = self.ComputeMacBundleOutput(spec) | 591 output = self.ComputeMacBundleOutput(spec) |
| 587 output_binary = self.ComputeMacBundleBinaryOutput(spec) | 592 output_binary = self.ComputeMacBundleBinaryOutput(spec) |
| 588 mac_bundle_depends.append(output_binary) | 593 if has_binary: |
| 594 mac_bundle_depends.append(output_binary) | |
| 589 else: | 595 else: |
| 590 output = output_binary = self.ComputeOutput(spec) | 596 output = output_binary = self.ComputeOutput(spec) |
| 591 | 597 |
| 592 output_uses_linker = spec['type'] in ('executable', 'loadable_module', | 598 output_uses_linker = spec['type'] in ('executable', 'loadable_module', |
| 593 'shared_library') | 599 'shared_library') |
| 594 | 600 |
| 595 implicit_deps = set() | 601 implicit_deps = set() |
| 596 if 'dependencies' in spec: | 602 if 'dependencies' in spec: |
| 597 # Two kinds of dependencies: | 603 # Two kinds of dependencies: |
| 598 # - Linkable dependencies (like a .a or a .so): add them to the link line. | 604 # - Linkable dependencies (like a .a or a .so): add them to the link line. |
| (...skipping 395 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 994 # For bundles, the binary in the bundle is the right answer. | 1000 # For bundles, the binary in the bundle is the right answer. |
| 995 target_outputs[qualified_target] = ( | 1001 target_outputs[qualified_target] = ( |
| 996 output_binary, compile_depends, linkable) | 1002 output_binary, compile_depends, linkable) |
| 997 | 1003 |
| 998 # But for all_outputs, the bundle is the interesting bit. | 1004 # But for all_outputs, the bundle is the interesting bit. |
| 999 if qualified_target in all_targets: | 1005 if qualified_target in all_targets: |
| 1000 all_outputs.add(output) | 1006 all_outputs.add(output) |
| 1001 | 1007 |
| 1002 if all_outputs: | 1008 if all_outputs: |
| 1003 master_ninja.build('all', 'phony', list(all_outputs)) | 1009 master_ninja.build('all', 'phony', list(all_outputs)) |
| OLD | NEW |