| 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']))
|
|
|
|
|