wok-current annotate node/stuff/SConstruct @ rev 19125

Fill "fonts" category in.
author Aleksej Bobylev <al.bobylev@gmail.com>
date Mon May 09 21:28:29 2016 +0300 (2016-05-09)
parents
children
rev   line source
pankso@16509 1 # Copyright 2012 the V8 project authors. All rights reserved.
pankso@16509 2 # Redistribution and use in source and binary forms, with or without
pankso@16509 3 # modification, are permitted provided that the following conditions are
pankso@16509 4 # met:
pankso@16509 5 #
pankso@16509 6 # * Redistributions of source code must retain the above copyright
pankso@16509 7 # notice, this list of conditions and the following disclaimer.
pankso@16509 8 # * Redistributions in binary form must reproduce the above
pankso@16509 9 # copyright notice, this list of conditions and the following
pankso@16509 10 # disclaimer in the documentation and/or other materials provided
pankso@16509 11 # with the distribution.
pankso@16509 12 # * Neither the name of Google Inc. nor the names of its
pankso@16509 13 # contributors may be used to endorse or promote products derived
pankso@16509 14 # from this software without specific prior written permission.
pankso@16509 15 #
pankso@16509 16 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
pankso@16509 17 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
pankso@16509 18 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
pankso@16509 19 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
pankso@16509 20 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
pankso@16509 21 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
pankso@16509 22 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
pankso@16509 23 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
pankso@16509 24 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
pankso@16509 25 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
pankso@16509 26 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
pankso@16509 27
pankso@16509 28 import platform
pankso@16509 29 import re
pankso@16509 30 import subprocess
pankso@16509 31 import sys
pankso@16509 32 import os
pankso@16509 33 from os.path import join, dirname, abspath
pankso@16509 34 from types import DictType, StringTypes
pankso@16509 35 root_dir = dirname(File('SConstruct').rfile().abspath)
pankso@16509 36 src_dir = join(root_dir, 'src')
pankso@16509 37 sys.path.insert(0, join(root_dir, 'tools'))
pankso@16509 38 import js2c, utils
pankso@16509 39
pankso@16509 40 # ARM_TARGET_LIB is the path to the dynamic library to use on the target
pankso@16509 41 # machine if cross-compiling to an arm machine. You will also need to set
pankso@16509 42 # the additional cross-compiling environment variables to the cross compiler.
pankso@16509 43 ARM_TARGET_LIB = os.environ.get('ARM_TARGET_LIB')
pankso@16509 44 if ARM_TARGET_LIB:
pankso@16509 45 ARM_LINK_FLAGS = ['-Wl,-rpath=' + ARM_TARGET_LIB + '/lib:' +
pankso@16509 46 ARM_TARGET_LIB + '/usr/lib',
pankso@16509 47 '-Wl,--dynamic-linker=' + ARM_TARGET_LIB +
pankso@16509 48 '/lib/ld-linux.so.3']
pankso@16509 49 else:
pankso@16509 50 ARM_LINK_FLAGS = []
pankso@16509 51
pankso@16509 52 GCC_EXTRA_CCFLAGS = []
pankso@16509 53 GCC_DTOA_EXTRA_CCFLAGS = []
pankso@16509 54
pankso@16509 55 LIBRARY_FLAGS = {
pankso@16509 56 'all': {
pankso@16509 57 'CPPPATH': [src_dir],
pankso@16509 58 'regexp:interpreted': {
pankso@16509 59 'CPPDEFINES': ['V8_INTERPRETED_REGEXP']
pankso@16509 60 },
pankso@16509 61 'mode:debug': {
pankso@16509 62 'CPPDEFINES': ['V8_ENABLE_CHECKS', 'OBJECT_PRINT', 'VERIFY_HEAP']
pankso@16509 63 },
pankso@16509 64 'objectprint:on': {
pankso@16509 65 'CPPDEFINES': ['OBJECT_PRINT'],
pankso@16509 66 },
pankso@16509 67 'debuggersupport:on': {
pankso@16509 68 'CPPDEFINES': ['ENABLE_DEBUGGER_SUPPORT'],
pankso@16509 69 },
pankso@16509 70 'inspector:on': {
pankso@16509 71 'CPPDEFINES': ['INSPECTOR'],
pankso@16509 72 },
pankso@16509 73 'fasttls:off': {
pankso@16509 74 'CPPDEFINES': ['V8_NO_FAST_TLS'],
pankso@16509 75 },
pankso@16509 76 'liveobjectlist:on': {
pankso@16509 77 'CPPDEFINES': ['ENABLE_DEBUGGER_SUPPORT', 'INSPECTOR',
pankso@16509 78 'LIVE_OBJECT_LIST', 'OBJECT_PRINT'],
pankso@16509 79 }
pankso@16509 80 },
pankso@16509 81 'gcc': {
pankso@16509 82 'all': {
pankso@16509 83 'CCFLAGS': ['$DIALECTFLAGS', '$WARNINGFLAGS', '-march=armv6'],
pankso@16509 84 'CXXFLAGS': ['-fno-rtti', '-fno-exceptions', '-march=armv6'],
pankso@16509 85 },
pankso@16509 86 'visibility:hidden': {
pankso@16509 87 # Use visibility=default to disable this.
pankso@16509 88 'CXXFLAGS': ['-fvisibility=hidden']
pankso@16509 89 },
pankso@16509 90 'strictaliasing:off': {
pankso@16509 91 'CCFLAGS': ['-fno-strict-aliasing']
pankso@16509 92 },
pankso@16509 93 'mode:debug': {
pankso@16509 94 'CCFLAGS': ['-g', '-O0'],
pankso@16509 95 'CPPDEFINES': ['ENABLE_DISASSEMBLER', 'DEBUG'],
pankso@16509 96 },
pankso@16509 97 'mode:release': {
pankso@16509 98 'CCFLAGS': ['-O3', '-fomit-frame-pointer', '-fdata-sections',
pankso@16509 99 '-ffunction-sections'],
pankso@16509 100 },
pankso@16509 101 'os:linux': {
pankso@16509 102 'CCFLAGS': ['-ansi'] + GCC_EXTRA_CCFLAGS,
pankso@16509 103 'library:shared': {
pankso@16509 104 'CPPDEFINES': ['V8_SHARED', 'BUILDING_V8_SHARED'],
pankso@16509 105 'LIBS': ['pthread']
pankso@16509 106 }
pankso@16509 107 },
pankso@16509 108 'os:macos': {
pankso@16509 109 'CCFLAGS': ['-ansi', '-mmacosx-version-min=10.4'],
pankso@16509 110 'library:shared': {
pankso@16509 111 'CPPDEFINES': ['V8_SHARED', 'BUILDING_V8_SHARED'],
pankso@16509 112 }
pankso@16509 113 },
pankso@16509 114 'os:freebsd': {
pankso@16509 115 'CPPPATH' : [src_dir, '/usr/local/include'],
pankso@16509 116 'LIBPATH' : ['/usr/local/lib'],
pankso@16509 117 'CCFLAGS': ['-ansi'],
pankso@16509 118 'LIBS': ['execinfo']
pankso@16509 119 },
pankso@16509 120 'os:openbsd': {
pankso@16509 121 'CPPPATH' : [src_dir, '/usr/local/include'],
pankso@16509 122 'LIBPATH' : ['/usr/local/lib'],
pankso@16509 123 'CCFLAGS': ['-ansi'],
pankso@16509 124 },
pankso@16509 125 'os:solaris': {
pankso@16509 126 # On Solaris, to get isinf, INFINITY, fpclassify and other macros one
pankso@16509 127 # needs to define __C99FEATURES__.
pankso@16509 128 'CPPDEFINES': ['__C99FEATURES__'],
pankso@16509 129 'CPPPATH' : [src_dir, '/usr/local/include'],
pankso@16509 130 'LIBPATH' : ['/usr/local/lib'],
pankso@16509 131 'CCFLAGS': ['-ansi'],
pankso@16509 132 },
pankso@16509 133 'os:netbsd': {
pankso@16509 134 'CPPPATH' : [src_dir, '/usr/pkg/include'],
pankso@16509 135 'LIBPATH' : ['/usr/pkg/lib'],
pankso@16509 136 },
pankso@16509 137 'os:win32': {
pankso@16509 138 'CCFLAGS': ['-DWIN32'],
pankso@16509 139 'CXXFLAGS': ['-DWIN32'],
pankso@16509 140 },
pankso@16509 141 'arch:ia32': {
pankso@16509 142 'CPPDEFINES': ['V8_TARGET_ARCH_IA32'],
pankso@16509 143 'CCFLAGS': ['-m32'],
pankso@16509 144 'LINKFLAGS': ['-m32']
pankso@16509 145 },
pankso@16509 146 'arch:arm': {
pankso@16509 147 'CPPDEFINES': ['V8_TARGET_ARCH_ARM'],
pankso@16509 148 'unalignedaccesses:on' : {
pankso@16509 149 'CPPDEFINES' : ['CAN_USE_UNALIGNED_ACCESSES=1']
pankso@16509 150 },
pankso@16509 151 'unalignedaccesses:off' : {
pankso@16509 152 'CPPDEFINES' : ['CAN_USE_UNALIGNED_ACCESSES=0']
pankso@16509 153 },
pankso@16509 154 'armeabi:soft' : {
pankso@16509 155 'CPPDEFINES' : ['USE_EABI_HARDFLOAT=0'],
pankso@16509 156 'simulator:none': {
pankso@16509 157 'CCFLAGS': ['-mfloat-abi=soft'],
pankso@16509 158 }
pankso@16509 159 },
pankso@16509 160 'armeabi:softfp' : {
pankso@16509 161 'CPPDEFINES' : ['USE_EABI_HARDFLOAT=0'],
pankso@16509 162 'vfp3:on': {
pankso@16509 163 'CPPDEFINES' : ['CAN_USE_VFP_INSTRUCTIONS']
pankso@16509 164 },
pankso@16509 165 'simulator:none': {
pankso@16509 166 'CCFLAGS': ['-mfloat-abi=softfp'],
pankso@16509 167 }
pankso@16509 168 },
pankso@16509 169 'armeabi:hard' : {
pankso@16509 170 'CPPDEFINES' : ['USE_EABI_HARDFLOAT=1'],
pankso@16509 171 'vfp3:on': {
pankso@16509 172 'CPPDEFINES' : ['CAN_USE_VFP_INSTRUCTIONS']
pankso@16509 173 },
pankso@16509 174 'simulator:none': {
pankso@16509 175 'CCFLAGS': ['-mfloat-abi=hard'],
pankso@16509 176 }
pankso@16509 177 }
pankso@16509 178 },
pankso@16509 179 'simulator:arm': {
pankso@16509 180 'CCFLAGS': ['-m32'],
pankso@16509 181 'LINKFLAGS': ['-m32'],
pankso@16509 182 },
pankso@16509 183 'arch:mips': {
pankso@16509 184 'CPPDEFINES': ['V8_TARGET_ARCH_MIPS'],
pankso@16509 185 'mips_arch_variant:mips32r2': {
pankso@16509 186 'CPPDEFINES': ['_MIPS_ARCH_MIPS32R2']
pankso@16509 187 },
pankso@16509 188 'mips_arch_variant:loongson': {
pankso@16509 189 'CPPDEFINES': ['_MIPS_ARCH_LOONGSON']
pankso@16509 190 },
pankso@16509 191 'simulator:none': {
pankso@16509 192 'CCFLAGS': ['-EL'],
pankso@16509 193 'LINKFLAGS': ['-EL'],
pankso@16509 194 'mips_arch_variant:mips32r2': {
pankso@16509 195 'CCFLAGS': ['-mips32r2', '-Wa,-mips32r2']
pankso@16509 196 },
pankso@16509 197 'mips_arch_variant:mips32r1': {
pankso@16509 198 'CCFLAGS': ['-mips32', '-Wa,-mips32']
pankso@16509 199 },
pankso@16509 200 'mips_arch_variant:loongson': {
pankso@16509 201 'CCFLAGS': ['-march=mips3', '-Wa,-march=mips3']
pankso@16509 202 },
pankso@16509 203 'library:static': {
pankso@16509 204 'LINKFLAGS': ['-static', '-static-libgcc']
pankso@16509 205 },
pankso@16509 206 'mipsabi:softfloat': {
pankso@16509 207 'CCFLAGS': ['-msoft-float'],
pankso@16509 208 'LINKFLAGS': ['-msoft-float']
pankso@16509 209 },
pankso@16509 210 'mipsabi:hardfloat': {
pankso@16509 211 'CCFLAGS': ['-mhard-float'],
pankso@16509 212 'LINKFLAGS': ['-mhard-float']
pankso@16509 213 }
pankso@16509 214 }
pankso@16509 215 },
pankso@16509 216 'simulator:mips': {
pankso@16509 217 'CCFLAGS': ['-m32'],
pankso@16509 218 'LINKFLAGS': ['-m32'],
pankso@16509 219 'mipsabi:softfloat': {
pankso@16509 220 'CPPDEFINES': ['__mips_soft_float=1'],
pankso@16509 221 'fpu:on': {
pankso@16509 222 'CPPDEFINES' : ['CAN_USE_FPU_INSTRUCTIONS']
pankso@16509 223 }
pankso@16509 224 },
pankso@16509 225 'mipsabi:hardfloat': {
pankso@16509 226 'CPPDEFINES': ['__mips_hard_float=1', 'CAN_USE_FPU_INSTRUCTIONS'],
pankso@16509 227 }
pankso@16509 228 },
pankso@16509 229 'arch:x64': {
pankso@16509 230 'CPPDEFINES': ['V8_TARGET_ARCH_X64'],
pankso@16509 231 'CCFLAGS': ['-m64'],
pankso@16509 232 'LINKFLAGS': ['-m64'],
pankso@16509 233 },
pankso@16509 234 'gdbjit:on': {
pankso@16509 235 'CPPDEFINES': ['ENABLE_GDB_JIT_INTERFACE']
pankso@16509 236 },
pankso@16509 237 'compress_startup_data:bz2': {
pankso@16509 238 'CPPDEFINES': ['COMPRESS_STARTUP_DATA_BZ2']
pankso@16509 239 }
pankso@16509 240 },
pankso@16509 241 'msvc': {
pankso@16509 242 'all': {
pankso@16509 243 'CCFLAGS': ['$DIALECTFLAGS', '$WARNINGFLAGS'],
pankso@16509 244 'CXXFLAGS': ['/GR-', '/Gy'],
pankso@16509 245 'CPPDEFINES': ['WIN32'],
pankso@16509 246 'LINKFLAGS': ['/INCREMENTAL:NO', '/NXCOMPAT', '/IGNORE:4221'],
pankso@16509 247 'CCPDBFLAGS': ['/Zi']
pankso@16509 248 },
pankso@16509 249 'verbose:off': {
pankso@16509 250 'DIALECTFLAGS': ['/nologo'],
pankso@16509 251 'ARFLAGS': ['/NOLOGO']
pankso@16509 252 },
pankso@16509 253 'arch:ia32': {
pankso@16509 254 'CPPDEFINES': ['V8_TARGET_ARCH_IA32', '_USE_32BIT_TIME_T'],
pankso@16509 255 'LINKFLAGS': ['/MACHINE:X86'],
pankso@16509 256 'ARFLAGS': ['/MACHINE:X86']
pankso@16509 257 },
pankso@16509 258 'arch:x64': {
pankso@16509 259 'CPPDEFINES': ['V8_TARGET_ARCH_X64'],
pankso@16509 260 'LINKFLAGS': ['/MACHINE:X64'],
pankso@16509 261 'ARFLAGS': ['/MACHINE:X64']
pankso@16509 262 },
pankso@16509 263 'mode:debug': {
pankso@16509 264 'CCFLAGS': ['/Od', '/Gm'],
pankso@16509 265 'CPPDEFINES': ['_DEBUG', 'ENABLE_DISASSEMBLER', 'DEBUG'],
pankso@16509 266 'LINKFLAGS': ['/DEBUG'],
pankso@16509 267 'msvcrt:static': {
pankso@16509 268 'CCFLAGS': ['/MTd']
pankso@16509 269 },
pankso@16509 270 'msvcrt:shared': {
pankso@16509 271 'CCFLAGS': ['/MDd']
pankso@16509 272 }
pankso@16509 273 },
pankso@16509 274 'mode:release': {
pankso@16509 275 'CCFLAGS': ['/O2'],
pankso@16509 276 'LINKFLAGS': ['/OPT:REF', '/OPT:ICF'],
pankso@16509 277 'msvcrt:static': {
pankso@16509 278 'CCFLAGS': ['/MT']
pankso@16509 279 },
pankso@16509 280 'msvcrt:shared': {
pankso@16509 281 'CCFLAGS': ['/MD']
pankso@16509 282 },
pankso@16509 283 'msvcltcg:on': {
pankso@16509 284 'CCFLAGS': ['/GL'],
pankso@16509 285 'ARFLAGS': ['/LTCG'],
pankso@16509 286 'pgo:off': {
pankso@16509 287 'LINKFLAGS': ['/LTCG'],
pankso@16509 288 },
pankso@16509 289 'pgo:instrument': {
pankso@16509 290 'LINKFLAGS': ['/LTCG:PGI']
pankso@16509 291 },
pankso@16509 292 'pgo:optimize': {
pankso@16509 293 'LINKFLAGS': ['/LTCG:PGO']
pankso@16509 294 }
pankso@16509 295 }
pankso@16509 296 }
pankso@16509 297 }
pankso@16509 298 }
pankso@16509 299
pankso@16509 300
pankso@16509 301 V8_EXTRA_FLAGS = {
pankso@16509 302 'gcc': {
pankso@16509 303 'all': {
pankso@16509 304 'WARNINGFLAGS': ['-Wall',
pankso@16509 305 '-Werror',
pankso@16509 306 '-W',
pankso@16509 307 '-Wno-unused-parameter',
pankso@16509 308 '-Woverloaded-virtual',
pankso@16509 309 '-Wnon-virtual-dtor']
pankso@16509 310 },
pankso@16509 311 'os:win32': {
pankso@16509 312 'WARNINGFLAGS': ['-pedantic',
pankso@16509 313 '-Wno-long-long',
pankso@16509 314 '-Wno-pedantic-ms-format'],
pankso@16509 315 'library:shared': {
pankso@16509 316 'LIBS': ['winmm', 'ws2_32']
pankso@16509 317 }
pankso@16509 318 },
pankso@16509 319 'os:linux': {
pankso@16509 320 'WARNINGFLAGS': ['-pedantic'],
pankso@16509 321 'library:shared': {
pankso@16509 322 'soname:on': {
pankso@16509 323 'LINKFLAGS': ['-Wl,-soname,${SONAME}']
pankso@16509 324 }
pankso@16509 325 }
pankso@16509 326 },
pankso@16509 327 'os:macos': {
pankso@16509 328 'WARNINGFLAGS': ['-pedantic']
pankso@16509 329 },
pankso@16509 330 'arch:arm': {
pankso@16509 331 # This is to silence warnings about ABI changes that some versions of the
pankso@16509 332 # CodeSourcery G++ tool chain produce for each occurrence of varargs.
pankso@16509 333 'WARNINGFLAGS': ['-Wno-abi']
pankso@16509 334 },
pankso@16509 335 'disassembler:on': {
pankso@16509 336 'CPPDEFINES': ['ENABLE_DISASSEMBLER']
pankso@16509 337 }
pankso@16509 338 },
pankso@16509 339 'msvc': {
pankso@16509 340 'all': {
pankso@16509 341 'WARNINGFLAGS': ['/W3', '/WX', '/wd4351', '/wd4355', '/wd4800']
pankso@16509 342 },
pankso@16509 343 'library:shared': {
pankso@16509 344 'CPPDEFINES': ['BUILDING_V8_SHARED'],
pankso@16509 345 'LIBS': ['winmm', 'ws2_32']
pankso@16509 346 },
pankso@16509 347 'arch:arm': {
pankso@16509 348 'CPPDEFINES': ['V8_TARGET_ARCH_ARM'],
pankso@16509 349 # /wd4996 is to silence the warning about sscanf
pankso@16509 350 # used by the arm simulator.
pankso@16509 351 'WARNINGFLAGS': ['/wd4996']
pankso@16509 352 },
pankso@16509 353 'arch:mips': {
pankso@16509 354 'CPPDEFINES': ['V8_TARGET_ARCH_MIPS'],
pankso@16509 355 'mips_arch_variant:mips32r2': {
pankso@16509 356 'CPPDEFINES': ['_MIPS_ARCH_MIPS32R2']
pankso@16509 357 },
pankso@16509 358 },
pankso@16509 359 'disassembler:on': {
pankso@16509 360 'CPPDEFINES': ['ENABLE_DISASSEMBLER']
pankso@16509 361 }
pankso@16509 362 }
pankso@16509 363 }
pankso@16509 364
pankso@16509 365
pankso@16509 366 MKSNAPSHOT_EXTRA_FLAGS = {
pankso@16509 367 'gcc': {
pankso@16509 368 'os:linux': {
pankso@16509 369 'LIBS': ['pthread'],
pankso@16509 370 },
pankso@16509 371 'os:macos': {
pankso@16509 372 'LIBS': ['pthread'],
pankso@16509 373 },
pankso@16509 374 'os:freebsd': {
pankso@16509 375 'LIBS': ['execinfo', 'pthread']
pankso@16509 376 },
pankso@16509 377 'os:solaris': {
pankso@16509 378 'LIBS': ['m', 'pthread', 'socket', 'nsl', 'rt'],
pankso@16509 379 'LINKFLAGS': ['-mt']
pankso@16509 380 },
pankso@16509 381 'os:openbsd': {
pankso@16509 382 'LIBS': ['execinfo', 'pthread']
pankso@16509 383 },
pankso@16509 384 'os:win32': {
pankso@16509 385 'LIBS': ['winmm', 'ws2_32'],
pankso@16509 386 },
pankso@16509 387 'os:netbsd': {
pankso@16509 388 'LIBS': ['execinfo', 'pthread']
pankso@16509 389 },
pankso@16509 390 'compress_startup_data:bz2': {
pankso@16509 391 'os:linux': {
pankso@16509 392 'LIBS': ['bz2']
pankso@16509 393 }
pankso@16509 394 },
pankso@16509 395 },
pankso@16509 396 'msvc': {
pankso@16509 397 'all': {
pankso@16509 398 'CPPDEFINES': ['_HAS_EXCEPTIONS=0'],
pankso@16509 399 'LIBS': ['winmm', 'ws2_32']
pankso@16509 400 }
pankso@16509 401 }
pankso@16509 402 }
pankso@16509 403
pankso@16509 404
pankso@16509 405 DTOA_EXTRA_FLAGS = {
pankso@16509 406 'gcc': {
pankso@16509 407 'all': {
pankso@16509 408 'WARNINGFLAGS': ['-Werror', '-Wno-uninitialized'],
pankso@16509 409 'CCFLAGS': GCC_DTOA_EXTRA_CCFLAGS
pankso@16509 410 }
pankso@16509 411 },
pankso@16509 412 'msvc': {
pankso@16509 413 'all': {
pankso@16509 414 'WARNINGFLAGS': ['/WX', '/wd4018', '/wd4244']
pankso@16509 415 }
pankso@16509 416 }
pankso@16509 417 }
pankso@16509 418
pankso@16509 419
pankso@16509 420 CCTEST_EXTRA_FLAGS = {
pankso@16509 421 'all': {
pankso@16509 422 'CPPPATH': [src_dir],
pankso@16509 423 'library:shared': {
pankso@16509 424 'CPPDEFINES': ['USING_V8_SHARED']
pankso@16509 425 },
pankso@16509 426 },
pankso@16509 427 'gcc': {
pankso@16509 428 'all': {
pankso@16509 429 'LIBPATH': [abspath('.')],
pankso@16509 430 'CCFLAGS': ['$DIALECTFLAGS', '$WARNINGFLAGS'],
pankso@16509 431 'CXXFLAGS': ['-fno-rtti', '-fno-exceptions'],
pankso@16509 432 'LINKFLAGS': ['$CCFLAGS'],
pankso@16509 433 },
pankso@16509 434 'os:linux': {
pankso@16509 435 'LIBS': ['pthread'],
pankso@16509 436 'CCFLAGS': ['-Wno-unused-but-set-variable'],
pankso@16509 437 },
pankso@16509 438 'os:macos': {
pankso@16509 439 'LIBS': ['pthread'],
pankso@16509 440 },
pankso@16509 441 'os:freebsd': {
pankso@16509 442 'LIBS': ['execinfo', 'pthread']
pankso@16509 443 },
pankso@16509 444 'os:solaris': {
pankso@16509 445 'LIBS': ['m', 'pthread', 'socket', 'nsl', 'rt'],
pankso@16509 446 'LINKFLAGS': ['-mt']
pankso@16509 447 },
pankso@16509 448 'os:openbsd': {
pankso@16509 449 'LIBS': ['execinfo', 'pthread']
pankso@16509 450 },
pankso@16509 451 'os:win32': {
pankso@16509 452 'LIBS': ['winmm', 'ws2_32']
pankso@16509 453 },
pankso@16509 454 'os:netbsd': {
pankso@16509 455 'LIBS': ['execinfo', 'pthread']
pankso@16509 456 },
pankso@16509 457 'arch:arm': {
pankso@16509 458 'LINKFLAGS': ARM_LINK_FLAGS
pankso@16509 459 },
pankso@16509 460 },
pankso@16509 461 'msvc': {
pankso@16509 462 'all': {
pankso@16509 463 'CPPDEFINES': ['_HAS_EXCEPTIONS=0'],
pankso@16509 464 'LIBS': ['winmm', 'ws2_32']
pankso@16509 465 },
pankso@16509 466 'arch:ia32': {
pankso@16509 467 'CPPDEFINES': ['V8_TARGET_ARCH_IA32']
pankso@16509 468 },
pankso@16509 469 'arch:x64': {
pankso@16509 470 'CPPDEFINES': ['V8_TARGET_ARCH_X64'],
pankso@16509 471 'LINKFLAGS': ['/STACK:2097152']
pankso@16509 472 },
pankso@16509 473 }
pankso@16509 474 }
pankso@16509 475
pankso@16509 476
pankso@16509 477 SAMPLE_FLAGS = {
pankso@16509 478 'all': {
pankso@16509 479 'CPPPATH': [join(root_dir, 'include')],
pankso@16509 480 'library:shared': {
pankso@16509 481 'CPPDEFINES': ['USING_V8_SHARED']
pankso@16509 482 },
pankso@16509 483 },
pankso@16509 484 'gcc': {
pankso@16509 485 'all': {
pankso@16509 486 'LIBPATH': ['.'],
pankso@16509 487 'CCFLAGS': ['$DIALECTFLAGS', '$WARNINGFLAGS'],
pankso@16509 488 'CXXFLAGS': ['-fno-rtti', '-fno-exceptions'],
pankso@16509 489 'LINKFLAGS': ['$CCFLAGS'],
pankso@16509 490 },
pankso@16509 491 'os:linux': {
pankso@16509 492 'LIBS': ['pthread'],
pankso@16509 493 },
pankso@16509 494 'os:macos': {
pankso@16509 495 'LIBS': ['pthread'],
pankso@16509 496 },
pankso@16509 497 'os:freebsd': {
pankso@16509 498 'LIBPATH' : ['/usr/local/lib'],
pankso@16509 499 'LIBS': ['execinfo', 'pthread']
pankso@16509 500 },
pankso@16509 501 'os:solaris': {
pankso@16509 502 # On Solaris, to get isinf, INFINITY, fpclassify and other macros one
pankso@16509 503 # needs to define __C99FEATURES__.
pankso@16509 504 'CPPDEFINES': ['__C99FEATURES__'],
pankso@16509 505 'LIBPATH' : ['/usr/local/lib'],
pankso@16509 506 'LIBS': ['m', 'pthread', 'socket', 'nsl', 'rt'],
pankso@16509 507 'LINKFLAGS': ['-mt']
pankso@16509 508 },
pankso@16509 509 'os:openbsd': {
pankso@16509 510 'LIBPATH' : ['/usr/local/lib'],
pankso@16509 511 'LIBS': ['execinfo', 'pthread']
pankso@16509 512 },
pankso@16509 513 'os:win32': {
pankso@16509 514 'LIBS': ['winmm', 'ws2_32']
pankso@16509 515 },
pankso@16509 516 'os:netbsd': {
pankso@16509 517 'LIBPATH' : ['/usr/pkg/lib'],
pankso@16509 518 'LIBS': ['execinfo', 'pthread']
pankso@16509 519 },
pankso@16509 520 'arch:arm': {
pankso@16509 521 'LINKFLAGS': ARM_LINK_FLAGS,
pankso@16509 522 'armeabi:soft' : {
pankso@16509 523 'CPPDEFINES' : ['USE_EABI_HARDFLOAT=0'],
pankso@16509 524 'simulator:none': {
pankso@16509 525 'CCFLAGS': ['-mfloat-abi=soft'],
pankso@16509 526 }
pankso@16509 527 },
pankso@16509 528 'armeabi:softfp' : {
pankso@16509 529 'CPPDEFINES' : ['USE_EABI_HARDFLOAT=0'],
pankso@16509 530 'simulator:none': {
pankso@16509 531 'CCFLAGS': ['-mfloat-abi=softfp'],
pankso@16509 532 }
pankso@16509 533 },
pankso@16509 534 'armeabi:hard' : {
pankso@16509 535 'CPPDEFINES' : ['USE_EABI_HARDFLOAT=1'],
pankso@16509 536 'vfp3:on': {
pankso@16509 537 'CPPDEFINES' : ['CAN_USE_VFP_INSTRUCTIONS']
pankso@16509 538 },
pankso@16509 539 'simulator:none': {
pankso@16509 540 'CCFLAGS': ['-mfloat-abi=hard'],
pankso@16509 541 }
pankso@16509 542 }
pankso@16509 543 },
pankso@16509 544 'arch:ia32': {
pankso@16509 545 'CCFLAGS': ['-m32'],
pankso@16509 546 'LINKFLAGS': ['-m32']
pankso@16509 547 },
pankso@16509 548 'arch:x64': {
pankso@16509 549 'CCFLAGS': ['-m64'],
pankso@16509 550 'LINKFLAGS': ['-m64']
pankso@16509 551 },
pankso@16509 552 'arch:mips': {
pankso@16509 553 'CPPDEFINES': ['V8_TARGET_ARCH_MIPS'],
pankso@16509 554 'mips_arch_variant:mips32r2': {
pankso@16509 555 'CPPDEFINES': ['_MIPS_ARCH_MIPS32R2']
pankso@16509 556 },
pankso@16509 557 'mips_arch_variant:loongson': {
pankso@16509 558 'CPPDEFINES': ['_MIPS_ARCH_LOONGSON']
pankso@16509 559 },
pankso@16509 560 'simulator:none': {
pankso@16509 561 'CCFLAGS': ['-EL'],
pankso@16509 562 'LINKFLAGS': ['-EL'],
pankso@16509 563 'mips_arch_variant:mips32r2': {
pankso@16509 564 'CCFLAGS': ['-mips32r2', '-Wa,-mips32r2']
pankso@16509 565 },
pankso@16509 566 'mips_arch_variant:mips32r1': {
pankso@16509 567 'CCFLAGS': ['-mips32', '-Wa,-mips32']
pankso@16509 568 },
pankso@16509 569 'mips_arch_variant:loongson': {
pankso@16509 570 'CCFLAGS': ['-march=mips3', '-Wa,-march=mips3']
pankso@16509 571 },
pankso@16509 572 'library:static': {
pankso@16509 573 'LINKFLAGS': ['-static', '-static-libgcc']
pankso@16509 574 },
pankso@16509 575 'mipsabi:softfloat': {
pankso@16509 576 'CCFLAGS': ['-msoft-float'],
pankso@16509 577 'LINKFLAGS': ['-msoft-float']
pankso@16509 578 },
pankso@16509 579 'mipsabi:hardfloat': {
pankso@16509 580 'CCFLAGS': ['-mhard-float'],
pankso@16509 581 'LINKFLAGS': ['-mhard-float'],
pankso@16509 582 'fpu:on': {
pankso@16509 583 'CPPDEFINES' : ['CAN_USE_FPU_INSTRUCTIONS']
pankso@16509 584 }
pankso@16509 585 }
pankso@16509 586 }
pankso@16509 587 },
pankso@16509 588 'simulator:arm': {
pankso@16509 589 'CCFLAGS': ['-m32'],
pankso@16509 590 'LINKFLAGS': ['-m32']
pankso@16509 591 },
pankso@16509 592 'simulator:mips': {
pankso@16509 593 'CCFLAGS': ['-m32'],
pankso@16509 594 'LINKFLAGS': ['-m32']
pankso@16509 595 },
pankso@16509 596 'mode:release': {
pankso@16509 597 'CCFLAGS': ['-O2']
pankso@16509 598 },
pankso@16509 599 'mode:debug': {
pankso@16509 600 'CCFLAGS': ['-g', '-O0'],
pankso@16509 601 'CPPDEFINES': ['DEBUG']
pankso@16509 602 },
pankso@16509 603 'compress_startup_data:bz2': {
pankso@16509 604 'CPPDEFINES': ['COMPRESS_STARTUP_DATA_BZ2'],
pankso@16509 605 'os:linux': {
pankso@16509 606 'LIBS': ['bz2']
pankso@16509 607 }
pankso@16509 608 },
pankso@16509 609 },
pankso@16509 610 'msvc': {
pankso@16509 611 'all': {
pankso@16509 612 'LIBS': ['winmm', 'ws2_32']
pankso@16509 613 },
pankso@16509 614 'verbose:off': {
pankso@16509 615 'CCFLAGS': ['/nologo'],
pankso@16509 616 'LINKFLAGS': ['/NOLOGO']
pankso@16509 617 },
pankso@16509 618 'verbose:on': {
pankso@16509 619 'LINKFLAGS': ['/VERBOSE']
pankso@16509 620 },
pankso@16509 621 'prof:on': {
pankso@16509 622 'LINKFLAGS': ['/MAP']
pankso@16509 623 },
pankso@16509 624 'mode:release': {
pankso@16509 625 'CCFLAGS': ['/O2'],
pankso@16509 626 'LINKFLAGS': ['/OPT:REF', '/OPT:ICF'],
pankso@16509 627 'msvcrt:static': {
pankso@16509 628 'CCFLAGS': ['/MT']
pankso@16509 629 },
pankso@16509 630 'msvcrt:shared': {
pankso@16509 631 'CCFLAGS': ['/MD']
pankso@16509 632 },
pankso@16509 633 'msvcltcg:on': {
pankso@16509 634 'CCFLAGS': ['/GL'],
pankso@16509 635 'pgo:off': {
pankso@16509 636 'LINKFLAGS': ['/LTCG'],
pankso@16509 637 },
pankso@16509 638 },
pankso@16509 639 'pgo:instrument': {
pankso@16509 640 'LINKFLAGS': ['/LTCG:PGI']
pankso@16509 641 },
pankso@16509 642 'pgo:optimize': {
pankso@16509 643 'LINKFLAGS': ['/LTCG:PGO']
pankso@16509 644 }
pankso@16509 645 },
pankso@16509 646 'arch:ia32': {
pankso@16509 647 'CPPDEFINES': ['V8_TARGET_ARCH_IA32', 'WIN32'],
pankso@16509 648 'LINKFLAGS': ['/MACHINE:X86']
pankso@16509 649 },
pankso@16509 650 'arch:x64': {
pankso@16509 651 'CPPDEFINES': ['V8_TARGET_ARCH_X64', 'WIN32'],
pankso@16509 652 'LINKFLAGS': ['/MACHINE:X64', '/STACK:2097152']
pankso@16509 653 },
pankso@16509 654 'mode:debug': {
pankso@16509 655 'CCFLAGS': ['/Od'],
pankso@16509 656 'LINKFLAGS': ['/DEBUG'],
pankso@16509 657 'CPPDEFINES': ['DEBUG'],
pankso@16509 658 'msvcrt:static': {
pankso@16509 659 'CCFLAGS': ['/MTd']
pankso@16509 660 },
pankso@16509 661 'msvcrt:shared': {
pankso@16509 662 'CCFLAGS': ['/MDd']
pankso@16509 663 }
pankso@16509 664 }
pankso@16509 665 }
pankso@16509 666 }
pankso@16509 667
pankso@16509 668
pankso@16509 669 PREPARSER_FLAGS = {
pankso@16509 670 'all': {
pankso@16509 671 'CPPPATH': [join(root_dir, 'include'), src_dir],
pankso@16509 672 'library:shared': {
pankso@16509 673 'CPPDEFINES': ['USING_V8_SHARED']
pankso@16509 674 },
pankso@16509 675 },
pankso@16509 676 'gcc': {
pankso@16509 677 'all': {
pankso@16509 678 'LIBPATH': ['.'],
pankso@16509 679 'CCFLAGS': ['$DIALECTFLAGS', '$WARNINGFLAGS'],
pankso@16509 680 'CXXFLAGS': ['-fno-rtti', '-fno-exceptions'],
pankso@16509 681 'LINKFLAGS': ['$CCFLAGS'],
pankso@16509 682 },
pankso@16509 683 'os:win32': {
pankso@16509 684 'LIBS': ['winmm', 'ws2_32']
pankso@16509 685 },
pankso@16509 686 'arch:arm': {
pankso@16509 687 'LINKFLAGS': ARM_LINK_FLAGS,
pankso@16509 688 'armeabi:soft' : {
pankso@16509 689 'CPPDEFINES' : ['USE_EABI_HARDFLOAT=0'],
pankso@16509 690 'simulator:none': {
pankso@16509 691 'CCFLAGS': ['-mfloat-abi=soft'],
pankso@16509 692 }
pankso@16509 693 },
pankso@16509 694 'armeabi:softfp' : {
pankso@16509 695 'simulator:none': {
pankso@16509 696 'CCFLAGS': ['-mfloat-abi=softfp'],
pankso@16509 697 }
pankso@16509 698 },
pankso@16509 699 'armeabi:hard' : {
pankso@16509 700 'simulator:none': {
pankso@16509 701 'CCFLAGS': ['-mfloat-abi=hard'],
pankso@16509 702 }
pankso@16509 703 }
pankso@16509 704 },
pankso@16509 705 'arch:ia32': {
pankso@16509 706 'CCFLAGS': ['-m32'],
pankso@16509 707 'LINKFLAGS': ['-m32']
pankso@16509 708 },
pankso@16509 709 'arch:x64': {
pankso@16509 710 'CCFLAGS': ['-m64'],
pankso@16509 711 'LINKFLAGS': ['-m64']
pankso@16509 712 },
pankso@16509 713 'arch:mips': {
pankso@16509 714 'CPPDEFINES': ['V8_TARGET_ARCH_MIPS'],
pankso@16509 715 'mips_arch_variant:mips32r2': {
pankso@16509 716 'CPPDEFINES': ['_MIPS_ARCH_MIPS32R2']
pankso@16509 717 },
pankso@16509 718 'mips_arch_variant:loongson': {
pankso@16509 719 'CPPDEFINES': ['_MIPS_ARCH_LOONGSON']
pankso@16509 720 },
pankso@16509 721 'simulator:none': {
pankso@16509 722 'CCFLAGS': ['-EL'],
pankso@16509 723 'LINKFLAGS': ['-EL'],
pankso@16509 724 'mips_arch_variant:mips32r2': {
pankso@16509 725 'CCFLAGS': ['-mips32r2', '-Wa,-mips32r2']
pankso@16509 726 },
pankso@16509 727 'mips_arch_variant:mips32r1': {
pankso@16509 728 'CCFLAGS': ['-mips32', '-Wa,-mips32']
pankso@16509 729 },
pankso@16509 730 'mips_arch_variant:loongson': {
pankso@16509 731 'CCFLAGS': ['-march=mips3', '-Wa,-march=mips3']
pankso@16509 732 },
pankso@16509 733 'library:static': {
pankso@16509 734 'LINKFLAGS': ['-static', '-static-libgcc']
pankso@16509 735 },
pankso@16509 736 'mipsabi:softfloat': {
pankso@16509 737 'CCFLAGS': ['-msoft-float'],
pankso@16509 738 'LINKFLAGS': ['-msoft-float']
pankso@16509 739 },
pankso@16509 740 'mipsabi:hardfloat': {
pankso@16509 741 'CCFLAGS': ['-mhard-float'],
pankso@16509 742 'LINKFLAGS': ['-mhard-float']
pankso@16509 743 }
pankso@16509 744 }
pankso@16509 745 },
pankso@16509 746 'simulator:arm': {
pankso@16509 747 'CCFLAGS': ['-m32'],
pankso@16509 748 'LINKFLAGS': ['-m32']
pankso@16509 749 },
pankso@16509 750 'simulator:mips': {
pankso@16509 751 'CCFLAGS': ['-m32'],
pankso@16509 752 'LINKFLAGS': ['-m32'],
pankso@16509 753 'mipsabi:softfloat': {
pankso@16509 754 'CPPDEFINES': ['__mips_soft_float=1'],
pankso@16509 755 },
pankso@16509 756 'mipsabi:hardfloat': {
pankso@16509 757 'CPPDEFINES': ['__mips_hard_float=1'],
pankso@16509 758 }
pankso@16509 759 },
pankso@16509 760 'mode:release': {
pankso@16509 761 'CCFLAGS': ['-O2']
pankso@16509 762 },
pankso@16509 763 'mode:debug': {
pankso@16509 764 'CCFLAGS': ['-g', '-O0'],
pankso@16509 765 'CPPDEFINES': ['DEBUG']
pankso@16509 766 },
pankso@16509 767 'os:freebsd': {
pankso@16509 768 'LIBPATH' : ['/usr/local/lib'],
pankso@16509 769 },
pankso@16509 770 },
pankso@16509 771 'msvc': {
pankso@16509 772 'all': {
pankso@16509 773 'LIBS': ['winmm', 'ws2_32']
pankso@16509 774 },
pankso@16509 775 'verbose:off': {
pankso@16509 776 'CCFLAGS': ['/nologo'],
pankso@16509 777 'LINKFLAGS': ['/NOLOGO']
pankso@16509 778 },
pankso@16509 779 'verbose:on': {
pankso@16509 780 'LINKFLAGS': ['/VERBOSE']
pankso@16509 781 },
pankso@16509 782 'prof:on': {
pankso@16509 783 'LINKFLAGS': ['/MAP']
pankso@16509 784 },
pankso@16509 785 'mode:release': {
pankso@16509 786 'CCFLAGS': ['/O2'],
pankso@16509 787 'LINKFLAGS': ['/OPT:REF', '/OPT:ICF'],
pankso@16509 788 'msvcrt:static': {
pankso@16509 789 'CCFLAGS': ['/MT']
pankso@16509 790 },
pankso@16509 791 'msvcrt:shared': {
pankso@16509 792 'CCFLAGS': ['/MD']
pankso@16509 793 },
pankso@16509 794 'msvcltcg:on': {
pankso@16509 795 'CCFLAGS': ['/GL'],
pankso@16509 796 'pgo:off': {
pankso@16509 797 'LINKFLAGS': ['/LTCG'],
pankso@16509 798 },
pankso@16509 799 },
pankso@16509 800 'pgo:instrument': {
pankso@16509 801 'LINKFLAGS': ['/LTCG:PGI']
pankso@16509 802 },
pankso@16509 803 'pgo:optimize': {
pankso@16509 804 'LINKFLAGS': ['/LTCG:PGO']
pankso@16509 805 }
pankso@16509 806 },
pankso@16509 807 'arch:ia32': {
pankso@16509 808 'CPPDEFINES': ['V8_TARGET_ARCH_IA32', 'WIN32'],
pankso@16509 809 'LINKFLAGS': ['/MACHINE:X86']
pankso@16509 810 },
pankso@16509 811 'arch:x64': {
pankso@16509 812 'CPPDEFINES': ['V8_TARGET_ARCH_X64', 'WIN32'],
pankso@16509 813 'LINKFLAGS': ['/MACHINE:X64', '/STACK:2097152']
pankso@16509 814 },
pankso@16509 815 'mode:debug': {
pankso@16509 816 'CCFLAGS': ['/Od'],
pankso@16509 817 'LINKFLAGS': ['/DEBUG'],
pankso@16509 818 'CPPDEFINES': ['DEBUG'],
pankso@16509 819 'msvcrt:static': {
pankso@16509 820 'CCFLAGS': ['/MTd']
pankso@16509 821 },
pankso@16509 822 'msvcrt:shared': {
pankso@16509 823 'CCFLAGS': ['/MDd']
pankso@16509 824 }
pankso@16509 825 }
pankso@16509 826 }
pankso@16509 827 }
pankso@16509 828
pankso@16509 829
pankso@16509 830 D8_FLAGS = {
pankso@16509 831 'all': {
pankso@16509 832 'library:shared': {
pankso@16509 833 'CPPDEFINES': ['V8_SHARED'],
pankso@16509 834 'LIBS': ['v8'],
pankso@16509 835 'LIBPATH': ['.']
pankso@16509 836 },
pankso@16509 837 },
pankso@16509 838 'gcc': {
pankso@16509 839 'all': {
pankso@16509 840 'CCFLAGS': ['$DIALECTFLAGS', '$WARNINGFLAGS'],
pankso@16509 841 'CXXFLAGS': ['-fno-rtti', '-fno-exceptions'],
pankso@16509 842 'LINKFLAGS': ['$CCFLAGS'],
pankso@16509 843 },
pankso@16509 844 'console:readline': {
pankso@16509 845 'LIBS': ['readline']
pankso@16509 846 },
pankso@16509 847 'os:linux': {
pankso@16509 848 'LIBS': ['pthread'],
pankso@16509 849 },
pankso@16509 850 'os:macos': {
pankso@16509 851 'LIBS': ['pthread'],
pankso@16509 852 },
pankso@16509 853 'os:freebsd': {
pankso@16509 854 'LIBS': ['pthread'],
pankso@16509 855 },
pankso@16509 856 'os:solaris': {
pankso@16509 857 'LIBS': ['m', 'pthread', 'socket', 'nsl', 'rt'],
pankso@16509 858 'LINKFLAGS': ['-mt']
pankso@16509 859 },
pankso@16509 860 'os:openbsd': {
pankso@16509 861 'LIBS': ['pthread'],
pankso@16509 862 },
pankso@16509 863 'os:win32': {
pankso@16509 864 'LIBS': ['winmm', 'ws2_32'],
pankso@16509 865 },
pankso@16509 866 'os:netbsd': {
pankso@16509 867 'LIBS': ['pthread'],
pankso@16509 868 },
pankso@16509 869 'arch:arm': {
pankso@16509 870 'LINKFLAGS': ARM_LINK_FLAGS
pankso@16509 871 },
pankso@16509 872 'compress_startup_data:bz2': {
pankso@16509 873 'CPPDEFINES': ['COMPRESS_STARTUP_DATA_BZ2'],
pankso@16509 874 'os:linux': {
pankso@16509 875 'LIBS': ['bz2']
pankso@16509 876 }
pankso@16509 877 }
pankso@16509 878 },
pankso@16509 879 'msvc': {
pankso@16509 880 'all': {
pankso@16509 881 'LIBS': ['winmm', 'ws2_32']
pankso@16509 882 },
pankso@16509 883 'verbose:off': {
pankso@16509 884 'CCFLAGS': ['/nologo'],
pankso@16509 885 'LINKFLAGS': ['/NOLOGO']
pankso@16509 886 },
pankso@16509 887 'verbose:on': {
pankso@16509 888 'LINKFLAGS': ['/VERBOSE']
pankso@16509 889 },
pankso@16509 890 'prof:on': {
pankso@16509 891 'LINKFLAGS': ['/MAP']
pankso@16509 892 },
pankso@16509 893 'mode:release': {
pankso@16509 894 'CCFLAGS': ['/O2'],
pankso@16509 895 'LINKFLAGS': ['/OPT:REF', '/OPT:ICF'],
pankso@16509 896 'msvcrt:static': {
pankso@16509 897 'CCFLAGS': ['/MT']
pankso@16509 898 },
pankso@16509 899 'msvcrt:shared': {
pankso@16509 900 'CCFLAGS': ['/MD']
pankso@16509 901 },
pankso@16509 902 'msvcltcg:on': {
pankso@16509 903 'CCFLAGS': ['/GL'],
pankso@16509 904 'pgo:off': {
pankso@16509 905 'LINKFLAGS': ['/LTCG'],
pankso@16509 906 },
pankso@16509 907 },
pankso@16509 908 'pgo:instrument': {
pankso@16509 909 'LINKFLAGS': ['/LTCG:PGI']
pankso@16509 910 },
pankso@16509 911 'pgo:optimize': {
pankso@16509 912 'LINKFLAGS': ['/LTCG:PGO']
pankso@16509 913 }
pankso@16509 914 },
pankso@16509 915 'arch:ia32': {
pankso@16509 916 'CPPDEFINES': ['V8_TARGET_ARCH_IA32', 'WIN32'],
pankso@16509 917 'LINKFLAGS': ['/MACHINE:X86']
pankso@16509 918 },
pankso@16509 919 'arch:x64': {
pankso@16509 920 'CPPDEFINES': ['V8_TARGET_ARCH_X64', 'WIN32'],
pankso@16509 921 'LINKFLAGS': ['/MACHINE:X64', '/STACK:2097152']
pankso@16509 922 },
pankso@16509 923 'mode:debug': {
pankso@16509 924 'CCFLAGS': ['/Od'],
pankso@16509 925 'LINKFLAGS': ['/DEBUG'],
pankso@16509 926 'CPPDEFINES': ['DEBUG'],
pankso@16509 927 'msvcrt:static': {
pankso@16509 928 'CCFLAGS': ['/MTd']
pankso@16509 929 },
pankso@16509 930 'msvcrt:shared': {
pankso@16509 931 'CCFLAGS': ['/MDd']
pankso@16509 932 }
pankso@16509 933 }
pankso@16509 934 }
pankso@16509 935 }
pankso@16509 936
pankso@16509 937
pankso@16509 938 SUFFIXES = {
pankso@16509 939 'release': '',
pankso@16509 940 'debug': '_g'
pankso@16509 941 }
pankso@16509 942
pankso@16509 943
pankso@16509 944 def Abort(message):
pankso@16509 945 print message
pankso@16509 946 sys.exit(1)
pankso@16509 947
pankso@16509 948
pankso@16509 949 def GuessOS(env):
pankso@16509 950 return utils.GuessOS()
pankso@16509 951
pankso@16509 952
pankso@16509 953 def GuessArch(env):
pankso@16509 954 return utils.GuessArchitecture()
pankso@16509 955
pankso@16509 956
pankso@16509 957 def GuessToolchain(env):
pankso@16509 958 tools = env['TOOLS']
pankso@16509 959 if 'gcc' in tools:
pankso@16509 960 return 'gcc'
pankso@16509 961 elif 'msvc' in tools:
pankso@16509 962 return 'msvc'
pankso@16509 963 else:
pankso@16509 964 return None
pankso@16509 965
pankso@16509 966
pankso@16509 967 def GuessVisibility(env):
pankso@16509 968 os = env['os']
pankso@16509 969 toolchain = env['toolchain'];
pankso@16509 970 if (os == 'win32' or os == 'cygwin') and toolchain == 'gcc':
pankso@16509 971 # MinGW / Cygwin can't do it.
pankso@16509 972 return 'default'
pankso@16509 973 elif os == 'solaris':
pankso@16509 974 return 'default'
pankso@16509 975 else:
pankso@16509 976 return 'hidden'
pankso@16509 977
pankso@16509 978
pankso@16509 979 def GuessStrictAliasing(env):
pankso@16509 980 # There seems to be a problem with gcc 4.5.x.
pankso@16509 981 # See http://code.google.com/p/v8/issues/detail?id=884
pankso@16509 982 # It can be worked around by disabling strict aliasing.
pankso@16509 983 toolchain = env['toolchain'];
pankso@16509 984 if toolchain == 'gcc':
pankso@16509 985 env = Environment(tools=['gcc'])
pankso@16509 986 # The gcc version should be available in env['CCVERSION'],
pankso@16509 987 # but when scons detects msvc this value is not set.
pankso@16509 988 version = subprocess.Popen([env['CC'], '-dumpversion'],
pankso@16509 989 stdout=subprocess.PIPE).communicate()[0]
pankso@16509 990 if version.find('4.5') == 0:
pankso@16509 991 return 'off'
pankso@16509 992 return 'default'
pankso@16509 993
pankso@16509 994
pankso@16509 995 PLATFORM_OPTIONS = {
pankso@16509 996 'arch': {
pankso@16509 997 'values': ['arm', 'ia32', 'x64', 'mips'],
pankso@16509 998 'guess': GuessArch,
pankso@16509 999 'help': 'the architecture to build for'
pankso@16509 1000 },
pankso@16509 1001 'os': {
pankso@16509 1002 'values': ['freebsd', 'linux', 'macos', 'win32', 'openbsd', 'solaris', 'cygwin', 'netbsd'],
pankso@16509 1003 'guess': GuessOS,
pankso@16509 1004 'help': 'the os to build for'
pankso@16509 1005 },
pankso@16509 1006 'toolchain': {
pankso@16509 1007 'values': ['gcc', 'msvc'],
pankso@16509 1008 'guess': GuessToolchain,
pankso@16509 1009 'help': 'the toolchain to use'
pankso@16509 1010 }
pankso@16509 1011 }
pankso@16509 1012
pankso@16509 1013 SIMPLE_OPTIONS = {
pankso@16509 1014 'regexp': {
pankso@16509 1015 'values': ['native', 'interpreted'],
pankso@16509 1016 'default': 'native',
pankso@16509 1017 'help': 'Whether to use native or interpreted regexp implementation'
pankso@16509 1018 },
pankso@16509 1019 'snapshot': {
pankso@16509 1020 'values': ['on', 'off', 'nobuild'],
pankso@16509 1021 'default': 'off',
pankso@16509 1022 'help': 'build using snapshots for faster start-up'
pankso@16509 1023 },
pankso@16509 1024 'prof': {
pankso@16509 1025 'values': ['on', 'off'],
pankso@16509 1026 'default': 'off',
pankso@16509 1027 'help': 'enable profiling of build target'
pankso@16509 1028 },
pankso@16509 1029 'gdbjit': {
pankso@16509 1030 'values': ['on', 'off'],
pankso@16509 1031 'default': 'off',
pankso@16509 1032 'help': 'enable GDB JIT interface'
pankso@16509 1033 },
pankso@16509 1034 'library': {
pankso@16509 1035 'values': ['static', 'shared'],
pankso@16509 1036 'default': 'static',
pankso@16509 1037 'help': 'the type of library to produce'
pankso@16509 1038 },
pankso@16509 1039 'objectprint': {
pankso@16509 1040 'values': ['on', 'off'],
pankso@16509 1041 'default': 'off',
pankso@16509 1042 'help': 'enable object printing'
pankso@16509 1043 },
pankso@16509 1044 'profilingsupport': {
pankso@16509 1045 'values': ['on', 'off'],
pankso@16509 1046 'default': 'on',
pankso@16509 1047 'help': 'enable profiling of JavaScript code'
pankso@16509 1048 },
pankso@16509 1049 'debuggersupport': {
pankso@16509 1050 'values': ['on', 'off'],
pankso@16509 1051 'default': 'on',
pankso@16509 1052 'help': 'enable debugging of JavaScript code'
pankso@16509 1053 },
pankso@16509 1054 'inspector': {
pankso@16509 1055 'values': ['on', 'off'],
pankso@16509 1056 'default': 'off',
pankso@16509 1057 'help': 'enable inspector features'
pankso@16509 1058 },
pankso@16509 1059 'liveobjectlist': {
pankso@16509 1060 'values': ['on', 'off'],
pankso@16509 1061 'default': 'off',
pankso@16509 1062 'help': 'enable live object list features in the debugger'
pankso@16509 1063 },
pankso@16509 1064 'soname': {
pankso@16509 1065 'values': ['on', 'off'],
pankso@16509 1066 'default': 'off',
pankso@16509 1067 'help': 'turn on setting soname for Linux shared library'
pankso@16509 1068 },
pankso@16509 1069 'msvcrt': {
pankso@16509 1070 'values': ['static', 'shared'],
pankso@16509 1071 'default': 'static',
pankso@16509 1072 'help': 'the type of Microsoft Visual C++ runtime library to use'
pankso@16509 1073 },
pankso@16509 1074 'msvcltcg': {
pankso@16509 1075 'values': ['on', 'off'],
pankso@16509 1076 'default': 'on',
pankso@16509 1077 'help': 'use Microsoft Visual C++ link-time code generation'
pankso@16509 1078 },
pankso@16509 1079 'simulator': {
pankso@16509 1080 'values': ['arm', 'mips', 'none'],
pankso@16509 1081 'default': 'none',
pankso@16509 1082 'help': 'build with simulator'
pankso@16509 1083 },
pankso@16509 1084 'unalignedaccesses': {
pankso@16509 1085 'values': ['default', 'on', 'off'],
pankso@16509 1086 'default': 'default',
pankso@16509 1087 'help': 'set whether the ARM target supports unaligned accesses'
pankso@16509 1088 },
pankso@16509 1089 'disassembler': {
pankso@16509 1090 'values': ['on', 'off'],
pankso@16509 1091 'default': 'off',
pankso@16509 1092 'help': 'enable the disassembler to inspect generated code'
pankso@16509 1093 },
pankso@16509 1094 'fasttls': {
pankso@16509 1095 'values': ['on', 'off'],
pankso@16509 1096 'default': 'on',
pankso@16509 1097 'help': 'enable fast thread local storage support '
pankso@16509 1098 '(if available on the current architecture/platform)'
pankso@16509 1099 },
pankso@16509 1100 'sourcesignatures': {
pankso@16509 1101 'values': ['MD5', 'timestamp'],
pankso@16509 1102 'default': 'MD5',
pankso@16509 1103 'help': 'set how the build system detects file changes'
pankso@16509 1104 },
pankso@16509 1105 'console': {
pankso@16509 1106 'values': ['dumb', 'readline'],
pankso@16509 1107 'default': 'dumb',
pankso@16509 1108 'help': 'the console to use for the d8 shell'
pankso@16509 1109 },
pankso@16509 1110 'verbose': {
pankso@16509 1111 'values': ['on', 'off'],
pankso@16509 1112 'default': 'off',
pankso@16509 1113 'help': 'more output from compiler and linker'
pankso@16509 1114 },
pankso@16509 1115 'visibility': {
pankso@16509 1116 'values': ['default', 'hidden'],
pankso@16509 1117 'guess': GuessVisibility,
pankso@16509 1118 'help': 'shared library symbol visibility'
pankso@16509 1119 },
pankso@16509 1120 'strictaliasing': {
pankso@16509 1121 'values': ['default', 'off'],
pankso@16509 1122 'guess': GuessStrictAliasing,
pankso@16509 1123 'help': 'assume strict aliasing while optimizing'
pankso@16509 1124 },
pankso@16509 1125 'pgo': {
pankso@16509 1126 'values': ['off', 'instrument', 'optimize'],
pankso@16509 1127 'default': 'off',
pankso@16509 1128 'help': 'select profile guided optimization variant',
pankso@16509 1129 },
pankso@16509 1130 'armeabi': {
pankso@16509 1131 'values': ['hard', 'softfp', 'soft'],
pankso@16509 1132 'default': 'softfp',
pankso@16509 1133 'help': 'generate calling conventiont according to selected ARM EABI variant'
pankso@16509 1134 },
pankso@16509 1135 'mipsabi': {
pankso@16509 1136 'values': ['hardfloat', 'softfloat', 'none'],
pankso@16509 1137 'default': 'hardfloat',
pankso@16509 1138 'help': 'generate calling conventiont according to selected mips ABI'
pankso@16509 1139 },
pankso@16509 1140 'mips_arch_variant': {
pankso@16509 1141 'values': ['mips32r2', 'mips32r1', 'loongson'],
pankso@16509 1142 'default': 'mips32r2',
pankso@16509 1143 'help': 'mips variant'
pankso@16509 1144 },
pankso@16509 1145 'compress_startup_data': {
pankso@16509 1146 'values': ['off', 'bz2'],
pankso@16509 1147 'default': 'off',
pankso@16509 1148 'help': 'compress startup data (snapshot) [Linux only]'
pankso@16509 1149 },
pankso@16509 1150 'vfp3': {
pankso@16509 1151 'values': ['on', 'off'],
pankso@16509 1152 'default': 'on',
pankso@16509 1153 'help': 'use vfp3 instructions when building the snapshot [Arm only]'
pankso@16509 1154 },
pankso@16509 1155 'fpu': {
pankso@16509 1156 'values': ['on', 'off'],
pankso@16509 1157 'default': 'on',
pankso@16509 1158 'help': 'use fpu instructions when building the snapshot [MIPS only]'
pankso@16509 1159 },
pankso@16509 1160 'I_know_I_should_build_with_GYP': {
pankso@16509 1161 'values': ['yes', 'no'],
pankso@16509 1162 'default': 'no',
pankso@16509 1163 'help': 'grace period: temporarily override SCons deprecation'
pankso@16509 1164 }
pankso@16509 1165
pankso@16509 1166 }
pankso@16509 1167
pankso@16509 1168 ALL_OPTIONS = dict(PLATFORM_OPTIONS, **SIMPLE_OPTIONS)
pankso@16509 1169
pankso@16509 1170
pankso@16509 1171 def AddOptions(options, result):
pankso@16509 1172 guess_env = Environment(options=result)
pankso@16509 1173 for (name, option) in options.iteritems():
pankso@16509 1174 if 'guess' in option:
pankso@16509 1175 # Option has a guess function
pankso@16509 1176 guess = option.get('guess')
pankso@16509 1177 default = guess(guess_env)
pankso@16509 1178 else:
pankso@16509 1179 # Option has a fixed default
pankso@16509 1180 default = option.get('default')
pankso@16509 1181 help = '%s (%s)' % (option.get('help'), ", ".join(option['values']))
pankso@16509 1182 result.Add(name, help, default)
pankso@16509 1183
pankso@16509 1184
pankso@16509 1185 def GetOptions():
pankso@16509 1186 result = Options()
pankso@16509 1187 result.Add('mode', 'compilation mode (debug, release)', 'release')
pankso@16509 1188 result.Add('sample', 'build sample (shell, process, lineprocessor)', '')
pankso@16509 1189 result.Add('cache', 'directory to use for scons build cache', '')
pankso@16509 1190 result.Add('env', 'override environment settings (NAME0:value0,NAME1:value1,...)', '')
pankso@16509 1191 result.Add('importenv', 'import environment settings (NAME0,NAME1,...)', '')
pankso@16509 1192 AddOptions(PLATFORM_OPTIONS, result)
pankso@16509 1193 AddOptions(SIMPLE_OPTIONS, result)
pankso@16509 1194 return result
pankso@16509 1195
pankso@16509 1196
pankso@16509 1197 def GetTools(opts):
pankso@16509 1198 env = Environment(options=opts)
pankso@16509 1199 os = env['os']
pankso@16509 1200 toolchain = env['toolchain']
pankso@16509 1201 if os == 'win32' and toolchain == 'gcc':
pankso@16509 1202 return ['mingw']
pankso@16509 1203 elif os == 'win32' and toolchain == 'msvc':
pankso@16509 1204 return ['msvc', 'mslink', 'mslib', 'msvs']
pankso@16509 1205 else:
pankso@16509 1206 return ['default']
pankso@16509 1207
pankso@16509 1208
pankso@16509 1209 def GetVersionComponents():
pankso@16509 1210 MAJOR_VERSION_PATTERN = re.compile(r"#define\s+MAJOR_VERSION\s+(.*)")
pankso@16509 1211 MINOR_VERSION_PATTERN = re.compile(r"#define\s+MINOR_VERSION\s+(.*)")
pankso@16509 1212 BUILD_NUMBER_PATTERN = re.compile(r"#define\s+BUILD_NUMBER\s+(.*)")
pankso@16509 1213 PATCH_LEVEL_PATTERN = re.compile(r"#define\s+PATCH_LEVEL\s+(.*)")
pankso@16509 1214
pankso@16509 1215 patterns = [MAJOR_VERSION_PATTERN,
pankso@16509 1216 MINOR_VERSION_PATTERN,
pankso@16509 1217 BUILD_NUMBER_PATTERN,
pankso@16509 1218 PATCH_LEVEL_PATTERN]
pankso@16509 1219
pankso@16509 1220 source = open(join(root_dir, 'src', 'version.cc')).read()
pankso@16509 1221 version_components = []
pankso@16509 1222 for pattern in patterns:
pankso@16509 1223 match = pattern.search(source)
pankso@16509 1224 if match:
pankso@16509 1225 version_components.append(match.group(1).strip())
pankso@16509 1226 else:
pankso@16509 1227 version_components.append('0')
pankso@16509 1228
pankso@16509 1229 return version_components
pankso@16509 1230
pankso@16509 1231
pankso@16509 1232 def GetVersion():
pankso@16509 1233 version_components = GetVersionComponents()
pankso@16509 1234
pankso@16509 1235 if version_components[len(version_components) - 1] == '0':
pankso@16509 1236 version_components.pop()
pankso@16509 1237 return '.'.join(version_components)
pankso@16509 1238
pankso@16509 1239
pankso@16509 1240 def GetSpecificSONAME():
pankso@16509 1241 SONAME_PATTERN = re.compile(r"#define\s+SONAME\s+\"(.*)\"")
pankso@16509 1242
pankso@16509 1243 source = open(join(root_dir, 'src', 'version.cc')).read()
pankso@16509 1244 match = SONAME_PATTERN.search(source)
pankso@16509 1245
pankso@16509 1246 if match:
pankso@16509 1247 return match.group(1).strip()
pankso@16509 1248 else:
pankso@16509 1249 return ''
pankso@16509 1250
pankso@16509 1251
pankso@16509 1252 def SplitList(str):
pankso@16509 1253 return [ s for s in str.split(",") if len(s) > 0 ]
pankso@16509 1254
pankso@16509 1255
pankso@16509 1256 def IsLegal(env, option, values):
pankso@16509 1257 str = env[option]
pankso@16509 1258 for s in SplitList(str):
pankso@16509 1259 if not s in values:
pankso@16509 1260 Abort("Illegal value for option %s '%s'." % (option, s))
pankso@16509 1261 return False
pankso@16509 1262 return True
pankso@16509 1263
pankso@16509 1264
pankso@16509 1265 def WarnAboutDeprecation():
pankso@16509 1266 print """
pankso@16509 1267 #####################################################################
pankso@16509 1268 # #
pankso@16509 1269 # LAST WARNING: Building V8 with SCons is deprecated. #
pankso@16509 1270 # #
pankso@16509 1271 # This only works because you have overridden the kill switch. #
pankso@16509 1272 # #
pankso@16509 1273 # MIGRATE TO THE GYP-BASED BUILD NOW! #
pankso@16509 1274 # #
pankso@16509 1275 # Instructions: http://code.google.com/p/v8/wiki/BuildingWithGYP. #
pankso@16509 1276 # #
pankso@16509 1277 #####################################################################
pankso@16509 1278 """
pankso@16509 1279
pankso@16509 1280
pankso@16509 1281 def VerifyOptions(env):
pankso@16509 1282 if env['I_know_I_should_build_with_GYP'] != 'yes':
pankso@16509 1283 Abort("Building V8 with SCons is no longer supported. Please use GYP "
pankso@16509 1284 "instead; you can find instructions are at "
pankso@16509 1285 "http://code.google.com/p/v8/wiki/BuildingWithGYP.\n\n"
pankso@16509 1286 "Quitting.\n\n"
pankso@16509 1287 "For a limited grace period, you can specify "
pankso@16509 1288 "\"I_know_I_should_build_with_GYP=yes\" to override.")
pankso@16509 1289 else:
pankso@16509 1290 WarnAboutDeprecation()
pankso@16509 1291 import atexit
pankso@16509 1292 atexit.register(WarnAboutDeprecation)
pankso@16509 1293
pankso@16509 1294 if not IsLegal(env, 'mode', ['debug', 'release']):
pankso@16509 1295 return False
pankso@16509 1296 if not IsLegal(env, 'sample', ["shell", "process", "lineprocessor"]):
pankso@16509 1297 return False
pankso@16509 1298 if not IsLegal(env, 'regexp', ["native", "interpreted"]):
pankso@16509 1299 return False
pankso@16509 1300 if env['os'] == 'win32' and env['library'] == 'shared' and env['prof'] == 'on':
pankso@16509 1301 Abort("Profiling on windows only supported for static library.")
pankso@16509 1302 if env['gdbjit'] == 'on' and ((env['os'] != 'linux' and env['os'] != 'macos') or (env['arch'] != 'ia32' and env['arch'] != 'x64' and env['arch'] != 'arm')):
pankso@16509 1303 Abort("GDBJIT interface is supported only for Intel-compatible (ia32 or x64) Linux/OSX target.")
pankso@16509 1304 if env['os'] == 'win32' and env['soname'] == 'on':
pankso@16509 1305 Abort("Shared Object soname not applicable for Windows.")
pankso@16509 1306 if env['soname'] == 'on' and env['library'] == 'static':
pankso@16509 1307 Abort("Shared Object soname not applicable for static library.")
pankso@16509 1308 if env['os'] != 'win32' and env['pgo'] != 'off':
pankso@16509 1309 Abort("Profile guided optimization only supported on Windows.")
pankso@16509 1310 if env['cache'] and not os.path.isdir(env['cache']):
pankso@16509 1311 Abort("The specified cache directory does not exist.")
pankso@16509 1312 if not (env['arch'] == 'arm' or env['simulator'] == 'arm') and ('unalignedaccesses' in ARGUMENTS):
pankso@16509 1313 print env['arch']
pankso@16509 1314 print env['simulator']
pankso@16509 1315 Abort("Option unalignedaccesses only supported for the ARM architecture.")
pankso@16509 1316 if env['os'] != 'linux' and env['compress_startup_data'] != 'off':
pankso@16509 1317 Abort("Startup data compression is only available on Linux")
pankso@16509 1318 for (name, option) in ALL_OPTIONS.iteritems():
pankso@16509 1319 if (not name in env):
pankso@16509 1320 message = ("A value for option %s must be specified (%s)." %
pankso@16509 1321 (name, ", ".join(option['values'])))
pankso@16509 1322 Abort(message)
pankso@16509 1323 if not env[name] in option['values']:
pankso@16509 1324 message = ("Unknown %s value '%s'. Possible values are (%s)." %
pankso@16509 1325 (name, env[name], ", ".join(option['values'])))
pankso@16509 1326 Abort(message)
pankso@16509 1327
pankso@16509 1328
pankso@16509 1329 class BuildContext(object):
pankso@16509 1330
pankso@16509 1331 def __init__(self, options, env_overrides, samples):
pankso@16509 1332 self.library_targets = []
pankso@16509 1333 self.mksnapshot_targets = []
pankso@16509 1334 self.cctest_targets = []
pankso@16509 1335 self.sample_targets = []
pankso@16509 1336 self.d8_targets = []
pankso@16509 1337 self.options = options
pankso@16509 1338 self.env_overrides = env_overrides
pankso@16509 1339 self.samples = samples
pankso@16509 1340 self.preparser_targets = []
pankso@16509 1341 self.use_snapshot = (options['snapshot'] != 'off')
pankso@16509 1342 self.build_snapshot = (options['snapshot'] == 'on')
pankso@16509 1343 self.flags = None
pankso@16509 1344
pankso@16509 1345 def AddRelevantFlags(self, initial, flags):
pankso@16509 1346 result = initial.copy()
pankso@16509 1347 toolchain = self.options['toolchain']
pankso@16509 1348 if toolchain in flags:
pankso@16509 1349 self.AppendFlags(result, flags[toolchain].get('all'))
pankso@16509 1350 for option in sorted(self.options.keys()):
pankso@16509 1351 value = self.options[option]
pankso@16509 1352 self.AppendFlags(result, flags[toolchain].get(option + ':' + value))
pankso@16509 1353 self.AppendFlags(result, flags.get('all'))
pankso@16509 1354 return result
pankso@16509 1355
pankso@16509 1356 def AddRelevantSubFlags(self, options, flags):
pankso@16509 1357 self.AppendFlags(options, flags.get('all'))
pankso@16509 1358 for option in sorted(self.options.keys()):
pankso@16509 1359 value = self.options[option]
pankso@16509 1360 self.AppendFlags(options, flags.get(option + ':' + value))
pankso@16509 1361
pankso@16509 1362 def GetRelevantSources(self, source):
pankso@16509 1363 result = []
pankso@16509 1364 result += source.get('all', [])
pankso@16509 1365 for (name, value) in self.options.iteritems():
pankso@16509 1366 source_value = source.get(name + ':' + value, [])
pankso@16509 1367 if type(source_value) == dict:
pankso@16509 1368 result += self.GetRelevantSources(source_value)
pankso@16509 1369 else:
pankso@16509 1370 result += source_value
pankso@16509 1371 return sorted(result)
pankso@16509 1372
pankso@16509 1373 def AppendFlags(self, options, added):
pankso@16509 1374 if not added:
pankso@16509 1375 return
pankso@16509 1376 for (key, value) in added.iteritems():
pankso@16509 1377 if key.find(':') != -1:
pankso@16509 1378 self.AddRelevantSubFlags(options, { key: value })
pankso@16509 1379 else:
pankso@16509 1380 if not key in options:
pankso@16509 1381 options[key] = value
pankso@16509 1382 else:
pankso@16509 1383 prefix = options[key]
pankso@16509 1384 if isinstance(prefix, StringTypes): prefix = prefix.split()
pankso@16509 1385 options[key] = prefix + value
pankso@16509 1386
pankso@16509 1387 def ConfigureObject(self, env, input, **kw):
pankso@16509 1388 if (kw.has_key('CPPPATH') and env.has_key('CPPPATH')):
pankso@16509 1389 kw['CPPPATH'] += env['CPPPATH']
pankso@16509 1390 if self.options['library'] == 'static':
pankso@16509 1391 return env.StaticObject(input, **kw)
pankso@16509 1392 else:
pankso@16509 1393 return env.SharedObject(input, **kw)
pankso@16509 1394
pankso@16509 1395 def ApplyEnvOverrides(self, env):
pankso@16509 1396 if not self.env_overrides:
pankso@16509 1397 return
pankso@16509 1398 if type(env['ENV']) == DictType:
pankso@16509 1399 env['ENV'].update(**self.env_overrides)
pankso@16509 1400 else:
pankso@16509 1401 env['ENV'] = self.env_overrides
pankso@16509 1402
pankso@16509 1403
pankso@16509 1404 def PostprocessOptions(options, os):
pankso@16509 1405 # Adjust architecture if the simulator option has been set
pankso@16509 1406 if (options['simulator'] != 'none') and (options['arch'] != options['simulator']):
pankso@16509 1407 if 'arch' in ARGUMENTS:
pankso@16509 1408 # Print a warning if arch has explicitly been set
pankso@16509 1409 print "Warning: forcing architecture to match simulator (%s)" % options['simulator']
pankso@16509 1410 options['arch'] = options['simulator']
pankso@16509 1411 if (options['prof'] != 'off') and (options['profilingsupport'] == 'off'):
pankso@16509 1412 # Print a warning if profiling is enabled without profiling support
pankso@16509 1413 print "Warning: forcing profilingsupport on when prof is on"
pankso@16509 1414 options['profilingsupport'] = 'on'
pankso@16509 1415 if os == 'win32' and options['pgo'] != 'off' and options['msvcltcg'] == 'off':
pankso@16509 1416 if 'msvcltcg' in ARGUMENTS:
pankso@16509 1417 print "Warning: forcing msvcltcg on as it is required for pgo (%s)" % options['pgo']
pankso@16509 1418 options['msvcltcg'] = 'on'
pankso@16509 1419 if (options['mipsabi'] != 'none') and (options['arch'] != 'mips') and (options['simulator'] != 'mips'):
pankso@16509 1420 options['mipsabi'] = 'none'
pankso@16509 1421 if options['liveobjectlist'] == 'on':
pankso@16509 1422 if (options['debuggersupport'] != 'on') or (options['mode'] == 'release'):
pankso@16509 1423 # Print a warning that liveobjectlist will implicitly enable the debugger
pankso@16509 1424 print "Warning: forcing debuggersupport on for liveobjectlist"
pankso@16509 1425 options['debuggersupport'] = 'on'
pankso@16509 1426 options['inspector'] = 'on'
pankso@16509 1427 options['objectprint'] = 'on'
pankso@16509 1428
pankso@16509 1429
pankso@16509 1430 def ParseEnvOverrides(arg, imports):
pankso@16509 1431 # The environment overrides are in the format NAME0:value0,NAME1:value1,...
pankso@16509 1432 # The environment imports are in the format NAME0,NAME1,...
pankso@16509 1433 overrides = {}
pankso@16509 1434 for var in imports.split(','):
pankso@16509 1435 if var in os.environ:
pankso@16509 1436 overrides[var] = os.environ[var]
pankso@16509 1437 for override in arg.split(','):
pankso@16509 1438 pos = override.find(':')
pankso@16509 1439 if pos == -1:
pankso@16509 1440 continue
pankso@16509 1441 overrides[override[:pos].strip()] = override[pos+1:].strip()
pankso@16509 1442 return overrides
pankso@16509 1443
pankso@16509 1444
pankso@16509 1445 def BuildSpecific(env, mode, env_overrides, tools):
pankso@16509 1446 options = {'mode': mode}
pankso@16509 1447 for option in ALL_OPTIONS:
pankso@16509 1448 options[option] = env[option]
pankso@16509 1449 PostprocessOptions(options, env['os'])
pankso@16509 1450
pankso@16509 1451 context = BuildContext(options, env_overrides, samples=SplitList(env['sample']))
pankso@16509 1452
pankso@16509 1453 # Remove variables which can't be imported from the user's external
pankso@16509 1454 # environment into a construction environment.
pankso@16509 1455 user_environ = os.environ.copy()
pankso@16509 1456 try:
pankso@16509 1457 del user_environ['ENV']
pankso@16509 1458 except KeyError:
pankso@16509 1459 pass
pankso@16509 1460
pankso@16509 1461 library_flags = context.AddRelevantFlags(user_environ, LIBRARY_FLAGS)
pankso@16509 1462 v8_flags = context.AddRelevantFlags(library_flags, V8_EXTRA_FLAGS)
pankso@16509 1463 mksnapshot_flags = context.AddRelevantFlags(library_flags, MKSNAPSHOT_EXTRA_FLAGS)
pankso@16509 1464 dtoa_flags = context.AddRelevantFlags(library_flags, DTOA_EXTRA_FLAGS)
pankso@16509 1465 cctest_flags = context.AddRelevantFlags(v8_flags, CCTEST_EXTRA_FLAGS)
pankso@16509 1466 sample_flags = context.AddRelevantFlags(user_environ, SAMPLE_FLAGS)
pankso@16509 1467 preparser_flags = context.AddRelevantFlags(user_environ, PREPARSER_FLAGS)
pankso@16509 1468 d8_flags = context.AddRelevantFlags(library_flags, D8_FLAGS)
pankso@16509 1469
pankso@16509 1470 context.flags = {
pankso@16509 1471 'v8': v8_flags,
pankso@16509 1472 'mksnapshot': mksnapshot_flags,
pankso@16509 1473 'dtoa': dtoa_flags,
pankso@16509 1474 'cctest': cctest_flags,
pankso@16509 1475 'sample': sample_flags,
pankso@16509 1476 'd8': d8_flags,
pankso@16509 1477 'preparser': preparser_flags
pankso@16509 1478 }
pankso@16509 1479
pankso@16509 1480 # Generate library base name.
pankso@16509 1481 target_id = mode
pankso@16509 1482 suffix = SUFFIXES[target_id]
pankso@16509 1483 library_name = 'v8' + suffix
pankso@16509 1484 preparser_library_name = 'v8preparser' + suffix
pankso@16509 1485 version = GetVersion()
pankso@16509 1486 if context.options['soname'] == 'on':
pankso@16509 1487 # When building shared object with SONAME version the library name.
pankso@16509 1488 library_name += '-' + version
pankso@16509 1489
pankso@16509 1490 # Generate library SONAME if required by the build.
pankso@16509 1491 if context.options['soname'] == 'on':
pankso@16509 1492 soname = GetSpecificSONAME()
pankso@16509 1493 if soname == '':
pankso@16509 1494 soname = 'lib' + library_name + '.so'
pankso@16509 1495 env['SONAME'] = soname
pankso@16509 1496
pankso@16509 1497 # Build the object files by invoking SCons recursively.
pankso@16509 1498 d8_env = Environment(tools=tools)
pankso@16509 1499 d8_env.Replace(**context.flags['d8'])
pankso@16509 1500 (object_files, shell_files, mksnapshot, preparser_files) = env.SConscript(
pankso@16509 1501 join('src', 'SConscript'),
pankso@16509 1502 build_dir=join('obj', target_id),
pankso@16509 1503 exports='context tools d8_env',
pankso@16509 1504 duplicate=False
pankso@16509 1505 )
pankso@16509 1506
pankso@16509 1507 context.mksnapshot_targets.append(mksnapshot)
pankso@16509 1508
pankso@16509 1509 # Link the object files into a library.
pankso@16509 1510 env.Replace(**context.flags['v8'])
pankso@16509 1511
pankso@16509 1512 context.ApplyEnvOverrides(env)
pankso@16509 1513 if context.options['library'] == 'static':
pankso@16509 1514 library = env.StaticLibrary(library_name, object_files)
pankso@16509 1515 preparser_library = env.StaticLibrary(preparser_library_name,
pankso@16509 1516 preparser_files)
pankso@16509 1517 else:
pankso@16509 1518 # There seems to be a glitch in the way scons decides where to put
pankso@16509 1519 # PDB files when compiling using MSVC so we specify it manually.
pankso@16509 1520 # This should not affect any other platforms.
pankso@16509 1521 pdb_name = library_name + '.dll.pdb'
pankso@16509 1522 library = env.SharedLibrary(library_name, object_files, PDB=pdb_name)
pankso@16509 1523 preparser_pdb_name = preparser_library_name + '.dll.pdb';
pankso@16509 1524 preparser_soname = 'lib' + preparser_library_name + '.so';
pankso@16509 1525 preparser_library = env.SharedLibrary(preparser_library_name,
pankso@16509 1526 preparser_files,
pankso@16509 1527 PDB=preparser_pdb_name,
pankso@16509 1528 SONAME=preparser_soname)
pankso@16509 1529 context.library_targets.append(library)
pankso@16509 1530 context.library_targets.append(preparser_library)
pankso@16509 1531
pankso@16509 1532 context.ApplyEnvOverrides(d8_env)
pankso@16509 1533 if context.options['library'] == 'static':
pankso@16509 1534 shell = d8_env.Program('d8' + suffix, object_files + shell_files)
pankso@16509 1535 else:
pankso@16509 1536 shell = d8_env.Program('d8' + suffix, shell_files)
pankso@16509 1537 d8_env.Depends(shell, library)
pankso@16509 1538 context.d8_targets.append(shell)
pankso@16509 1539
pankso@16509 1540 for sample in context.samples:
pankso@16509 1541 sample_env = Environment(tools=tools)
pankso@16509 1542 sample_env.Replace(**context.flags['sample'])
pankso@16509 1543 sample_env.Prepend(LIBS=[library_name])
pankso@16509 1544 context.ApplyEnvOverrides(sample_env)
pankso@16509 1545 sample_object = sample_env.SConscript(
pankso@16509 1546 join('samples', 'SConscript'),
pankso@16509 1547 build_dir=join('obj', 'sample', sample, target_id),
pankso@16509 1548 exports='sample context tools',
pankso@16509 1549 duplicate=False
pankso@16509 1550 )
pankso@16509 1551 sample_name = sample + suffix
pankso@16509 1552 sample_program = sample_env.Program(sample_name, sample_object)
pankso@16509 1553 sample_env.Depends(sample_program, library)
pankso@16509 1554 context.sample_targets.append(sample_program)
pankso@16509 1555
pankso@16509 1556 cctest_env = env.Copy()
pankso@16509 1557 cctest_env.Prepend(LIBS=[library_name])
pankso@16509 1558 cctest_program = cctest_env.SConscript(
pankso@16509 1559 join('test', 'cctest', 'SConscript'),
pankso@16509 1560 build_dir=join('obj', 'test', target_id),
pankso@16509 1561 exports='context object_files tools',
pankso@16509 1562 duplicate=False
pankso@16509 1563 )
pankso@16509 1564 context.cctest_targets.append(cctest_program)
pankso@16509 1565
pankso@16509 1566 preparser_env = env.Copy()
pankso@16509 1567 preparser_env.Replace(**context.flags['preparser'])
pankso@16509 1568 preparser_env.Prepend(LIBS=[preparser_library_name])
pankso@16509 1569 context.ApplyEnvOverrides(preparser_env)
pankso@16509 1570 preparser_object = preparser_env.SConscript(
pankso@16509 1571 join('preparser', 'SConscript'),
pankso@16509 1572 build_dir=join('obj', 'preparser', target_id),
pankso@16509 1573 exports='context tools',
pankso@16509 1574 duplicate=False
pankso@16509 1575 )
pankso@16509 1576 preparser_name = join('obj', 'preparser', target_id, 'preparser')
pankso@16509 1577 preparser_program = preparser_env.Program(preparser_name, preparser_object);
pankso@16509 1578 preparser_env.Depends(preparser_program, preparser_library)
pankso@16509 1579 context.preparser_targets.append(preparser_program)
pankso@16509 1580
pankso@16509 1581 return context
pankso@16509 1582
pankso@16509 1583
pankso@16509 1584 def Build():
pankso@16509 1585 opts = GetOptions()
pankso@16509 1586 tools = GetTools(opts)
pankso@16509 1587 env = Environment(options=opts, tools=tools)
pankso@16509 1588
pankso@16509 1589 Help(opts.GenerateHelpText(env))
pankso@16509 1590 VerifyOptions(env)
pankso@16509 1591 env_overrides = ParseEnvOverrides(env['env'], env['importenv'])
pankso@16509 1592
pankso@16509 1593 SourceSignatures(env['sourcesignatures'])
pankso@16509 1594
pankso@16509 1595 libraries = []
pankso@16509 1596 mksnapshots = []
pankso@16509 1597 cctests = []
pankso@16509 1598 samples = []
pankso@16509 1599 preparsers = []
pankso@16509 1600 d8s = []
pankso@16509 1601 modes = SplitList(env['mode'])
pankso@16509 1602 for mode in modes:
pankso@16509 1603 context = BuildSpecific(env.Copy(), mode, env_overrides, tools)
pankso@16509 1604 libraries += context.library_targets
pankso@16509 1605 mksnapshots += context.mksnapshot_targets
pankso@16509 1606 cctests += context.cctest_targets
pankso@16509 1607 samples += context.sample_targets
pankso@16509 1608 preparsers += context.preparser_targets
pankso@16509 1609 d8s += context.d8_targets
pankso@16509 1610
pankso@16509 1611 env.Alias('library', libraries)
pankso@16509 1612 env.Alias('mksnapshot', mksnapshots)
pankso@16509 1613 env.Alias('cctests', cctests)
pankso@16509 1614 env.Alias('sample', samples)
pankso@16509 1615 env.Alias('d8', d8s)
pankso@16509 1616 env.Alias('preparser', preparsers)
pankso@16509 1617
pankso@16509 1618 if env['sample']:
pankso@16509 1619 env.Default('sample')
pankso@16509 1620 else:
pankso@16509 1621 env.Default('library')
pankso@16509 1622
pankso@16509 1623 if env['cache']:
pankso@16509 1624 CacheDir(env['cache'])
pankso@16509 1625
pankso@16509 1626 # We disable deprecation warnings because we need to be able to use
pankso@16509 1627 # env.Copy without getting warnings for compatibility with older
pankso@16509 1628 # version of scons. Also, there's a bug in some revisions that
pankso@16509 1629 # doesn't allow this flag to be set, so we swallow any exceptions.
pankso@16509 1630 # Lovely.
pankso@16509 1631 try:
pankso@16509 1632 SetOption('warn', 'no-deprecated')
pankso@16509 1633 except:
pankso@16509 1634 pass
pankso@16509 1635
pankso@16509 1636 Build()