Index: SConstruct |
=================================================================== |
--- SConstruct (revision 3927) |
+++ SConstruct (working copy) |
@@ -255,8 +255,16 @@ |
}, |
'msvcltcg:on': { |
'CCFLAGS': ['/GL'], |
- 'LINKFLAGS': ['/LTCG'], |
'ARFLAGS': ['/LTCG'], |
+ 'pgo:off': { |
+ 'LINKFLAGS': ['/LTCG'], |
+ }, |
+ 'pgo:instrument': { |
+ 'LINKFLAGS': ['/LTCG:PGI'] |
+ }, |
+ 'pgo:optimize': { |
+ 'LINKFLAGS': ['/LTCG:PGO'] |
+ } |
} |
} |
} |
@@ -527,7 +535,15 @@ |
}, |
'msvcltcg:on': { |
'CCFLAGS': ['/GL'], |
- 'LINKFLAGS': ['/LTCG'], |
+ 'pgo:off': { |
+ 'LINKFLAGS': ['/LTCG'], |
+ }, |
+ }, |
+ 'pgo:instrument': { |
+ 'LINKFLAGS': ['/LTCG:PGI'] |
+ }, |
+ 'pgo:optimize': { |
+ 'LINKFLAGS': ['/LTCG:PGO'] |
} |
}, |
'arch:ia32': { |
@@ -711,6 +727,11 @@ |
'values': ['arm', 'thumb2', 'none'], |
'default': 'none', |
'help': 'generate thumb2 instructions instead of arm instructions (default)' |
+ }, |
+ 'pgo': { |
+ 'values': ['off', 'instrument', 'optimize'], |
+ 'default': 'off', |
+ 'help': 'select profile guided optimization variant', |
} |
} |
@@ -798,6 +819,8 @@ |
Abort("Shared Object soname not applicable for Windows.") |
if env['soname'] == 'on' and env['library'] == 'static': |
Abort("Shared Object soname not applicable for static library.") |
+ if env['os'] != 'win32' and env['pgo'] != 'off': |
+ Abort("Profile guided optimization only supported on Windows.") |
for (name, option) in SIMPLE_OPTIONS.iteritems(): |
if (not option.get('default')) and (name not in ARGUMENTS): |
message = ("A value for option %s must be specified (%s)." % |
@@ -883,7 +906,7 @@ |
env['ENV'] = self.env_overrides |
-def PostprocessOptions(options): |
+def PostprocessOptions(options, os): |
# Adjust architecture if the simulator option has been set |
if (options['simulator'] != 'none') and (options['arch'] != options['simulator']): |
if 'arch' in ARGUMENTS: |
@@ -894,6 +917,10 @@ |
# Print a warning if profiling is enabled without profiling support |
print "Warning: forcing profilingsupport on when prof is on" |
options['profilingsupport'] = 'on' |
+ if os == 'win32' and options['pgo'] != 'off' and options['msvcltcg'] == 'off': |
+ if 'msvcltcg' in ARGUMENTS: |
+ print "Warning: forcing msvcltcg on as it is required for pgo (%s)" % options['pgo'] |
+ options['msvcltcg'] = 'on' |
if (options['armvariant'] == 'none' and options['arch'] == 'arm'): |
options['armvariant'] = 'arm' |
if (options['armvariant'] != 'none' and options['arch'] != 'arm'): |
@@ -924,7 +951,7 @@ |
options = {'mode': mode} |
for option in SIMPLE_OPTIONS: |
options[option] = env[option] |
- PostprocessOptions(options) |
+ PostprocessOptions(options, env['os']) |
context = BuildContext(options, env_overrides, samples=SplitList(env['sample'])) |