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

Side by Side Diff: pylib/gyp/generator/ninja.py

Issue 97873002: ninja/win: Support VCLinkerTool.GenerateManifest (Closed) Base URL: http://gyp.googlecode.com/svn/trunk/
Patch Set: Created 7 years 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | pylib/gyp/msvs_emulation.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright (c) 2013 Google Inc. All rights reserved. 1 # Copyright (c) 2013 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 copy 5 import copy
6 import hashlib 6 import hashlib
7 import json 7 import json
8 import multiprocessing 8 import multiprocessing
9 import os.path 9 import os.path
10 import re 10 import re
(...skipping 1563 matching lines...) Expand 10 before | Expand all | Expand 10 after
1574 if embed_manifest: 1574 if embed_manifest:
1575 suffix += '_embed' 1575 suffix += '_embed'
1576 if link_incremental: 1576 if link_incremental:
1577 suffix += '_inc' 1577 suffix += '_inc'
1578 return suffix 1578 return suffix
1579 1579
1580 1580
1581 def _AddWinLinkRules(master_ninja, embed_manifest, link_incremental): 1581 def _AddWinLinkRules(master_ninja, embed_manifest, link_incremental):
1582 """Adds link rules for Windows platform to |master_ninja|.""" 1582 """Adds link rules for Windows platform to |master_ninja|."""
1583 def FullLinkCommand(ldcmd, out, binary_type): 1583 def FullLinkCommand(ldcmd, out, binary_type):
1584 cmd = ('cmd /c %(ldcmd)s' 1584 """Returns a one-liner written for cmd.exe to handle multiphase linker
1585 ' && %(python)s gyp-win-tool manifest-wrapper $arch' 1585 operations including manifest file generation. The command will be
1586 ' cmd /c if exist %(out)s.manifest del %(out)s.manifest' 1586 structured as follows:
1587 ' && %(python)s gyp-win-tool manifest-wrapper $arch' 1587 cmd /c (linkcmd1 a b) && (linkcmd2 x y) && ... &&
1588 ' $mt -nologo -manifest $manifests') 1588 if not "$manifests"=="" ((manifestcmd1 a b) && (manifestcmd2 x y) && ... )
1589 Note that $manifests becomes empty when no manifest file is generated."""
1590 link_commands = ['%(ldcmd)s',
1591 'if exist %(out)s.manifest del %(out)s.manifest']
1592 mt_cmd = ('%(python)s gyp-win-tool manifest-wrapper'
1593 ' $arch $mt -nologo -manifest $manifests')
1589 if embed_manifest and not link_incremental: 1594 if embed_manifest and not link_incremental:
1590 # Embed manifest into a binary. If incremental linking is enabled, 1595 # Embed manifest into a binary. If incremental linking is enabled,
1591 # embedding is postponed to the re-linking stage (see below). 1596 # embedding is postponed to the re-linking stage (see below).
1592 cmd += ' -outputresource:%(out)s;%(resname)s' 1597 mt_cmd += ' -outputresource:%(out)s;%(resname)s'
1593 else: 1598 else:
1594 # Save manifest as an external file. 1599 # Save manifest as an external file.
1595 cmd += ' -out:%(out)s.manifest' 1600 mt_cmd += ' -out:%(out)s.manifest'
1601 manifest_commands = [mt_cmd]
1596 if link_incremental: 1602 if link_incremental:
1597 # There is no point in generating separate rule for the case when 1603 # There is no point in generating separate rule for the case when
1598 # incremental linking is enabled, but manifest embedding is disabled. 1604 # incremental linking is enabled, but manifest embedding is disabled.
1599 # In that case the basic rule should be used (e.g. 'link'). 1605 # In that case the basic rule should be used (e.g. 'link').
1600 # See also implementation of _GetWinLinkRuleNameSuffix(). 1606 # See also implementation of _GetWinLinkRuleNameSuffix().
1601 assert embed_manifest 1607 assert embed_manifest
1602 # Make .rc file out of manifest, compile it to .res file and re-link. 1608 # Make .rc file out of manifest, compile it to .res file and re-link.
1603 cmd += (' && %(python)s gyp-win-tool manifest-to-rc $arch' 1609 manifest_commands += [
1604 ' %(out)s.manifest %(out)s.manifest.rc %(resname)s' 1610 ('%(python)s gyp-win-tool manifest-to-rc $arch %(out)s.manifest'
1605 ' && %(python)s gyp-win-tool rc-wrapper $arch $rc' 1611 ' %(out)s.manifest.rc %(resname)s'),
1606 ' %(out)s.manifest.rc' 1612 '%(python)s gyp-win-tool rc-wrapper $arch $rc %(out)s.manifest.rc',
1607 ' && %(ldcmd)s %(out)s.manifest.res') 1613 '%(ldcmd)s %(out)s.manifest.res']
1614 cmd = 'cmd /c %s && if not "$manifests"=="" (%s)' % (
1615 ' && '.join(['(%s)' % c for c in link_commands]),
1616 ' && '.join(['(%s)' % c for c in manifest_commands]))
1608 resource_name = { 1617 resource_name = {
1609 'exe': '1', 1618 'exe': '1',
1610 'dll': '2', 1619 'dll': '2',
1611 }[binary_type] 1620 }[binary_type]
1612 return cmd % {'python': sys.executable, 1621 return cmd % {'python': sys.executable,
1613 'out': out, 1622 'out': out,
1614 'ldcmd': ldcmd, 1623 'ldcmd': ldcmd,
1615 'resname': resource_name} 1624 'resname': resource_name}
1616 1625
1617 rule_name_suffix = _GetWinLinkRuleNameSuffix(embed_manifest, link_incremental) 1626 rule_name_suffix = _GetWinLinkRuleNameSuffix(embed_manifest, link_incremental)
(...skipping 533 matching lines...) Expand 10 before | Expand all | Expand 10 after
2151 arglists.append( 2160 arglists.append(
2152 (target_list, target_dicts, data, params, config_name)) 2161 (target_list, target_dicts, data, params, config_name))
2153 pool.map(CallGenerateOutputForConfig, arglists) 2162 pool.map(CallGenerateOutputForConfig, arglists)
2154 except KeyboardInterrupt, e: 2163 except KeyboardInterrupt, e:
2155 pool.terminate() 2164 pool.terminate()
2156 raise e 2165 raise e
2157 else: 2166 else:
2158 for config_name in config_names: 2167 for config_name in config_names:
2159 GenerateOutputForConfig(target_list, target_dicts, data, params, 2168 GenerateOutputForConfig(target_list, target_dicts, data, params,
2160 config_name) 2169 config_name)
OLDNEW
« no previous file with comments | « no previous file | pylib/gyp/msvs_emulation.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698