| lrn@chromium.org | 25156de | 2010-04-06 13:10:27 +0000 | [diff] [blame] | 1 | # Copyright 2010 the V8 project authors. All rights reserved. | 
| christian.plesner.hansen | 43d26ec | 2008-07-03 15:10:15 +0000 | [diff] [blame] | 2 | # Redistribution and use in source and binary forms, with or without | 
 | 3 | # modification, are permitted provided that the following conditions are | 
 | 4 | # met: | 
 | 5 | # | 
 | 6 | #     * Redistributions of source code must retain the above copyright | 
 | 7 | #       notice, this list of conditions and the following disclaimer. | 
 | 8 | #     * Redistributions in binary form must reproduce the above | 
 | 9 | #       copyright notice, this list of conditions and the following | 
 | 10 | #       disclaimer in the documentation and/or other materials provided | 
 | 11 | #       with the distribution. | 
 | 12 | #     * Neither the name of Google Inc. nor the names of its | 
 | 13 | #       contributors may be used to endorse or promote products derived | 
 | 14 | #       from this software without specific prior written permission. | 
 | 15 | # | 
 | 16 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | 
 | 17 | # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | 
 | 18 | # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | 
 | 19 | # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | 
 | 20 | # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | 
 | 21 | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | 
 | 22 | # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 
 | 23 | # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 
 | 24 | # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 
 | 25 | # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 
 | 26 | # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 
 | 27 |  | 
 | 28 | import platform | 
| kasper.lund | 212ac23 | 2008-07-16 07:07:30 +0000 | [diff] [blame] | 29 | import re | 
| christian.plesner.hansen | 43d26ec | 2008-07-03 15:10:15 +0000 | [diff] [blame] | 30 | import sys | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 31 | import os | 
| christian.plesner.hansen | 43d26ec | 2008-07-03 15:10:15 +0000 | [diff] [blame] | 32 | from os.path import join, dirname, abspath | 
| ager@chromium.org | 236ad96 | 2008-09-25 09:45:57 +0000 | [diff] [blame] | 33 | from types import DictType, StringTypes | 
| christian.plesner.hansen | 43d26ec | 2008-07-03 15:10:15 +0000 | [diff] [blame] | 34 | root_dir = dirname(File('SConstruct').rfile().abspath) | 
| ager@chromium.org | 0ee099b | 2011-01-25 14:06:47 +0000 | [diff] [blame] | 35 | sys.path.insert(0, join(root_dir, 'tools')) | 
| ager@chromium.org | c27e4e7 | 2008-09-04 13:52:27 +0000 | [diff] [blame] | 36 | import js2c, utils | 
| christian.plesner.hansen | 43d26ec | 2008-07-03 15:10:15 +0000 | [diff] [blame] | 37 |  | 
| ager@chromium.org | bb29dc9 | 2009-03-24 13:25:23 +0000 | [diff] [blame] | 38 | # ANDROID_TOP is the top of the Android checkout, fetched from the environment | 
 | 39 | # variable 'TOP'.   You will also need to set the CXX, CC, AR and RANLIB | 
 | 40 | # environment variables to the cross-compiling tools. | 
 | 41 | ANDROID_TOP = os.environ.get('TOP') | 
 | 42 | if ANDROID_TOP is None: | 
 | 43 |   ANDROID_TOP="" | 
 | 44 |  | 
| ricow@chromium.org | c9c8082 | 2010-04-21 08:22:37 +0000 | [diff] [blame] | 45 | # ARM_TARGET_LIB is the path to the dynamic library to use on the target | 
| whesse@chromium.org | ba5a61b | 2010-07-26 11:44:40 +0000 | [diff] [blame] | 46 | # machine if cross-compiling to an arm machine. You will also need to set | 
| ricow@chromium.org | c9c8082 | 2010-04-21 08:22:37 +0000 | [diff] [blame] | 47 | # the additional cross-compiling environment variables to the cross compiler. | 
 | 48 | ARM_TARGET_LIB = os.environ.get('ARM_TARGET_LIB') | 
 | 49 | if ARM_TARGET_LIB: | 
 | 50 |   ARM_LINK_FLAGS = ['-Wl,-rpath=' + ARM_TARGET_LIB + '/lib:' + | 
 | 51 |                      ARM_TARGET_LIB + '/usr/lib', | 
 | 52 |                     '-Wl,--dynamic-linker=' + ARM_TARGET_LIB + | 
 | 53 |                     '/lib/ld-linux.so.3'] | 
 | 54 | else: | 
 | 55 |   ARM_LINK_FLAGS = [] | 
 | 56 |  | 
| ricow@chromium.org | 0b9f850 | 2010-08-18 07:45:01 +0000 | [diff] [blame] | 57 | GCC_EXTRA_CCFLAGS = [] | 
 | 58 | GCC_DTOA_EXTRA_CCFLAGS = [] | 
| kasperl@chromium.org | 71affb5 | 2009-05-26 05:44:31 +0000 | [diff] [blame] | 59 |  | 
| whesse@chromium.org | b6e43bb | 2010-04-14 09:36:28 +0000 | [diff] [blame] | 60 | ANDROID_FLAGS = ['-march=armv7-a', | 
 | 61 |                  '-mtune=cortex-a8', | 
 | 62 |                  '-mfloat-abi=softfp', | 
 | 63 |                  '-mfpu=vfp', | 
| ager@chromium.org | bb29dc9 | 2009-03-24 13:25:23 +0000 | [diff] [blame] | 64 |                  '-fpic', | 
 | 65 |                  '-mthumb-interwork', | 
 | 66 |                  '-funwind-tables', | 
 | 67 |                  '-fstack-protector', | 
 | 68 |                  '-fno-short-enums', | 
 | 69 |                  '-fmessage-length=0', | 
 | 70 |                  '-finline-functions', | 
 | 71 |                  '-fno-inline-functions-called-once', | 
 | 72 |                  '-fgcse-after-reload', | 
 | 73 |                  '-frerun-cse-after-loop', | 
 | 74 |                  '-frename-registers', | 
 | 75 |                  '-fomit-frame-pointer', | 
| ager@chromium.org | bb29dc9 | 2009-03-24 13:25:23 +0000 | [diff] [blame] | 76 |                  '-finline-limit=64', | 
| whesse@chromium.org | b6e43bb | 2010-04-14 09:36:28 +0000 | [diff] [blame] | 77 |                  '-DCAN_USE_VFP_INSTRUCTIONS=1', | 
 | 78 |                  '-DCAN_USE_ARMV7_INSTRUCTIONS=1', | 
| sgjesse@chromium.org | 720dc0b | 2010-05-10 09:25:39 +0000 | [diff] [blame] | 79 |                  '-DCAN_USE_UNALIGNED_ACCESSES=1', | 
| ager@chromium.org | bb29dc9 | 2009-03-24 13:25:23 +0000 | [diff] [blame] | 80 |                  '-MD'] | 
 | 81 |  | 
 | 82 | ANDROID_INCLUDES = [ANDROID_TOP + '/bionic/libc/arch-arm/include', | 
 | 83 |                     ANDROID_TOP + '/bionic/libc/include', | 
 | 84 |                     ANDROID_TOP + '/bionic/libstdc++/include', | 
 | 85 |                     ANDROID_TOP + '/bionic/libc/kernel/common', | 
 | 86 |                     ANDROID_TOP + '/bionic/libc/kernel/arch-arm', | 
 | 87 |                     ANDROID_TOP + '/bionic/libm/include', | 
 | 88 |                     ANDROID_TOP + '/bionic/libm/include/arch/arm', | 
| christian.plesner.hansen@gmail.com | 5a6af92 | 2009-08-12 14:20:51 +0000 | [diff] [blame] | 89 |                     ANDROID_TOP + '/bionic/libthread_db/include', | 
 | 90 |                     ANDROID_TOP + '/frameworks/base/include', | 
 | 91 |                     ANDROID_TOP + '/system/core/include'] | 
| christian.plesner.hansen | 43d26ec | 2008-07-03 15:10:15 +0000 | [diff] [blame] | 92 |  | 
| kasperl@chromium.org | f5aa837 | 2009-03-24 14:47:14 +0000 | [diff] [blame] | 93 | ANDROID_LINKFLAGS = ['-nostdlib', | 
 | 94 |                      '-Bdynamic', | 
 | 95 |                      '-Wl,-T,' + ANDROID_TOP + '/build/core/armelf.x', | 
 | 96 |                      '-Wl,-dynamic-linker,/system/bin/linker', | 
 | 97 |                      '-Wl,--gc-sections', | 
 | 98 |                      '-Wl,-z,nocopyreloc', | 
 | 99 |                      '-Wl,-rpath-link=' + ANDROID_TOP + '/out/target/product/generic/obj/lib', | 
 | 100 |                      ANDROID_TOP + '/out/target/product/generic/obj/lib/crtbegin_dynamic.o', | 
| sgjesse@chromium.org | df7a284 | 2010-03-25 14:34:15 +0000 | [diff] [blame] | 101 |                      ANDROID_TOP + '/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/lib/gcc/arm-eabi/4.4.0/interwork/libgcc.a', | 
| kasperl@chromium.org | f5aa837 | 2009-03-24 14:47:14 +0000 | [diff] [blame] | 102 |                      ANDROID_TOP + '/out/target/product/generic/obj/lib/crtend_android.o']; | 
 | 103 |  | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 104 | LIBRARY_FLAGS = { | 
 | 105 |   'all': { | 
| kasperl@chromium.org | 68ac009 | 2009-07-09 06:00:35 +0000 | [diff] [blame] | 106 |     'CPPPATH': [join(root_dir, 'src')], | 
| ricow@chromium.org | c9c8082 | 2010-04-21 08:22:37 +0000 | [diff] [blame] | 107 |     'regexp:interpreted': { | 
 | 108 |       'CPPDEFINES': ['V8_INTERPRETED_REGEXP'] | 
| ager@chromium.org | 18ad94b | 2009-09-02 08:22:29 +0000 | [diff] [blame] | 109 |     }, | 
 | 110 |     'mode:debug': { | 
| whesse@chromium.org | 023421e | 2010-12-21 12:19:12 +0000 | [diff] [blame] | 111 |       'CPPDEFINES': ['V8_ENABLE_CHECKS', 'OBJECT_PRINT'] | 
| ager@chromium.org | 4af710e | 2009-09-15 12:20:11 +0000 | [diff] [blame] | 112 |     }, | 
| ager@chromium.org | 357bf65 | 2010-04-12 11:30:10 +0000 | [diff] [blame] | 113 |     'vmstate:on': { | 
 | 114 |       'CPPDEFINES':   ['ENABLE_VMSTATE_TRACKING'], | 
 | 115 |     }, | 
| whesse@chromium.org | 023421e | 2010-12-21 12:19:12 +0000 | [diff] [blame] | 116 |     'objectprint:on': { | 
 | 117 |       'CPPDEFINES':   ['OBJECT_PRINT'], | 
 | 118 |     }, | 
| ager@chromium.org | 357bf65 | 2010-04-12 11:30:10 +0000 | [diff] [blame] | 119 |     'protectheap:on': { | 
 | 120 |       'CPPDEFINES':   ['ENABLE_VMSTATE_TRACKING', 'ENABLE_HEAP_PROTECTION'], | 
 | 121 |     }, | 
| ager@chromium.org | 4af710e | 2009-09-15 12:20:11 +0000 | [diff] [blame] | 122 |     'profilingsupport:on': { | 
| ager@chromium.org | 357bf65 | 2010-04-12 11:30:10 +0000 | [diff] [blame] | 123 |       'CPPDEFINES':   ['ENABLE_VMSTATE_TRACKING', 'ENABLE_LOGGING_AND_PROFILING'], | 
| ager@chromium.org | 4af710e | 2009-09-15 12:20:11 +0000 | [diff] [blame] | 124 |     }, | 
 | 125 |     'debuggersupport:on': { | 
 | 126 |       'CPPDEFINES':   ['ENABLE_DEBUGGER_SUPPORT'], | 
| erik.corry@gmail.com | 0511e24 | 2011-01-19 11:11:08 +0000 | [diff] [blame] | 127 |     }, | 
 | 128 |     'inspector:on': { | 
 | 129 |       'CPPDEFINES':   ['INSPECTOR'], | 
| vegorov@chromium.org | 0a4e901 | 2011-01-24 12:33:13 +0000 | [diff] [blame] | 130 |     }, | 
 | 131 |     'liveobjectlist:on': { | 
 | 132 |       'CPPDEFINES':   ['ENABLE_DEBUGGER_SUPPORT', 'INSPECTOR', | 
 | 133 |                        'LIVE_OBJECT_LIST', 'OBJECT_PRINT'], | 
| kasperl@chromium.org | 68ac009 | 2009-07-09 06:00:35 +0000 | [diff] [blame] | 134 |     } | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 135 |   }, | 
 | 136 |   'gcc': { | 
 | 137 |     'all': { | 
| kasperl@chromium.org | 41044eb | 2008-10-06 08:24:46 +0000 | [diff] [blame] | 138 |       'CCFLAGS':      ['$DIALECTFLAGS', '$WARNINGFLAGS'], | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 139 |       'CXXFLAGS':     ['$CCFLAGS', '-fno-rtti', '-fno-exceptions'], | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 140 |     }, | 
| ager@chromium.org | 4af710e | 2009-09-15 12:20:11 +0000 | [diff] [blame] | 141 |     'visibility:hidden': { | 
 | 142 |       # Use visibility=default to disable this. | 
 | 143 |       'CXXFLAGS':     ['-fvisibility=hidden'] | 
 | 144 |     }, | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 145 |     'mode:debug': { | 
 | 146 |       'CCFLAGS':      ['-g', '-O0'], | 
| ager@chromium.org | 71daaf6 | 2009-04-01 07:22:49 +0000 | [diff] [blame] | 147 |       'CPPDEFINES':   ['ENABLE_DISASSEMBLER', 'DEBUG'], | 
 | 148 |       'os:android': { | 
 | 149 |         'CCFLAGS':    ['-mthumb'] | 
 | 150 |       } | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 151 |     }, | 
 | 152 |     'mode:release': { | 
| ager@chromium.org | bb29dc9 | 2009-03-24 13:25:23 +0000 | [diff] [blame] | 153 |       'CCFLAGS':      ['-O3', '-fomit-frame-pointer', '-fdata-sections', | 
 | 154 |                        '-ffunction-sections'], | 
 | 155 |       'os:android': { | 
| ager@chromium.org | 71daaf6 | 2009-04-01 07:22:49 +0000 | [diff] [blame] | 156 |         'CCFLAGS':    ['-mthumb', '-Os'], | 
| ager@chromium.org | 4af710e | 2009-09-15 12:20:11 +0000 | [diff] [blame] | 157 |         'CPPDEFINES': ['SK_RELEASE', 'NDEBUG'] | 
| ager@chromium.org | bb29dc9 | 2009-03-24 13:25:23 +0000 | [diff] [blame] | 158 |       } | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 159 |     }, | 
| iposva@chromium.org | 245aa85 | 2009-02-10 00:49:54 +0000 | [diff] [blame] | 160 |     'os:linux': { | 
| kasperl@chromium.org | 71affb5 | 2009-05-26 05:44:31 +0000 | [diff] [blame] | 161 |       'CCFLAGS':      ['-ansi'] + GCC_EXTRA_CCFLAGS, | 
| sgjesse@chromium.org | f8c8180 | 2009-03-30 07:19:14 +0000 | [diff] [blame] | 162 |       'library:shared': { | 
| sgjesse@chromium.org | b9d7da1 | 2009-08-05 08:38:10 +0000 | [diff] [blame] | 163 |         'CPPDEFINES': ['V8_SHARED'], | 
| ager@chromium.org | 65dad4b | 2009-04-23 08:48:43 +0000 | [diff] [blame] | 164 |         'LIBS': ['pthread'] | 
| sgjesse@chromium.org | f8c8180 | 2009-03-30 07:19:14 +0000 | [diff] [blame] | 165 |       } | 
| iposva@chromium.org | 245aa85 | 2009-02-10 00:49:54 +0000 | [diff] [blame] | 166 |     }, | 
 | 167 |     'os:macos': { | 
| ager@chromium.org | 5aa501c | 2009-06-23 07:57:28 +0000 | [diff] [blame] | 168 |       'CCFLAGS':      ['-ansi', '-mmacosx-version-min=10.4'], | 
| kmillikin@chromium.org | 13bd294 | 2009-12-16 15:36:05 +0000 | [diff] [blame] | 169 |       'library:shared': { | 
 | 170 |         'CPPDEFINES': ['V8_SHARED'] | 
 | 171 |       } | 
| iposva@chromium.org | 245aa85 | 2009-02-10 00:49:54 +0000 | [diff] [blame] | 172 |     }, | 
| ager@chromium.org | a74f0da | 2008-12-03 16:05:52 +0000 | [diff] [blame] | 173 |     'os:freebsd': { | 
| ager@chromium.org | e2902be | 2009-06-08 12:21:35 +0000 | [diff] [blame] | 174 |       'CPPPATH' : ['/usr/local/include'], | 
 | 175 |       'LIBPATH' : ['/usr/local/lib'], | 
| iposva@chromium.org | 245aa85 | 2009-02-10 00:49:54 +0000 | [diff] [blame] | 176 |       'CCFLAGS':      ['-ansi'], | 
 | 177 |     }, | 
| sgjesse@chromium.org | ac6aa17 | 2009-12-04 12:29:05 +0000 | [diff] [blame] | 178 |     'os:openbsd': { | 
 | 179 |       'CPPPATH' : ['/usr/local/include'], | 
 | 180 |       'LIBPATH' : ['/usr/local/lib'], | 
 | 181 |       'CCFLAGS':      ['-ansi'], | 
 | 182 |     }, | 
| sgjesse@chromium.org | b302e56 | 2010-02-03 11:26:59 +0000 | [diff] [blame] | 183 |     'os:solaris': { | 
| vegorov@chromium.org | dff694e | 2010-05-17 09:10:26 +0000 | [diff] [blame] | 184 |       # On Solaris, to get isinf, INFINITY, fpclassify and other macros one | 
 | 185 |       # needs to define __C99FEATURES__. | 
 | 186 |       'CPPDEFINES': ['__C99FEATURES__'], | 
| sgjesse@chromium.org | b302e56 | 2010-02-03 11:26:59 +0000 | [diff] [blame] | 187 |       'CPPPATH' : ['/usr/local/include'], | 
 | 188 |       'LIBPATH' : ['/usr/local/lib'], | 
 | 189 |       'CCFLAGS':      ['-ansi'], | 
 | 190 |     }, | 
| iposva@chromium.org | 245aa85 | 2009-02-10 00:49:54 +0000 | [diff] [blame] | 191 |     'os:win32': { | 
 | 192 |       'CCFLAGS':      ['-DWIN32'], | 
 | 193 |       'CXXFLAGS':     ['-DWIN32'], | 
| ager@chromium.org | a74f0da | 2008-12-03 16:05:52 +0000 | [diff] [blame] | 194 |     }, | 
| ager@chromium.org | bb29dc9 | 2009-03-24 13:25:23 +0000 | [diff] [blame] | 195 |     'os:android': { | 
 | 196 |       'CPPDEFINES':   ['ANDROID', '__ARM_ARCH_5__', '__ARM_ARCH_5T__', | 
 | 197 |                        '__ARM_ARCH_5E__', '__ARM_ARCH_5TE__'], | 
 | 198 |       'CCFLAGS':      ANDROID_FLAGS, | 
 | 199 |       'WARNINGFLAGS': ['-Wall', '-Wno-unused', '-Werror=return-type', | 
 | 200 |                        '-Wstrict-aliasing=2'], | 
 | 201 |       'CPPPATH':      ANDROID_INCLUDES, | 
 | 202 |     }, | 
| ager@chromium.org | 5ec4892 | 2009-05-05 07:25:34 +0000 | [diff] [blame] | 203 |     'arch:ia32': { | 
| kasperl@chromium.org | e959c18 | 2009-07-27 08:59:04 +0000 | [diff] [blame] | 204 |       'CPPDEFINES':   ['V8_TARGET_ARCH_IA32'], | 
 | 205 |       'CCFLAGS':      ['-m32'], | 
 | 206 |       'LINKFLAGS':    ['-m32'] | 
| ager@chromium.org | 5ec4892 | 2009-05-05 07:25:34 +0000 | [diff] [blame] | 207 |     }, | 
 | 208 |     'arch:arm': { | 
| ricow@chromium.org | 30ce411 | 2010-05-31 10:38:25 +0000 | [diff] [blame] | 209 |       'CPPDEFINES':   ['V8_TARGET_ARCH_ARM'], | 
 | 210 |       'unalignedaccesses:on' : { | 
 | 211 |         'CPPDEFINES' : ['CAN_USE_UNALIGNED_ACCESSES=1'] | 
 | 212 |       }, | 
 | 213 |       'unalignedaccesses:off' : { | 
 | 214 |         'CPPDEFINES' : ['CAN_USE_UNALIGNED_ACCESSES=0'] | 
 | 215 |       } | 
| ager@chromium.org | 5ec4892 | 2009-05-05 07:25:34 +0000 | [diff] [blame] | 216 |     }, | 
| kasperl@chromium.org | e959c18 | 2009-07-27 08:59:04 +0000 | [diff] [blame] | 217 |     'simulator:arm': { | 
| ricow@chromium.org | 30ce411 | 2010-05-31 10:38:25 +0000 | [diff] [blame] | 218 |       'CCFLAGS':      ['-m32'], | 
| vegorov@chromium.org | 4284196 | 2010-10-18 11:18:59 +0000 | [diff] [blame] | 219 |       'LINKFLAGS':    ['-m32'], | 
| kasperl@chromium.org | e959c18 | 2009-07-27 08:59:04 +0000 | [diff] [blame] | 220 |     }, | 
| ager@chromium.org | 5c83825 | 2010-02-19 08:53:10 +0000 | [diff] [blame] | 221 |     'arch:mips': { | 
 | 222 |       'CPPDEFINES':   ['V8_TARGET_ARCH_MIPS'], | 
 | 223 |       'simulator:none': { | 
 | 224 |         'CCFLAGS':      ['-EL', '-mips32r2', '-Wa,-mips32r2', '-fno-inline'], | 
 | 225 |         'LDFLAGS':      ['-EL'] | 
 | 226 |       } | 
 | 227 |     }, | 
 | 228 |     'simulator:mips': { | 
 | 229 |       'CCFLAGS':      ['-m32'], | 
| vegorov@chromium.org | 4284196 | 2010-10-18 11:18:59 +0000 | [diff] [blame] | 230 |       'LINKFLAGS':    ['-m32'], | 
| ager@chromium.org | 5c83825 | 2010-02-19 08:53:10 +0000 | [diff] [blame] | 231 |     }, | 
| ager@chromium.org | 5ec4892 | 2009-05-05 07:25:34 +0000 | [diff] [blame] | 232 |     'arch:x64': { | 
| kasperl@chromium.org | e959c18 | 2009-07-27 08:59:04 +0000 | [diff] [blame] | 233 |       'CPPDEFINES':   ['V8_TARGET_ARCH_X64'], | 
| sgjesse@chromium.org | 911335c | 2009-08-19 12:59:44 +0000 | [diff] [blame] | 234 |       'CCFLAGS':      ['-m64'], | 
| kasperl@chromium.org | e959c18 | 2009-07-27 08:59:04 +0000 | [diff] [blame] | 235 |       'LINKFLAGS':    ['-m64'], | 
| kasperl@chromium.org | 7be3c99 | 2009-03-12 07:19:55 +0000 | [diff] [blame] | 236 |     }, | 
 | 237 |     'prof:oprofile': { | 
 | 238 |       'CPPDEFINES':   ['ENABLE_OPROFILE_AGENT'] | 
| erik.corry@gmail.com | 0511e24 | 2011-01-19 11:11:08 +0000 | [diff] [blame] | 239 |     }, | 
 | 240 |     'gdbjit:on': { | 
 | 241 |       'CPPDEFINES':   ['ENABLE_GDB_JIT_INTERFACE'] | 
| ager@chromium.org | 9258b6b | 2008-09-11 09:11:10 +0000 | [diff] [blame] | 242 |     } | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 243 |   }, | 
 | 244 |   'msvc': { | 
 | 245 |     'all': { | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 246 |       'CCFLAGS':      ['$DIALECTFLAGS', '$WARNINGFLAGS'], | 
| v8.team.kasperl | 727e995 | 2008-09-02 14:56:44 +0000 | [diff] [blame] | 247 |       'CXXFLAGS':     ['$CCFLAGS', '/GR-', '/Gy'], | 
| ager@chromium.org | 18ad94b | 2009-09-02 08:22:29 +0000 | [diff] [blame] | 248 |       'CPPDEFINES':   ['WIN32'], | 
 | 249 |       'LINKFLAGS':    ['/INCREMENTAL:NO', '/NXCOMPAT', '/IGNORE:4221'], | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 250 |       'CCPDBFLAGS':   ['/Zi'] | 
 | 251 |     }, | 
| ager@chromium.org | 18ad94b | 2009-09-02 08:22:29 +0000 | [diff] [blame] | 252 |     'verbose:off': { | 
 | 253 |       'DIALECTFLAGS': ['/nologo'], | 
 | 254 |       'ARFLAGS':      ['/NOLOGO'] | 
 | 255 |     }, | 
| ager@chromium.org | 5ec4892 | 2009-05-05 07:25:34 +0000 | [diff] [blame] | 256 |     'arch:ia32': { | 
| ager@chromium.org | 18ad94b | 2009-09-02 08:22:29 +0000 | [diff] [blame] | 257 |       'CPPDEFINES':   ['V8_TARGET_ARCH_IA32', '_USE_32BIT_TIME_T'], | 
 | 258 |       'LINKFLAGS':    ['/MACHINE:X86'], | 
 | 259 |       'ARFLAGS':      ['/MACHINE:X86'] | 
 | 260 |     }, | 
 | 261 |     'arch:x64': { | 
 | 262 |       'CPPDEFINES':   ['V8_TARGET_ARCH_X64'], | 
 | 263 |       'LINKFLAGS':    ['/MACHINE:X64'], | 
 | 264 |       'ARFLAGS':      ['/MACHINE:X64'] | 
| ager@chromium.org | 5ec4892 | 2009-05-05 07:25:34 +0000 | [diff] [blame] | 265 |     }, | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 266 |     'mode:debug': { | 
| ager@chromium.org | a74f0da | 2008-12-03 16:05:52 +0000 | [diff] [blame] | 267 |       'CCFLAGS':      ['/Od', '/Gm'], | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 268 |       'CPPDEFINES':   ['_DEBUG', 'ENABLE_DISASSEMBLER', 'DEBUG'], | 
| ager@chromium.org | a74f0da | 2008-12-03 16:05:52 +0000 | [diff] [blame] | 269 |       'LINKFLAGS':    ['/DEBUG'], | 
 | 270 |       'msvcrt:static': { | 
 | 271 |         'CCFLAGS': ['/MTd'] | 
 | 272 |       }, | 
 | 273 |       'msvcrt:shared': { | 
 | 274 |         'CCFLAGS': ['/MDd'] | 
 | 275 |       } | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 276 |     }, | 
 | 277 |     'mode:release': { | 
| ager@chromium.org | 65dad4b | 2009-04-23 08:48:43 +0000 | [diff] [blame] | 278 |       'CCFLAGS':      ['/O2'], | 
 | 279 |       'LINKFLAGS':    ['/OPT:REF', '/OPT:ICF'], | 
| ager@chromium.org | a74f0da | 2008-12-03 16:05:52 +0000 | [diff] [blame] | 280 |       'msvcrt:static': { | 
 | 281 |         'CCFLAGS': ['/MT'] | 
 | 282 |       }, | 
 | 283 |       'msvcrt:shared': { | 
 | 284 |         'CCFLAGS': ['/MD'] | 
| ager@chromium.org | 65dad4b | 2009-04-23 08:48:43 +0000 | [diff] [blame] | 285 |       }, | 
 | 286 |       'msvcltcg:on': { | 
 | 287 |         'CCFLAGS':      ['/GL'], | 
| ager@chromium.org | 65dad4b | 2009-04-23 08:48:43 +0000 | [diff] [blame] | 288 |         'ARFLAGS':      ['/LTCG'], | 
| ager@chromium.org | ce5e87b | 2010-03-10 10:24:18 +0000 | [diff] [blame] | 289 |         'pgo:off': { | 
 | 290 |           'LINKFLAGS':    ['/LTCG'], | 
 | 291 |         }, | 
 | 292 |         'pgo:instrument': { | 
 | 293 |           'LINKFLAGS':    ['/LTCG:PGI'] | 
 | 294 |         }, | 
 | 295 |         'pgo:optimize': { | 
 | 296 |           'LINKFLAGS':    ['/LTCG:PGO'] | 
 | 297 |         } | 
| ager@chromium.org | a74f0da | 2008-12-03 16:05:52 +0000 | [diff] [blame] | 298 |       } | 
| ager@chromium.org | 5ec4892 | 2009-05-05 07:25:34 +0000 | [diff] [blame] | 299 |     } | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 300 |   } | 
 | 301 | } | 
 | 302 |  | 
 | 303 |  | 
 | 304 | V8_EXTRA_FLAGS = { | 
 | 305 |   'gcc': { | 
 | 306 |     'all': { | 
| sgjesse@chromium.org | b9d7da1 | 2009-08-05 08:38:10 +0000 | [diff] [blame] | 307 |       'WARNINGFLAGS': ['-Wall', | 
 | 308 |                        '-Werror', | 
 | 309 |                        '-W', | 
 | 310 |                        '-Wno-unused-parameter', | 
 | 311 |                        '-Wnon-virtual-dtor'] | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 312 |     }, | 
| iposva@chromium.org | 245aa85 | 2009-02-10 00:49:54 +0000 | [diff] [blame] | 313 |     'os:win32': { | 
| ager@chromium.org | bb29dc9 | 2009-03-24 13:25:23 +0000 | [diff] [blame] | 314 |       'WARNINGFLAGS': ['-pedantic', '-Wno-long-long'] | 
 | 315 |     }, | 
 | 316 |     'os:linux': { | 
| ager@chromium.org | 5ec4892 | 2009-05-05 07:25:34 +0000 | [diff] [blame] | 317 |       'WARNINGFLAGS': ['-pedantic'], | 
 | 318 |       'library:shared': { | 
 | 319 |         'soname:on': { | 
 | 320 |           'LINKFLAGS': ['-Wl,-soname,${SONAME}'] | 
 | 321 |         } | 
 | 322 |       } | 
| ager@chromium.org | bb29dc9 | 2009-03-24 13:25:23 +0000 | [diff] [blame] | 323 |     }, | 
 | 324 |     'os:macos': { | 
 | 325 |       'WARNINGFLAGS': ['-pedantic'] | 
| iposva@chromium.org | 245aa85 | 2009-02-10 00:49:54 +0000 | [diff] [blame] | 326 |     }, | 
| ager@chromium.org | 9258b6b | 2008-09-11 09:11:10 +0000 | [diff] [blame] | 327 |     'disassembler:on': { | 
 | 328 |       'CPPDEFINES':   ['ENABLE_DISASSEMBLER'] | 
 | 329 |     } | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 330 |   }, | 
 | 331 |   'msvc': { | 
 | 332 |     'all': { | 
| ager@chromium.org | 0ee099b | 2011-01-25 14:06:47 +0000 | [diff] [blame] | 333 |       'WARNINGFLAGS': ['/W3', '/WX', '/wd4351', '/wd4355', '/wd4800'] | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 334 |     }, | 
| sgjesse@chromium.org | 4e421f4 | 2009-09-07 07:18:16 +0000 | [diff] [blame] | 335 |     'library:shared': { | 
 | 336 |       'CPPDEFINES': ['BUILDING_V8_SHARED'], | 
 | 337 |       'LIBS': ['winmm', 'ws2_32'] | 
 | 338 |     }, | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 339 |     'arch:arm': { | 
| ager@chromium.org | 9085a01 | 2009-05-11 19:22:57 +0000 | [diff] [blame] | 340 |       'CPPDEFINES':   ['V8_TARGET_ARCH_ARM'], | 
| ager@chromium.org | 3bf7b91 | 2008-11-17 09:09:45 +0000 | [diff] [blame] | 341 |       # /wd4996 is to silence the warning about sscanf | 
 | 342 |       # used by the arm simulator. | 
 | 343 |       'WARNINGFLAGS': ['/wd4996'] | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 344 |     }, | 
| ager@chromium.org | 5c83825 | 2010-02-19 08:53:10 +0000 | [diff] [blame] | 345 |     'arch:mips': { | 
 | 346 |       'CPPDEFINES':   ['V8_TARGET_ARCH_MIPS'], | 
 | 347 |     }, | 
| ager@chromium.org | 9258b6b | 2008-09-11 09:11:10 +0000 | [diff] [blame] | 348 |     'disassembler:on': { | 
 | 349 |       'CPPDEFINES':   ['ENABLE_DISASSEMBLER'] | 
 | 350 |     } | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 351 |   } | 
 | 352 | } | 
 | 353 |  | 
 | 354 |  | 
| iposva@chromium.org | 245aa85 | 2009-02-10 00:49:54 +0000 | [diff] [blame] | 355 | MKSNAPSHOT_EXTRA_FLAGS = { | 
 | 356 |   'gcc': { | 
 | 357 |     'os:linux': { | 
| ager@chromium.org | 65dad4b | 2009-04-23 08:48:43 +0000 | [diff] [blame] | 358 |       'LIBS': ['pthread'], | 
| iposva@chromium.org | 245aa85 | 2009-02-10 00:49:54 +0000 | [diff] [blame] | 359 |     }, | 
 | 360 |     'os:macos': { | 
 | 361 |       'LIBS': ['pthread'], | 
 | 362 |     }, | 
 | 363 |     'os:freebsd': { | 
| ager@chromium.org | e2902be | 2009-06-08 12:21:35 +0000 | [diff] [blame] | 364 |       'LIBS': ['execinfo', 'pthread'] | 
| iposva@chromium.org | 245aa85 | 2009-02-10 00:49:54 +0000 | [diff] [blame] | 365 |     }, | 
| sgjesse@chromium.org | b302e56 | 2010-02-03 11:26:59 +0000 | [diff] [blame] | 366 |     'os:solaris': { | 
 | 367 |       'LIBS': ['m', 'pthread', 'socket', 'nsl', 'rt'], | 
 | 368 |       'LINKFLAGS': ['-mt'] | 
 | 369 |     }, | 
| sgjesse@chromium.org | ac6aa17 | 2009-12-04 12:29:05 +0000 | [diff] [blame] | 370 |     'os:openbsd': { | 
 | 371 |       'LIBS': ['execinfo', 'pthread'] | 
 | 372 |     }, | 
| iposva@chromium.org | 245aa85 | 2009-02-10 00:49:54 +0000 | [diff] [blame] | 373 |     'os:win32': { | 
| ager@chromium.org | 381abbb | 2009-02-25 13:23:22 +0000 | [diff] [blame] | 374 |       'LIBS': ['winmm', 'ws2_32'], | 
| iposva@chromium.org | 245aa85 | 2009-02-10 00:49:54 +0000 | [diff] [blame] | 375 |     }, | 
 | 376 |   }, | 
 | 377 |   'msvc': { | 
 | 378 |     'all': { | 
| ager@chromium.org | 65dad4b | 2009-04-23 08:48:43 +0000 | [diff] [blame] | 379 |       'CPPDEFINES': ['_HAS_EXCEPTIONS=0'], | 
| ager@chromium.org | 381abbb | 2009-02-25 13:23:22 +0000 | [diff] [blame] | 380 |       'LIBS': ['winmm', 'ws2_32'] | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 381 |     } | 
 | 382 |   } | 
 | 383 | } | 
 | 384 |  | 
 | 385 |  | 
 | 386 | DTOA_EXTRA_FLAGS = { | 
 | 387 |   'gcc': { | 
 | 388 |     'all': { | 
| kasperl@chromium.org | 71affb5 | 2009-05-26 05:44:31 +0000 | [diff] [blame] | 389 |       'WARNINGFLAGS': ['-Werror', '-Wno-uninitialized'], | 
 | 390 |       'CCFLAGS': GCC_DTOA_EXTRA_CCFLAGS | 
| ager@chromium.org | 236ad96 | 2008-09-25 09:45:57 +0000 | [diff] [blame] | 391 |     } | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 392 |   }, | 
 | 393 |   'msvc': { | 
 | 394 |     'all': { | 
 | 395 |       'WARNINGFLAGS': ['/WX', '/wd4018', '/wd4244'] | 
 | 396 |     } | 
 | 397 |   } | 
 | 398 | } | 
 | 399 |  | 
 | 400 |  | 
 | 401 | CCTEST_EXTRA_FLAGS = { | 
 | 402 |   'all': { | 
 | 403 |     'CPPPATH': [join(root_dir, 'src')], | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 404 |   }, | 
 | 405 |   'gcc': { | 
 | 406 |     'all': { | 
 | 407 |       'LIBPATH': [abspath('.')] | 
 | 408 |     }, | 
| iposva@chromium.org | 245aa85 | 2009-02-10 00:49:54 +0000 | [diff] [blame] | 409 |     'os:linux': { | 
| ager@chromium.org | 65dad4b | 2009-04-23 08:48:43 +0000 | [diff] [blame] | 410 |       'LIBS':         ['pthread'], | 
| iposva@chromium.org | 245aa85 | 2009-02-10 00:49:54 +0000 | [diff] [blame] | 411 |     }, | 
 | 412 |     'os:macos': { | 
 | 413 |       'LIBS':         ['pthread'], | 
 | 414 |     }, | 
 | 415 |     'os:freebsd': { | 
 | 416 |       'LIBS':         ['execinfo', 'pthread'] | 
 | 417 |     }, | 
| sgjesse@chromium.org | b302e56 | 2010-02-03 11:26:59 +0000 | [diff] [blame] | 418 |     'os:solaris': { | 
 | 419 |       'LIBS':         ['m', 'pthread', 'socket', 'nsl', 'rt'], | 
 | 420 |       'LINKFLAGS':    ['-mt'] | 
 | 421 |     }, | 
| sgjesse@chromium.org | ac6aa17 | 2009-12-04 12:29:05 +0000 | [diff] [blame] | 422 |     'os:openbsd': { | 
 | 423 |       'LIBS':         ['execinfo', 'pthread'] | 
 | 424 |     }, | 
| iposva@chromium.org | 245aa85 | 2009-02-10 00:49:54 +0000 | [diff] [blame] | 425 |     'os:win32': { | 
| ager@chromium.org | 381abbb | 2009-02-25 13:23:22 +0000 | [diff] [blame] | 426 |       'LIBS': ['winmm', 'ws2_32'] | 
| iposva@chromium.org | 245aa85 | 2009-02-10 00:49:54 +0000 | [diff] [blame] | 427 |     }, | 
| ager@chromium.org | 5ec4892 | 2009-05-05 07:25:34 +0000 | [diff] [blame] | 428 |     'os:android': { | 
 | 429 |       'CPPDEFINES':   ['ANDROID', '__ARM_ARCH_5__', '__ARM_ARCH_5T__', | 
 | 430 |                        '__ARM_ARCH_5E__', '__ARM_ARCH_5TE__'], | 
 | 431 |       'CCFLAGS':      ANDROID_FLAGS, | 
 | 432 |       'CPPPATH':      ANDROID_INCLUDES, | 
| sgjesse@chromium.org | df7a284 | 2010-03-25 14:34:15 +0000 | [diff] [blame] | 433 |       'LIBPATH':     [ANDROID_TOP + '/out/target/product/generic/obj/lib', | 
 | 434 |                       ANDROID_TOP + '/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/lib/gcc/arm-eabi/4.4.0/interwork'], | 
| ager@chromium.org | 5ec4892 | 2009-05-05 07:25:34 +0000 | [diff] [blame] | 435 |       'LINKFLAGS':    ANDROID_LINKFLAGS, | 
| sgjesse@chromium.org | df7a284 | 2010-03-25 14:34:15 +0000 | [diff] [blame] | 436 |       'LIBS':         ['log', 'c', 'stdc++', 'm', 'gcc'], | 
| ager@chromium.org | 5ec4892 | 2009-05-05 07:25:34 +0000 | [diff] [blame] | 437 |       'mode:release': { | 
 | 438 |         'CPPDEFINES': ['SK_RELEASE', 'NDEBUG'] | 
 | 439 |       } | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 440 |     }, | 
| ricow@chromium.org | c9c8082 | 2010-04-21 08:22:37 +0000 | [diff] [blame] | 441 |     'arch:arm': { | 
 | 442 |       'LINKFLAGS':   ARM_LINK_FLAGS | 
 | 443 |     }, | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 444 |   }, | 
 | 445 |   'msvc': { | 
 | 446 |     'all': { | 
| iposva@chromium.org | 245aa85 | 2009-02-10 00:49:54 +0000 | [diff] [blame] | 447 |       'CPPDEFINES': ['_HAS_EXCEPTIONS=0'], | 
| ager@chromium.org | 381abbb | 2009-02-25 13:23:22 +0000 | [diff] [blame] | 448 |       'LIBS': ['winmm', 'ws2_32'] | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 449 |     }, | 
 | 450 |     'library:shared': { | 
 | 451 |       'CPPDEFINES': ['USING_V8_SHARED'] | 
| ager@chromium.org | 5ec4892 | 2009-05-05 07:25:34 +0000 | [diff] [blame] | 452 |     }, | 
 | 453 |     'arch:ia32': { | 
| ager@chromium.org | 9085a01 | 2009-05-11 19:22:57 +0000 | [diff] [blame] | 454 |       'CPPDEFINES': ['V8_TARGET_ARCH_IA32'] | 
| ager@chromium.org | 18ad94b | 2009-09-02 08:22:29 +0000 | [diff] [blame] | 455 |     }, | 
 | 456 |     'arch:x64': { | 
| christian.plesner.hansen@gmail.com | 9d58c2b | 2009-10-16 11:48:38 +0000 | [diff] [blame] | 457 |       'CPPDEFINES':   ['V8_TARGET_ARCH_X64'], | 
 | 458 |       'LINKFLAGS': ['/STACK:2091752'] | 
| ager@chromium.org | 18ad94b | 2009-09-02 08:22:29 +0000 | [diff] [blame] | 459 |     }, | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 460 |   } | 
 | 461 | } | 
 | 462 |  | 
 | 463 |  | 
 | 464 | SAMPLE_FLAGS = { | 
 | 465 |   'all': { | 
| v8.team.kasperl | 727e995 | 2008-09-02 14:56:44 +0000 | [diff] [blame] | 466 |     'CPPPATH': [join(abspath('.'), 'include')], | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 467 |   }, | 
 | 468 |   'gcc': { | 
 | 469 |     'all': { | 
| ager@chromium.org | bb29dc9 | 2009-03-24 13:25:23 +0000 | [diff] [blame] | 470 |       'LIBPATH': ['.'], | 
 | 471 |       'CCFLAGS': ['-fno-rtti', '-fno-exceptions'] | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 472 |     }, | 
| iposva@chromium.org | 245aa85 | 2009-02-10 00:49:54 +0000 | [diff] [blame] | 473 |     'os:linux': { | 
| ager@chromium.org | 65dad4b | 2009-04-23 08:48:43 +0000 | [diff] [blame] | 474 |       'LIBS':         ['pthread'], | 
| iposva@chromium.org | 245aa85 | 2009-02-10 00:49:54 +0000 | [diff] [blame] | 475 |     }, | 
 | 476 |     'os:macos': { | 
 | 477 |       'LIBS':         ['pthread'], | 
 | 478 |     }, | 
| ager@chromium.org | a74f0da | 2008-12-03 16:05:52 +0000 | [diff] [blame] | 479 |     'os:freebsd': { | 
| ager@chromium.org | e2902be | 2009-06-08 12:21:35 +0000 | [diff] [blame] | 480 |       'LIBPATH' : ['/usr/local/lib'], | 
| sgjesse@chromium.org | ac6aa17 | 2009-12-04 12:29:05 +0000 | [diff] [blame] | 481 |       'LIBS':     ['execinfo', 'pthread'] | 
 | 482 |     }, | 
| sgjesse@chromium.org | b302e56 | 2010-02-03 11:26:59 +0000 | [diff] [blame] | 483 |     'os:solaris': { | 
 | 484 |       'LIBPATH' : ['/usr/local/lib'], | 
 | 485 |       'LIBS':     ['m', 'pthread', 'socket', 'nsl', 'rt'], | 
 | 486 |       'LINKFLAGS': ['-mt'] | 
 | 487 |     }, | 
| sgjesse@chromium.org | ac6aa17 | 2009-12-04 12:29:05 +0000 | [diff] [blame] | 488 |     'os:openbsd': { | 
 | 489 |       'LIBPATH' : ['/usr/local/lib'], | 
 | 490 |       'LIBS':     ['execinfo', 'pthread'] | 
| iposva@chromium.org | 245aa85 | 2009-02-10 00:49:54 +0000 | [diff] [blame] | 491 |     }, | 
 | 492 |     'os:win32': { | 
| ager@chromium.org | 381abbb | 2009-02-25 13:23:22 +0000 | [diff] [blame] | 493 |       'LIBS':         ['winmm', 'ws2_32'] | 
| ager@chromium.org | a74f0da | 2008-12-03 16:05:52 +0000 | [diff] [blame] | 494 |     }, | 
| ager@chromium.org | bb29dc9 | 2009-03-24 13:25:23 +0000 | [diff] [blame] | 495 |     'os:android': { | 
 | 496 |       'CPPDEFINES':   ['ANDROID', '__ARM_ARCH_5__', '__ARM_ARCH_5T__', | 
 | 497 |                        '__ARM_ARCH_5E__', '__ARM_ARCH_5TE__'], | 
 | 498 |       'CCFLAGS':      ANDROID_FLAGS, | 
 | 499 |       'CPPPATH':      ANDROID_INCLUDES, | 
| sgjesse@chromium.org | df7a284 | 2010-03-25 14:34:15 +0000 | [diff] [blame] | 500 |       'LIBPATH':     [ANDROID_TOP + '/out/target/product/generic/obj/lib', | 
 | 501 |                       ANDROID_TOP + '/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/lib/gcc/arm-eabi/4.4.0/interwork'], | 
| kasperl@chromium.org | f5aa837 | 2009-03-24 14:47:14 +0000 | [diff] [blame] | 502 |       'LINKFLAGS':    ANDROID_LINKFLAGS, | 
| sgjesse@chromium.org | df7a284 | 2010-03-25 14:34:15 +0000 | [diff] [blame] | 503 |       'LIBS':         ['log', 'c', 'stdc++', 'm', 'gcc'], | 
| ager@chromium.org | bb29dc9 | 2009-03-24 13:25:23 +0000 | [diff] [blame] | 504 |       'mode:release': { | 
 | 505 |         'CPPDEFINES': ['SK_RELEASE', 'NDEBUG'] | 
 | 506 |       } | 
 | 507 |     }, | 
| ricow@chromium.org | c9c8082 | 2010-04-21 08:22:37 +0000 | [diff] [blame] | 508 |     'arch:arm': { | 
 | 509 |       'LINKFLAGS':   ARM_LINK_FLAGS | 
 | 510 |     }, | 
| kasperl@chromium.org | e959c18 | 2009-07-27 08:59:04 +0000 | [diff] [blame] | 511 |     'arch:ia32': { | 
 | 512 |       'CCFLAGS':      ['-m32'], | 
 | 513 |       'LINKFLAGS':    ['-m32'] | 
| ager@chromium.org | 5ec4892 | 2009-05-05 07:25:34 +0000 | [diff] [blame] | 514 |     }, | 
| kasperl@chromium.org | e959c18 | 2009-07-27 08:59:04 +0000 | [diff] [blame] | 515 |     'arch:x64': { | 
 | 516 |       'CCFLAGS':      ['-m64'], | 
 | 517 |       'LINKFLAGS':    ['-m64'] | 
 | 518 |     }, | 
| ager@chromium.org | 5c83825 | 2010-02-19 08:53:10 +0000 | [diff] [blame] | 519 |     'arch:mips': { | 
 | 520 |       'CPPDEFINES':   ['V8_TARGET_ARCH_MIPS'], | 
 | 521 |       'simulator:none': { | 
 | 522 |         'CCFLAGS':      ['-EL', '-mips32r2', '-Wa,-mips32r2', '-fno-inline'], | 
 | 523 |         'LINKFLAGS':    ['-EL'], | 
 | 524 |         'LDFLAGS':      ['-EL'] | 
 | 525 |       } | 
 | 526 |     }, | 
| kasperl@chromium.org | e959c18 | 2009-07-27 08:59:04 +0000 | [diff] [blame] | 527 |     'simulator:arm': { | 
 | 528 |       'CCFLAGS':      ['-m32'], | 
 | 529 |       'LINKFLAGS':    ['-m32'] | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 530 |     }, | 
| ager@chromium.org | 5c83825 | 2010-02-19 08:53:10 +0000 | [diff] [blame] | 531 |     'simulator:mips': { | 
 | 532 |       'CCFLAGS':      ['-m32'], | 
 | 533 |       'LINKFLAGS':    ['-m32'] | 
 | 534 |     }, | 
| ager@chromium.org | 236ad96 | 2008-09-25 09:45:57 +0000 | [diff] [blame] | 535 |     'mode:release': { | 
 | 536 |       'CCFLAGS':      ['-O2'] | 
 | 537 |     }, | 
| ager@chromium.org | 9258b6b | 2008-09-11 09:11:10 +0000 | [diff] [blame] | 538 |     'mode:debug': { | 
| kasperl@chromium.org | a555126 | 2010-12-07 12:49:48 +0000 | [diff] [blame] | 539 |       'CCFLAGS':      ['-g', '-O0'], | 
 | 540 |       'CPPDEFINES':   ['DEBUG'] | 
| kasperl@chromium.org | 7be3c99 | 2009-03-12 07:19:55 +0000 | [diff] [blame] | 541 |     }, | 
 | 542 |     'prof:oprofile': { | 
 | 543 |       'LIBPATH': ['/usr/lib32', '/usr/lib32/oprofile'], | 
 | 544 |       'LIBS': ['opagent'] | 
| ager@chromium.org | 9258b6b | 2008-09-11 09:11:10 +0000 | [diff] [blame] | 545 |     } | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 546 |   }, | 
 | 547 |   'msvc': { | 
 | 548 |     'all': { | 
| ager@chromium.org | 381abbb | 2009-02-25 13:23:22 +0000 | [diff] [blame] | 549 |       'LIBS': ['winmm', 'ws2_32'] | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 550 |     }, | 
| ager@chromium.org | 18ad94b | 2009-09-02 08:22:29 +0000 | [diff] [blame] | 551 |     'verbose:off': { | 
 | 552 |       'CCFLAGS': ['/nologo'], | 
 | 553 |       'LINKFLAGS': ['/NOLOGO'] | 
 | 554 |     }, | 
 | 555 |     'verbose:on': { | 
 | 556 |       'LINKFLAGS': ['/VERBOSE'] | 
 | 557 |     }, | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 558 |     'library:shared': { | 
 | 559 |       'CPPDEFINES': ['USING_V8_SHARED'] | 
 | 560 |     }, | 
| ager@chromium.org | 236ad96 | 2008-09-25 09:45:57 +0000 | [diff] [blame] | 561 |     'prof:on': { | 
 | 562 |       'LINKFLAGS': ['/MAP'] | 
 | 563 |     }, | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 564 |     'mode:release': { | 
| ager@chromium.org | a74f0da | 2008-12-03 16:05:52 +0000 | [diff] [blame] | 565 |       'CCFLAGS':   ['/O2'], | 
| ager@chromium.org | 65dad4b | 2009-04-23 08:48:43 +0000 | [diff] [blame] | 566 |       'LINKFLAGS': ['/OPT:REF', '/OPT:ICF'], | 
| ager@chromium.org | a74f0da | 2008-12-03 16:05:52 +0000 | [diff] [blame] | 567 |       'msvcrt:static': { | 
 | 568 |         'CCFLAGS': ['/MT'] | 
 | 569 |       }, | 
 | 570 |       'msvcrt:shared': { | 
 | 571 |         'CCFLAGS': ['/MD'] | 
| ager@chromium.org | 65dad4b | 2009-04-23 08:48:43 +0000 | [diff] [blame] | 572 |       }, | 
 | 573 |       'msvcltcg:on': { | 
 | 574 |         'CCFLAGS':      ['/GL'], | 
| ager@chromium.org | ce5e87b | 2010-03-10 10:24:18 +0000 | [diff] [blame] | 575 |         'pgo:off': { | 
 | 576 |           'LINKFLAGS':    ['/LTCG'], | 
 | 577 |         }, | 
 | 578 |       }, | 
 | 579 |       'pgo:instrument': { | 
 | 580 |         'LINKFLAGS':    ['/LTCG:PGI'] | 
 | 581 |       }, | 
 | 582 |       'pgo:optimize': { | 
 | 583 |         'LINKFLAGS':    ['/LTCG:PGO'] | 
| ager@chromium.org | a74f0da | 2008-12-03 16:05:52 +0000 | [diff] [blame] | 584 |       } | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 585 |     }, | 
| ager@chromium.org | 5ec4892 | 2009-05-05 07:25:34 +0000 | [diff] [blame] | 586 |     'arch:ia32': { | 
| ager@chromium.org | 18ad94b | 2009-09-02 08:22:29 +0000 | [diff] [blame] | 587 |       'CPPDEFINES': ['V8_TARGET_ARCH_IA32'], | 
 | 588 |       'LINKFLAGS': ['/MACHINE:X86'] | 
 | 589 |     }, | 
 | 590 |     'arch:x64': { | 
 | 591 |       'CPPDEFINES': ['V8_TARGET_ARCH_X64'], | 
| christian.plesner.hansen@gmail.com | 9d58c2b | 2009-10-16 11:48:38 +0000 | [diff] [blame] | 592 |       'LINKFLAGS': ['/MACHINE:X64', '/STACK:2091752'] | 
| ager@chromium.org | 5ec4892 | 2009-05-05 07:25:34 +0000 | [diff] [blame] | 593 |     }, | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 594 |     'mode:debug': { | 
| kasperl@chromium.org | a555126 | 2010-12-07 12:49:48 +0000 | [diff] [blame] | 595 |       'CCFLAGS':    ['/Od'], | 
 | 596 |       'LINKFLAGS':  ['/DEBUG'], | 
 | 597 |       'CPPDEFINES': ['DEBUG'], | 
| ager@chromium.org | a74f0da | 2008-12-03 16:05:52 +0000 | [diff] [blame] | 598 |       'msvcrt:static': { | 
| kasperl@chromium.org | a555126 | 2010-12-07 12:49:48 +0000 | [diff] [blame] | 599 |         'CCFLAGS':  ['/MTd'] | 
| ager@chromium.org | a74f0da | 2008-12-03 16:05:52 +0000 | [diff] [blame] | 600 |       }, | 
 | 601 |       'msvcrt:shared': { | 
| kasperl@chromium.org | a555126 | 2010-12-07 12:49:48 +0000 | [diff] [blame] | 602 |         'CCFLAGS':  ['/MDd'] | 
| ager@chromium.org | a74f0da | 2008-12-03 16:05:52 +0000 | [diff] [blame] | 603 |       } | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 604 |     } | 
 | 605 |   } | 
 | 606 | } | 
 | 607 |  | 
 | 608 |  | 
| kasperl@chromium.org | 5a8ca6c | 2008-10-23 13:57:19 +0000 | [diff] [blame] | 609 | D8_FLAGS = { | 
 | 610 |   'gcc': { | 
 | 611 |     'console:readline': { | 
 | 612 |       'LIBS': ['readline'] | 
| iposva@chromium.org | 245aa85 | 2009-02-10 00:49:54 +0000 | [diff] [blame] | 613 |     }, | 
 | 614 |     'os:linux': { | 
| ager@chromium.org | 65dad4b | 2009-04-23 08:48:43 +0000 | [diff] [blame] | 615 |       'LIBS': ['pthread'], | 
| iposva@chromium.org | 245aa85 | 2009-02-10 00:49:54 +0000 | [diff] [blame] | 616 |     }, | 
 | 617 |     'os:macos': { | 
 | 618 |       'LIBS': ['pthread'], | 
 | 619 |     }, | 
 | 620 |     'os:freebsd': { | 
 | 621 |       'LIBS': ['pthread'], | 
 | 622 |     }, | 
| sgjesse@chromium.org | b302e56 | 2010-02-03 11:26:59 +0000 | [diff] [blame] | 623 |     'os:solaris': { | 
 | 624 |       'LIBS': ['m', 'pthread', 'socket', 'nsl', 'rt'], | 
 | 625 |       'LINKFLAGS': ['-mt'] | 
 | 626 |     }, | 
| sgjesse@chromium.org | ac6aa17 | 2009-12-04 12:29:05 +0000 | [diff] [blame] | 627 |     'os:openbsd': { | 
 | 628 |       'LIBS': ['pthread'], | 
 | 629 |     }, | 
| kasperl@chromium.org | f5aa837 | 2009-03-24 14:47:14 +0000 | [diff] [blame] | 630 |     'os:android': { | 
| sgjesse@chromium.org | df7a284 | 2010-03-25 14:34:15 +0000 | [diff] [blame] | 631 |       'LIBPATH':     [ANDROID_TOP + '/out/target/product/generic/obj/lib', | 
 | 632 |                       ANDROID_TOP + '/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/lib/gcc/arm-eabi/4.4.0/interwork'], | 
| kasperl@chromium.org | f5aa837 | 2009-03-24 14:47:14 +0000 | [diff] [blame] | 633 |       'LINKFLAGS':    ANDROID_LINKFLAGS, | 
| sgjesse@chromium.org | df7a284 | 2010-03-25 14:34:15 +0000 | [diff] [blame] | 634 |       'LIBS':         ['log', 'c', 'stdc++', 'm', 'gcc'], | 
| kasperl@chromium.org | f5aa837 | 2009-03-24 14:47:14 +0000 | [diff] [blame] | 635 |     }, | 
| iposva@chromium.org | 245aa85 | 2009-02-10 00:49:54 +0000 | [diff] [blame] | 636 |     'os:win32': { | 
| ager@chromium.org | 381abbb | 2009-02-25 13:23:22 +0000 | [diff] [blame] | 637 |       'LIBS': ['winmm', 'ws2_32'], | 
| iposva@chromium.org | 245aa85 | 2009-02-10 00:49:54 +0000 | [diff] [blame] | 638 |     }, | 
| whesse@chromium.org | ba5a61b | 2010-07-26 11:44:40 +0000 | [diff] [blame] | 639 |     'arch:arm': { | 
 | 640 |       'LINKFLAGS':   ARM_LINK_FLAGS | 
 | 641 |     }, | 
| kasperl@chromium.org | 5a8ca6c | 2008-10-23 13:57:19 +0000 | [diff] [blame] | 642 |   }, | 
| iposva@chromium.org | 245aa85 | 2009-02-10 00:49:54 +0000 | [diff] [blame] | 643 |   'msvc': { | 
 | 644 |     'all': { | 
| ager@chromium.org | 381abbb | 2009-02-25 13:23:22 +0000 | [diff] [blame] | 645 |       'LIBS': ['winmm', 'ws2_32'] | 
| iposva@chromium.org | 245aa85 | 2009-02-10 00:49:54 +0000 | [diff] [blame] | 646 |     } | 
 | 647 |   } | 
| kasperl@chromium.org | 5a8ca6c | 2008-10-23 13:57:19 +0000 | [diff] [blame] | 648 | } | 
 | 649 |  | 
 | 650 |  | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 651 | SUFFIXES = { | 
 | 652 |   'release': '', | 
 | 653 |   'debug': '_g' | 
 | 654 | } | 
 | 655 |  | 
 | 656 |  | 
| christian.plesner.hansen | 43d26ec | 2008-07-03 15:10:15 +0000 | [diff] [blame] | 657 | def Abort(message): | 
 | 658 |   print message | 
 | 659 |   sys.exit(1) | 
 | 660 |  | 
 | 661 |  | 
| christian.plesner.hansen | 43d26ec | 2008-07-03 15:10:15 +0000 | [diff] [blame] | 662 | def GuessToolchain(os): | 
 | 663 |   tools = Environment()['TOOLS'] | 
 | 664 |   if 'gcc' in tools: | 
| kasper.lund | 7276f14 | 2008-07-30 08:49:36 +0000 | [diff] [blame] | 665 |     return 'gcc' | 
| christian.plesner.hansen | 43d26ec | 2008-07-03 15:10:15 +0000 | [diff] [blame] | 666 |   elif 'msvc' in tools: | 
 | 667 |     return 'msvc' | 
 | 668 |   else: | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 669 |     return None | 
 | 670 |  | 
 | 671 |  | 
| kasperl@chromium.org | a555126 | 2010-12-07 12:49:48 +0000 | [diff] [blame] | 672 | def GuessVisibility(os, toolchain): | 
 | 673 |   if os == 'win32' and toolchain == 'gcc': | 
 | 674 |     # MinGW can't do it. | 
 | 675 |     return 'default' | 
| sgjesse@chromium.org | c6c5718 | 2011-01-17 12:24:25 +0000 | [diff] [blame] | 676 |   elif os == 'solaris': | 
 | 677 |     return 'default' | 
| kasperl@chromium.org | a555126 | 2010-12-07 12:49:48 +0000 | [diff] [blame] | 678 |   else: | 
 | 679 |     return 'hidden' | 
 | 680 |  | 
 | 681 |  | 
| ager@chromium.org | 870a0b6 | 2008-11-04 11:43:05 +0000 | [diff] [blame] | 682 | OS_GUESS = utils.GuessOS() | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 683 | TOOLCHAIN_GUESS = GuessToolchain(OS_GUESS) | 
| ager@chromium.org | c27e4e7 | 2008-09-04 13:52:27 +0000 | [diff] [blame] | 684 | ARCH_GUESS = utils.GuessArchitecture() | 
| kasperl@chromium.org | a555126 | 2010-12-07 12:49:48 +0000 | [diff] [blame] | 685 | VISIBILITY_GUESS = GuessVisibility(OS_GUESS, TOOLCHAIN_GUESS) | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 686 |  | 
 | 687 |  | 
 | 688 | SIMPLE_OPTIONS = { | 
 | 689 |   'toolchain': { | 
 | 690 |     'values': ['gcc', 'msvc'], | 
 | 691 |     'default': TOOLCHAIN_GUESS, | 
| whesse@chromium.org | 4a5224e | 2010-10-20 12:37:07 +0000 | [diff] [blame] | 692 |     'help': 'the toolchain to use (%s)' % TOOLCHAIN_GUESS | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 693 |   }, | 
 | 694 |   'os': { | 
| sgjesse@chromium.org | b302e56 | 2010-02-03 11:26:59 +0000 | [diff] [blame] | 695 |     'values': ['freebsd', 'linux', 'macos', 'win32', 'android', 'openbsd', 'solaris'], | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 696 |     'default': OS_GUESS, | 
| whesse@chromium.org | 4a5224e | 2010-10-20 12:37:07 +0000 | [diff] [blame] | 697 |     'help': 'the os to build for (%s)' % OS_GUESS | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 698 |   }, | 
 | 699 |   'arch': { | 
| ager@chromium.org | 5c83825 | 2010-02-19 08:53:10 +0000 | [diff] [blame] | 700 |     'values':['arm', 'ia32', 'x64', 'mips'], | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 701 |     'default': ARCH_GUESS, | 
| whesse@chromium.org | 4a5224e | 2010-10-20 12:37:07 +0000 | [diff] [blame] | 702 |     'help': 'the architecture to build for (%s)' % ARCH_GUESS | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 703 |   }, | 
| kasperl@chromium.org | 68ac009 | 2009-07-09 06:00:35 +0000 | [diff] [blame] | 704 |   'regexp': { | 
 | 705 |     'values': ['native', 'interpreted'], | 
 | 706 |     'default': 'native', | 
 | 707 |     'help': 'Whether to use native or interpreted regexp implementation' | 
 | 708 |   }, | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 709 |   'snapshot': { | 
| iposva@chromium.org | 245aa85 | 2009-02-10 00:49:54 +0000 | [diff] [blame] | 710 |     'values': ['on', 'off', 'nobuild'], | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 711 |     'default': 'off', | 
 | 712 |     'help': 'build using snapshots for faster start-up' | 
 | 713 |   }, | 
| ager@chromium.org | 236ad96 | 2008-09-25 09:45:57 +0000 | [diff] [blame] | 714 |   'prof': { | 
| kasperl@chromium.org | 7be3c99 | 2009-03-12 07:19:55 +0000 | [diff] [blame] | 715 |     'values': ['on', 'off', 'oprofile'], | 
| ager@chromium.org | 236ad96 | 2008-09-25 09:45:57 +0000 | [diff] [blame] | 716 |     'default': 'off', | 
 | 717 |     'help': 'enable profiling of build target' | 
 | 718 |   }, | 
| erik.corry@gmail.com | 0511e24 | 2011-01-19 11:11:08 +0000 | [diff] [blame] | 719 |   'gdbjit': { | 
 | 720 |     'values': ['on', 'off'], | 
 | 721 |     'default': 'off', | 
 | 722 |     'help': 'enable GDB JIT interface' | 
 | 723 |   }, | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 724 |   'library': { | 
 | 725 |     'values': ['static', 'shared'], | 
 | 726 |     'default': 'static', | 
 | 727 |     'help': 'the type of library to produce' | 
 | 728 |   }, | 
| ager@chromium.org | 357bf65 | 2010-04-12 11:30:10 +0000 | [diff] [blame] | 729 |   'vmstate': { | 
 | 730 |     'values': ['on', 'off'], | 
 | 731 |     'default': 'off', | 
 | 732 |     'help': 'enable VM state tracking' | 
 | 733 |   }, | 
| whesse@chromium.org | 023421e | 2010-12-21 12:19:12 +0000 | [diff] [blame] | 734 |   'objectprint': { | 
 | 735 |     'values': ['on', 'off'], | 
 | 736 |     'default': 'off', | 
 | 737 |     'help': 'enable object printing' | 
 | 738 |   }, | 
| ager@chromium.org | 357bf65 | 2010-04-12 11:30:10 +0000 | [diff] [blame] | 739 |   'protectheap': { | 
 | 740 |     'values': ['on', 'off'], | 
 | 741 |     'default': 'off', | 
 | 742 |     'help': 'enable heap protection' | 
 | 743 |   }, | 
| ager@chromium.org | 4af710e | 2009-09-15 12:20:11 +0000 | [diff] [blame] | 744 |   'profilingsupport': { | 
 | 745 |     'values': ['on', 'off'], | 
 | 746 |     'default': 'on', | 
 | 747 |     'help': 'enable profiling of JavaScript code' | 
 | 748 |   }, | 
 | 749 |   'debuggersupport': { | 
 | 750 |     'values': ['on', 'off'], | 
 | 751 |     'default': 'on', | 
 | 752 |     'help': 'enable debugging of JavaScript code' | 
 | 753 |   }, | 
| erik.corry@gmail.com | 0511e24 | 2011-01-19 11:11:08 +0000 | [diff] [blame] | 754 |   'inspector': { | 
 | 755 |     'values': ['on', 'off'], | 
 | 756 |     'default': 'off', | 
 | 757 |     'help': 'enable inspector features' | 
 | 758 |   }, | 
| vegorov@chromium.org | 0a4e901 | 2011-01-24 12:33:13 +0000 | [diff] [blame] | 759 |   'liveobjectlist': { | 
 | 760 |     'values': ['on', 'off'], | 
 | 761 |     'default': 'off', | 
 | 762 |     'help': 'enable live object list features in the debugger' | 
 | 763 |   }, | 
| ager@chromium.org | 5ec4892 | 2009-05-05 07:25:34 +0000 | [diff] [blame] | 764 |   'soname': { | 
 | 765 |     'values': ['on', 'off'], | 
 | 766 |     'default': 'off', | 
 | 767 |     'help': 'turn on setting soname for Linux shared library' | 
 | 768 |   }, | 
| ager@chromium.org | a74f0da | 2008-12-03 16:05:52 +0000 | [diff] [blame] | 769 |   'msvcrt': { | 
 | 770 |     'values': ['static', 'shared'], | 
 | 771 |     'default': 'static', | 
| ager@chromium.org | 65dad4b | 2009-04-23 08:48:43 +0000 | [diff] [blame] | 772 |     'help': 'the type of Microsoft Visual C++ runtime library to use' | 
 | 773 |   }, | 
 | 774 |   'msvcltcg': { | 
 | 775 |     'values': ['on', 'off'], | 
 | 776 |     'default': 'on', | 
 | 777 |     'help': 'use Microsoft Visual C++ link-time code generation' | 
| ager@chromium.org | a74f0da | 2008-12-03 16:05:52 +0000 | [diff] [blame] | 778 |   }, | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 779 |   'simulator': { | 
| ager@chromium.org | 5c83825 | 2010-02-19 08:53:10 +0000 | [diff] [blame] | 780 |     'values': ['arm', 'mips', 'none'], | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 781 |     'default': 'none', | 
 | 782 |     'help': 'build with simulator' | 
| ager@chromium.org | 9258b6b | 2008-09-11 09:11:10 +0000 | [diff] [blame] | 783 |   }, | 
| ricow@chromium.org | 30ce411 | 2010-05-31 10:38:25 +0000 | [diff] [blame] | 784 |   'unalignedaccesses': { | 
 | 785 |     'values': ['default', 'on', 'off'], | 
 | 786 |     'default': 'default', | 
 | 787 |     'help': 'set whether the ARM target supports unaligned accesses' | 
 | 788 |   }, | 
| ager@chromium.org | 9258b6b | 2008-09-11 09:11:10 +0000 | [diff] [blame] | 789 |   'disassembler': { | 
 | 790 |     'values': ['on', 'off'], | 
 | 791 |     'default': 'off', | 
 | 792 |     'help': 'enable the disassembler to inspect generated code' | 
 | 793 |   }, | 
 | 794 |   'sourcesignatures': { | 
 | 795 |     'values': ['MD5', 'timestamp'], | 
 | 796 |     'default': 'MD5', | 
 | 797 |     'help': 'set how the build system detects file changes' | 
| kasperl@chromium.org | 5a8ca6c | 2008-10-23 13:57:19 +0000 | [diff] [blame] | 798 |   }, | 
 | 799 |   'console': { | 
 | 800 |     'values': ['dumb', 'readline'], | 
 | 801 |     'default': 'dumb', | 
 | 802 |     'help': 'the console to use for the d8 shell' | 
| ager@chromium.org | 18ad94b | 2009-09-02 08:22:29 +0000 | [diff] [blame] | 803 |   }, | 
 | 804 |   'verbose': { | 
 | 805 |     'values': ['on', 'off'], | 
 | 806 |     'default': 'off', | 
 | 807 |     'help': 'more output from compiler and linker' | 
| ager@chromium.org | 4af710e | 2009-09-15 12:20:11 +0000 | [diff] [blame] | 808 |   }, | 
 | 809 |   'visibility': { | 
 | 810 |     'values': ['default', 'hidden'], | 
| kasperl@chromium.org | a555126 | 2010-12-07 12:49:48 +0000 | [diff] [blame] | 811 |     'default': VISIBILITY_GUESS, | 
 | 812 |     'help': 'shared library symbol visibility (%s)' % VISIBILITY_GUESS | 
| kmillikin@chromium.org | 13bd294 | 2009-12-16 15:36:05 +0000 | [diff] [blame] | 813 |   }, | 
| ager@chromium.org | ce5e87b | 2010-03-10 10:24:18 +0000 | [diff] [blame] | 814 |   'pgo': { | 
 | 815 |     'values': ['off', 'instrument', 'optimize'], | 
 | 816 |     'default': 'off', | 
 | 817 |     'help': 'select profile guided optimization variant', | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 818 |   } | 
 | 819 | } | 
| christian.plesner.hansen | 43d26ec | 2008-07-03 15:10:15 +0000 | [diff] [blame] | 820 |  | 
 | 821 |  | 
 | 822 | def GetOptions(): | 
 | 823 |   result = Options() | 
| kasper.lund | 7276f14 | 2008-07-30 08:49:36 +0000 | [diff] [blame] | 824 |   result.Add('mode', 'compilation mode (debug, release)', 'release') | 
| sgjesse@chromium.org | b302e56 | 2010-02-03 11:26:59 +0000 | [diff] [blame] | 825 |   result.Add('sample', 'build sample (shell, process, lineprocessor)', '') | 
| ager@chromium.org | 2cc82ae | 2010-06-14 07:35:38 +0000 | [diff] [blame] | 826 |   result.Add('cache', 'directory to use for scons build cache', '') | 
| kasperl@chromium.org | 8ccb0be | 2009-04-07 07:21:39 +0000 | [diff] [blame] | 827 |   result.Add('env', 'override environment settings (NAME0:value0,NAME1:value1,...)', '') | 
 | 828 |   result.Add('importenv', 'import environment settings (NAME0,NAME1,...)', '') | 
| ager@chromium.org | 236ad96 | 2008-09-25 09:45:57 +0000 | [diff] [blame] | 829 |   for (name, option) in SIMPLE_OPTIONS.iteritems(): | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 830 |     help = '%s (%s)' % (name, ", ".join(option['values'])) | 
 | 831 |     result.Add(name, help, option.get('default')) | 
| christian.plesner.hansen | 43d26ec | 2008-07-03 15:10:15 +0000 | [diff] [blame] | 832 |   return result | 
 | 833 |  | 
 | 834 |  | 
| ager@chromium.org | 5ec4892 | 2009-05-05 07:25:34 +0000 | [diff] [blame] | 835 | def GetVersionComponents(): | 
 | 836 |   MAJOR_VERSION_PATTERN = re.compile(r"#define\s+MAJOR_VERSION\s+(.*)") | 
 | 837 |   MINOR_VERSION_PATTERN = re.compile(r"#define\s+MINOR_VERSION\s+(.*)") | 
 | 838 |   BUILD_NUMBER_PATTERN = re.compile(r"#define\s+BUILD_NUMBER\s+(.*)") | 
 | 839 |   PATCH_LEVEL_PATTERN = re.compile(r"#define\s+PATCH_LEVEL\s+(.*)") | 
 | 840 |  | 
 | 841 |   patterns = [MAJOR_VERSION_PATTERN, | 
 | 842 |               MINOR_VERSION_PATTERN, | 
 | 843 |               BUILD_NUMBER_PATTERN, | 
 | 844 |               PATCH_LEVEL_PATTERN] | 
 | 845 |  | 
 | 846 |   source = open(join(root_dir, 'src', 'version.cc')).read() | 
 | 847 |   version_components = [] | 
 | 848 |   for pattern in patterns: | 
 | 849 |     match = pattern.search(source) | 
 | 850 |     if match: | 
 | 851 |       version_components.append(match.group(1).strip()) | 
 | 852 |     else: | 
 | 853 |       version_components.append('0') | 
 | 854 |  | 
 | 855 |   return version_components | 
 | 856 |  | 
 | 857 |  | 
 | 858 | def GetVersion(): | 
 | 859 |   version_components = GetVersionComponents() | 
| ager@chromium.org | 5aa501c | 2009-06-23 07:57:28 +0000 | [diff] [blame] | 860 |  | 
| ager@chromium.org | 5ec4892 | 2009-05-05 07:25:34 +0000 | [diff] [blame] | 861 |   if version_components[len(version_components) - 1] == '0': | 
 | 862 |     version_components.pop() | 
 | 863 |   return '.'.join(version_components) | 
 | 864 |  | 
 | 865 |  | 
 | 866 | def GetSpecificSONAME(): | 
 | 867 |   SONAME_PATTERN = re.compile(r"#define\s+SONAME\s+\"(.*)\"") | 
| ager@chromium.org | 5aa501c | 2009-06-23 07:57:28 +0000 | [diff] [blame] | 868 |  | 
| ager@chromium.org | 5ec4892 | 2009-05-05 07:25:34 +0000 | [diff] [blame] | 869 |   source = open(join(root_dir, 'src', 'version.cc')).read() | 
 | 870 |   match = SONAME_PATTERN.search(source) | 
| ager@chromium.org | 5aa501c | 2009-06-23 07:57:28 +0000 | [diff] [blame] | 871 |  | 
| ager@chromium.org | 5ec4892 | 2009-05-05 07:25:34 +0000 | [diff] [blame] | 872 |   if match: | 
 | 873 |     return match.group(1).strip() | 
 | 874 |   else: | 
 | 875 |     return '' | 
 | 876 |  | 
 | 877 |  | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 878 | def SplitList(str): | 
 | 879 |   return [ s for s in str.split(",") if len(s) > 0 ] | 
 | 880 |  | 
 | 881 |  | 
 | 882 | def IsLegal(env, option, values): | 
 | 883 |   str = env[option] | 
 | 884 |   for s in SplitList(str): | 
 | 885 |     if not s in values: | 
 | 886 |       Abort("Illegal value for option %s '%s'." % (option, s)) | 
 | 887 |       return False | 
 | 888 |   return True | 
 | 889 |  | 
 | 890 |  | 
| christian.plesner.hansen | 43d26ec | 2008-07-03 15:10:15 +0000 | [diff] [blame] | 891 | def VerifyOptions(env): | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 892 |   if not IsLegal(env, 'mode', ['debug', 'release']): | 
 | 893 |     return False | 
| sgjesse@chromium.org | b302e56 | 2010-02-03 11:26:59 +0000 | [diff] [blame] | 894 |   if not IsLegal(env, 'sample', ["shell", "process", "lineprocessor"]): | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 895 |     return False | 
| kasperl@chromium.org | 68ac009 | 2009-07-09 06:00:35 +0000 | [diff] [blame] | 896 |   if not IsLegal(env, 'regexp', ["native", "interpreted"]): | 
 | 897 |     return False | 
| ager@chromium.org | 236ad96 | 2008-09-25 09:45:57 +0000 | [diff] [blame] | 898 |   if env['os'] == 'win32' and env['library'] == 'shared' and env['prof'] == 'on': | 
 | 899 |     Abort("Profiling on windows only supported for static library.") | 
| erik.corry@gmail.com | 0511e24 | 2011-01-19 11:11:08 +0000 | [diff] [blame] | 900 |   if env['gdbjit'] == 'on' and (env['os'] != 'linux' or (env['arch'] != 'ia32' and env['arch'] != 'x64')): | 
 | 901 |     Abort("GDBJIT interface is supported only for Intel-compatible (ia32 or x64) Linux target.") | 
| kasperl@chromium.org | 7be3c99 | 2009-03-12 07:19:55 +0000 | [diff] [blame] | 902 |   if env['prof'] == 'oprofile' and env['os'] != 'linux': | 
 | 903 |     Abort("OProfile is only supported on Linux.") | 
| ager@chromium.org | 5ec4892 | 2009-05-05 07:25:34 +0000 | [diff] [blame] | 904 |   if env['os'] == 'win32' and env['soname'] == 'on': | 
 | 905 |     Abort("Shared Object soname not applicable for Windows.") | 
 | 906 |   if env['soname'] == 'on' and env['library'] == 'static': | 
 | 907 |     Abort("Shared Object soname not applicable for static library.") | 
| ager@chromium.org | ce5e87b | 2010-03-10 10:24:18 +0000 | [diff] [blame] | 908 |   if env['os'] != 'win32' and env['pgo'] != 'off': | 
 | 909 |     Abort("Profile guided optimization only supported on Windows.") | 
| ager@chromium.org | 2cc82ae | 2010-06-14 07:35:38 +0000 | [diff] [blame] | 910 |   if env['cache'] and not os.path.isdir(env['cache']): | 
 | 911 |     Abort("The specified cache directory does not exist.") | 
| ricow@chromium.org | 30ce411 | 2010-05-31 10:38:25 +0000 | [diff] [blame] | 912 |   if not (env['arch'] == 'arm' or env['simulator'] == 'arm') and ('unalignedaccesses' in ARGUMENTS): | 
 | 913 |     print env['arch'] | 
 | 914 |     print env['simulator'] | 
 | 915 |     Abort("Option unalignedaccesses only supported for the ARM architecture.") | 
| ager@chromium.org | 236ad96 | 2008-09-25 09:45:57 +0000 | [diff] [blame] | 916 |   for (name, option) in SIMPLE_OPTIONS.iteritems(): | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 917 |     if (not option.get('default')) and (name not in ARGUMENTS): | 
 | 918 |       message = ("A value for option %s must be specified (%s)." % | 
 | 919 |           (name, ", ".join(option['values']))) | 
 | 920 |       Abort(message) | 
 | 921 |     if not env[name] in option['values']: | 
 | 922 |       message = ("Unknown %s value '%s'.  Possible values are (%s)." % | 
 | 923 |           (name, env[name], ", ".join(option['values']))) | 
 | 924 |       Abort(message) | 
 | 925 |  | 
 | 926 |  | 
 | 927 | class BuildContext(object): | 
 | 928 |  | 
| v8.team.kasperl | 727e995 | 2008-09-02 14:56:44 +0000 | [diff] [blame] | 929 |   def __init__(self, options, env_overrides, samples): | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 930 |     self.library_targets = [] | 
| iposva@chromium.org | 245aa85 | 2009-02-10 00:49:54 +0000 | [diff] [blame] | 931 |     self.mksnapshot_targets = [] | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 932 |     self.cctest_targets = [] | 
 | 933 |     self.sample_targets = [] | 
| kasperl@chromium.org | 5a8ca6c | 2008-10-23 13:57:19 +0000 | [diff] [blame] | 934 |     self.d8_targets = [] | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 935 |     self.options = options | 
| v8.team.kasperl | 727e995 | 2008-09-02 14:56:44 +0000 | [diff] [blame] | 936 |     self.env_overrides = env_overrides | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 937 |     self.samples = samples | 
| iposva@chromium.org | 245aa85 | 2009-02-10 00:49:54 +0000 | [diff] [blame] | 938 |     self.use_snapshot = (options['snapshot'] != 'off') | 
 | 939 |     self.build_snapshot = (options['snapshot'] == 'on') | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 940 |     self.flags = None | 
| ager@chromium.org | 236ad96 | 2008-09-25 09:45:57 +0000 | [diff] [blame] | 941 |  | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 942 |   def AddRelevantFlags(self, initial, flags): | 
 | 943 |     result = initial.copy() | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 944 |     toolchain = self.options['toolchain'] | 
| ager@chromium.org | a74f0da | 2008-12-03 16:05:52 +0000 | [diff] [blame] | 945 |     if toolchain in flags: | 
 | 946 |       self.AppendFlags(result, flags[toolchain].get('all')) | 
 | 947 |       for option in sorted(self.options.keys()): | 
 | 948 |         value = self.options[option] | 
 | 949 |         self.AppendFlags(result, flags[toolchain].get(option + ':' + value)) | 
| ager@chromium.org | 3a37e9b | 2009-04-27 09:26:21 +0000 | [diff] [blame] | 950 |     self.AppendFlags(result, flags.get('all')) | 
| ager@chromium.org | a74f0da | 2008-12-03 16:05:52 +0000 | [diff] [blame] | 951 |     return result | 
 | 952 |  | 
 | 953 |   def AddRelevantSubFlags(self, options, flags): | 
 | 954 |     self.AppendFlags(options, flags.get('all')) | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 955 |     for option in sorted(self.options.keys()): | 
 | 956 |       value = self.options[option] | 
| ager@chromium.org | a74f0da | 2008-12-03 16:05:52 +0000 | [diff] [blame] | 957 |       self.AppendFlags(options, flags.get(option + ':' + value)) | 
| ager@chromium.org | 236ad96 | 2008-09-25 09:45:57 +0000 | [diff] [blame] | 958 |  | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 959 |   def GetRelevantSources(self, source): | 
 | 960 |     result = [] | 
 | 961 |     result += source.get('all', []) | 
| ager@chromium.org | 236ad96 | 2008-09-25 09:45:57 +0000 | [diff] [blame] | 962 |     for (name, value) in self.options.iteritems(): | 
| sgjesse@chromium.org | 911335c | 2009-08-19 12:59:44 +0000 | [diff] [blame] | 963 |       source_value = source.get(name + ':' + value, []) | 
 | 964 |       if type(source_value) == dict: | 
 | 965 |         result += self.GetRelevantSources(source_value) | 
 | 966 |       else: | 
 | 967 |         result += source_value | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 968 |     return sorted(result) | 
 | 969 |  | 
 | 970 |   def AppendFlags(self, options, added): | 
 | 971 |     if not added: | 
 | 972 |       return | 
| ager@chromium.org | 236ad96 | 2008-09-25 09:45:57 +0000 | [diff] [blame] | 973 |     for (key, value) in added.iteritems(): | 
| ager@chromium.org | a74f0da | 2008-12-03 16:05:52 +0000 | [diff] [blame] | 974 |       if key.find(':') != -1: | 
 | 975 |         self.AddRelevantSubFlags(options, { key: value }) | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 976 |       else: | 
| ager@chromium.org | a74f0da | 2008-12-03 16:05:52 +0000 | [diff] [blame] | 977 |         if not key in options: | 
 | 978 |           options[key] = value | 
 | 979 |         else: | 
 | 980 |           prefix = options[key] | 
 | 981 |           if isinstance(prefix, StringTypes): prefix = prefix.split() | 
 | 982 |           options[key] = prefix + value | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 983 |  | 
 | 984 |   def ConfigureObject(self, env, input, **kw): | 
| ager@chromium.org | bb29dc9 | 2009-03-24 13:25:23 +0000 | [diff] [blame] | 985 |     if (kw.has_key('CPPPATH') and env.has_key('CPPPATH')): | 
 | 986 |       kw['CPPPATH'] += env['CPPPATH'] | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 987 |     if self.options['library'] == 'static': | 
 | 988 |       return env.StaticObject(input, **kw) | 
 | 989 |     else: | 
 | 990 |       return env.SharedObject(input, **kw) | 
 | 991 |  | 
| ager@chromium.org | 9258b6b | 2008-09-11 09:11:10 +0000 | [diff] [blame] | 992 |   def ApplyEnvOverrides(self, env): | 
 | 993 |     if not self.env_overrides: | 
 | 994 |       return | 
 | 995 |     if type(env['ENV']) == DictType: | 
 | 996 |       env['ENV'].update(**self.env_overrides) | 
 | 997 |     else: | 
 | 998 |       env['ENV'] = self.env_overrides | 
 | 999 |  | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 1000 |  | 
| ager@chromium.org | ce5e87b | 2010-03-10 10:24:18 +0000 | [diff] [blame] | 1001 | def PostprocessOptions(options, os): | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 1002 |   # Adjust architecture if the simulator option has been set | 
 | 1003 |   if (options['simulator'] != 'none') and (options['arch'] != options['simulator']): | 
 | 1004 |     if 'arch' in ARGUMENTS: | 
 | 1005 |       # Print a warning if arch has explicitly been set | 
 | 1006 |       print "Warning: forcing architecture to match simulator (%s)" % options['simulator'] | 
 | 1007 |     options['arch'] = options['simulator'] | 
| ager@chromium.org | 4af710e | 2009-09-15 12:20:11 +0000 | [diff] [blame] | 1008 |   if (options['prof'] != 'off') and (options['profilingsupport'] == 'off'): | 
 | 1009 |     # Print a warning if profiling is enabled without profiling support | 
 | 1010 |     print "Warning: forcing profilingsupport on when prof is on" | 
 | 1011 |     options['profilingsupport'] = 'on' | 
| ager@chromium.org | ce5e87b | 2010-03-10 10:24:18 +0000 | [diff] [blame] | 1012 |   if os == 'win32' and options['pgo'] != 'off' and options['msvcltcg'] == 'off': | 
 | 1013 |     if 'msvcltcg' in ARGUMENTS: | 
 | 1014 |       print "Warning: forcing msvcltcg on as it is required for pgo (%s)" % options['pgo'] | 
 | 1015 |     options['msvcltcg'] = 'on' | 
| ager@chromium.org | 5c83825 | 2010-02-19 08:53:10 +0000 | [diff] [blame] | 1016 |   if options['arch'] == 'mips': | 
 | 1017 |     if ('regexp' in ARGUMENTS) and options['regexp'] == 'native': | 
 | 1018 |       # Print a warning if native regexp is specified for mips | 
 | 1019 |       print "Warning: forcing regexp to interpreted for mips" | 
 | 1020 |     options['regexp'] = 'interpreted' | 
| vegorov@chromium.org | 0a4e901 | 2011-01-24 12:33:13 +0000 | [diff] [blame] | 1021 |   if options['liveobjectlist'] == 'on': | 
 | 1022 |     if (options['debuggersupport'] != 'on') or (options['mode'] == 'release'): | 
 | 1023 |       # Print a warning that liveobjectlist will implicitly enable the debugger | 
 | 1024 |       print "Warning: forcing debuggersupport on for liveobjectlist" | 
 | 1025 |     options['debuggersupport'] = 'on' | 
| ager@chromium.org | 0ee099b | 2011-01-25 14:06:47 +0000 | [diff] [blame] | 1026 |     options['inspector'] = 'on' | 
 | 1027 |     options['objectprint'] = 'on' | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 1028 |  | 
 | 1029 |  | 
| kasperl@chromium.org | 8ccb0be | 2009-04-07 07:21:39 +0000 | [diff] [blame] | 1030 | def ParseEnvOverrides(arg, imports): | 
 | 1031 |   # The environment overrides are in the format NAME0:value0,NAME1:value1,... | 
 | 1032 |   # The environment imports are in the format NAME0,NAME1,... | 
| v8.team.kasperl | 727e995 | 2008-09-02 14:56:44 +0000 | [diff] [blame] | 1033 |   overrides = {} | 
| kasperl@chromium.org | 8ccb0be | 2009-04-07 07:21:39 +0000 | [diff] [blame] | 1034 |   for var in imports.split(','): | 
 | 1035 |     if var in os.environ: | 
 | 1036 |       overrides[var] = os.environ[var] | 
| v8.team.kasperl | 727e995 | 2008-09-02 14:56:44 +0000 | [diff] [blame] | 1037 |   for override in arg.split(','): | 
 | 1038 |     pos = override.find(':') | 
 | 1039 |     if pos == -1: | 
 | 1040 |       continue | 
 | 1041 |     overrides[override[:pos].strip()] = override[pos+1:].strip() | 
 | 1042 |   return overrides | 
 | 1043 |  | 
 | 1044 |  | 
 | 1045 | def BuildSpecific(env, mode, env_overrides): | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 1046 |   options = {'mode': mode} | 
 | 1047 |   for option in SIMPLE_OPTIONS: | 
 | 1048 |     options[option] = env[option] | 
| ager@chromium.org | ce5e87b | 2010-03-10 10:24:18 +0000 | [diff] [blame] | 1049 |   PostprocessOptions(options, env['os']) | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 1050 |  | 
| v8.team.kasperl | 727e995 | 2008-09-02 14:56:44 +0000 | [diff] [blame] | 1051 |   context = BuildContext(options, env_overrides, samples=SplitList(env['sample'])) | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 1052 |  | 
| ager@chromium.org | ab99eea | 2009-08-25 07:05:41 +0000 | [diff] [blame] | 1053 |   # Remove variables which can't be imported from the user's external | 
 | 1054 |   # environment into a construction environment. | 
 | 1055 |   user_environ = os.environ.copy() | 
 | 1056 |   try: | 
 | 1057 |     del user_environ['ENV'] | 
 | 1058 |   except KeyError: | 
 | 1059 |     pass | 
 | 1060 |  | 
 | 1061 |   library_flags = context.AddRelevantFlags(user_environ, LIBRARY_FLAGS) | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 1062 |   v8_flags = context.AddRelevantFlags(library_flags, V8_EXTRA_FLAGS) | 
| iposva@chromium.org | 245aa85 | 2009-02-10 00:49:54 +0000 | [diff] [blame] | 1063 |   mksnapshot_flags = context.AddRelevantFlags(library_flags, MKSNAPSHOT_EXTRA_FLAGS) | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 1064 |   dtoa_flags = context.AddRelevantFlags(library_flags, DTOA_EXTRA_FLAGS) | 
| ager@chromium.org | 236ad96 | 2008-09-25 09:45:57 +0000 | [diff] [blame] | 1065 |   cctest_flags = context.AddRelevantFlags(v8_flags, CCTEST_EXTRA_FLAGS) | 
| ager@chromium.org | ab99eea | 2009-08-25 07:05:41 +0000 | [diff] [blame] | 1066 |   sample_flags = context.AddRelevantFlags(user_environ, SAMPLE_FLAGS) | 
| kasperl@chromium.org | 5a8ca6c | 2008-10-23 13:57:19 +0000 | [diff] [blame] | 1067 |   d8_flags = context.AddRelevantFlags(library_flags, D8_FLAGS) | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 1068 |  | 
 | 1069 |   context.flags = { | 
 | 1070 |     'v8': v8_flags, | 
| iposva@chromium.org | 245aa85 | 2009-02-10 00:49:54 +0000 | [diff] [blame] | 1071 |     'mksnapshot': mksnapshot_flags, | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 1072 |     'dtoa': dtoa_flags, | 
 | 1073 |     'cctest': cctest_flags, | 
| kasperl@chromium.org | 5a8ca6c | 2008-10-23 13:57:19 +0000 | [diff] [blame] | 1074 |     'sample': sample_flags, | 
 | 1075 |     'd8': d8_flags | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 1076 |   } | 
| ager@chromium.org | 236ad96 | 2008-09-25 09:45:57 +0000 | [diff] [blame] | 1077 |  | 
| ager@chromium.org | 5ec4892 | 2009-05-05 07:25:34 +0000 | [diff] [blame] | 1078 |   # Generate library base name. | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 1079 |   target_id = mode | 
 | 1080 |   suffix = SUFFIXES[target_id] | 
 | 1081 |   library_name = 'v8' + suffix | 
| ager@chromium.org | 5ec4892 | 2009-05-05 07:25:34 +0000 | [diff] [blame] | 1082 |   version = GetVersion() | 
 | 1083 |   if context.options['soname'] == 'on': | 
 | 1084 |     # When building shared object with SONAME version the library name. | 
 | 1085 |     library_name += '-' + version | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 1086 |  | 
| ager@chromium.org | 5ec4892 | 2009-05-05 07:25:34 +0000 | [diff] [blame] | 1087 |   # Generate library SONAME if required by the build. | 
 | 1088 |   if context.options['soname'] == 'on': | 
 | 1089 |     soname = GetSpecificSONAME() | 
 | 1090 |     if soname == '': | 
 | 1091 |       soname = 'lib' + library_name + '.so' | 
 | 1092 |     env['SONAME'] = soname | 
 | 1093 |  | 
| ager@chromium.org | bb29dc9 | 2009-03-24 13:25:23 +0000 | [diff] [blame] | 1094 |   # Build the object files by invoking SCons recursively. | 
| iposva@chromium.org | 245aa85 | 2009-02-10 00:49:54 +0000 | [diff] [blame] | 1095 |   (object_files, shell_files, mksnapshot) = env.SConscript( | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 1096 |     join('src', 'SConscript'), | 
 | 1097 |     build_dir=join('obj', target_id), | 
 | 1098 |     exports='context', | 
 | 1099 |     duplicate=False | 
 | 1100 |   ) | 
| kasperl@chromium.org | 5a8ca6c | 2008-10-23 13:57:19 +0000 | [diff] [blame] | 1101 |  | 
| iposva@chromium.org | 245aa85 | 2009-02-10 00:49:54 +0000 | [diff] [blame] | 1102 |   context.mksnapshot_targets.append(mksnapshot) | 
 | 1103 |  | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 1104 |   # Link the object files into a library. | 
| kasperl@chromium.org | b912362 | 2008-09-17 14:05:56 +0000 | [diff] [blame] | 1105 |   env.Replace(**context.flags['v8']) | 
| sgjesse@chromium.org | b302e56 | 2010-02-03 11:26:59 +0000 | [diff] [blame] | 1106 |  | 
| ager@chromium.org | 9258b6b | 2008-09-11 09:11:10 +0000 | [diff] [blame] | 1107 |   context.ApplyEnvOverrides(env) | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 1108 |   if context.options['library'] == 'static': | 
 | 1109 |     library = env.StaticLibrary(library_name, object_files) | 
 | 1110 |   else: | 
 | 1111 |     # There seems to be a glitch in the way scons decides where to put | 
 | 1112 |     # PDB files when compiling using MSVC so we specify it manually. | 
 | 1113 |     # This should not affect any other platforms. | 
 | 1114 |     pdb_name = library_name + '.dll.pdb' | 
 | 1115 |     library = env.SharedLibrary(library_name, object_files, PDB=pdb_name) | 
 | 1116 |   context.library_targets.append(library) | 
| ager@chromium.org | bb29dc9 | 2009-03-24 13:25:23 +0000 | [diff] [blame] | 1117 |  | 
| kasperl@chromium.org | 5a8ca6c | 2008-10-23 13:57:19 +0000 | [diff] [blame] | 1118 |   d8_env = Environment() | 
 | 1119 |   d8_env.Replace(**context.flags['d8']) | 
| fschneider@chromium.org | 0c20e67 | 2010-01-14 15:28:53 +0000 | [diff] [blame] | 1120 |   context.ApplyEnvOverrides(d8_env) | 
| kasperl@chromium.org | 5a8ca6c | 2008-10-23 13:57:19 +0000 | [diff] [blame] | 1121 |   shell = d8_env.Program('d8' + suffix, object_files + shell_files) | 
 | 1122 |   context.d8_targets.append(shell) | 
 | 1123 |  | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 1124 |   for sample in context.samples: | 
| sgjesse@chromium.org | df7a284 | 2010-03-25 14:34:15 +0000 | [diff] [blame] | 1125 |     sample_env = Environment() | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 1126 |     sample_env.Replace(**context.flags['sample']) | 
| sgjesse@chromium.org | df7a284 | 2010-03-25 14:34:15 +0000 | [diff] [blame] | 1127 |     sample_env.Prepend(LIBS=[library_name]) | 
| ager@chromium.org | 9258b6b | 2008-09-11 09:11:10 +0000 | [diff] [blame] | 1128 |     context.ApplyEnvOverrides(sample_env) | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 1129 |     sample_object = sample_env.SConscript( | 
 | 1130 |       join('samples', 'SConscript'), | 
 | 1131 |       build_dir=join('obj', 'sample', sample, target_id), | 
 | 1132 |       exports='sample context', | 
 | 1133 |       duplicate=False | 
 | 1134 |     ) | 
 | 1135 |     sample_name = sample + suffix | 
 | 1136 |     sample_program = sample_env.Program(sample_name, sample_object) | 
 | 1137 |     sample_env.Depends(sample_program, library) | 
 | 1138 |     context.sample_targets.append(sample_program) | 
| ager@chromium.org | bb29dc9 | 2009-03-24 13:25:23 +0000 | [diff] [blame] | 1139 |  | 
| ager@chromium.org | b26c50a | 2010-03-26 09:27:16 +0000 | [diff] [blame] | 1140 |   cctest_env = env.Copy() | 
 | 1141 |   cctest_env.Prepend(LIBS=[library_name]) | 
 | 1142 |   cctest_program = cctest_env.SConscript( | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 1143 |     join('test', 'cctest', 'SConscript'), | 
 | 1144 |     build_dir=join('obj', 'test', target_id), | 
 | 1145 |     exports='context object_files', | 
 | 1146 |     duplicate=False | 
 | 1147 |   ) | 
 | 1148 |   context.cctest_targets.append(cctest_program) | 
| ager@chromium.org | bb29dc9 | 2009-03-24 13:25:23 +0000 | [diff] [blame] | 1149 |  | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 1150 |   return context | 
| christian.plesner.hansen | 43d26ec | 2008-07-03 15:10:15 +0000 | [diff] [blame] | 1151 |  | 
 | 1152 |  | 
| kasper.lund | 7276f14 | 2008-07-30 08:49:36 +0000 | [diff] [blame] | 1153 | def Build(): | 
| christian.plesner.hansen | 43d26ec | 2008-07-03 15:10:15 +0000 | [diff] [blame] | 1154 |   opts = GetOptions() | 
 | 1155 |   env = Environment(options=opts) | 
 | 1156 |   Help(opts.GenerateHelpText(env)) | 
 | 1157 |   VerifyOptions(env) | 
| kasperl@chromium.org | 8ccb0be | 2009-04-07 07:21:39 +0000 | [diff] [blame] | 1158 |   env_overrides = ParseEnvOverrides(env['env'], env['importenv']) | 
| kasperl@chromium.org | 5a8ca6c | 2008-10-23 13:57:19 +0000 | [diff] [blame] | 1159 |  | 
| ager@chromium.org | 9258b6b | 2008-09-11 09:11:10 +0000 | [diff] [blame] | 1160 |   SourceSignatures(env['sourcesignatures']) | 
| kasperl@chromium.org | 5a8ca6c | 2008-10-23 13:57:19 +0000 | [diff] [blame] | 1161 |  | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 1162 |   libraries = [] | 
| iposva@chromium.org | 245aa85 | 2009-02-10 00:49:54 +0000 | [diff] [blame] | 1163 |   mksnapshots = [] | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 1164 |   cctests = [] | 
 | 1165 |   samples = [] | 
| kasperl@chromium.org | 5a8ca6c | 2008-10-23 13:57:19 +0000 | [diff] [blame] | 1166 |   d8s = [] | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 1167 |   modes = SplitList(env['mode']) | 
 | 1168 |   for mode in modes: | 
| v8.team.kasperl | 727e995 | 2008-09-02 14:56:44 +0000 | [diff] [blame] | 1169 |     context = BuildSpecific(env.Copy(), mode, env_overrides) | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 1170 |     libraries += context.library_targets | 
| iposva@chromium.org | 245aa85 | 2009-02-10 00:49:54 +0000 | [diff] [blame] | 1171 |     mksnapshots += context.mksnapshot_targets | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 1172 |     cctests += context.cctest_targets | 
 | 1173 |     samples += context.sample_targets | 
| kasperl@chromium.org | 5a8ca6c | 2008-10-23 13:57:19 +0000 | [diff] [blame] | 1174 |     d8s += context.d8_targets | 
| christian.plesner.hansen | 43d26ec | 2008-07-03 15:10:15 +0000 | [diff] [blame] | 1175 |  | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 1176 |   env.Alias('library', libraries) | 
| iposva@chromium.org | 245aa85 | 2009-02-10 00:49:54 +0000 | [diff] [blame] | 1177 |   env.Alias('mksnapshot', mksnapshots) | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 1178 |   env.Alias('cctests', cctests) | 
 | 1179 |   env.Alias('sample', samples) | 
| kasperl@chromium.org | 5a8ca6c | 2008-10-23 13:57:19 +0000 | [diff] [blame] | 1180 |   env.Alias('d8', d8s) | 
| ager@chromium.org | a74f0da | 2008-12-03 16:05:52 +0000 | [diff] [blame] | 1181 |  | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 1182 |   if env['sample']: | 
 | 1183 |     env.Default('sample') | 
| kasper.lund | 7276f14 | 2008-07-30 08:49:36 +0000 | [diff] [blame] | 1184 |   else: | 
| mads.s.ager@gmail.com | 9a4089a | 2008-09-01 08:55:01 +0000 | [diff] [blame] | 1185 |     env.Default('library') | 
| kasper.lund | 7276f14 | 2008-07-30 08:49:36 +0000 | [diff] [blame] | 1186 |  | 
| ager@chromium.org | 2cc82ae | 2010-06-14 07:35:38 +0000 | [diff] [blame] | 1187 |   if env['cache']: | 
 | 1188 |     CacheDir(env['cache']) | 
| kasper.lund | 7276f14 | 2008-07-30 08:49:36 +0000 | [diff] [blame] | 1189 |  | 
| v8.team.kasperl | 727e995 | 2008-09-02 14:56:44 +0000 | [diff] [blame] | 1190 | # We disable deprecation warnings because we need to be able to use | 
 | 1191 | # env.Copy without getting warnings for compatibility with older | 
 | 1192 | # version of scons.  Also, there's a bug in some revisions that | 
 | 1193 | # doesn't allow this flag to be set, so we swallow any exceptions. | 
 | 1194 | # Lovely. | 
 | 1195 | try: | 
 | 1196 |   SetOption('warn', 'no-deprecated') | 
 | 1197 | except: | 
 | 1198 |   pass | 
 | 1199 |  | 
 | 1200 |  | 
| kasper.lund | 7276f14 | 2008-07-30 08:49:36 +0000 | [diff] [blame] | 1201 | Build() |