Index: pylib/gyp/generator/ninja.py |
diff --git a/pylib/gyp/generator/ninja.py b/pylib/gyp/generator/ninja.py |
index 19dcc1bb7fe788a0323c5de4946ee84350b21e59..50f075908408a966ccb2cdba66646d1e0bace6d7 100644 |
--- a/pylib/gyp/generator/ninja.py |
+++ b/pylib/gyp/generator/ninja.py |
@@ -377,11 +377,16 @@ class NinjaWriter: |
link_deps = [] |
sources = spec.get('sources', []) + extra_sources |
if sources: |
+ pch = None |
+ if self.flavor == 'win': |
+ pch = gyp.msvs_emulation.PrecompiledHeader( |
+ self.msvs_settings, config_name, self.GypPathToNinja) |
+ else: |
+ pch = gyp.xcode_emulation.MacPrefixHeader( |
+ self.xcode_settings, self.GypPathToNinja, |
+ lambda path, lang: self.GypPathToUniqueOutput(path + '-' + lang)) |
link_deps = self.WriteSources( |
- config_name, config, sources, compile_depends_stamp, |
- gyp.xcode_emulation.MacPrefixHeader( |
- self.xcode_settings, self.GypPathToNinja, |
- lambda path, lang: self.GypPathToUniqueOutput(path + '-' + lang))) |
+ config_name, config, sources, compile_depends_stamp, pch) |
# Some actions/rules output 'sources' that are already object files. |
link_deps += [self.GypPathToNinja(f) |
for f in sources if f.endswith(self.obj_ext)] |
@@ -681,6 +686,7 @@ class NinjaWriter: |
cflags_cc = self.msvs_settings.GetCflagsCC(config_name) |
extra_defines = self.msvs_settings.GetComputedDefines(config_name) |
self.WriteVariableList('pdbname', [self.name + '.pdb']) |
+ self.WriteVariableList('pchprefix', [self.name]) |
else: |
cflags = config.get('cflags', []) |
cflags_c = config.get('cflags_c', []) |
@@ -701,7 +707,7 @@ class NinjaWriter: |
[QuoteShellArgument('-I' + self.GypPathToNinja(i), self.flavor) |
for i in include_dirs]) |
- pch_commands = precompiled_header.GetGchBuildCommands() |
+ pch_commands = precompiled_header.GetPchBuildCommands() |
if self.flavor == 'mac': |
self.WriteVariableList('cflags_pch_c', |
[precompiled_header.GetInclude('c')]) |
@@ -762,7 +768,7 @@ class NinjaWriter: |
if not pch_commands: |
return |
- for gch, lang_flag, lang, input in pch_commands: |
+ for gch, lang_flag, lang, input, extra_variables in pch_commands: |
var_name = { |
'c': 'cflags_pch_c', |
'cc': 'cflags_pch_cc', |
@@ -771,8 +777,9 @@ class NinjaWriter: |
}[lang] |
cmd = { 'c': 'cc', 'cc': 'cxx', 'm': 'objc', 'mm': 'objcxx', }.get(lang) |
- self.ninja.build(gch, cmd, input, variables=[(var_name, lang_flag)]) |
- |
+ variables = [(var_name, lang_flag)] |
+ variables += extra_variables |
Nico
2012/05/25 22:35:39
maybe:
variables = [(var_name, lang_flag)] + extra
scottmg
2012/05/26 02:27:12
Done.
|
+ self.ninja.build(gch, cmd, input, variables=variables) |
def WriteLink(self, spec, config_name, config, link_deps): |
"""Write out a link step. Fills out target.binary. """ |
@@ -1289,12 +1296,17 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params, |
else: |
# TODO(scottmg): Requires fork of ninja for dependency and linking |
# support: https://github.com/sgraham/ninja |
+ # |
+ # Normally, we want to name the object file when we run compile step. This |
+ # is done with /Fo. However, when compiling a precompiled header, the |
+ # flag is /Fp, so override that in the pch compile step. |
+ master_ninja.variable('outflag', '/Fo') |
master_ninja.rule( |
'cc', |
description='CC $out', |
command=('cmd /s /c "$cc /nologo /showIncludes ' |
'@$out.rsp ' |
- '$cflags_pch_c /c $in /Fo$out /Fd$pdbname ' |
+ '$cflags_pch_c /c $in $outflag$out $pchobj /Fd$pdbname ' |
'| ninja-deplist-helper -r . -q -f cl -o $out.dl"'), |
deplist='$out.dl', |
rspfile='$out.rsp', |
@@ -1304,7 +1316,7 @@ def GenerateOutputForConfig(target_list, target_dicts, data, params, |
description='CXX $out', |
command=('cmd /s /c "$cxx /nologo /showIncludes ' |
'@$out.rsp ' |
- '$cflags_pch_cc /c $in /Fo$out /Fd$pdbname ' |
+ '$cflags_pch_cc /c $in $outflag$out $pchobj /Fd$pdbname ' |
'| ninja-deplist-helper -r . -q -f cl -o $out.dl"'), |
deplist='$out.dl', |
rspfile='$out.rsp', |