OLD | NEW |
1 # Copyright 2008 the V8 project authors. All rights reserved. | 1 # Copyright 2008 the V8 project authors. All rights reserved. |
2 # Redistribution and use in source and binary forms, with or without | 2 # Redistribution and use in source and binary forms, with or without |
3 # modification, are permitted provided that the following conditions are | 3 # modification, are permitted provided that the following conditions are |
4 # met: | 4 # met: |
5 # | 5 # |
6 # * Redistributions of source code must retain the above copyright | 6 # * Redistributions of source code must retain the above copyright |
7 # notice, this list of conditions and the following disclaimer. | 7 # notice, this list of conditions and the following disclaimer. |
8 # * Redistributions in binary form must reproduce the above | 8 # * Redistributions in binary form must reproduce the above |
9 # copyright notice, this list of conditions and the following | 9 # copyright notice, this list of conditions and the following |
10 # disclaimer in the documentation and/or other materials provided | 10 # disclaimer in the documentation and/or other materials provided |
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
248 'CCFLAGS': ['/O2'], | 248 'CCFLAGS': ['/O2'], |
249 'LINKFLAGS': ['/OPT:REF', '/OPT:ICF'], | 249 'LINKFLAGS': ['/OPT:REF', '/OPT:ICF'], |
250 'msvcrt:static': { | 250 'msvcrt:static': { |
251 'CCFLAGS': ['/MT'] | 251 'CCFLAGS': ['/MT'] |
252 }, | 252 }, |
253 'msvcrt:shared': { | 253 'msvcrt:shared': { |
254 'CCFLAGS': ['/MD'] | 254 'CCFLAGS': ['/MD'] |
255 }, | 255 }, |
256 'msvcltcg:on': { | 256 'msvcltcg:on': { |
257 'CCFLAGS': ['/GL'], | 257 'CCFLAGS': ['/GL'], |
258 'LINKFLAGS': ['/LTCG'], | |
259 'ARFLAGS': ['/LTCG'], | 258 'ARFLAGS': ['/LTCG'], |
| 259 'pgo:off': { |
| 260 'LINKFLAGS': ['/LTCG'], |
| 261 }, |
| 262 'pgo:instrument': { |
| 263 'LINKFLAGS': ['/LTCG:PGI'] |
| 264 }, |
| 265 'pgo:optimize': { |
| 266 'LINKFLAGS': ['/LTCG:PGO'] |
| 267 } |
260 } | 268 } |
261 } | 269 } |
262 } | 270 } |
263 } | 271 } |
264 | 272 |
265 | 273 |
266 V8_EXTRA_FLAGS = { | 274 V8_EXTRA_FLAGS = { |
267 'gcc': { | 275 'gcc': { |
268 'all': { | 276 'all': { |
269 'WARNINGFLAGS': ['-Wall', | 277 'WARNINGFLAGS': ['-Wall', |
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
520 'CCFLAGS': ['/O2'], | 528 'CCFLAGS': ['/O2'], |
521 'LINKFLAGS': ['/OPT:REF', '/OPT:ICF'], | 529 'LINKFLAGS': ['/OPT:REF', '/OPT:ICF'], |
522 'msvcrt:static': { | 530 'msvcrt:static': { |
523 'CCFLAGS': ['/MT'] | 531 'CCFLAGS': ['/MT'] |
524 }, | 532 }, |
525 'msvcrt:shared': { | 533 'msvcrt:shared': { |
526 'CCFLAGS': ['/MD'] | 534 'CCFLAGS': ['/MD'] |
527 }, | 535 }, |
528 'msvcltcg:on': { | 536 'msvcltcg:on': { |
529 'CCFLAGS': ['/GL'], | 537 'CCFLAGS': ['/GL'], |
530 'LINKFLAGS': ['/LTCG'], | 538 'pgo:off': { |
| 539 'LINKFLAGS': ['/LTCG'], |
| 540 }, |
| 541 }, |
| 542 'pgo:instrument': { |
| 543 'LINKFLAGS': ['/LTCG:PGI'] |
| 544 }, |
| 545 'pgo:optimize': { |
| 546 'LINKFLAGS': ['/LTCG:PGO'] |
531 } | 547 } |
532 }, | 548 }, |
533 'arch:ia32': { | 549 'arch:ia32': { |
534 'CPPDEFINES': ['V8_TARGET_ARCH_IA32'], | 550 'CPPDEFINES': ['V8_TARGET_ARCH_IA32'], |
535 'LINKFLAGS': ['/MACHINE:X86'] | 551 'LINKFLAGS': ['/MACHINE:X86'] |
536 }, | 552 }, |
537 'arch:x64': { | 553 'arch:x64': { |
538 'CPPDEFINES': ['V8_TARGET_ARCH_X64'], | 554 'CPPDEFINES': ['V8_TARGET_ARCH_X64'], |
539 'LINKFLAGS': ['/MACHINE:X64', '/STACK:2091752'] | 555 'LINKFLAGS': ['/MACHINE:X64', '/STACK:2091752'] |
540 }, | 556 }, |
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
704 }, | 720 }, |
705 'visibility': { | 721 'visibility': { |
706 'values': ['default', 'hidden'], | 722 'values': ['default', 'hidden'], |
707 'default': 'hidden', | 723 'default': 'hidden', |
708 'help': 'shared library symbol visibility' | 724 'help': 'shared library symbol visibility' |
709 }, | 725 }, |
710 'armvariant': { | 726 'armvariant': { |
711 'values': ['arm', 'thumb2', 'none'], | 727 'values': ['arm', 'thumb2', 'none'], |
712 'default': 'none', | 728 'default': 'none', |
713 'help': 'generate thumb2 instructions instead of arm instructions (default)' | 729 'help': 'generate thumb2 instructions instead of arm instructions (default)' |
| 730 }, |
| 731 'pgo': { |
| 732 'values': ['off', 'instrument', 'optimize'], |
| 733 'default': 'off', |
| 734 'help': 'select profile guided optimization variant', |
714 } | 735 } |
715 } | 736 } |
716 | 737 |
717 | 738 |
718 def GetOptions(): | 739 def GetOptions(): |
719 result = Options() | 740 result = Options() |
720 result.Add('mode', 'compilation mode (debug, release)', 'release') | 741 result.Add('mode', 'compilation mode (debug, release)', 'release') |
721 result.Add('sample', 'build sample (shell, process, lineprocessor)', '') | 742 result.Add('sample', 'build sample (shell, process, lineprocessor)', '') |
722 result.Add('env', 'override environment settings (NAME0:value0,NAME1:value1,..
.)', '') | 743 result.Add('env', 'override environment settings (NAME0:value0,NAME1:value1,..
.)', '') |
723 result.Add('importenv', 'import environment settings (NAME0,NAME1,...)', '') | 744 result.Add('importenv', 'import environment settings (NAME0,NAME1,...)', '') |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
791 if not IsLegal(env, 'regexp', ["native", "interpreted"]): | 812 if not IsLegal(env, 'regexp', ["native", "interpreted"]): |
792 return False | 813 return False |
793 if env['os'] == 'win32' and env['library'] == 'shared' and env['prof'] == 'on'
: | 814 if env['os'] == 'win32' and env['library'] == 'shared' and env['prof'] == 'on'
: |
794 Abort("Profiling on windows only supported for static library.") | 815 Abort("Profiling on windows only supported for static library.") |
795 if env['prof'] == 'oprofile' and env['os'] != 'linux': | 816 if env['prof'] == 'oprofile' and env['os'] != 'linux': |
796 Abort("OProfile is only supported on Linux.") | 817 Abort("OProfile is only supported on Linux.") |
797 if env['os'] == 'win32' and env['soname'] == 'on': | 818 if env['os'] == 'win32' and env['soname'] == 'on': |
798 Abort("Shared Object soname not applicable for Windows.") | 819 Abort("Shared Object soname not applicable for Windows.") |
799 if env['soname'] == 'on' and env['library'] == 'static': | 820 if env['soname'] == 'on' and env['library'] == 'static': |
800 Abort("Shared Object soname not applicable for static library.") | 821 Abort("Shared Object soname not applicable for static library.") |
| 822 if env['os'] != 'win32' and env['pgo'] != 'off': |
| 823 Abort("Profile guided optimization only supported on Windows.") |
801 for (name, option) in SIMPLE_OPTIONS.iteritems(): | 824 for (name, option) in SIMPLE_OPTIONS.iteritems(): |
802 if (not option.get('default')) and (name not in ARGUMENTS): | 825 if (not option.get('default')) and (name not in ARGUMENTS): |
803 message = ("A value for option %s must be specified (%s)." % | 826 message = ("A value for option %s must be specified (%s)." % |
804 (name, ", ".join(option['values']))) | 827 (name, ", ".join(option['values']))) |
805 Abort(message) | 828 Abort(message) |
806 if not env[name] in option['values']: | 829 if not env[name] in option['values']: |
807 message = ("Unknown %s value '%s'. Possible values are (%s)." % | 830 message = ("Unknown %s value '%s'. Possible values are (%s)." % |
808 (name, env[name], ", ".join(option['values']))) | 831 (name, env[name], ", ".join(option['values']))) |
809 Abort(message) | 832 Abort(message) |
810 | 833 |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
876 | 899 |
877 def ApplyEnvOverrides(self, env): | 900 def ApplyEnvOverrides(self, env): |
878 if not self.env_overrides: | 901 if not self.env_overrides: |
879 return | 902 return |
880 if type(env['ENV']) == DictType: | 903 if type(env['ENV']) == DictType: |
881 env['ENV'].update(**self.env_overrides) | 904 env['ENV'].update(**self.env_overrides) |
882 else: | 905 else: |
883 env['ENV'] = self.env_overrides | 906 env['ENV'] = self.env_overrides |
884 | 907 |
885 | 908 |
886 def PostprocessOptions(options): | 909 def PostprocessOptions(options, os): |
887 # Adjust architecture if the simulator option has been set | 910 # Adjust architecture if the simulator option has been set |
888 if (options['simulator'] != 'none') and (options['arch'] != options['simulator
']): | 911 if (options['simulator'] != 'none') and (options['arch'] != options['simulator
']): |
889 if 'arch' in ARGUMENTS: | 912 if 'arch' in ARGUMENTS: |
890 # Print a warning if arch has explicitly been set | 913 # Print a warning if arch has explicitly been set |
891 print "Warning: forcing architecture to match simulator (%s)" % options['s
imulator'] | 914 print "Warning: forcing architecture to match simulator (%s)" % options['s
imulator'] |
892 options['arch'] = options['simulator'] | 915 options['arch'] = options['simulator'] |
893 if (options['prof'] != 'off') and (options['profilingsupport'] == 'off'): | 916 if (options['prof'] != 'off') and (options['profilingsupport'] == 'off'): |
894 # Print a warning if profiling is enabled without profiling support | 917 # Print a warning if profiling is enabled without profiling support |
895 print "Warning: forcing profilingsupport on when prof is on" | 918 print "Warning: forcing profilingsupport on when prof is on" |
896 options['profilingsupport'] = 'on' | 919 options['profilingsupport'] = 'on' |
| 920 if os == 'win32' and options['pgo'] != 'off' and options['msvcltcg'] == 'off': |
| 921 if 'msvcltcg' in ARGUMENTS: |
| 922 print "Warning: forcing msvcltcg on as it is required for pgo (%s)" % opti
ons['pgo'] |
| 923 options['msvcltcg'] = 'on' |
897 if (options['armvariant'] == 'none' and options['arch'] == 'arm'): | 924 if (options['armvariant'] == 'none' and options['arch'] == 'arm'): |
898 options['armvariant'] = 'arm' | 925 options['armvariant'] = 'arm' |
899 if (options['armvariant'] != 'none' and options['arch'] != 'arm'): | 926 if (options['armvariant'] != 'none' and options['arch'] != 'arm'): |
900 options['armvariant'] = 'none' | 927 options['armvariant'] = 'none' |
901 if options['arch'] == 'mips': | 928 if options['arch'] == 'mips': |
902 if ('regexp' in ARGUMENTS) and options['regexp'] == 'native': | 929 if ('regexp' in ARGUMENTS) and options['regexp'] == 'native': |
903 # Print a warning if native regexp is specified for mips | 930 # Print a warning if native regexp is specified for mips |
904 print "Warning: forcing regexp to interpreted for mips" | 931 print "Warning: forcing regexp to interpreted for mips" |
905 options['regexp'] = 'interpreted' | 932 options['regexp'] = 'interpreted' |
906 | 933 |
(...skipping 10 matching lines...) Expand all Loading... |
917 if pos == -1: | 944 if pos == -1: |
918 continue | 945 continue |
919 overrides[override[:pos].strip()] = override[pos+1:].strip() | 946 overrides[override[:pos].strip()] = override[pos+1:].strip() |
920 return overrides | 947 return overrides |
921 | 948 |
922 | 949 |
923 def BuildSpecific(env, mode, env_overrides): | 950 def BuildSpecific(env, mode, env_overrides): |
924 options = {'mode': mode} | 951 options = {'mode': mode} |
925 for option in SIMPLE_OPTIONS: | 952 for option in SIMPLE_OPTIONS: |
926 options[option] = env[option] | 953 options[option] = env[option] |
927 PostprocessOptions(options) | 954 PostprocessOptions(options, env['os']) |
928 | 955 |
929 context = BuildContext(options, env_overrides, samples=SplitList(env['sample']
)) | 956 context = BuildContext(options, env_overrides, samples=SplitList(env['sample']
)) |
930 | 957 |
931 # Remove variables which can't be imported from the user's external | 958 # Remove variables which can't be imported from the user's external |
932 # environment into a construction environment. | 959 # environment into a construction environment. |
933 user_environ = os.environ.copy() | 960 user_environ = os.environ.copy() |
934 try: | 961 try: |
935 del user_environ['ENV'] | 962 del user_environ['ENV'] |
936 except KeyError: | 963 except KeyError: |
937 pass | 964 pass |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1066 # version of scons. Also, there's a bug in some revisions that | 1093 # version of scons. Also, there's a bug in some revisions that |
1067 # doesn't allow this flag to be set, so we swallow any exceptions. | 1094 # doesn't allow this flag to be set, so we swallow any exceptions. |
1068 # Lovely. | 1095 # Lovely. |
1069 try: | 1096 try: |
1070 SetOption('warn', 'no-deprecated') | 1097 SetOption('warn', 'no-deprecated') |
1071 except: | 1098 except: |
1072 pass | 1099 pass |
1073 | 1100 |
1074 | 1101 |
1075 Build() | 1102 Build() |
OLD | NEW |