wok-current rev 16509

mpg123: up to (1.19.0) with better ARM support
author Christophe Lincoln <pankso@slitaz.org>
date Thu Apr 24 18:16:37 2014 +0200 (2014-04-24)
parents 9f3a7907cf0c
children cbb88e362894
files mpg123-dev/receipt mpg123/receipt node/receipt node/stuff/SConstruct node/stuff/SConstruct.patch
line diff
     1.1 --- a/mpg123-dev/receipt	Thu Apr 24 15:10:41 2014 +0000
     1.2 +++ b/mpg123-dev/receipt	Thu Apr 24 18:16:37 2014 +0200
     1.3 @@ -1,7 +1,7 @@
     1.4  # SliTaz package receipt.
     1.5  
     1.6  PACKAGE="mpg123-dev"
     1.7 -VERSION="1.18.1"
     1.8 +VERSION="1.19.0"
     1.9  CATEGORY="development"
    1.10  SHORT_DESC="mpg123 development files"
    1.11  MAINTAINER="devl547@gmail.com"
     2.1 --- a/mpg123/receipt	Thu Apr 24 15:10:41 2014 +0000
     2.2 +++ b/mpg123/receipt	Thu Apr 24 18:16:37 2014 +0200
     2.3 @@ -1,7 +1,7 @@
     2.4  # SliTaz package receipt.
     2.5  
     2.6  PACKAGE="mpg123"
     2.7 -VERSION="1.18.1"
     2.8 +VERSION="1.19.0"
     2.9  CATEGORY="multimedia"
    2.10  SHORT_DESC="Command line audio player and streamer"
    2.11  MAINTAINER="pankso@slitaz.org"
    2.12 @@ -25,9 +25,8 @@
    2.13  {
    2.14  	./configure \
    2.15  		--with-default-audio=alsa \
    2.16 -		--with-audio="alsa" \
    2.17  		$CONFIGURE_ARGS ${ARCH_ARGS} &&
    2.18 -	make && make install
    2.19 +	make CFLAGS="-I/cross/arm/sysroot/usr/include" && make install
    2.20  }
    2.21  
    2.22  # Rules to gen a SliTaz package suitable for Tazpkg.
     3.1 --- a/node/receipt	Thu Apr 24 15:10:41 2014 +0000
     3.2 +++ b/node/receipt	Thu Apr 24 18:16:37 2014 +0200
     3.3 @@ -9,6 +9,7 @@
     3.4  TARBALL="$PACKAGE-v$VERSION.tar.gz"
     3.5  WEB_SITE="http://nodejs.org/"
     3.6  WGET_URL="http://nodejs.org/dist/v$VERSION/$TARBALL"
     3.7 +#HOST_ARCH="i486 arm"
     3.8  
     3.9  DEPENDS="python libssl"
    3.10  BUILD_DEPENDS="python-dev openssl-dev"
    3.11 @@ -16,7 +17,7 @@
    3.12  # Rules to configure and make the package.
    3.13  compile_rules()
    3.14  {
    3.15 -	cd $src
    3.16 +	#patch -p0 < ${stuff}/SConstruct.patch || return 1
    3.17  	./configure --prefix=/usr &&
    3.18  	make && make install
    3.19  }
     4.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.2 +++ b/node/stuff/SConstruct	Thu Apr 24 18:16:37 2014 +0200
     4.3 @@ -0,0 +1,1636 @@
     4.4 +# Copyright 2012 the V8 project authors. All rights reserved.
     4.5 +# Redistribution and use in source and binary forms, with or without
     4.6 +# modification, are permitted provided that the following conditions are
     4.7 +# met:
     4.8 +#
     4.9 +#     * Redistributions of source code must retain the above copyright
    4.10 +#       notice, this list of conditions and the following disclaimer.
    4.11 +#     * Redistributions in binary form must reproduce the above
    4.12 +#       copyright notice, this list of conditions and the following
    4.13 +#       disclaimer in the documentation and/or other materials provided
    4.14 +#       with the distribution.
    4.15 +#     * Neither the name of Google Inc. nor the names of its
    4.16 +#       contributors may be used to endorse or promote products derived
    4.17 +#       from this software without specific prior written permission.
    4.18 +#
    4.19 +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    4.20 +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    4.21 +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    4.22 +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    4.23 +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    4.24 +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    4.25 +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    4.26 +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    4.27 +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    4.28 +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    4.29 +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    4.30 +
    4.31 +import platform
    4.32 +import re
    4.33 +import subprocess
    4.34 +import sys
    4.35 +import os
    4.36 +from os.path import join, dirname, abspath
    4.37 +from types import DictType, StringTypes
    4.38 +root_dir = dirname(File('SConstruct').rfile().abspath)
    4.39 +src_dir = join(root_dir, 'src')
    4.40 +sys.path.insert(0, join(root_dir, 'tools'))
    4.41 +import js2c, utils
    4.42 +
    4.43 +# ARM_TARGET_LIB is the path to the dynamic library to use on the target
    4.44 +# machine if cross-compiling to an arm machine. You will also need to set
    4.45 +# the additional cross-compiling environment variables to the cross compiler.
    4.46 +ARM_TARGET_LIB = os.environ.get('ARM_TARGET_LIB')
    4.47 +if ARM_TARGET_LIB:
    4.48 +  ARM_LINK_FLAGS = ['-Wl,-rpath=' + ARM_TARGET_LIB + '/lib:' +
    4.49 +                     ARM_TARGET_LIB + '/usr/lib',
    4.50 +                    '-Wl,--dynamic-linker=' + ARM_TARGET_LIB +
    4.51 +                    '/lib/ld-linux.so.3']
    4.52 +else:
    4.53 +  ARM_LINK_FLAGS = []
    4.54 +
    4.55 +GCC_EXTRA_CCFLAGS = []
    4.56 +GCC_DTOA_EXTRA_CCFLAGS = []
    4.57 +
    4.58 +LIBRARY_FLAGS = {
    4.59 +  'all': {
    4.60 +    'CPPPATH': [src_dir],
    4.61 +    'regexp:interpreted': {
    4.62 +      'CPPDEFINES': ['V8_INTERPRETED_REGEXP']
    4.63 +    },
    4.64 +    'mode:debug': {
    4.65 +      'CPPDEFINES': ['V8_ENABLE_CHECKS', 'OBJECT_PRINT', 'VERIFY_HEAP']
    4.66 +    },
    4.67 +    'objectprint:on': {
    4.68 +      'CPPDEFINES':   ['OBJECT_PRINT'],
    4.69 +    },
    4.70 +    'debuggersupport:on': {
    4.71 +      'CPPDEFINES':   ['ENABLE_DEBUGGER_SUPPORT'],
    4.72 +    },
    4.73 +    'inspector:on': {
    4.74 +      'CPPDEFINES':   ['INSPECTOR'],
    4.75 +    },
    4.76 +    'fasttls:off': {
    4.77 +      'CPPDEFINES':   ['V8_NO_FAST_TLS'],
    4.78 +    },
    4.79 +    'liveobjectlist:on': {
    4.80 +      'CPPDEFINES':   ['ENABLE_DEBUGGER_SUPPORT', 'INSPECTOR',
    4.81 +                       'LIVE_OBJECT_LIST', 'OBJECT_PRINT'],
    4.82 +    }
    4.83 +  },
    4.84 +  'gcc': {
    4.85 +    'all': {
    4.86 +      'CCFLAGS':      ['$DIALECTFLAGS', '$WARNINGFLAGS', '-march=armv6'],
    4.87 +      'CXXFLAGS':     ['-fno-rtti', '-fno-exceptions', '-march=armv6'],
    4.88 +    },
    4.89 +    'visibility:hidden': {
    4.90 +      # Use visibility=default to disable this.
    4.91 +      'CXXFLAGS':     ['-fvisibility=hidden']
    4.92 +    },
    4.93 +    'strictaliasing:off': {
    4.94 +      'CCFLAGS':      ['-fno-strict-aliasing']
    4.95 +    },
    4.96 +    'mode:debug': {
    4.97 +      'CCFLAGS':      ['-g', '-O0'],
    4.98 +      'CPPDEFINES':   ['ENABLE_DISASSEMBLER', 'DEBUG'],
    4.99 +    },
   4.100 +    'mode:release': {
   4.101 +      'CCFLAGS':      ['-O3', '-fomit-frame-pointer', '-fdata-sections',
   4.102 +                       '-ffunction-sections'],
   4.103 +    },
   4.104 +    'os:linux': {
   4.105 +      'CCFLAGS':      ['-ansi'] + GCC_EXTRA_CCFLAGS,
   4.106 +      'library:shared': {
   4.107 +        'CPPDEFINES': ['V8_SHARED', 'BUILDING_V8_SHARED'],
   4.108 +        'LIBS': ['pthread']
   4.109 +      }
   4.110 +    },
   4.111 +    'os:macos': {
   4.112 +      'CCFLAGS':      ['-ansi', '-mmacosx-version-min=10.4'],
   4.113 +      'library:shared': {
   4.114 +        'CPPDEFINES': ['V8_SHARED', 'BUILDING_V8_SHARED'],
   4.115 +      }
   4.116 +    },
   4.117 +    'os:freebsd': {
   4.118 +      'CPPPATH' : [src_dir, '/usr/local/include'],
   4.119 +      'LIBPATH' : ['/usr/local/lib'],
   4.120 +      'CCFLAGS':      ['-ansi'],
   4.121 +      'LIBS': ['execinfo']
   4.122 +    },
   4.123 +    'os:openbsd': {
   4.124 +      'CPPPATH' : [src_dir, '/usr/local/include'],
   4.125 +      'LIBPATH' : ['/usr/local/lib'],
   4.126 +      'CCFLAGS':      ['-ansi'],
   4.127 +    },
   4.128 +    'os:solaris': {
   4.129 +      # On Solaris, to get isinf, INFINITY, fpclassify and other macros one
   4.130 +      # needs to define __C99FEATURES__.
   4.131 +      'CPPDEFINES': ['__C99FEATURES__'],
   4.132 +      'CPPPATH' : [src_dir, '/usr/local/include'],
   4.133 +      'LIBPATH' : ['/usr/local/lib'],
   4.134 +      'CCFLAGS':      ['-ansi'],
   4.135 +    },
   4.136 +    'os:netbsd': {
   4.137 +      'CPPPATH' : [src_dir, '/usr/pkg/include'],
   4.138 +      'LIBPATH' : ['/usr/pkg/lib'],
   4.139 +    },
   4.140 +    'os:win32': {
   4.141 +      'CCFLAGS':      ['-DWIN32'],
   4.142 +      'CXXFLAGS':     ['-DWIN32'],
   4.143 +    },
   4.144 +    'arch:ia32': {
   4.145 +      'CPPDEFINES':   ['V8_TARGET_ARCH_IA32'],
   4.146 +      'CCFLAGS':      ['-m32'],
   4.147 +      'LINKFLAGS':    ['-m32']
   4.148 +    },
   4.149 +    'arch:arm': {
   4.150 +      'CPPDEFINES':   ['V8_TARGET_ARCH_ARM'],
   4.151 +      'unalignedaccesses:on' : {
   4.152 +        'CPPDEFINES' : ['CAN_USE_UNALIGNED_ACCESSES=1']
   4.153 +      },
   4.154 +      'unalignedaccesses:off' : {
   4.155 +        'CPPDEFINES' : ['CAN_USE_UNALIGNED_ACCESSES=0']
   4.156 +      },
   4.157 +      'armeabi:soft' : {
   4.158 +        'CPPDEFINES' : ['USE_EABI_HARDFLOAT=0'],
   4.159 +        'simulator:none': {
   4.160 +          'CCFLAGS':     ['-mfloat-abi=soft'],
   4.161 +        }
   4.162 +      },
   4.163 +      'armeabi:softfp' : {
   4.164 +        'CPPDEFINES' : ['USE_EABI_HARDFLOAT=0'],
   4.165 +        'vfp3:on': {
   4.166 +          'CPPDEFINES' : ['CAN_USE_VFP_INSTRUCTIONS']
   4.167 +        },
   4.168 +        'simulator:none': {
   4.169 +          'CCFLAGS':     ['-mfloat-abi=softfp'],
   4.170 +        }
   4.171 +      },
   4.172 +      'armeabi:hard' : {
   4.173 +        'CPPDEFINES' : ['USE_EABI_HARDFLOAT=1'],
   4.174 +        'vfp3:on': {
   4.175 +          'CPPDEFINES' : ['CAN_USE_VFP_INSTRUCTIONS']
   4.176 +        },
   4.177 +        'simulator:none': {
   4.178 +          'CCFLAGS':     ['-mfloat-abi=hard'],
   4.179 +        }
   4.180 +      }
   4.181 +    },
   4.182 +    'simulator:arm': {
   4.183 +      'CCFLAGS':      ['-m32'],
   4.184 +      'LINKFLAGS':    ['-m32'],
   4.185 +    },
   4.186 +    'arch:mips': {
   4.187 +      'CPPDEFINES':   ['V8_TARGET_ARCH_MIPS'],
   4.188 +      'mips_arch_variant:mips32r2': {
   4.189 +        'CPPDEFINES':    ['_MIPS_ARCH_MIPS32R2']
   4.190 +      },
   4.191 +      'mips_arch_variant:loongson': {
   4.192 +        'CPPDEFINES':    ['_MIPS_ARCH_LOONGSON']
   4.193 +      },
   4.194 +      'simulator:none': {
   4.195 +        'CCFLAGS':      ['-EL'],
   4.196 +        'LINKFLAGS':    ['-EL'],
   4.197 +        'mips_arch_variant:mips32r2': {
   4.198 +          'CCFLAGS':      ['-mips32r2', '-Wa,-mips32r2']
   4.199 +        },
   4.200 +        'mips_arch_variant:mips32r1': {
   4.201 +          'CCFLAGS':      ['-mips32', '-Wa,-mips32']
   4.202 +        },
   4.203 +        'mips_arch_variant:loongson': {
   4.204 +          'CCFLAGS':      ['-march=mips3', '-Wa,-march=mips3']
   4.205 +        },
   4.206 +        'library:static': {
   4.207 +          'LINKFLAGS':    ['-static', '-static-libgcc']
   4.208 +        },
   4.209 +        'mipsabi:softfloat': {
   4.210 +          'CCFLAGS':      ['-msoft-float'],
   4.211 +          'LINKFLAGS':    ['-msoft-float']
   4.212 +        },
   4.213 +        'mipsabi:hardfloat': {
   4.214 +          'CCFLAGS':      ['-mhard-float'],
   4.215 +          'LINKFLAGS':    ['-mhard-float']
   4.216 +        }
   4.217 +      }
   4.218 +    },
   4.219 +    'simulator:mips': {
   4.220 +      'CCFLAGS':      ['-m32'],
   4.221 +      'LINKFLAGS':    ['-m32'],
   4.222 +      'mipsabi:softfloat': {
   4.223 +        'CPPDEFINES':    ['__mips_soft_float=1'],
   4.224 +        'fpu:on': {
   4.225 +          'CPPDEFINES' : ['CAN_USE_FPU_INSTRUCTIONS']
   4.226 +        }
   4.227 +      },
   4.228 +      'mipsabi:hardfloat': {
   4.229 +        'CPPDEFINES':    ['__mips_hard_float=1', 'CAN_USE_FPU_INSTRUCTIONS'],
   4.230 +      }
   4.231 +    },
   4.232 +    'arch:x64': {
   4.233 +      'CPPDEFINES':   ['V8_TARGET_ARCH_X64'],
   4.234 +      'CCFLAGS':      ['-m64'],
   4.235 +      'LINKFLAGS':    ['-m64'],
   4.236 +    },
   4.237 +    'gdbjit:on': {
   4.238 +      'CPPDEFINES':   ['ENABLE_GDB_JIT_INTERFACE']
   4.239 +    },
   4.240 +    'compress_startup_data:bz2': {
   4.241 +      'CPPDEFINES':   ['COMPRESS_STARTUP_DATA_BZ2']
   4.242 +    }
   4.243 +  },
   4.244 +  'msvc': {
   4.245 +    'all': {
   4.246 +      'CCFLAGS':      ['$DIALECTFLAGS', '$WARNINGFLAGS'],
   4.247 +      'CXXFLAGS':     ['/GR-', '/Gy'],
   4.248 +      'CPPDEFINES':   ['WIN32'],
   4.249 +      'LINKFLAGS':    ['/INCREMENTAL:NO', '/NXCOMPAT', '/IGNORE:4221'],
   4.250 +      'CCPDBFLAGS':   ['/Zi']
   4.251 +    },
   4.252 +    'verbose:off': {
   4.253 +      'DIALECTFLAGS': ['/nologo'],
   4.254 +      'ARFLAGS':      ['/NOLOGO']
   4.255 +    },
   4.256 +    'arch:ia32': {
   4.257 +      'CPPDEFINES':   ['V8_TARGET_ARCH_IA32', '_USE_32BIT_TIME_T'],
   4.258 +      'LINKFLAGS':    ['/MACHINE:X86'],
   4.259 +      'ARFLAGS':      ['/MACHINE:X86']
   4.260 +    },
   4.261 +    'arch:x64': {
   4.262 +      'CPPDEFINES':   ['V8_TARGET_ARCH_X64'],
   4.263 +      'LINKFLAGS':    ['/MACHINE:X64'],
   4.264 +      'ARFLAGS':      ['/MACHINE:X64']
   4.265 +    },
   4.266 +    'mode:debug': {
   4.267 +      'CCFLAGS':      ['/Od', '/Gm'],
   4.268 +      'CPPDEFINES':   ['_DEBUG', 'ENABLE_DISASSEMBLER', 'DEBUG'],
   4.269 +      'LINKFLAGS':    ['/DEBUG'],
   4.270 +      'msvcrt:static': {
   4.271 +        'CCFLAGS': ['/MTd']
   4.272 +      },
   4.273 +      'msvcrt:shared': {
   4.274 +        'CCFLAGS': ['/MDd']
   4.275 +      }
   4.276 +    },
   4.277 +    'mode:release': {
   4.278 +      'CCFLAGS':      ['/O2'],
   4.279 +      'LINKFLAGS':    ['/OPT:REF', '/OPT:ICF'],
   4.280 +      'msvcrt:static': {
   4.281 +        'CCFLAGS': ['/MT']
   4.282 +      },
   4.283 +      'msvcrt:shared': {
   4.284 +        'CCFLAGS': ['/MD']
   4.285 +      },
   4.286 +      'msvcltcg:on': {
   4.287 +        'CCFLAGS':      ['/GL'],
   4.288 +        'ARFLAGS':      ['/LTCG'],
   4.289 +        'pgo:off': {
   4.290 +          'LINKFLAGS':    ['/LTCG'],
   4.291 +        },
   4.292 +        'pgo:instrument': {
   4.293 +          'LINKFLAGS':    ['/LTCG:PGI']
   4.294 +        },
   4.295 +        'pgo:optimize': {
   4.296 +          'LINKFLAGS':    ['/LTCG:PGO']
   4.297 +        }
   4.298 +      }
   4.299 +    }
   4.300 +  }
   4.301 +}
   4.302 +
   4.303 +
   4.304 +V8_EXTRA_FLAGS = {
   4.305 +  'gcc': {
   4.306 +    'all': {
   4.307 +      'WARNINGFLAGS': ['-Wall',
   4.308 +                       '-Werror',
   4.309 +                       '-W',
   4.310 +                       '-Wno-unused-parameter',
   4.311 +                       '-Woverloaded-virtual',
   4.312 +                       '-Wnon-virtual-dtor']
   4.313 +    },
   4.314 +    'os:win32': {
   4.315 +      'WARNINGFLAGS': ['-pedantic',
   4.316 +                       '-Wno-long-long',
   4.317 +                       '-Wno-pedantic-ms-format'],
   4.318 +      'library:shared': {
   4.319 +        'LIBS': ['winmm', 'ws2_32']
   4.320 +      }
   4.321 +    },
   4.322 +    'os:linux': {
   4.323 +      'WARNINGFLAGS': ['-pedantic'],
   4.324 +      'library:shared': {
   4.325 +        'soname:on': {
   4.326 +          'LINKFLAGS': ['-Wl,-soname,${SONAME}']
   4.327 +        }
   4.328 +      }
   4.329 +    },
   4.330 +    'os:macos': {
   4.331 +      'WARNINGFLAGS': ['-pedantic']
   4.332 +    },
   4.333 +    'arch:arm': {
   4.334 +      # This is to silence warnings about ABI changes that some versions of the
   4.335 +      # CodeSourcery G++ tool chain produce for each occurrence of varargs.
   4.336 +      'WARNINGFLAGS': ['-Wno-abi']
   4.337 +    },
   4.338 +    'disassembler:on': {
   4.339 +      'CPPDEFINES':   ['ENABLE_DISASSEMBLER']
   4.340 +    }
   4.341 +  },
   4.342 +  'msvc': {
   4.343 +    'all': {
   4.344 +      'WARNINGFLAGS': ['/W3', '/WX', '/wd4351', '/wd4355', '/wd4800']
   4.345 +    },
   4.346 +    'library:shared': {
   4.347 +      'CPPDEFINES': ['BUILDING_V8_SHARED'],
   4.348 +      'LIBS': ['winmm', 'ws2_32']
   4.349 +    },
   4.350 +    'arch:arm': {
   4.351 +      'CPPDEFINES':   ['V8_TARGET_ARCH_ARM'],
   4.352 +      # /wd4996 is to silence the warning about sscanf
   4.353 +      # used by the arm simulator.
   4.354 +      'WARNINGFLAGS': ['/wd4996']
   4.355 +    },
   4.356 +    'arch:mips': {
   4.357 +      'CPPDEFINES':   ['V8_TARGET_ARCH_MIPS'],
   4.358 +      'mips_arch_variant:mips32r2': {
   4.359 +        'CPPDEFINES':    ['_MIPS_ARCH_MIPS32R2']
   4.360 +      },
   4.361 +    },
   4.362 +    'disassembler:on': {
   4.363 +      'CPPDEFINES':   ['ENABLE_DISASSEMBLER']
   4.364 +    }
   4.365 +  }
   4.366 +}
   4.367 +
   4.368 +
   4.369 +MKSNAPSHOT_EXTRA_FLAGS = {
   4.370 +  'gcc': {
   4.371 +    'os:linux': {
   4.372 +      'LIBS': ['pthread'],
   4.373 +    },
   4.374 +    'os:macos': {
   4.375 +      'LIBS': ['pthread'],
   4.376 +    },
   4.377 +    'os:freebsd': {
   4.378 +      'LIBS': ['execinfo', 'pthread']
   4.379 +    },
   4.380 +    'os:solaris': {
   4.381 +      'LIBS': ['m', 'pthread', 'socket', 'nsl', 'rt'],
   4.382 +      'LINKFLAGS': ['-mt']
   4.383 +    },
   4.384 +    'os:openbsd': {
   4.385 +      'LIBS': ['execinfo', 'pthread']
   4.386 +    },
   4.387 +    'os:win32': {
   4.388 +      'LIBS': ['winmm', 'ws2_32'],
   4.389 +    },
   4.390 +    'os:netbsd': {
   4.391 +      'LIBS': ['execinfo', 'pthread']
   4.392 +    },
   4.393 +    'compress_startup_data:bz2': {
   4.394 +      'os:linux': {
   4.395 +        'LIBS': ['bz2']
   4.396 +      }
   4.397 +    },
   4.398 +  },
   4.399 +  'msvc': {
   4.400 +    'all': {
   4.401 +      'CPPDEFINES': ['_HAS_EXCEPTIONS=0'],
   4.402 +      'LIBS': ['winmm', 'ws2_32']
   4.403 +    }
   4.404 +  }
   4.405 +}
   4.406 +
   4.407 +
   4.408 +DTOA_EXTRA_FLAGS = {
   4.409 +  'gcc': {
   4.410 +    'all': {
   4.411 +      'WARNINGFLAGS': ['-Werror', '-Wno-uninitialized'],
   4.412 +      'CCFLAGS': GCC_DTOA_EXTRA_CCFLAGS
   4.413 +    }
   4.414 +  },
   4.415 +  'msvc': {
   4.416 +    'all': {
   4.417 +      'WARNINGFLAGS': ['/WX', '/wd4018', '/wd4244']
   4.418 +    }
   4.419 +  }
   4.420 +}
   4.421 +
   4.422 +
   4.423 +CCTEST_EXTRA_FLAGS = {
   4.424 +  'all': {
   4.425 +    'CPPPATH': [src_dir],
   4.426 +    'library:shared': {
   4.427 +      'CPPDEFINES': ['USING_V8_SHARED']
   4.428 +    },
   4.429 +  },
   4.430 +  'gcc': {
   4.431 +    'all': {
   4.432 +      'LIBPATH':      [abspath('.')],
   4.433 +      'CCFLAGS':      ['$DIALECTFLAGS', '$WARNINGFLAGS'],
   4.434 +      'CXXFLAGS':     ['-fno-rtti', '-fno-exceptions'],
   4.435 +      'LINKFLAGS':    ['$CCFLAGS'],
   4.436 +    },
   4.437 +    'os:linux': {
   4.438 +      'LIBS':         ['pthread'],
   4.439 +      'CCFLAGS':      ['-Wno-unused-but-set-variable'],
   4.440 +    },
   4.441 +    'os:macos': {
   4.442 +      'LIBS':         ['pthread'],
   4.443 +    },
   4.444 +    'os:freebsd': {
   4.445 +      'LIBS':         ['execinfo', 'pthread']
   4.446 +    },
   4.447 +    'os:solaris': {
   4.448 +      'LIBS':         ['m', 'pthread', 'socket', 'nsl', 'rt'],
   4.449 +      'LINKFLAGS':    ['-mt']
   4.450 +    },
   4.451 +    'os:openbsd': {
   4.452 +      'LIBS':         ['execinfo', 'pthread']
   4.453 +    },
   4.454 +    'os:win32': {
   4.455 +      'LIBS': ['winmm', 'ws2_32']
   4.456 +    },
   4.457 +    'os:netbsd': {
   4.458 +      'LIBS':         ['execinfo', 'pthread']
   4.459 +    },
   4.460 +    'arch:arm': {
   4.461 +      'LINKFLAGS':   ARM_LINK_FLAGS
   4.462 +    },
   4.463 +  },
   4.464 +  'msvc': {
   4.465 +    'all': {
   4.466 +      'CPPDEFINES': ['_HAS_EXCEPTIONS=0'],
   4.467 +      'LIBS': ['winmm', 'ws2_32']
   4.468 +    },
   4.469 +    'arch:ia32': {
   4.470 +      'CPPDEFINES': ['V8_TARGET_ARCH_IA32']
   4.471 +    },
   4.472 +    'arch:x64': {
   4.473 +      'CPPDEFINES':   ['V8_TARGET_ARCH_X64'],
   4.474 +      'LINKFLAGS': ['/STACK:2097152']
   4.475 +    },
   4.476 +  }
   4.477 +}
   4.478 +
   4.479 +
   4.480 +SAMPLE_FLAGS = {
   4.481 +  'all': {
   4.482 +    'CPPPATH': [join(root_dir, 'include')],
   4.483 +    'library:shared': {
   4.484 +      'CPPDEFINES': ['USING_V8_SHARED']
   4.485 +    },
   4.486 +  },
   4.487 +  'gcc': {
   4.488 +    'all': {
   4.489 +      'LIBPATH':      ['.'],
   4.490 +      'CCFLAGS':      ['$DIALECTFLAGS', '$WARNINGFLAGS'],
   4.491 +      'CXXFLAGS':     ['-fno-rtti', '-fno-exceptions'],
   4.492 +      'LINKFLAGS':    ['$CCFLAGS'],
   4.493 +    },
   4.494 +    'os:linux': {
   4.495 +      'LIBS':         ['pthread'],
   4.496 +    },
   4.497 +    'os:macos': {
   4.498 +      'LIBS':         ['pthread'],
   4.499 +    },
   4.500 +    'os:freebsd': {
   4.501 +      'LIBPATH' :     ['/usr/local/lib'],
   4.502 +      'LIBS':         ['execinfo', 'pthread']
   4.503 +    },
   4.504 +    'os:solaris': {
   4.505 +      # On Solaris, to get isinf, INFINITY, fpclassify and other macros one
   4.506 +      # needs to define __C99FEATURES__.
   4.507 +      'CPPDEFINES': ['__C99FEATURES__'],
   4.508 +      'LIBPATH' :     ['/usr/local/lib'],
   4.509 +      'LIBS':         ['m', 'pthread', 'socket', 'nsl', 'rt'],
   4.510 +      'LINKFLAGS':    ['-mt']
   4.511 +    },
   4.512 +    'os:openbsd': {
   4.513 +      'LIBPATH' :     ['/usr/local/lib'],
   4.514 +      'LIBS':         ['execinfo', 'pthread']
   4.515 +    },
   4.516 +    'os:win32': {
   4.517 +      'LIBS':         ['winmm', 'ws2_32']
   4.518 +    },
   4.519 +    'os:netbsd': {
   4.520 +      'LIBPATH' :     ['/usr/pkg/lib'],
   4.521 +      'LIBS':         ['execinfo', 'pthread']
   4.522 +    },
   4.523 +    'arch:arm': {
   4.524 +      'LINKFLAGS':   ARM_LINK_FLAGS,
   4.525 +      'armeabi:soft' : {
   4.526 +        'CPPDEFINES' : ['USE_EABI_HARDFLOAT=0'],
   4.527 +        'simulator:none': {
   4.528 +          'CCFLAGS':     ['-mfloat-abi=soft'],
   4.529 +        }
   4.530 +      },
   4.531 +      'armeabi:softfp' : {
   4.532 +        'CPPDEFINES' : ['USE_EABI_HARDFLOAT=0'],
   4.533 +        'simulator:none': {
   4.534 +          'CCFLAGS':     ['-mfloat-abi=softfp'],
   4.535 +        }
   4.536 +      },
   4.537 +      'armeabi:hard' : {
   4.538 +        'CPPDEFINES' : ['USE_EABI_HARDFLOAT=1'],
   4.539 +        'vfp3:on': {
   4.540 +          'CPPDEFINES' : ['CAN_USE_VFP_INSTRUCTIONS']
   4.541 +        },
   4.542 +        'simulator:none': {
   4.543 +          'CCFLAGS':     ['-mfloat-abi=hard'],
   4.544 +        }
   4.545 +      }
   4.546 +    },
   4.547 +    'arch:ia32': {
   4.548 +      'CCFLAGS':      ['-m32'],
   4.549 +      'LINKFLAGS':    ['-m32']
   4.550 +    },
   4.551 +    'arch:x64': {
   4.552 +      'CCFLAGS':      ['-m64'],
   4.553 +      'LINKFLAGS':    ['-m64']
   4.554 +    },
   4.555 +    'arch:mips': {
   4.556 +      'CPPDEFINES':   ['V8_TARGET_ARCH_MIPS'],
   4.557 +      'mips_arch_variant:mips32r2': {
   4.558 +        'CPPDEFINES':    ['_MIPS_ARCH_MIPS32R2']
   4.559 +      },
   4.560 +      'mips_arch_variant:loongson': {
   4.561 +        'CPPDEFINES':    ['_MIPS_ARCH_LOONGSON']
   4.562 +      },
   4.563 +      'simulator:none': {
   4.564 +        'CCFLAGS':      ['-EL'],
   4.565 +        'LINKFLAGS':    ['-EL'],
   4.566 +        'mips_arch_variant:mips32r2': {
   4.567 +          'CCFLAGS':      ['-mips32r2', '-Wa,-mips32r2']
   4.568 +        },
   4.569 +        'mips_arch_variant:mips32r1': {
   4.570 +          'CCFLAGS':      ['-mips32', '-Wa,-mips32']
   4.571 +        },
   4.572 +        'mips_arch_variant:loongson': {
   4.573 +          'CCFLAGS':      ['-march=mips3', '-Wa,-march=mips3']
   4.574 +        },
   4.575 +        'library:static': {
   4.576 +          'LINKFLAGS':    ['-static', '-static-libgcc']
   4.577 +        },
   4.578 +        'mipsabi:softfloat': {
   4.579 +          'CCFLAGS':      ['-msoft-float'],
   4.580 +          'LINKFLAGS':    ['-msoft-float']
   4.581 +        },
   4.582 +        'mipsabi:hardfloat': {
   4.583 +          'CCFLAGS':      ['-mhard-float'],
   4.584 +          'LINKFLAGS':    ['-mhard-float'],
   4.585 +          'fpu:on': {
   4.586 +            'CPPDEFINES' : ['CAN_USE_FPU_INSTRUCTIONS']
   4.587 +          }
   4.588 +        }
   4.589 +      }
   4.590 +    },
   4.591 +    'simulator:arm': {
   4.592 +      'CCFLAGS':      ['-m32'],
   4.593 +      'LINKFLAGS':    ['-m32']
   4.594 +    },
   4.595 +    'simulator:mips': {
   4.596 +      'CCFLAGS':      ['-m32'],
   4.597 +      'LINKFLAGS':    ['-m32']
   4.598 +    },
   4.599 +    'mode:release': {
   4.600 +      'CCFLAGS':      ['-O2']
   4.601 +    },
   4.602 +    'mode:debug': {
   4.603 +      'CCFLAGS':      ['-g', '-O0'],
   4.604 +      'CPPDEFINES':   ['DEBUG']
   4.605 +    },
   4.606 +    'compress_startup_data:bz2': {
   4.607 +      'CPPDEFINES':   ['COMPRESS_STARTUP_DATA_BZ2'],
   4.608 +      'os:linux': {
   4.609 +        'LIBS':       ['bz2']
   4.610 +      }
   4.611 +    },
   4.612 +  },
   4.613 +  'msvc': {
   4.614 +    'all': {
   4.615 +      'LIBS': ['winmm', 'ws2_32']
   4.616 +    },
   4.617 +    'verbose:off': {
   4.618 +      'CCFLAGS': ['/nologo'],
   4.619 +      'LINKFLAGS': ['/NOLOGO']
   4.620 +    },
   4.621 +    'verbose:on': {
   4.622 +      'LINKFLAGS': ['/VERBOSE']
   4.623 +    },
   4.624 +    'prof:on': {
   4.625 +      'LINKFLAGS': ['/MAP']
   4.626 +    },
   4.627 +    'mode:release': {
   4.628 +      'CCFLAGS':   ['/O2'],
   4.629 +      'LINKFLAGS': ['/OPT:REF', '/OPT:ICF'],
   4.630 +      'msvcrt:static': {
   4.631 +        'CCFLAGS': ['/MT']
   4.632 +      },
   4.633 +      'msvcrt:shared': {
   4.634 +        'CCFLAGS': ['/MD']
   4.635 +      },
   4.636 +      'msvcltcg:on': {
   4.637 +        'CCFLAGS':      ['/GL'],
   4.638 +        'pgo:off': {
   4.639 +          'LINKFLAGS':    ['/LTCG'],
   4.640 +        },
   4.641 +      },
   4.642 +      'pgo:instrument': {
   4.643 +        'LINKFLAGS':    ['/LTCG:PGI']
   4.644 +      },
   4.645 +      'pgo:optimize': {
   4.646 +        'LINKFLAGS':    ['/LTCG:PGO']
   4.647 +      }
   4.648 +    },
   4.649 +    'arch:ia32': {
   4.650 +      'CPPDEFINES': ['V8_TARGET_ARCH_IA32', 'WIN32'],
   4.651 +      'LINKFLAGS': ['/MACHINE:X86']
   4.652 +    },
   4.653 +    'arch:x64': {
   4.654 +      'CPPDEFINES': ['V8_TARGET_ARCH_X64', 'WIN32'],
   4.655 +      'LINKFLAGS': ['/MACHINE:X64', '/STACK:2097152']
   4.656 +    },
   4.657 +    'mode:debug': {
   4.658 +      'CCFLAGS':    ['/Od'],
   4.659 +      'LINKFLAGS':  ['/DEBUG'],
   4.660 +      'CPPDEFINES': ['DEBUG'],
   4.661 +      'msvcrt:static': {
   4.662 +        'CCFLAGS':  ['/MTd']
   4.663 +      },
   4.664 +      'msvcrt:shared': {
   4.665 +        'CCFLAGS':  ['/MDd']
   4.666 +      }
   4.667 +    }
   4.668 +  }
   4.669 +}
   4.670 +
   4.671 +
   4.672 +PREPARSER_FLAGS = {
   4.673 +  'all': {
   4.674 +    'CPPPATH': [join(root_dir, 'include'), src_dir],
   4.675 +    'library:shared': {
   4.676 +      'CPPDEFINES': ['USING_V8_SHARED']
   4.677 +    },
   4.678 +  },
   4.679 +  'gcc': {
   4.680 +    'all': {
   4.681 +      'LIBPATH':      ['.'],
   4.682 +      'CCFLAGS':      ['$DIALECTFLAGS', '$WARNINGFLAGS'],
   4.683 +      'CXXFLAGS':     ['-fno-rtti', '-fno-exceptions'],
   4.684 +      'LINKFLAGS':    ['$CCFLAGS'],
   4.685 +    },
   4.686 +    'os:win32': {
   4.687 +      'LIBS':         ['winmm', 'ws2_32']
   4.688 +    },
   4.689 +    'arch:arm': {
   4.690 +      'LINKFLAGS':   ARM_LINK_FLAGS,
   4.691 +      'armeabi:soft' : {
   4.692 +        'CPPDEFINES' : ['USE_EABI_HARDFLOAT=0'],
   4.693 +        'simulator:none': {
   4.694 +          'CCFLAGS':     ['-mfloat-abi=soft'],
   4.695 +        }
   4.696 +      },
   4.697 +      'armeabi:softfp' : {
   4.698 +        'simulator:none': {
   4.699 +          'CCFLAGS':     ['-mfloat-abi=softfp'],
   4.700 +        }
   4.701 +      },
   4.702 +      'armeabi:hard' : {
   4.703 +        'simulator:none': {
   4.704 +          'CCFLAGS':     ['-mfloat-abi=hard'],
   4.705 +        }
   4.706 +      }
   4.707 +    },
   4.708 +    'arch:ia32': {
   4.709 +      'CCFLAGS':      ['-m32'],
   4.710 +      'LINKFLAGS':    ['-m32']
   4.711 +    },
   4.712 +    'arch:x64': {
   4.713 +      'CCFLAGS':      ['-m64'],
   4.714 +      'LINKFLAGS':    ['-m64']
   4.715 +    },
   4.716 +    'arch:mips': {
   4.717 +      'CPPDEFINES':   ['V8_TARGET_ARCH_MIPS'],
   4.718 +      'mips_arch_variant:mips32r2': {
   4.719 +        'CPPDEFINES':    ['_MIPS_ARCH_MIPS32R2']
   4.720 +      },
   4.721 +      'mips_arch_variant:loongson': {
   4.722 +        'CPPDEFINES':    ['_MIPS_ARCH_LOONGSON']
   4.723 +      },
   4.724 +      'simulator:none': {
   4.725 +        'CCFLAGS':      ['-EL'],
   4.726 +        'LINKFLAGS':    ['-EL'],
   4.727 +        'mips_arch_variant:mips32r2': {
   4.728 +          'CCFLAGS':      ['-mips32r2', '-Wa,-mips32r2']
   4.729 +        },
   4.730 +        'mips_arch_variant:mips32r1': {
   4.731 +          'CCFLAGS':      ['-mips32', '-Wa,-mips32']
   4.732 +        },
   4.733 +        'mips_arch_variant:loongson': {
   4.734 +          'CCFLAGS':      ['-march=mips3', '-Wa,-march=mips3']
   4.735 +        },
   4.736 +        'library:static': {
   4.737 +          'LINKFLAGS':    ['-static', '-static-libgcc']
   4.738 +        },
   4.739 +        'mipsabi:softfloat': {
   4.740 +          'CCFLAGS':      ['-msoft-float'],
   4.741 +          'LINKFLAGS':    ['-msoft-float']
   4.742 +        },
   4.743 +        'mipsabi:hardfloat': {
   4.744 +          'CCFLAGS':      ['-mhard-float'],
   4.745 +          'LINKFLAGS':    ['-mhard-float']
   4.746 +        }
   4.747 +      }
   4.748 +    },
   4.749 +    'simulator:arm': {
   4.750 +      'CCFLAGS':      ['-m32'],
   4.751 +      'LINKFLAGS':    ['-m32']
   4.752 +    },
   4.753 +    'simulator:mips': {
   4.754 +      'CCFLAGS':      ['-m32'],
   4.755 +      'LINKFLAGS':    ['-m32'],
   4.756 +      'mipsabi:softfloat': {
   4.757 +        'CPPDEFINES':    ['__mips_soft_float=1'],
   4.758 +      },
   4.759 +      'mipsabi:hardfloat': {
   4.760 +        'CPPDEFINES':    ['__mips_hard_float=1'],
   4.761 +      }
   4.762 +    },
   4.763 +    'mode:release': {
   4.764 +      'CCFLAGS':      ['-O2']
   4.765 +    },
   4.766 +    'mode:debug': {
   4.767 +      'CCFLAGS':      ['-g', '-O0'],
   4.768 +      'CPPDEFINES':   ['DEBUG']
   4.769 +    },
   4.770 +    'os:freebsd': {
   4.771 +      'LIBPATH' : ['/usr/local/lib'],
   4.772 +    },
   4.773 +  },
   4.774 +  'msvc': {
   4.775 +    'all': {
   4.776 +      'LIBS': ['winmm', 'ws2_32']
   4.777 +    },
   4.778 +    'verbose:off': {
   4.779 +      'CCFLAGS': ['/nologo'],
   4.780 +      'LINKFLAGS': ['/NOLOGO']
   4.781 +    },
   4.782 +    'verbose:on': {
   4.783 +      'LINKFLAGS': ['/VERBOSE']
   4.784 +    },
   4.785 +    'prof:on': {
   4.786 +      'LINKFLAGS': ['/MAP']
   4.787 +    },
   4.788 +    'mode:release': {
   4.789 +      'CCFLAGS':   ['/O2'],
   4.790 +      'LINKFLAGS': ['/OPT:REF', '/OPT:ICF'],
   4.791 +      'msvcrt:static': {
   4.792 +        'CCFLAGS': ['/MT']
   4.793 +      },
   4.794 +      'msvcrt:shared': {
   4.795 +        'CCFLAGS': ['/MD']
   4.796 +      },
   4.797 +      'msvcltcg:on': {
   4.798 +        'CCFLAGS':      ['/GL'],
   4.799 +        'pgo:off': {
   4.800 +          'LINKFLAGS':    ['/LTCG'],
   4.801 +        },
   4.802 +      },
   4.803 +      'pgo:instrument': {
   4.804 +        'LINKFLAGS':    ['/LTCG:PGI']
   4.805 +      },
   4.806 +      'pgo:optimize': {
   4.807 +        'LINKFLAGS':    ['/LTCG:PGO']
   4.808 +      }
   4.809 +    },
   4.810 +    'arch:ia32': {
   4.811 +      'CPPDEFINES': ['V8_TARGET_ARCH_IA32', 'WIN32'],
   4.812 +      'LINKFLAGS': ['/MACHINE:X86']
   4.813 +    },
   4.814 +    'arch:x64': {
   4.815 +      'CPPDEFINES': ['V8_TARGET_ARCH_X64', 'WIN32'],
   4.816 +      'LINKFLAGS': ['/MACHINE:X64', '/STACK:2097152']
   4.817 +    },
   4.818 +    'mode:debug': {
   4.819 +      'CCFLAGS':    ['/Od'],
   4.820 +      'LINKFLAGS':  ['/DEBUG'],
   4.821 +      'CPPDEFINES': ['DEBUG'],
   4.822 +      'msvcrt:static': {
   4.823 +        'CCFLAGS':  ['/MTd']
   4.824 +      },
   4.825 +      'msvcrt:shared': {
   4.826 +        'CCFLAGS':  ['/MDd']
   4.827 +      }
   4.828 +    }
   4.829 +  }
   4.830 +}
   4.831 +
   4.832 +
   4.833 +D8_FLAGS = {
   4.834 +  'all': {
   4.835 +    'library:shared': {
   4.836 +      'CPPDEFINES': ['V8_SHARED'],
   4.837 +      'LIBS': ['v8'],
   4.838 +      'LIBPATH': ['.']
   4.839 +    },
   4.840 +  },
   4.841 +  'gcc': {
   4.842 +    'all': {
   4.843 +      'CCFLAGS': ['$DIALECTFLAGS', '$WARNINGFLAGS'],
   4.844 +      'CXXFLAGS': ['-fno-rtti', '-fno-exceptions'],
   4.845 +      'LINKFLAGS': ['$CCFLAGS'],
   4.846 +    },
   4.847 +    'console:readline': {
   4.848 +      'LIBS': ['readline']
   4.849 +    },
   4.850 +    'os:linux': {
   4.851 +      'LIBS': ['pthread'],
   4.852 +    },
   4.853 +    'os:macos': {
   4.854 +      'LIBS': ['pthread'],
   4.855 +    },
   4.856 +    'os:freebsd': {
   4.857 +      'LIBS': ['pthread'],
   4.858 +    },
   4.859 +    'os:solaris': {
   4.860 +      'LIBS': ['m', 'pthread', 'socket', 'nsl', 'rt'],
   4.861 +      'LINKFLAGS': ['-mt']
   4.862 +    },
   4.863 +    'os:openbsd': {
   4.864 +      'LIBS': ['pthread'],
   4.865 +    },
   4.866 +    'os:win32': {
   4.867 +      'LIBS': ['winmm', 'ws2_32'],
   4.868 +    },
   4.869 +    'os:netbsd': {
   4.870 +      'LIBS': ['pthread'],
   4.871 +    },
   4.872 +    'arch:arm': {
   4.873 +      'LINKFLAGS':   ARM_LINK_FLAGS
   4.874 +    },
   4.875 +    'compress_startup_data:bz2': {
   4.876 +      'CPPDEFINES':   ['COMPRESS_STARTUP_DATA_BZ2'],
   4.877 +      'os:linux': {
   4.878 +        'LIBS': ['bz2']
   4.879 +      }
   4.880 +    }
   4.881 +  },
   4.882 +  'msvc': {
   4.883 +    'all': {
   4.884 +      'LIBS': ['winmm', 'ws2_32']
   4.885 +    },
   4.886 +    'verbose:off': {
   4.887 +      'CCFLAGS': ['/nologo'],
   4.888 +      'LINKFLAGS': ['/NOLOGO']
   4.889 +    },
   4.890 +    'verbose:on': {
   4.891 +      'LINKFLAGS': ['/VERBOSE']
   4.892 +    },
   4.893 +    'prof:on': {
   4.894 +      'LINKFLAGS': ['/MAP']
   4.895 +    },
   4.896 +    'mode:release': {
   4.897 +      'CCFLAGS':   ['/O2'],
   4.898 +      'LINKFLAGS': ['/OPT:REF', '/OPT:ICF'],
   4.899 +      'msvcrt:static': {
   4.900 +        'CCFLAGS': ['/MT']
   4.901 +      },
   4.902 +      'msvcrt:shared': {
   4.903 +        'CCFLAGS': ['/MD']
   4.904 +      },
   4.905 +      'msvcltcg:on': {
   4.906 +        'CCFLAGS':      ['/GL'],
   4.907 +        'pgo:off': {
   4.908 +          'LINKFLAGS':    ['/LTCG'],
   4.909 +        },
   4.910 +      },
   4.911 +      'pgo:instrument': {
   4.912 +        'LINKFLAGS':    ['/LTCG:PGI']
   4.913 +      },
   4.914 +      'pgo:optimize': {
   4.915 +        'LINKFLAGS':    ['/LTCG:PGO']
   4.916 +      }
   4.917 +    },
   4.918 +    'arch:ia32': {
   4.919 +      'CPPDEFINES': ['V8_TARGET_ARCH_IA32', 'WIN32'],
   4.920 +      'LINKFLAGS': ['/MACHINE:X86']
   4.921 +    },
   4.922 +    'arch:x64': {
   4.923 +      'CPPDEFINES': ['V8_TARGET_ARCH_X64', 'WIN32'],
   4.924 +      'LINKFLAGS': ['/MACHINE:X64', '/STACK:2097152']
   4.925 +    },
   4.926 +    'mode:debug': {
   4.927 +      'CCFLAGS':    ['/Od'],
   4.928 +      'LINKFLAGS':  ['/DEBUG'],
   4.929 +      'CPPDEFINES': ['DEBUG'],
   4.930 +      'msvcrt:static': {
   4.931 +        'CCFLAGS':  ['/MTd']
   4.932 +      },
   4.933 +      'msvcrt:shared': {
   4.934 +        'CCFLAGS':  ['/MDd']
   4.935 +      }
   4.936 +    }
   4.937 +  }
   4.938 +}
   4.939 +
   4.940 +
   4.941 +SUFFIXES = {
   4.942 +  'release': '',
   4.943 +  'debug': '_g'
   4.944 +}
   4.945 +
   4.946 +
   4.947 +def Abort(message):
   4.948 +  print message
   4.949 +  sys.exit(1)
   4.950 +
   4.951 +
   4.952 +def GuessOS(env):
   4.953 +  return utils.GuessOS()
   4.954 +
   4.955 +
   4.956 +def GuessArch(env):
   4.957 +  return utils.GuessArchitecture()
   4.958 +
   4.959 +
   4.960 +def GuessToolchain(env):
   4.961 +  tools = env['TOOLS']
   4.962 +  if 'gcc' in tools:
   4.963 +    return 'gcc'
   4.964 +  elif 'msvc' in tools:
   4.965 +    return 'msvc'
   4.966 +  else:
   4.967 +    return None
   4.968 +
   4.969 +
   4.970 +def GuessVisibility(env):
   4.971 +  os = env['os']
   4.972 +  toolchain = env['toolchain'];
   4.973 +  if (os == 'win32' or os == 'cygwin') and toolchain == 'gcc':
   4.974 +    # MinGW / Cygwin can't do it.
   4.975 +    return 'default'
   4.976 +  elif os == 'solaris':
   4.977 +    return 'default'
   4.978 +  else:
   4.979 +    return 'hidden'
   4.980 +
   4.981 +
   4.982 +def GuessStrictAliasing(env):
   4.983 +  # There seems to be a problem with gcc 4.5.x.
   4.984 +  # See http://code.google.com/p/v8/issues/detail?id=884
   4.985 +  # It can be worked around by disabling strict aliasing.
   4.986 +  toolchain = env['toolchain'];
   4.987 +  if toolchain == 'gcc':
   4.988 +    env = Environment(tools=['gcc'])
   4.989 +    # The gcc version should be available in env['CCVERSION'],
   4.990 +    # but when scons detects msvc this value is not set.
   4.991 +    version = subprocess.Popen([env['CC'], '-dumpversion'],
   4.992 +        stdout=subprocess.PIPE).communicate()[0]
   4.993 +    if version.find('4.5') == 0:
   4.994 +      return 'off'
   4.995 +  return 'default'
   4.996 +
   4.997 +
   4.998 +PLATFORM_OPTIONS = {
   4.999 +  'arch': {
  4.1000 +    'values': ['arm', 'ia32', 'x64', 'mips'],
  4.1001 +    'guess': GuessArch,
  4.1002 +    'help': 'the architecture to build for'
  4.1003 +  },
  4.1004 +  'os': {
  4.1005 +    'values': ['freebsd', 'linux', 'macos', 'win32', 'openbsd', 'solaris', 'cygwin', 'netbsd'],
  4.1006 +    'guess': GuessOS,
  4.1007 +    'help': 'the os to build for'
  4.1008 +  },
  4.1009 +  'toolchain': {
  4.1010 +    'values': ['gcc', 'msvc'],
  4.1011 +    'guess': GuessToolchain,
  4.1012 +    'help': 'the toolchain to use'
  4.1013 +  }
  4.1014 +}
  4.1015 +
  4.1016 +SIMPLE_OPTIONS = {
  4.1017 +  'regexp': {
  4.1018 +    'values': ['native', 'interpreted'],
  4.1019 +    'default': 'native',
  4.1020 +    'help': 'Whether to use native or interpreted regexp implementation'
  4.1021 +  },
  4.1022 +  'snapshot': {
  4.1023 +    'values': ['on', 'off', 'nobuild'],
  4.1024 +    'default': 'off',
  4.1025 +    'help': 'build using snapshots for faster start-up'
  4.1026 +  },
  4.1027 +  'prof': {
  4.1028 +    'values': ['on', 'off'],
  4.1029 +    'default': 'off',
  4.1030 +    'help': 'enable profiling of build target'
  4.1031 +  },
  4.1032 +  'gdbjit': {
  4.1033 +    'values': ['on', 'off'],
  4.1034 +    'default': 'off',
  4.1035 +    'help': 'enable GDB JIT interface'
  4.1036 +  },
  4.1037 +  'library': {
  4.1038 +    'values': ['static', 'shared'],
  4.1039 +    'default': 'static',
  4.1040 +    'help': 'the type of library to produce'
  4.1041 +  },
  4.1042 +  'objectprint': {
  4.1043 +    'values': ['on', 'off'],
  4.1044 +    'default': 'off',
  4.1045 +    'help': 'enable object printing'
  4.1046 +  },
  4.1047 +  'profilingsupport': {
  4.1048 +    'values': ['on', 'off'],
  4.1049 +    'default': 'on',
  4.1050 +    'help': 'enable profiling of JavaScript code'
  4.1051 +  },
  4.1052 +  'debuggersupport': {
  4.1053 +    'values': ['on', 'off'],
  4.1054 +    'default': 'on',
  4.1055 +    'help': 'enable debugging of JavaScript code'
  4.1056 +  },
  4.1057 +  'inspector': {
  4.1058 +    'values': ['on', 'off'],
  4.1059 +    'default': 'off',
  4.1060 +    'help': 'enable inspector features'
  4.1061 +  },
  4.1062 +  'liveobjectlist': {
  4.1063 +    'values': ['on', 'off'],
  4.1064 +    'default': 'off',
  4.1065 +    'help': 'enable live object list features in the debugger'
  4.1066 +  },
  4.1067 +  'soname': {
  4.1068 +    'values': ['on', 'off'],
  4.1069 +    'default': 'off',
  4.1070 +    'help': 'turn on setting soname for Linux shared library'
  4.1071 +  },
  4.1072 +  'msvcrt': {
  4.1073 +    'values': ['static', 'shared'],
  4.1074 +    'default': 'static',
  4.1075 +    'help': 'the type of Microsoft Visual C++ runtime library to use'
  4.1076 +  },
  4.1077 +  'msvcltcg': {
  4.1078 +    'values': ['on', 'off'],
  4.1079 +    'default': 'on',
  4.1080 +    'help': 'use Microsoft Visual C++ link-time code generation'
  4.1081 +  },
  4.1082 +  'simulator': {
  4.1083 +    'values': ['arm', 'mips', 'none'],
  4.1084 +    'default': 'none',
  4.1085 +    'help': 'build with simulator'
  4.1086 +  },
  4.1087 +  'unalignedaccesses': {
  4.1088 +    'values': ['default', 'on', 'off'],
  4.1089 +    'default': 'default',
  4.1090 +    'help': 'set whether the ARM target supports unaligned accesses'
  4.1091 +  },
  4.1092 +  'disassembler': {
  4.1093 +    'values': ['on', 'off'],
  4.1094 +    'default': 'off',
  4.1095 +    'help': 'enable the disassembler to inspect generated code'
  4.1096 +  },
  4.1097 +  'fasttls': {
  4.1098 +    'values': ['on', 'off'],
  4.1099 +    'default': 'on',
  4.1100 +    'help': 'enable fast thread local storage support '
  4.1101 +            '(if available on the current architecture/platform)'
  4.1102 +  },
  4.1103 +  'sourcesignatures': {
  4.1104 +    'values': ['MD5', 'timestamp'],
  4.1105 +    'default': 'MD5',
  4.1106 +    'help': 'set how the build system detects file changes'
  4.1107 +  },
  4.1108 +  'console': {
  4.1109 +    'values': ['dumb', 'readline'],
  4.1110 +    'default': 'dumb',
  4.1111 +    'help': 'the console to use for the d8 shell'
  4.1112 +  },
  4.1113 +  'verbose': {
  4.1114 +    'values': ['on', 'off'],
  4.1115 +    'default': 'off',
  4.1116 +    'help': 'more output from compiler and linker'
  4.1117 +  },
  4.1118 +  'visibility': {
  4.1119 +    'values': ['default', 'hidden'],
  4.1120 +    'guess': GuessVisibility,
  4.1121 +    'help': 'shared library symbol visibility'
  4.1122 +  },
  4.1123 +  'strictaliasing': {
  4.1124 +    'values': ['default', 'off'],
  4.1125 +    'guess': GuessStrictAliasing,
  4.1126 +    'help': 'assume strict aliasing while optimizing'
  4.1127 +  },
  4.1128 +  'pgo': {
  4.1129 +    'values': ['off', 'instrument', 'optimize'],
  4.1130 +    'default': 'off',
  4.1131 +    'help': 'select profile guided optimization variant',
  4.1132 +  },
  4.1133 +  'armeabi': {
  4.1134 +    'values': ['hard', 'softfp', 'soft'],
  4.1135 +    'default': 'softfp',
  4.1136 +    'help': 'generate calling conventiont according to selected ARM EABI variant'
  4.1137 +  },
  4.1138 +  'mipsabi': {
  4.1139 +    'values': ['hardfloat', 'softfloat', 'none'],
  4.1140 +    'default': 'hardfloat',
  4.1141 +    'help': 'generate calling conventiont according to selected mips ABI'
  4.1142 +  },
  4.1143 +  'mips_arch_variant': {
  4.1144 +    'values': ['mips32r2', 'mips32r1', 'loongson'],
  4.1145 +    'default': 'mips32r2',
  4.1146 +    'help': 'mips variant'
  4.1147 +  },
  4.1148 +  'compress_startup_data': {
  4.1149 +    'values': ['off', 'bz2'],
  4.1150 +    'default': 'off',
  4.1151 +    'help': 'compress startup data (snapshot) [Linux only]'
  4.1152 +  },
  4.1153 +  'vfp3': {
  4.1154 +    'values': ['on', 'off'],
  4.1155 +    'default': 'on',
  4.1156 +    'help': 'use vfp3 instructions when building the snapshot [Arm only]'
  4.1157 +  },
  4.1158 +  'fpu': {
  4.1159 +    'values': ['on', 'off'],
  4.1160 +    'default': 'on',
  4.1161 +    'help': 'use fpu instructions when building the snapshot [MIPS only]'
  4.1162 +  },
  4.1163 +  'I_know_I_should_build_with_GYP': {
  4.1164 +    'values': ['yes', 'no'],
  4.1165 +    'default': 'no',
  4.1166 +    'help': 'grace period: temporarily override SCons deprecation'
  4.1167 +  }
  4.1168 +
  4.1169 +}
  4.1170 +
  4.1171 +ALL_OPTIONS = dict(PLATFORM_OPTIONS, **SIMPLE_OPTIONS)
  4.1172 +
  4.1173 +
  4.1174 +def AddOptions(options, result):
  4.1175 +  guess_env = Environment(options=result)
  4.1176 +  for (name, option) in options.iteritems():
  4.1177 +    if 'guess' in option:
  4.1178 +      # Option has a guess function
  4.1179 +      guess = option.get('guess')
  4.1180 +      default = guess(guess_env)
  4.1181 +    else:
  4.1182 +      # Option has a fixed default
  4.1183 +      default = option.get('default')
  4.1184 +    help = '%s (%s)' % (option.get('help'), ", ".join(option['values']))
  4.1185 +    result.Add(name, help, default)
  4.1186 +
  4.1187 +
  4.1188 +def GetOptions():
  4.1189 +  result = Options()
  4.1190 +  result.Add('mode', 'compilation mode (debug, release)', 'release')
  4.1191 +  result.Add('sample', 'build sample (shell, process, lineprocessor)', '')
  4.1192 +  result.Add('cache', 'directory to use for scons build cache', '')
  4.1193 +  result.Add('env', 'override environment settings (NAME0:value0,NAME1:value1,...)', '')
  4.1194 +  result.Add('importenv', 'import environment settings (NAME0,NAME1,...)', '')
  4.1195 +  AddOptions(PLATFORM_OPTIONS, result)
  4.1196 +  AddOptions(SIMPLE_OPTIONS, result)
  4.1197 +  return result
  4.1198 +
  4.1199 +
  4.1200 +def GetTools(opts):
  4.1201 +  env = Environment(options=opts)
  4.1202 +  os = env['os']
  4.1203 +  toolchain = env['toolchain']
  4.1204 +  if os == 'win32' and toolchain == 'gcc':
  4.1205 +    return ['mingw']
  4.1206 +  elif os == 'win32' and toolchain == 'msvc':
  4.1207 +    return ['msvc', 'mslink', 'mslib', 'msvs']
  4.1208 +  else:
  4.1209 +    return ['default']
  4.1210 +
  4.1211 +
  4.1212 +def GetVersionComponents():
  4.1213 +  MAJOR_VERSION_PATTERN = re.compile(r"#define\s+MAJOR_VERSION\s+(.*)")
  4.1214 +  MINOR_VERSION_PATTERN = re.compile(r"#define\s+MINOR_VERSION\s+(.*)")
  4.1215 +  BUILD_NUMBER_PATTERN = re.compile(r"#define\s+BUILD_NUMBER\s+(.*)")
  4.1216 +  PATCH_LEVEL_PATTERN = re.compile(r"#define\s+PATCH_LEVEL\s+(.*)")
  4.1217 +
  4.1218 +  patterns = [MAJOR_VERSION_PATTERN,
  4.1219 +              MINOR_VERSION_PATTERN,
  4.1220 +              BUILD_NUMBER_PATTERN,
  4.1221 +              PATCH_LEVEL_PATTERN]
  4.1222 +
  4.1223 +  source = open(join(root_dir, 'src', 'version.cc')).read()
  4.1224 +  version_components = []
  4.1225 +  for pattern in patterns:
  4.1226 +    match = pattern.search(source)
  4.1227 +    if match:
  4.1228 +      version_components.append(match.group(1).strip())
  4.1229 +    else:
  4.1230 +      version_components.append('0')
  4.1231 +
  4.1232 +  return version_components
  4.1233 +
  4.1234 +
  4.1235 +def GetVersion():
  4.1236 +  version_components = GetVersionComponents()
  4.1237 +
  4.1238 +  if version_components[len(version_components) - 1] == '0':
  4.1239 +    version_components.pop()
  4.1240 +  return '.'.join(version_components)
  4.1241 +
  4.1242 +
  4.1243 +def GetSpecificSONAME():
  4.1244 +  SONAME_PATTERN = re.compile(r"#define\s+SONAME\s+\"(.*)\"")
  4.1245 +
  4.1246 +  source = open(join(root_dir, 'src', 'version.cc')).read()
  4.1247 +  match = SONAME_PATTERN.search(source)
  4.1248 +
  4.1249 +  if match:
  4.1250 +    return match.group(1).strip()
  4.1251 +  else:
  4.1252 +    return ''
  4.1253 +
  4.1254 +
  4.1255 +def SplitList(str):
  4.1256 +  return [ s for s in str.split(",") if len(s) > 0 ]
  4.1257 +
  4.1258 +
  4.1259 +def IsLegal(env, option, values):
  4.1260 +  str = env[option]
  4.1261 +  for s in SplitList(str):
  4.1262 +    if not s in values:
  4.1263 +      Abort("Illegal value for option %s '%s'." % (option, s))
  4.1264 +      return False
  4.1265 +  return True
  4.1266 +
  4.1267 +
  4.1268 +def WarnAboutDeprecation():
  4.1269 +  print """
  4.1270 +    #####################################################################
  4.1271 +    #                                                                   #
  4.1272 +    #  LAST WARNING: Building V8 with SCons is deprecated.              #
  4.1273 +    #                                                                   #
  4.1274 +    #  This only works because you have overridden the kill switch.     #
  4.1275 +    #                                                                   #
  4.1276 +    #              MIGRATE TO THE GYP-BASED BUILD NOW!                  #
  4.1277 +    #                                                                   #
  4.1278 +    #  Instructions: http://code.google.com/p/v8/wiki/BuildingWithGYP.  #
  4.1279 +    #                                                                   #
  4.1280 +    #####################################################################
  4.1281 +  """
  4.1282 +
  4.1283 +
  4.1284 +def VerifyOptions(env):
  4.1285 +  if env['I_know_I_should_build_with_GYP'] != 'yes':
  4.1286 +    Abort("Building V8 with SCons is no longer supported. Please use GYP "
  4.1287 +          "instead; you can find instructions are at "
  4.1288 +          "http://code.google.com/p/v8/wiki/BuildingWithGYP.\n\n"
  4.1289 +          "Quitting.\n\n"
  4.1290 +          "For a limited grace period, you can specify "
  4.1291 +          "\"I_know_I_should_build_with_GYP=yes\" to override.")
  4.1292 +  else:
  4.1293 +    WarnAboutDeprecation()
  4.1294 +    import atexit
  4.1295 +    atexit.register(WarnAboutDeprecation)
  4.1296 +
  4.1297 +  if not IsLegal(env, 'mode', ['debug', 'release']):
  4.1298 +    return False
  4.1299 +  if not IsLegal(env, 'sample', ["shell", "process", "lineprocessor"]):
  4.1300 +    return False
  4.1301 +  if not IsLegal(env, 'regexp', ["native", "interpreted"]):
  4.1302 +    return False
  4.1303 +  if env['os'] == 'win32' and env['library'] == 'shared' and env['prof'] == 'on':
  4.1304 +    Abort("Profiling on windows only supported for static library.")
  4.1305 +  if env['gdbjit'] == 'on' and ((env['os'] != 'linux' and env['os'] != 'macos') or (env['arch'] != 'ia32' and env['arch'] != 'x64' and env['arch'] != 'arm')):
  4.1306 +    Abort("GDBJIT interface is supported only for Intel-compatible (ia32 or x64) Linux/OSX target.")
  4.1307 +  if env['os'] == 'win32' and env['soname'] == 'on':
  4.1308 +    Abort("Shared Object soname not applicable for Windows.")
  4.1309 +  if env['soname'] == 'on' and env['library'] == 'static':
  4.1310 +    Abort("Shared Object soname not applicable for static library.")
  4.1311 +  if env['os'] != 'win32' and env['pgo'] != 'off':
  4.1312 +    Abort("Profile guided optimization only supported on Windows.")
  4.1313 +  if env['cache'] and not os.path.isdir(env['cache']):
  4.1314 +    Abort("The specified cache directory does not exist.")
  4.1315 +  if not (env['arch'] == 'arm' or env['simulator'] == 'arm') and ('unalignedaccesses' in ARGUMENTS):
  4.1316 +    print env['arch']
  4.1317 +    print env['simulator']
  4.1318 +    Abort("Option unalignedaccesses only supported for the ARM architecture.")
  4.1319 +  if env['os'] != 'linux' and env['compress_startup_data'] != 'off':
  4.1320 +    Abort("Startup data compression is only available on Linux")
  4.1321 +  for (name, option) in ALL_OPTIONS.iteritems():
  4.1322 +    if (not name in env):
  4.1323 +      message = ("A value for option %s must be specified (%s)." %
  4.1324 +          (name, ", ".join(option['values'])))
  4.1325 +      Abort(message)
  4.1326 +    if not env[name] in option['values']:
  4.1327 +      message = ("Unknown %s value '%s'.  Possible values are (%s)." %
  4.1328 +          (name, env[name], ", ".join(option['values'])))
  4.1329 +      Abort(message)
  4.1330 +
  4.1331 +
  4.1332 +class BuildContext(object):
  4.1333 +
  4.1334 +  def __init__(self, options, env_overrides, samples):
  4.1335 +    self.library_targets = []
  4.1336 +    self.mksnapshot_targets = []
  4.1337 +    self.cctest_targets = []
  4.1338 +    self.sample_targets = []
  4.1339 +    self.d8_targets = []
  4.1340 +    self.options = options
  4.1341 +    self.env_overrides = env_overrides
  4.1342 +    self.samples = samples
  4.1343 +    self.preparser_targets = []
  4.1344 +    self.use_snapshot = (options['snapshot'] != 'off')
  4.1345 +    self.build_snapshot = (options['snapshot'] == 'on')
  4.1346 +    self.flags = None
  4.1347 +
  4.1348 +  def AddRelevantFlags(self, initial, flags):
  4.1349 +    result = initial.copy()
  4.1350 +    toolchain = self.options['toolchain']
  4.1351 +    if toolchain in flags:
  4.1352 +      self.AppendFlags(result, flags[toolchain].get('all'))
  4.1353 +      for option in sorted(self.options.keys()):
  4.1354 +        value = self.options[option]
  4.1355 +        self.AppendFlags(result, flags[toolchain].get(option + ':' + value))
  4.1356 +    self.AppendFlags(result, flags.get('all'))
  4.1357 +    return result
  4.1358 +
  4.1359 +  def AddRelevantSubFlags(self, options, flags):
  4.1360 +    self.AppendFlags(options, flags.get('all'))
  4.1361 +    for option in sorted(self.options.keys()):
  4.1362 +      value = self.options[option]
  4.1363 +      self.AppendFlags(options, flags.get(option + ':' + value))
  4.1364 +
  4.1365 +  def GetRelevantSources(self, source):
  4.1366 +    result = []
  4.1367 +    result += source.get('all', [])
  4.1368 +    for (name, value) in self.options.iteritems():
  4.1369 +      source_value = source.get(name + ':' + value, [])
  4.1370 +      if type(source_value) == dict:
  4.1371 +        result += self.GetRelevantSources(source_value)
  4.1372 +      else:
  4.1373 +        result += source_value
  4.1374 +    return sorted(result)
  4.1375 +
  4.1376 +  def AppendFlags(self, options, added):
  4.1377 +    if not added:
  4.1378 +      return
  4.1379 +    for (key, value) in added.iteritems():
  4.1380 +      if key.find(':') != -1:
  4.1381 +        self.AddRelevantSubFlags(options, { key: value })
  4.1382 +      else:
  4.1383 +        if not key in options:
  4.1384 +          options[key] = value
  4.1385 +        else:
  4.1386 +          prefix = options[key]
  4.1387 +          if isinstance(prefix, StringTypes): prefix = prefix.split()
  4.1388 +          options[key] = prefix + value
  4.1389 +
  4.1390 +  def ConfigureObject(self, env, input, **kw):
  4.1391 +    if (kw.has_key('CPPPATH') and env.has_key('CPPPATH')):
  4.1392 +      kw['CPPPATH'] += env['CPPPATH']
  4.1393 +    if self.options['library'] == 'static':
  4.1394 +      return env.StaticObject(input, **kw)
  4.1395 +    else:
  4.1396 +      return env.SharedObject(input, **kw)
  4.1397 +
  4.1398 +  def ApplyEnvOverrides(self, env):
  4.1399 +    if not self.env_overrides:
  4.1400 +      return
  4.1401 +    if type(env['ENV']) == DictType:
  4.1402 +      env['ENV'].update(**self.env_overrides)
  4.1403 +    else:
  4.1404 +      env['ENV'] = self.env_overrides
  4.1405 +
  4.1406 +
  4.1407 +def PostprocessOptions(options, os):
  4.1408 +  # Adjust architecture if the simulator option has been set
  4.1409 +  if (options['simulator'] != 'none') and (options['arch'] != options['simulator']):
  4.1410 +    if 'arch' in ARGUMENTS:
  4.1411 +      # Print a warning if arch has explicitly been set
  4.1412 +      print "Warning: forcing architecture to match simulator (%s)" % options['simulator']
  4.1413 +    options['arch'] = options['simulator']
  4.1414 +  if (options['prof'] != 'off') and (options['profilingsupport'] == 'off'):
  4.1415 +    # Print a warning if profiling is enabled without profiling support
  4.1416 +    print "Warning: forcing profilingsupport on when prof is on"
  4.1417 +    options['profilingsupport'] = 'on'
  4.1418 +  if os == 'win32' and options['pgo'] != 'off' and options['msvcltcg'] == 'off':
  4.1419 +    if 'msvcltcg' in ARGUMENTS:
  4.1420 +      print "Warning: forcing msvcltcg on as it is required for pgo (%s)" % options['pgo']
  4.1421 +    options['msvcltcg'] = 'on'
  4.1422 +  if (options['mipsabi'] != 'none') and (options['arch'] != 'mips') and (options['simulator'] != 'mips'):
  4.1423 +    options['mipsabi'] = 'none'
  4.1424 +  if options['liveobjectlist'] == 'on':
  4.1425 +    if (options['debuggersupport'] != 'on') or (options['mode'] == 'release'):
  4.1426 +      # Print a warning that liveobjectlist will implicitly enable the debugger
  4.1427 +      print "Warning: forcing debuggersupport on for liveobjectlist"
  4.1428 +    options['debuggersupport'] = 'on'
  4.1429 +    options['inspector'] = 'on'
  4.1430 +    options['objectprint'] = 'on'
  4.1431 +
  4.1432 +
  4.1433 +def ParseEnvOverrides(arg, imports):
  4.1434 +  # The environment overrides are in the format NAME0:value0,NAME1:value1,...
  4.1435 +  # The environment imports are in the format NAME0,NAME1,...
  4.1436 +  overrides = {}
  4.1437 +  for var in imports.split(','):
  4.1438 +    if var in os.environ:
  4.1439 +      overrides[var] = os.environ[var]
  4.1440 +  for override in arg.split(','):
  4.1441 +    pos = override.find(':')
  4.1442 +    if pos == -1:
  4.1443 +      continue
  4.1444 +    overrides[override[:pos].strip()] = override[pos+1:].strip()
  4.1445 +  return overrides
  4.1446 +
  4.1447 +
  4.1448 +def BuildSpecific(env, mode, env_overrides, tools):
  4.1449 +  options = {'mode': mode}
  4.1450 +  for option in ALL_OPTIONS:
  4.1451 +    options[option] = env[option]
  4.1452 +  PostprocessOptions(options, env['os'])
  4.1453 +
  4.1454 +  context = BuildContext(options, env_overrides, samples=SplitList(env['sample']))
  4.1455 +
  4.1456 +  # Remove variables which can't be imported from the user's external
  4.1457 +  # environment into a construction environment.
  4.1458 +  user_environ = os.environ.copy()
  4.1459 +  try:
  4.1460 +    del user_environ['ENV']
  4.1461 +  except KeyError:
  4.1462 +    pass
  4.1463 +
  4.1464 +  library_flags = context.AddRelevantFlags(user_environ, LIBRARY_FLAGS)
  4.1465 +  v8_flags = context.AddRelevantFlags(library_flags, V8_EXTRA_FLAGS)
  4.1466 +  mksnapshot_flags = context.AddRelevantFlags(library_flags, MKSNAPSHOT_EXTRA_FLAGS)
  4.1467 +  dtoa_flags = context.AddRelevantFlags(library_flags, DTOA_EXTRA_FLAGS)
  4.1468 +  cctest_flags = context.AddRelevantFlags(v8_flags, CCTEST_EXTRA_FLAGS)
  4.1469 +  sample_flags = context.AddRelevantFlags(user_environ, SAMPLE_FLAGS)
  4.1470 +  preparser_flags = context.AddRelevantFlags(user_environ, PREPARSER_FLAGS)
  4.1471 +  d8_flags = context.AddRelevantFlags(library_flags, D8_FLAGS)
  4.1472 +
  4.1473 +  context.flags = {
  4.1474 +    'v8': v8_flags,
  4.1475 +    'mksnapshot': mksnapshot_flags,
  4.1476 +    'dtoa': dtoa_flags,
  4.1477 +    'cctest': cctest_flags,
  4.1478 +    'sample': sample_flags,
  4.1479 +    'd8': d8_flags,
  4.1480 +    'preparser': preparser_flags
  4.1481 +  }
  4.1482 +
  4.1483 +  # Generate library base name.
  4.1484 +  target_id = mode
  4.1485 +  suffix = SUFFIXES[target_id]
  4.1486 +  library_name = 'v8' + suffix
  4.1487 +  preparser_library_name = 'v8preparser' + suffix
  4.1488 +  version = GetVersion()
  4.1489 +  if context.options['soname'] == 'on':
  4.1490 +    # When building shared object with SONAME version the library name.
  4.1491 +    library_name += '-' + version
  4.1492 +
  4.1493 +  # Generate library SONAME if required by the build.
  4.1494 +  if context.options['soname'] == 'on':
  4.1495 +    soname = GetSpecificSONAME()
  4.1496 +    if soname == '':
  4.1497 +      soname = 'lib' + library_name + '.so'
  4.1498 +    env['SONAME'] = soname
  4.1499 +
  4.1500 +  # Build the object files by invoking SCons recursively.
  4.1501 +  d8_env = Environment(tools=tools)
  4.1502 +  d8_env.Replace(**context.flags['d8'])
  4.1503 +  (object_files, shell_files, mksnapshot, preparser_files) = env.SConscript(
  4.1504 +    join('src', 'SConscript'),
  4.1505 +    build_dir=join('obj', target_id),
  4.1506 +    exports='context tools d8_env',
  4.1507 +    duplicate=False
  4.1508 +  )
  4.1509 +
  4.1510 +  context.mksnapshot_targets.append(mksnapshot)
  4.1511 +
  4.1512 +  # Link the object files into a library.
  4.1513 +  env.Replace(**context.flags['v8'])
  4.1514 +
  4.1515 +  context.ApplyEnvOverrides(env)
  4.1516 +  if context.options['library'] == 'static':
  4.1517 +    library = env.StaticLibrary(library_name, object_files)
  4.1518 +    preparser_library = env.StaticLibrary(preparser_library_name,
  4.1519 +                                          preparser_files)
  4.1520 +  else:
  4.1521 +    # There seems to be a glitch in the way scons decides where to put
  4.1522 +    # PDB files when compiling using MSVC so we specify it manually.
  4.1523 +    # This should not affect any other platforms.
  4.1524 +    pdb_name = library_name + '.dll.pdb'
  4.1525 +    library = env.SharedLibrary(library_name, object_files, PDB=pdb_name)
  4.1526 +    preparser_pdb_name = preparser_library_name + '.dll.pdb';
  4.1527 +    preparser_soname = 'lib' + preparser_library_name + '.so';
  4.1528 +    preparser_library = env.SharedLibrary(preparser_library_name,
  4.1529 +                                          preparser_files,
  4.1530 +                                          PDB=preparser_pdb_name,
  4.1531 +                                          SONAME=preparser_soname)
  4.1532 +  context.library_targets.append(library)
  4.1533 +  context.library_targets.append(preparser_library)
  4.1534 +
  4.1535 +  context.ApplyEnvOverrides(d8_env)
  4.1536 +  if context.options['library'] == 'static':
  4.1537 +    shell = d8_env.Program('d8' + suffix, object_files + shell_files)
  4.1538 +  else:
  4.1539 +    shell = d8_env.Program('d8' + suffix, shell_files)
  4.1540 +    d8_env.Depends(shell, library)
  4.1541 +  context.d8_targets.append(shell)
  4.1542 +
  4.1543 +  for sample in context.samples:
  4.1544 +    sample_env = Environment(tools=tools)
  4.1545 +    sample_env.Replace(**context.flags['sample'])
  4.1546 +    sample_env.Prepend(LIBS=[library_name])
  4.1547 +    context.ApplyEnvOverrides(sample_env)
  4.1548 +    sample_object = sample_env.SConscript(
  4.1549 +      join('samples', 'SConscript'),
  4.1550 +      build_dir=join('obj', 'sample', sample, target_id),
  4.1551 +      exports='sample context tools',
  4.1552 +      duplicate=False
  4.1553 +    )
  4.1554 +    sample_name = sample + suffix
  4.1555 +    sample_program = sample_env.Program(sample_name, sample_object)
  4.1556 +    sample_env.Depends(sample_program, library)
  4.1557 +    context.sample_targets.append(sample_program)
  4.1558 +
  4.1559 +  cctest_env = env.Copy()
  4.1560 +  cctest_env.Prepend(LIBS=[library_name])
  4.1561 +  cctest_program = cctest_env.SConscript(
  4.1562 +    join('test', 'cctest', 'SConscript'),
  4.1563 +    build_dir=join('obj', 'test', target_id),
  4.1564 +    exports='context object_files tools',
  4.1565 +    duplicate=False
  4.1566 +  )
  4.1567 +  context.cctest_targets.append(cctest_program)
  4.1568 +
  4.1569 +  preparser_env = env.Copy()
  4.1570 +  preparser_env.Replace(**context.flags['preparser'])
  4.1571 +  preparser_env.Prepend(LIBS=[preparser_library_name])
  4.1572 +  context.ApplyEnvOverrides(preparser_env)
  4.1573 +  preparser_object = preparser_env.SConscript(
  4.1574 +    join('preparser', 'SConscript'),
  4.1575 +    build_dir=join('obj', 'preparser', target_id),
  4.1576 +    exports='context tools',
  4.1577 +    duplicate=False
  4.1578 +  )
  4.1579 +  preparser_name = join('obj', 'preparser', target_id, 'preparser')
  4.1580 +  preparser_program = preparser_env.Program(preparser_name, preparser_object);
  4.1581 +  preparser_env.Depends(preparser_program, preparser_library)
  4.1582 +  context.preparser_targets.append(preparser_program)
  4.1583 +
  4.1584 +  return context
  4.1585 +
  4.1586 +
  4.1587 +def Build():
  4.1588 +  opts = GetOptions()
  4.1589 +  tools = GetTools(opts)
  4.1590 +  env = Environment(options=opts, tools=tools)
  4.1591 +
  4.1592 +  Help(opts.GenerateHelpText(env))
  4.1593 +  VerifyOptions(env)
  4.1594 +  env_overrides = ParseEnvOverrides(env['env'], env['importenv'])
  4.1595 +
  4.1596 +  SourceSignatures(env['sourcesignatures'])
  4.1597 +
  4.1598 +  libraries = []
  4.1599 +  mksnapshots = []
  4.1600 +  cctests = []
  4.1601 +  samples = []
  4.1602 +  preparsers = []
  4.1603 +  d8s = []
  4.1604 +  modes = SplitList(env['mode'])
  4.1605 +  for mode in modes:
  4.1606 +    context = BuildSpecific(env.Copy(), mode, env_overrides, tools)
  4.1607 +    libraries += context.library_targets
  4.1608 +    mksnapshots += context.mksnapshot_targets
  4.1609 +    cctests += context.cctest_targets
  4.1610 +    samples += context.sample_targets
  4.1611 +    preparsers += context.preparser_targets
  4.1612 +    d8s += context.d8_targets
  4.1613 +
  4.1614 +  env.Alias('library', libraries)
  4.1615 +  env.Alias('mksnapshot', mksnapshots)
  4.1616 +  env.Alias('cctests', cctests)
  4.1617 +  env.Alias('sample', samples)
  4.1618 +  env.Alias('d8', d8s)
  4.1619 +  env.Alias('preparser', preparsers)
  4.1620 +
  4.1621 +  if env['sample']:
  4.1622 +    env.Default('sample')
  4.1623 +  else:
  4.1624 +    env.Default('library')
  4.1625 +
  4.1626 +  if env['cache']:
  4.1627 +    CacheDir(env['cache'])
  4.1628 +
  4.1629 +# We disable deprecation warnings because we need to be able to use
  4.1630 +# env.Copy without getting warnings for compatibility with older
  4.1631 +# version of scons.  Also, there's a bug in some revisions that
  4.1632 +# doesn't allow this flag to be set, so we swallow any exceptions.
  4.1633 +# Lovely.
  4.1634 +try:
  4.1635 +  SetOption('warn', 'no-deprecated')
  4.1636 +except:
  4.1637 +  pass
  4.1638 +
  4.1639 +Build()
     5.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     5.2 +++ b/node/stuff/SConstruct.patch	Thu Apr 24 18:16:37 2014 +0200
     5.3 @@ -0,0 +1,13 @@
     5.4 +--- deps/v8/SConstruct
     5.5 ++++ deps/v8/SConstruct
     5.6 +@@ -80,8 +80,8 @@
     5.7 +   },
     5.8 +   'gcc': {
     5.9 +     'all': {
    5.10 +-      'CCFLAGS':      ['$DIALECTFLAGS', '$WARNINGFLAGS'],
    5.11 +-      'CXXFLAGS':     ['-fno-rtti', '-fno-exceptions'],
    5.12 ++      'CCFLAGS':      ['$DIALECTFLAGS', '$WARNINGFLAGS', '-march=armv6'],
    5.13 ++      'CXXFLAGS':     ['-fno-rtti', '-fno-exceptions', '-march=armv6'],
    5.14 +     },
    5.15 +     'visibility:hidden': {
    5.16 +       # Use visibility=default to disable this.