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

Unified Diff: site_scons/site_tools/target_platform_windows.py

Issue 13134: Pulling in hammer changes. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 12 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « site_scons/site_tools/target_platform_mac.py ('k') | site_scons/site_tools/windows_hard_link.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: site_scons/site_tools/target_platform_windows.py
===================================================================
--- site_scons/site_tools/target_platform_windows.py (revision 6345)
+++ site_scons/site_tools/target_platform_windows.py (working copy)
@@ -78,14 +78,14 @@
return 1
-def RunManifest(target, source, env, resource_num):
+def RunManifest(target, source, env, cmd):
"""Run the Microsoft Visual Studio manifest tool (mt.exe).
Args:
target: List of target nodes.
source: List of source nodes.
env: Environment context.
- resource_num: Resource number to modify in target (1=exe, 2=dll).
+ cmd: Command to run.
Returns:
Zero if success, nonzero if error.
@@ -101,13 +101,8 @@
with mt.exe returning an errorlevel (return code) of 31. The workaround is
to retry running mt.exe after a short delay.
"""
+ cmdline = env.subst(cmd, target=target, source=source)
- cmdline = env.subst(
- 'mt.exe -nologo -manifest "$MANIFEST_FILE" -outputresource:"$TARGET";%d'
- % resource_num,
- target=target, source=source)
- print cmdline
-
for retry in range(5):
# If this is a retry, print a message and delay first
if retry:
@@ -129,17 +124,21 @@
def RunManifestExe(target, source, env):
"""Calls RunManifest for updating an executable (resource_num=1)."""
- return RunManifest(target, source, env, resource_num=1)
+ return RunManifest(target, source, env, cmd='$MANIFEST_COM')
def RunManifestDll(target, source, env):
"""Calls RunManifest for updating a dll (resource_num=2)."""
- return RunManifest(target, source, env, resource_num=2)
+ return RunManifest(target, source, env, cmd='$SHMANIFEST_COM')
def ComponentPlatformSetup(env, builder_name):
"""Hook to allow platform to modify environment inside a component builder.
+ This is called on a clone of the environment passed into the component
+ builder, and is the last modification done to that environment before using
+ it to call the underlying SCons builder (env.Program(), env.Library(), etc.)
+
Args:
env: Environment to modify
builder_name: Name of the builder
@@ -172,6 +171,34 @@
LINKFLAGS=['/SUBSYSTEM:CONSOLE'],
)
+ # Make sure link methods are lists, so we can append to them below
+ env['LINKCOM'] = [env['LINKCOM']]
+ env['SHLINKCOM'] = [env['SHLINKCOM']]
+
+ # Support manifest file generation and consumption
+ if env.get('MANIFEST_FILE'):
+ env.Append(
+ LINKCOM=[SCons.Script.Action(RunManifestExe, '$MANIFEST_COMSTR')],
+ SHLINKCOM=[SCons.Script.Action(RunManifestDll, '$SHMANIFEST_COMSTR')],
+ )
+
+ # If manifest file should be autogenerated, add the -manifest link line and
+ # delete the generated manfest after running mt.exe.
+ if env.get('MANFEST_FILE_GENERATED_BY_LINK'):
+ env.Append(
+ LINKFLAGS=['-manifest'],
+ LINKCOM=[SCons.Script.Delete('$MANFEST_FILE_GENERATED_BY_LINK')],
+ SHLINKCOM=[SCons.Script.Delete('$MANFEST_FILE_GENERATED_BY_LINK')],
+ )
+
+ # Wait for the output file to be writable before releasing control to
+ # SCons. Windows virus scanners temporarily lock modified executable files
+ # for scanning, which causes SCons's env.Install() to fail intermittently.
+ env.Append(
+ LINKCOM=[SCons.Script.Action(WaitForWritable, None)],
+ SHLINKCOM=[SCons.Script.Action(WaitForWritable, None)],
+ )
+
#------------------------------------------------------------------------------
@@ -222,8 +249,48 @@
# A better rebuild command (actually cleans, then rebuild)
MSVSREBUILDCOM=''.join(['$MSVSSCONSCOM -c "$MSVSBUILDTARGET" && ',
'$MSVSSCONSCOM "$MSVSBUILDTARGET"']),
+ )
- CCFLAG_INCLUDE='/FI', # Command line option to include a header
+ env.SetDefault(
+ # Command line option to include a header
+ CCFLAG_INCLUDE='/FI',
+
+ # Generate PDBs matching target name by default.
+ PDB='${TARGET.base}.pdb',
+
+ # Code coverage related.
+ COVERAGE_LINKFLAGS='/PROFILE', # Requires vc_80 or higher.
+ COVERAGE_LINKCOM_EXTRAS='$COVERAGE_VSINSTR /COVERAGE $TARGET',
+ # NOTE: need to ignore error in return type here, the tool has issues.
+ # Thus a - is added.
+ COVERAGE_START_CMD=[
+ # If a previous build was cancelled or crashed, VSPerfCmd may still
+ # be running, which causes future coverage runs to fail. Make sure
+ # it's shut down before starting coverage up again.
+ '-$COVERAGE_VSPERFCMD -shutdown',
+ '$COVERAGE_VSPERFCMD -start:coverage '
+ '-output:${COVERAGE_OUTPUT_FILE}.pre'],
+ COVERAGE_STOP_CMD=[
+ '-$COVERAGE_VSPERFCMD -shutdown',
+ '$COVERAGE_ANALYZER -sym_path=. ${COVERAGE_OUTPUT_FILE}.pre.coverage',
+ SCons.Script.Copy('$COVERAGE_OUTPUT_FILE',
+ '${COVERAGE_OUTPUT_FILE}.pre.coverage.lcov'),
+ ],
+ COVERAGE_EXTRA_PATHS=['$COVERAGE_ANALYZER_DIR'],
+
+ # Manifest options
+ # When link.exe is run with '-manifest', it always generated a manifest
+ # with this name.
+ MANFEST_FILE_GENERATED_BY_LINK='${TARGET}.manifest',
+ # Manifest file to use as input to mt.exe. Can be overridden to pass in
+ # a pregenerated manifest file.
+ MANIFEST_FILE='$MANFEST_FILE_GENERATED_BY_LINK',
+ MANIFEST_COM=('mt.exe -nologo -manifest "$MANIFEST_FILE" '
+ '-outputresource:"$TARGET";1'),
+ MANIFEST_COMSTR='$MANIFEST_COM',
+ SHMANIFEST_COM=('mt.exe -nologo -manifest "$MANIFEST_FILE" '
+ '-outputresource:"$TARGET";2'),
+ SHMANIFEST_COMSTR='$SHMANIFEST_COM',
)
env.Append(
@@ -233,7 +300,7 @@
# Turn up the warning level
CCFLAGS=['/W3'],
- # Force x86 platform for now
+ # Force x86 platform, generate manifests
LINKFLAGS=['/MACHINE:X86'],
ARFLAGS=['/MACHINE:X86'],
@@ -251,27 +318,14 @@
'/MT', # link with LIBCMT.LIB (multi-threaded, static linked crt)
'/GS', # enable security checks
],
+ LINKFLAGS_OPTIMIZED=['/PDBPATH:none'],
# Settings for component_builders
COMPONENT_LIBRARY_LINK_SUFFIXES=['.lib'],
COMPONENT_LIBRARY_DEBUG_SUFFIXES=['.pdb'],
)
- # Add manifests to EXEs and DLLs
- env['MANIFEST_FILE'] = '${TARGET}.manifest' # To allow override.
- wait_action = SCons.Script.Action(WaitForWritable,
- lambda target, source, env: ''),
- env['LINKCOM'] = [
- env['LINKCOM'],
- SCons.Script.Action(RunManifestExe, lambda target, source, env: ''),
- SCons.Script.Delete('${TARGET}.manifest'),
- wait_action,
- ]
- env['SHLINKCOM'] = [
- env['SHLINKCOM'],
- SCons.Script.Action(RunManifestDll, lambda target, source, env: ''),
- SCons.Script.Delete('${TARGET}.manifest'),
- wait_action,
- ]
- env['WINDOWS_INSERT_MANIFESTS'] = True
- env.Append(LINKFLAGS=['-manifest'])
+ # TODO(sgk): mslink.py creates a shlibLinkAction which doesn't specify
+ # '$SHLINKCOMSTR' as its command string. This breaks --brief. For now,
+ # hack into the existing action and override its command string.
+ env['SHLINKCOM'].list[0].cmdstr = '$SHLINKCOMSTR'
« no previous file with comments | « site_scons/site_tools/target_platform_mac.py ('k') | site_scons/site_tools/windows_hard_link.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698