1 # Copyright 2012 the V8 project authors. All rights reserved. 2 # Redistribution and use in source and binary forms, with or without 3 # modification, are permitted provided that the following conditions are 4 # met: 5 # 6 # * Redistributions of source code must retain the above copyright 7 # notice, this list of conditions and the following disclaimer. 8 # * Redistributions in binary form must reproduce the above 9 # copyright notice, this list of conditions and the following 10 # disclaimer in the documentation and/or other materials provided 11 # with the distribution. 12 # * Neither the name of Google Inc. nor the names of its 13 # contributors may be used to endorse or promote products derived 14 # from this software without specific prior written permission. 15 # 16 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 17 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 19 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 20 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 28 # Shared definitions for all V8-related targets. 29 30 { 31 'variables': { 32 'use_system_v8%': 0, 33 'msvs_use_common_release': 0, 34 'gcc_version%': 'unknown', 35 'v8_compress_startup_data%': 'off', 36 'v8_target_arch%': '<(target_arch)', 37 38 # Setting 'v8_can_use_unaligned_accesses' to 'true' will allow the code 39 # generated by V8 to do unaligned memory access, and setting it to 'false' 40 # will ensure that the generated code will always do aligned memory 41 # accesses. The default value of 'default' will try to determine the correct 42 # setting. Note that for Intel architectures (ia32 and x64) unaligned memory 43 # access is allowed for all CPUs. 44 'v8_can_use_unaligned_accesses%': 'default', 45 46 # Setting 'v8_can_use_vfp_instructions' to 'true' will enable use of ARM VFP 47 # instructions in the V8 generated code. VFP instructions will be enabled 48 # both for the snapshot and for the ARM target. Leaving the default value 49 # of 'false' will avoid VFP instructions in the snapshot and use CPU feature 50 # probing when running on the target. 51 'v8_can_use_vfp_instructions%': 'false', 52 53 # Similar to vfp but on MIPS. 54 'v8_can_use_fpu_instructions%': 'true', 55 56 # Setting v8_use_arm_eabi_hardfloat to true will turn on V8 support for ARM 57 # EABI calling convention where double arguments are passed in VFP 58 # registers. Note that the GCC flag '-mfloat-abi=hard' should be used as 59 # well when compiling for the ARM target. 60 'v8_use_arm_eabi_hardfloat%': 'false', 61 62 # Similar to the ARM hard float ABI but on MIPS. 63 'v8_use_mips_abi_hardfloat%': 'true', 64 65 # Default arch variant for MIPS. 66 'mips_arch_variant%': 'mips32r2', 67 68 'v8_enable_debugger_support%': 1, 69 70 'v8_enable_disassembler%': 0, 71 72 'v8_object_print%': 0, 73 74 'v8_enable_gdbjit%': 0, 75 76 # Enable profiling support. Only required on Windows. 77 'v8_enable_prof%': 0, 78 79 # Some versions of GCC 4.5 seem to need -fno-strict-aliasing. 80 'v8_no_strict_aliasing%': 0, 81 82 # Chrome needs this definition unconditionally. For standalone V8 builds, 83 # it's handled in build/standalone.gypi. 84 'want_separate_host_toolset%': 1, 85 86 'v8_use_snapshot%': 'true', 87 'host_os%': '<(OS)', 88 'v8_use_liveobjectlist%': 'false', 89 'werror%': '-Werror', 90 91 # With post mortem support enabled, metadata is embedded into libv8 that 92 # describes various parameters of the VM for use by debuggers. See 93 # tools/gen-postmortem-metadata.py for details. 94 'v8_postmortem_support%': 'false', 95 96 # For a shared library build, results in "libv8-<(soname_version).so". 97 'soname_version%': '', 98 }, 99 'target_defaults': { 100 'conditions': [ 101 ['v8_enable_debugger_support==1', { 102 'defines': ['ENABLE_DEBUGGER_SUPPORT',], 103 }], 104 ['v8_enable_disassembler==1', { 105 'defines': ['ENABLE_DISASSEMBLER',], 106 }], 107 ['v8_object_print==1', { 108 'defines': ['OBJECT_PRINT',], 109 }], 110 ['v8_enable_gdbjit==1', { 111 'defines': ['ENABLE_GDB_JIT_INTERFACE',], 112 }], 113 ['OS!="mac"', { 114 # TODO(mark): The OS!="mac" conditional is temporary. It can be 115 # removed once the Mac Chromium build stops setting target_arch to 116 # ia32 and instead sets it to mac. Other checks in this file for 117 # OS=="mac" can be removed at that time as well. This can be cleaned 118 # up once http://crbug.com/44205 is fixed. 119 'conditions': [ 120 ['v8_target_arch=="arm"', { 121 'defines': [ 122 'V8_TARGET_ARCH_ARM', 123 ], 124 'conditions': [ 125 [ 'v8_can_use_unaligned_accesses=="true"', { 126 'defines': [ 127 'CAN_USE_UNALIGNED_ACCESSES=1', 128 ], 129 }], 130 [ 'v8_can_use_unaligned_accesses=="false"', { 131 'defines': [ 132 'CAN_USE_UNALIGNED_ACCESSES=0', 133 ], 134 }], 135 [ 'v8_can_use_vfp_instructions=="true"', { 136 'defines': [ 137 'CAN_USE_VFP_INSTRUCTIONS', 138 ], 139 }], 140 [ 'v8_use_arm_eabi_hardfloat=="true"', { 141 'defines': [ 142 'USE_EABI_HARDFLOAT=1', 143 'CAN_USE_VFP_INSTRUCTIONS', 144 ], 145 'cflags': [ 146 '-mfloat-abi=hard', 147 ], 148 }, { 149 'defines': [ 150 'USE_EABI_HARDFLOAT=0', 151 ], 152 }], 153 # The ARM assembler assumes the host is 32 bits, 154 # so force building 32-bit host tools. 155 ['host_arch=="x64" or OS=="android"', { 156 'target_conditions': [ 157 ['_toolset=="host"', { 158 'cflags': ['-m32'], 159 'ldflags': ['-m32'], 160 }], 161 ], 162 }], 163 ], 164 }], 165 ['v8_target_arch=="ia32"', { 166 'defines': [ 167 'V8_TARGET_ARCH_IA32', 168 ], 169 }], 170 ['v8_target_arch=="mips"', { 171 'defines': [ 172 'V8_TARGET_ARCH_MIPS', 173 ], 174 'conditions': [ 175 [ 'target_arch=="mips"', { 176 'target_conditions': [ 177 ['_toolset=="target"', { 178 'cflags': ['-EL'], 179 'ldflags': ['-EL'], 180 'conditions': [ 181 [ 'v8_use_mips_abi_hardfloat=="true"', { 182 'cflags': ['-mhard-float'], 183 'ldflags': ['-mhard-float'], 184 }, { 185 'cflags': ['-msoft-float'], 186 'ldflags': ['-msoft-float'], 187 }], 188 ['mips_arch_variant=="mips32r2"', { 189 'cflags': ['-mips32r2', '-Wa,-mips32r2'], 190 }], 191 ['mips_arch_variant=="loongson"', { 192 'cflags': ['-mips3', '-Wa,-mips3'], 193 }, { 194 'cflags': ['-mips32', '-Wa,-mips32'], 195 }], 196 ], 197 }], 198 ], 199 }], 200 [ 'v8_can_use_fpu_instructions=="true"', { 201 'defines': [ 202 'CAN_USE_FPU_INSTRUCTIONS', 203 ], 204 }], 205 [ 'v8_use_mips_abi_hardfloat=="true"', { 206 'defines': [ 207 '__mips_hard_float=1', 208 'CAN_USE_FPU_INSTRUCTIONS', 209 ], 210 }, { 211 'defines': [ 212 '__mips_soft_float=1' 213 ], 214 }], 215 ['mips_arch_variant=="mips32r2"', { 216 'defines': ['_MIPS_ARCH_MIPS32R2',], 217 }], 218 ['mips_arch_variant=="loongson"', { 219 'defines': ['_MIPS_ARCH_LOONGSON',], 220 }], 221 # The MIPS assembler assumes the host is 32 bits, 222 # so force building 32-bit host tools. 223 ['host_arch=="x64"', { 224 'target_conditions': [ 225 ['_toolset=="host"', { 226 'cflags': ['-m32'], 227 'ldflags': ['-m32'], 228 }], 229 ], 230 }], 231 ], 232 }], 233 ['v8_target_arch=="x64"', { 234 'defines': [ 235 'V8_TARGET_ARCH_X64', 236 ], 237 }], 238 ], 239 }], 240 ['v8_use_liveobjectlist=="true"', { 241 'defines': [ 242 'ENABLE_DEBUGGER_SUPPORT', 243 'INSPECTOR', 244 'OBJECT_PRINT', 245 'LIVEOBJECTLIST', 246 ], 247 }], 248 ['v8_compress_startup_data=="bz2"', { 249 'defines': [ 250 'COMPRESS_STARTUP_DATA_BZ2', 251 ], 252 }], 253 ['OS=="win"', { 254 'defines': [ 255 'WIN32', 256 ], 257 }], 258 ['OS=="win" and v8_enable_prof==1', { 259 'msvs_settings': { 260 'VCLinkerTool': { 261 'GenerateMapFile': 'true', 262 }, 263 }, 264 }], 265 ['OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="solaris" \ 266 or OS=="netbsd"', { 267 'conditions': [ 268 [ 'target_arch=="ia32"', { 269 'cflags': [ '-m32' ], 270 'ldflags': [ '-m32' ], 271 }], 272 [ 'v8_no_strict_aliasing==1', { 273 'cflags': [ '-fno-strict-aliasing' ], 274 }], 275 ], # conditions 276 }], 277 ['OS=="solaris"', { 278 'defines': [ '__C99FEATURES__=1' ], # isinf() etc. 279 }], 280 ], # conditions 281 'configurations': { 282 'Debug': { 283 'defines': [ 284 'DEBUG', 285 'ENABLE_DISASSEMBLER', 286 'V8_ENABLE_CHECKS', 287 'OBJECT_PRINT', 288 ], 289 'msvs_settings': { 290 'VCCLCompilerTool': { 291 'Optimization': '0', 292 293 'conditions': [ 294 ['OS=="win" and component=="shared_library"', { 295 'RuntimeLibrary': '3', # /MDd 296 }, { 297 'RuntimeLibrary': '1', # /MTd 298 }], 299 ], 300 }, 301 'VCLinkerTool': { 302 'LinkIncremental': '2', 303 # For future reference, the stack size needs to be increased 304 # when building for Windows 64-bit, otherwise some test cases 305 # can cause stack overflow. 306 # 'StackReserveSize': '297152', 307 }, 308 }, 309 'conditions': [ 310 ['OS=="freebsd" or OS=="openbsd"', { 311 'cflags': [ '-I/usr/local/include' ], 312 }], 313 ['OS=="netbsd"', { 314 'cflags': [ '-I/usr/pkg/include' ], 315 }], 316 ['OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="netbsd"', { 317 'cflags': [ '-Wall', '<(werror)', '-W', '-Wno-unused-parameter', 318 '-Wnon-virtual-dtor', '-Woverloaded-virtual' ], 319 }], 320 ], 321 }, # Debug 322 'Release': { 323 'conditions': [ 324 ['OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="netbsd" \ 325 or OS=="android"', { 326 'cflags!': [ 327 '-O2', 328 '-Os', 329 ], 330 'cflags': [ 331 '-fdata-sections', 332 '-ffunction-sections', 333 '-fomit-frame-pointer', 334 '-O3', 335 ], 336 'conditions': [ 337 [ 'gcc_version==44 and clang==0', { 338 'cflags': [ 339 # Avoid crashes with gcc 4.4 in the v8 test suite. 340 '-fno-tree-vrp', 341 ], 342 }], 343 ], 344 }], 345 ['OS=="freebsd" or OS=="openbsd"', { 346 'cflags': [ '-I/usr/local/include' ], 347 }], 348 ['OS=="netbsd"', { 349 'cflags': [ '-I/usr/pkg/include' ], 350 }], 351 ['OS=="mac"', { 352 'xcode_settings': { 353 'GCC_OPTIMIZATION_LEVEL': '3', # -O3 354 355 # -fstrict-aliasing. Mainline gcc 356 # enables this at -O2 and above, 357 # but Apple gcc does not unless it 358 # is specified explicitly. 359 'GCC_STRICT_ALIASING': 'YES', 360 }, 361 }], # OS=="mac" 362 ['OS=="win"', { 363 'msvs_configuration_attributes': { 364 'OutputDirectory': '<(DEPTH)\\build\\$(ConfigurationName)', 365 'IntermediateDirectory': '$(OutDir)\\obj\\$(ProjectName)', 366 'CharacterSet': '1', 367 }, 368 'msvs_settings': { 369 'VCCLCompilerTool': { 370 'Optimization': '2', 371 'InlineFunctionExpansion': '2', 372 'EnableIntrinsicFunctions': 'true', 373 'FavorSizeOrSpeed': '0', 374 'OmitFramePointers': 'true', 375 'StringPooling': 'true', 376 377 'conditions': [ 378 ['OS=="win" and component=="shared_library"', { 379 'RuntimeLibrary': '2', #/MD 380 }, { 381 'RuntimeLibrary': '0', #/MT 382 }], 383 ], 384 }, 385 'VCLinkerTool': { 386 'LinkIncremental': '1', 387 'OptimizeReferences': '2', 388 'OptimizeForWindows98': '1', 389 'EnableCOMDATFolding': '2', 390 # For future reference, the stack size needs to be 391 # increased when building for Windows 64-bit, otherwise 392 # some test cases can cause stack overflow. 393 # 'StackReserveSize': '297152', 394 }, 395 }, 396 }], # OS=="win" 397 ], # conditions 398 }, # Release 399 }, # configurations 400 }, # target_defaults 401 } 402