# Copyright 2013 the V8 project authors. All rights reserved. # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are # met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above # copyright notice, this list of conditions and the following # disclaimer in the documentation and/or other materials provided # with the distribution. # * Neither the name of Google Inc. nor the names of its # contributors may be used to endorse or promote products derived # from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # Shared definitions for all V8-related targets. { 'variables': { 'msvs_use_common_release': 0, 'clang%': 0, 'asan%': 0, 'lsan%': 0, 'msan%': 0, 'tsan%': 0, 'ubsan%': 0, 'ubsan_vptr%': 0, 'v8_target_arch%': '<(target_arch)', 'v8_host_byteorder%': '<!(python -c "import sys; print sys.byteorder")', # Native Client builds currently use the V8 ARM JIT and # arm/simulator-arm.cc to defer the significant effort required # for NaCl JIT support. The nacl_target_arch variable provides # the 'true' target arch for places in this file that need it. # TODO(bradchen): get rid of nacl_target_arch when someday # NaCl V8 builds stop using the ARM simulator 'nacl_target_arch%': 'none', # must be set externally # Setting 'v8_can_use_vfp32dregs' to 'true' will cause V8 to use the VFP # registers d16-d31 in the generated code, both in the snapshot and for the # ARM target. Leaving the default value of 'false' will avoid the use of # these registers in the snapshot and use CPU feature probing when running # on the target. 'v8_can_use_vfp32dregs%': 'false', 'arm_test_noprobe%': 'off', # Similar to vfp but on MIPS. 'v8_can_use_fpu_instructions%': 'true', # Similar to the ARM hard float ABI but on MIPS. 'v8_use_mips_abi_hardfloat%': 'true', # Force disable libstdc++ debug mode. 'disable_glibcxx_debug%': 0, 'v8_enable_backtrace%': 0, # Enable profiling support. Only required on Windows. 'v8_enable_prof%': 0, # Some versions of GCC 4.5 seem to need -fno-strict-aliasing. 'v8_no_strict_aliasing%': 0, # Chrome needs this definition unconditionally. For standalone V8 builds, # it's handled in gypfiles/standalone.gypi. 'want_separate_host_toolset%': 1, # Toolset the shell binary should be compiled for. Possible values are # 'host' and 'target'. # The setting is ignored if want_separate_host_toolset is 0. 'v8_toolset_for_shell%': 'target', 'host_os%': '<(OS)', 'werror%': '-Werror', # For a shared library build, results in "libv8-<(soname_version).so". 'soname_version%': '', # Allow to suppress the array bounds warning (default is no suppression). 'wno_array_bounds%': '', # Override where to find binutils 'binutils_dir%': '', 'conditions': [ ['OS=="linux" and host_arch=="x64"', { 'binutils_dir%': 'third_party/binutils/Linux_x64/Release/bin', }], ['OS=="linux" and host_arch=="ia32"', { 'binutils_dir%': 'third_party/binutils/Linux_ia32/Release/bin', }], # linux_use_bundled_gold: whether to use the gold linker binary checked # into third_party/binutils. Force this off via GYP_DEFINES when you # are using a custom toolchain and need to control -B in ldflags. # Do not use 32-bit gold on 32-bit hosts as it runs out address space # for component=static_library builds. ['OS=="linux" and (target_arch=="x64" or target_arch=="arm")', { 'linux_use_bundled_gold%': 1, }, { 'linux_use_bundled_gold%': 0, }], # linux_use_bundled_binutils: whether to use the binary binutils # checked into third_party/binutils. These are not multi-arch so cannot # be used except on x86 and x86-64 (the only two architectures which # are currently checke in). Force this off via GYP_DEFINES when you # are using a custom toolchain and need to control -B in cflags. ['OS=="linux" and (target_arch=="ia32" or target_arch=="x64")', { 'linux_use_bundled_binutils%': 1, }, { 'linux_use_bundled_binutils%': 0, }], # linux_use_gold_flags: whether to use build flags that rely on gold. # On by default for x64 Linux. ['OS=="linux" and target_arch=="x64"', { 'linux_use_gold_flags%': 1, }, { 'linux_use_gold_flags%': 0, }], ], # Link-Time Optimizations 'use_lto%': 0, }, 'conditions': [ ['host_arch=="ia32" or host_arch=="x64" or \ host_arch=="ppc" or host_arch=="ppc64" or \ host_arch=="s390" or host_arch=="s390x" or \ clang==1', { 'variables': { 'host_cxx_is_biarch%': 1, }, }, { 'variables': { 'host_cxx_is_biarch%': 0, }, }], ['target_arch=="ia32" or target_arch=="x64" or target_arch=="x87" or \ target_arch=="ppc" or target_arch=="ppc64" or target_arch=="s390" or \ target_arch=="s390x" or clang==1', { 'variables': { 'target_cxx_is_biarch%': 1, }, }, { 'variables': { 'target_cxx_is_biarch%': 0, }, }], ], 'target_defaults': { 'conditions': [ ['v8_target_arch=="arm"', { 'defines': [ 'V8_TARGET_ARCH_ARM', ], 'conditions': [ [ 'arm_version==7 or arm_version=="default"', { 'defines': [ 'CAN_USE_ARMV7_INSTRUCTIONS', ], }], [ 'arm_fpu=="vfpv3-d16" or arm_fpu=="default"', { 'defines': [ 'CAN_USE_VFP3_INSTRUCTIONS', ], }], [ 'arm_fpu=="vfpv3"', { 'defines': [ 'CAN_USE_VFP3_INSTRUCTIONS', 'CAN_USE_VFP32DREGS', ], }], [ 'arm_fpu=="neon"', { 'defines': [ 'CAN_USE_VFP3_INSTRUCTIONS', 'CAN_USE_VFP32DREGS', 'CAN_USE_NEON', ], }], [ 'arm_test_noprobe=="on"', { 'defines': [ 'ARM_TEST_NO_FEATURE_PROBE', ], }], ], 'target_conditions': [ ['_toolset=="host"', { 'conditions': [ ['v8_target_arch==host_arch', { # Host built with an Arm CXX compiler. 'conditions': [ [ 'arm_version==7', { 'cflags': ['-march=armv7-a',], }], [ 'arm_version==7 or arm_version=="default"', { 'conditions': [ [ 'arm_fpu!="default"', { 'cflags': ['-mfpu=<(arm_fpu)',], }], ], }], [ 'arm_float_abi!="default"', { 'cflags': ['-mfloat-abi=<(arm_float_abi)',], }], [ 'arm_thumb==1', { 'cflags': ['-mthumb',], }], [ 'arm_thumb==0', { 'cflags': ['-marm',], }], ], }, { # 'v8_target_arch!=host_arch' # Host not built with an Arm CXX compiler (simulator build). 'conditions': [ [ 'arm_float_abi=="hard"', { 'defines': [ 'USE_EABI_HARDFLOAT=1', ], }], [ 'arm_float_abi=="softfp" or arm_float_abi=="default"', { 'defines': [ 'USE_EABI_HARDFLOAT=0', ], }], ], }], ], }], # _toolset=="host" ['_toolset=="target"', { 'conditions': [ ['v8_target_arch==target_arch', { # Target built with an Arm CXX compiler. 'conditions': [ [ 'arm_version==7', { 'cflags': ['-march=armv7-a',], }], [ 'arm_version==7 or arm_version=="default"', { 'conditions': [ [ 'arm_fpu!="default"', { 'cflags': ['-mfpu=<(arm_fpu)',], }], ], }], [ 'arm_float_abi!="default"', { 'cflags': ['-mfloat-abi=<(arm_float_abi)',], }], [ 'arm_thumb==1', { 'cflags': ['-mthumb',], }], [ 'arm_thumb==0', { 'cflags': ['-marm',], }], ], }, { # 'v8_target_arch!=target_arch' # Target not built with an Arm CXX compiler (simulator build). 'conditions': [ [ 'arm_float_abi=="hard"', { 'defines': [ 'USE_EABI_HARDFLOAT=1', ], }], [ 'arm_float_abi=="softfp" or arm_float_abi=="default"', { 'defines': [ 'USE_EABI_HARDFLOAT=0', ], }], ], }], # Disable GCC LTO for v8 # v8 is optimized for speed. Because GCC LTO merges flags at link # time, we disable LTO to prevent any -O2 flags from taking # precedence over v8's -Os flag. However, LLVM LTO does not work # this way so we keep LTO enabled under LLVM. ['clang==0 and use_lto==1', { 'cflags!': [ '-flto', '-ffat-lto-objects', ], }], ], }], # _toolset=="target" ], }], # v8_target_arch=="arm" ['v8_target_arch=="arm64"', { 'defines': [ 'V8_TARGET_ARCH_ARM64', ], }], ['v8_target_arch=="s390" or v8_target_arch=="s390x"', { 'defines': [ 'V8_TARGET_ARCH_S390', ], 'conditions': [ ['v8_target_arch=="s390x"', { 'defines': [ 'V8_TARGET_ARCH_S390X', ], }], ['v8_host_byteorder=="little"', { 'defines': [ 'V8_TARGET_ARCH_S390_LE_SIM', ], }], ], }], # s390 ['v8_target_arch=="ppc" or v8_target_arch=="ppc64"', { 'defines': [ 'V8_TARGET_ARCH_PPC', ], 'conditions': [ ['v8_target_arch=="ppc64"', { 'defines': [ 'V8_TARGET_ARCH_PPC64', ], }], ['v8_host_byteorder=="little"', { 'defines': [ 'V8_TARGET_ARCH_PPC_LE', ], }], ['v8_host_byteorder=="big"', { 'defines': [ 'V8_TARGET_ARCH_PPC_BE', ], 'conditions': [ ['OS=="aix"', { # Work around AIX ceil, trunc and round oddities. 'cflags': [ '-mcpu=power5+ -mfprnd' ], }], ['OS=="aix"', { # Work around AIX assembler popcntb bug. 'cflags': [ '-mno-popcntb' ], }], ], }], ], }], # ppc ['v8_target_arch=="ia32"', { 'defines': [ 'V8_TARGET_ARCH_IA32', ], }], # v8_target_arch=="ia32" ['v8_target_arch=="x87"', { 'defines': [ 'V8_TARGET_ARCH_X87', ], 'cflags': ['-march=i586'], }], # v8_target_arch=="x87" ['(v8_target_arch=="mips" or v8_target_arch=="mipsel" \ or v8_target_arch=="mips64" or v8_target_arch=="mips64el") \ and v8_target_arch==target_arch', { 'target_conditions': [ ['_toolset=="target"', { # Target built with a Mips CXX compiler. 'variables': { 'ldso_path%': '<!(/bin/echo -n $LDSO_PATH)', 'ld_r_path%': '<!(/bin/echo -n $LD_R_PATH)', }, 'conditions': [ ['ldso_path!=""', { 'ldflags': ['-Wl,--dynamic-linker=<(ldso_path)'], }], ['ld_r_path!=""', { 'ldflags': ['-Wl,--rpath=<(ld_r_path)'], }], [ 'clang==1', { 'cflags': ['-integrated-as'], }], ], }], ], }], ['v8_target_arch=="mips"', { 'defines': [ 'V8_TARGET_ARCH_MIPS', ], 'conditions': [ [ 'v8_can_use_fpu_instructions=="true"', { 'defines': [ 'CAN_USE_FPU_INSTRUCTIONS', ], }], [ 'v8_use_mips_abi_hardfloat=="true"', { 'defines': [ '__mips_hard_float=1', 'CAN_USE_FPU_INSTRUCTIONS', ], }, { 'defines': [ '__mips_soft_float=1' ] }], ], 'target_conditions': [ ['_toolset=="target"', { 'conditions': [ ['v8_target_arch==target_arch', { # Target built with a Mips CXX compiler. 'cflags': [ '-EB', '-Wno-error=array-bounds', # Workaround https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56273 ], 'ldflags': ['-EB'], 'conditions': [ [ 'v8_use_mips_abi_hardfloat=="true"', { 'cflags': ['-mhard-float'], 'ldflags': ['-mhard-float'], }, { 'cflags': ['-msoft-float'], 'ldflags': ['-msoft-float'], }], ['mips_arch_variant=="r6"', { 'defines': [ '_MIPS_ARCH_MIPS32R6', 'FPU_MODE_FP64', ], 'cflags!': ['-mfp32', '-mfpxx'], 'conditions': [ [ 'clang==0', { 'cflags': ['-Wa,-mips32r6'], }], ], 'cflags': ['-mips32r6'], 'ldflags': ['-mips32r6'], }], ['mips_arch_variant=="r2"', { 'conditions': [ [ 'mips_fpu_mode=="fp64"', { 'defines': [ '_MIPS_ARCH_MIPS32R2', 'FPU_MODE_FP64', ], 'cflags': ['-mfp64'], }], ['mips_fpu_mode=="fpxx"', { 'defines': [ '_MIPS_ARCH_MIPS32R2', 'FPU_MODE_FPXX', ], 'cflags': ['-mfpxx'], }], ['mips_fpu_mode=="fp32"', { 'defines': [ '_MIPS_ARCH_MIPS32R2', 'FPU_MODE_FP32', ], 'cflags': ['-mfp32'], }], [ 'clang==0', { 'cflags': ['-Wa,-mips32r2'], }], ], 'cflags': ['-mips32r2'], 'ldflags': ['-mips32r2'], }], ['mips_arch_variant=="r1"', { 'defines': [ 'FPU_MODE_FP32', ], 'cflags!': ['-mfp64', '-mfpxx'], 'conditions': [ [ 'clang==0', { 'cflags': ['-Wa,-mips32'], }], ], 'cflags': ['-mips32'], 'ldflags': ['-mips32'], }], ['mips_arch_variant=="rx"', { 'defines': [ '_MIPS_ARCH_MIPS32RX', 'FPU_MODE_FPXX', ], 'cflags!': ['-mfp64', '-mfp32'], 'conditions': [ [ 'clang==0', { 'cflags': ['-Wa,-mips32'], }], ], 'cflags': ['-mips32', '-mfpxx'], 'ldflags': ['-mips32'], }], ], }, { # 'v8_target_arch!=target_arch' # Target not built with an MIPS CXX compiler (simulator build). 'conditions': [ ['mips_arch_variant=="r6"', { 'defines': [ '_MIPS_ARCH_MIPS32R6', 'FPU_MODE_FP64', ], }], ['mips_arch_variant=="r2"', { 'conditions': [ [ 'mips_fpu_mode=="fp64"', { 'defines': [ '_MIPS_ARCH_MIPS32R2', 'FPU_MODE_FP64', ], }], ['mips_fpu_mode=="fpxx"', { 'defines': [ '_MIPS_ARCH_MIPS32R2', 'FPU_MODE_FPXX', ], }], ['mips_fpu_mode=="fp32"', { 'defines': [ '_MIPS_ARCH_MIPS32R2', 'FPU_MODE_FP32', ], }], ], }], ['mips_arch_variant=="r1"', { 'defines': [ 'FPU_MODE_FP32', ], }], ['mips_arch_variant=="rx"', { 'defines': [ '_MIPS_ARCH_MIPS32RX', 'FPU_MODE_FPXX', ], }], ], }], ], }], #_toolset=="target" ['_toolset=="host"', { 'conditions': [ ['mips_arch_variant=="rx"', { 'defines': [ '_MIPS_ARCH_MIPS32RX', 'FPU_MODE_FPXX', ], }], ['mips_arch_variant=="r6"', { 'defines': [ '_MIPS_ARCH_MIPS32R6', 'FPU_MODE_FP64', ], }], ['mips_arch_variant=="r2"', { 'conditions': [ ['mips_fpu_mode=="fp64"', { 'defines': [ '_MIPS_ARCH_MIPS32R2', 'FPU_MODE_FP64', ], }], ['mips_fpu_mode=="fpxx"', { 'defines': [ '_MIPS_ARCH_MIPS32R2', 'FPU_MODE_FPXX', ], }], ['mips_fpu_mode=="fp32"', { 'defines': [ '_MIPS_ARCH_MIPS32R2', 'FPU_MODE_FP32' ], }], ], }], ['mips_arch_variant=="r1"', { 'defines': ['FPU_MODE_FP32',], }], ] }], #_toolset=="host" ], }], # v8_target_arch=="mips" ['v8_target_arch=="mipsel"', { 'defines': [ 'V8_TARGET_ARCH_MIPS', ], 'conditions': [ [ 'v8_can_use_fpu_instructions=="true"', { 'defines': [ 'CAN_USE_FPU_INSTRUCTIONS', ], }], [ 'v8_use_mips_abi_hardfloat=="true"', { 'defines': [ '__mips_hard_float=1', 'CAN_USE_FPU_INSTRUCTIONS', ], }, { 'defines': [ '__mips_soft_float=1' ], }], ], 'target_conditions': [ ['_toolset=="target"', { 'conditions': [ ['v8_target_arch==target_arch', { # Target built with a Mips CXX compiler. 'cflags': [ '-EL', '-Wno-error=array-bounds', # Workaround https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56273 ], 'ldflags': ['-EL'], 'conditions': [ [ 'v8_use_mips_abi_hardfloat=="true"', { 'cflags': ['-mhard-float'], 'ldflags': ['-mhard-float'], }, { 'cflags': ['-msoft-float'], 'ldflags': ['-msoft-float'], }], ['mips_arch_variant=="r6"', { 'defines': [ '_MIPS_ARCH_MIPS32R6', 'FPU_MODE_FP64', ], 'cflags!': ['-mfp32', '-mfpxx'], 'conditions': [ [ 'clang==0', { 'cflags': ['-Wa,-mips32r6'], }], ], 'cflags': ['-mips32r6'], 'ldflags': ['-mips32r6'], }], ['mips_arch_variant=="r2"', { 'conditions': [ [ 'mips_fpu_mode=="fp64"', { 'defines': [ '_MIPS_ARCH_MIPS32R2', 'FPU_MODE_FP64', ], 'cflags': ['-mfp64'], }], ['mips_fpu_mode=="fpxx"', { 'defines': [ '_MIPS_ARCH_MIPS32R2', 'FPU_MODE_FPXX', ], 'cflags': ['-mfpxx'], }], ['mips_fpu_mode=="fp32"', { 'defines': [ '_MIPS_ARCH_MIPS32R2', 'FPU_MODE_FP32', ], 'cflags': ['-mfp32'], }], [ 'clang==0', { 'cflags': ['-Wa,-mips32r2'], }], ], 'cflags': ['-mips32r2'], 'ldflags': ['-mips32r2'], }], ['mips_arch_variant=="r1"', { 'defines': [ 'FPU_MODE_FP32', ], 'cflags!': ['-mfp64', '-mfpxx'], 'conditions': [ [ 'clang==0', { 'cflags': ['-Wa,-mips32'], }], ], 'cflags': ['-mips32'], 'ldflags': ['-mips32'], }], ['mips_arch_variant=="rx"', { 'defines': [ '_MIPS_ARCH_MIPS32RX', 'FPU_MODE_FPXX', ], 'cflags!': ['-mfp64', '-mfp32'], 'conditions': [ [ 'clang==0', { 'cflags': ['-Wa,-mips32'], }], ], 'cflags': ['-mips32', '-mfpxx'], 'ldflags': ['-mips32'], }], ['mips_arch_variant=="loongson"', { 'defines': [ '_MIPS_ARCH_LOONGSON', 'FPU_MODE_FP32', ], 'cflags!': ['-mfp64', '-mfpxx'], 'conditions': [ [ 'clang==0', { 'cflags': ['-Wa,-mips3'], }], ], 'cflags': ['-mips3', '-mfp32'], }], ], }, { # 'v8_target_arch!=target_arch' # Target not built with an MIPS CXX compiler (simulator build). 'conditions': [ ['mips_arch_variant=="r6"', { 'defines': [ '_MIPS_ARCH_MIPS32R6', 'FPU_MODE_FP64', ], }], ['mips_arch_variant=="r2"', { 'conditions': [ [ 'mips_fpu_mode=="fp64"', { 'defines': [ '_MIPS_ARCH_MIPS32R2', 'FPU_MODE_FP64', ], }], ['mips_fpu_mode=="fpxx"', { 'defines': [ '_MIPS_ARCH_MIPS32R2', 'FPU_MODE_FPXX', ], }], ['mips_fpu_mode=="fp32"', { 'defines': [ '_MIPS_ARCH_MIPS32R2', 'FPU_MODE_FP32', ], }], ], }], ['mips_arch_variant=="r1"', { 'defines': [ 'FPU_MODE_FP32', ], }], ['mips_arch_variant=="rx"', { 'defines': [ '_MIPS_ARCH_MIPS32RX', 'FPU_MODE_FPXX', ], }], ['mips_arch_variant=="loongson"', { 'defines': [ '_MIPS_ARCH_LOONGSON', 'FPU_MODE_FP32', ], }], ], }], ], }], #_toolset=="target ['_toolset=="host"', { 'conditions': [ ['mips_arch_variant=="rx"', { 'defines': [ '_MIPS_ARCH_MIPS32RX', 'FPU_MODE_FPXX', ], }], ['mips_arch_variant=="r6"', { 'defines': [ '_MIPS_ARCH_MIPS32R6', 'FPU_MODE_FP64', ], }], ['mips_arch_variant=="r2"', { 'conditions': [ ['mips_fpu_mode=="fp64"', { 'defines': [ '_MIPS_ARCH_MIPS32R2', 'FPU_MODE_FP64', ], }], ['mips_fpu_mode=="fpxx"', { 'defines': [ '_MIPS_ARCH_MIPS32R2', 'FPU_MODE_FPXX', ], }], ['mips_fpu_mode=="fp32"', { 'defines': [ '_MIPS_ARCH_MIPS32R2', 'FPU_MODE_FP32' ], }], ], }], ['mips_arch_variant=="r1"', { 'defines': ['FPU_MODE_FP32',], }], ['mips_arch_variant=="loongson"', { 'defines': [ '_MIPS_ARCH_LOONGSON', 'FPU_MODE_FP32', ], }], ] }], ], }], # v8_target_arch=="mipsel" ['v8_target_arch=="mips64el" or v8_target_arch=="mips64"', { 'defines': [ 'V8_TARGET_ARCH_MIPS64', ], 'conditions': [ [ 'v8_can_use_fpu_instructions=="true"', { 'defines': [ 'CAN_USE_FPU_INSTRUCTIONS', ], }], [ 'v8_host_byteorder=="little"', { 'defines': [ 'V8_TARGET_ARCH_MIPS64_LE', ], }], [ 'v8_host_byteorder=="big"', { 'defines': [ 'V8_TARGET_ARCH_MIPS64_BE', ], }], [ 'v8_use_mips_abi_hardfloat=="true"', { 'defines': [ '__mips_hard_float=1', 'CAN_USE_FPU_INSTRUCTIONS', ], }, { 'defines': [ '__mips_soft_float=1' ], }], ], 'target_conditions': [ ['_toolset=="target"', { 'conditions': [ ['v8_target_arch==target_arch', { 'cflags': [ '-Wno-error=array-bounds', # Workaround https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56273 ], 'conditions': [ ['v8_target_arch=="mips64el"', { 'cflags': ['-EL'], 'ldflags': ['-EL'], }], ['v8_target_arch=="mips64"', { 'cflags': ['-EB'], 'ldflags': ['-EB'], }], [ 'v8_use_mips_abi_hardfloat=="true"', { 'cflags': ['-mhard-float'], 'ldflags': ['-mhard-float'], }, { 'cflags': ['-msoft-float'], 'ldflags': ['-msoft-float'], }], ['mips_arch_variant=="r6"', { 'defines': ['_MIPS_ARCH_MIPS64R6',], 'conditions': [ [ 'clang==0', { 'cflags': ['-Wa,-mips64r6'], }], ], 'cflags': ['-mips64r6', '-mabi=64'], 'ldflags': ['-mips64r6', '-mabi=64'], }], ['mips_arch_variant=="r2"', { 'defines': ['_MIPS_ARCH_MIPS64R2',], 'conditions': [ [ 'clang==0', { 'cflags': ['-Wa,-mips64r2'], }], ], 'cflags': ['-mips64r2', '-mabi=64'], 'ldflags': ['-mips64r2', '-mabi=64'], }], ], }, { # 'v8_target_arch!=target_arch' # Target not built with an MIPS CXX compiler (simulator build). 'conditions': [ ['mips_arch_variant=="r6"', { 'defines': ['_MIPS_ARCH_MIPS64R6',], }], ['mips_arch_variant=="r2"', { 'defines': ['_MIPS_ARCH_MIPS64R2',], }], ], }], ], }], #'_toolset=="target" ['_toolset=="host"', { 'conditions': [ ['mips_arch_variant=="r6"', { 'defines': ['_MIPS_ARCH_MIPS64R6',], }], ['mips_arch_variant=="r2"', { 'defines': ['_MIPS_ARCH_MIPS64R2',], }], ], }], #'_toolset=="host" ], }], # v8_target_arch=="mips64el" ['v8_target_arch=="x64"', { 'defines': [ 'V8_TARGET_ARCH_X64', ], 'xcode_settings': { 'ARCHS': [ 'x86_64' ], }, 'msvs_settings': { 'VCLinkerTool': { 'StackReserveSize': '2097152', }, }, 'msvs_configuration_platform': 'x64', }], # v8_target_arch=="x64" ['v8_target_arch=="x32"', { 'defines': [ # x32 port shares the source code with x64 port. 'V8_TARGET_ARCH_X64', 'V8_TARGET_ARCH_32_BIT', ], 'cflags': [ '-mx32', # Inhibit warning if long long type is used. '-Wno-long-long', ], 'ldflags': [ '-mx32', ], }], # v8_target_arch=="x32" ['linux_use_gold_flags==1', { # Newer gccs and clangs support -fuse-ld, use the flag to force gold # selection. # gcc -- http://gcc.gnu.org/onlinedocs/gcc-4.8.0/gcc/Optimize-Options.html 'ldflags': [ '-fuse-ld=gold', ], }], ['linux_use_bundled_binutils==1', { 'cflags': [ '-B<!(cd <(DEPTH) && pwd -P)/<(binutils_dir)', ], }], ['linux_use_bundled_gold==1', { # Put our binutils, which contains gold in the search path. We pass # the path to gold to the compiler. gyp leaves unspecified what the # cwd is when running the compiler, so the normal gyp path-munging # fails us. This hack gets the right path. 'ldflags': [ '-B<!(cd <(DEPTH) && pwd -P)/<(binutils_dir)', ], }], ['OS=="win"', { 'defines': [ 'WIN32', ], # 4351: VS 2005 and later are warning us that they've fixed a bug # present in VS 2003 and earlier. 'msvs_disabled_warnings': [4351], 'msvs_configuration_attributes': { 'OutputDirectory': '<(DEPTH)\\build\\$(ConfigurationName)', 'IntermediateDirectory': '$(OutDir)\\obj\\$(ProjectName)', 'CharacterSet': '1', }, }], ['OS=="win" and v8_target_arch=="ia32"', { 'msvs_settings': { 'VCCLCompilerTool': { # Ensure no surprising artifacts from 80bit double math with x86. 'AdditionalOptions': ['/arch:SSE2'], }, }, }], ['OS=="win" and v8_enable_prof==1', { 'msvs_settings': { 'VCLinkerTool': { 'GenerateMapFile': 'true', }, }, }], ['(OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="solaris" \ or OS=="netbsd" or OS=="mac" or OS=="android" or OS=="qnx") and \ v8_target_arch=="ia32"', { 'cflags': [ '-msse2', '-mfpmath=sse', '-mmmx', # Allows mmintrin.h for MMX intrinsics. ], }], ['(OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="solaris" \ or OS=="netbsd" or OS=="mac" or OS=="android" or OS=="qnx") and \ (v8_target_arch=="arm" or v8_target_arch=="ia32" or \ v8_target_arch=="x87" or v8_target_arch=="mips" or \ v8_target_arch=="mipsel" or v8_target_arch=="ppc" or \ v8_target_arch=="s390")', { 'target_conditions': [ ['_toolset=="host"', { 'conditions': [ ['host_cxx_is_biarch==1', { 'conditions': [ ['host_arch=="s390" or host_arch=="s390x"', { 'cflags': [ '-m31' ], 'ldflags': [ '-m31' ] },{ 'cflags': [ '-m32' ], 'ldflags': [ '-m32' ] }], ], }], ], 'xcode_settings': { 'ARCHS': [ 'i386' ], }, }], ['_toolset=="target"', { 'conditions': [ ['target_cxx_is_biarch==1 and nacl_target_arch!="nacl_x64"', { 'conditions': [ ['host_arch=="s390" or host_arch=="s390x"', { 'cflags': [ '-m31' ], 'ldflags': [ '-m31' ] },{ 'cflags': [ '-m32' ], 'ldflags': [ '-m32' ], }], ], }], ], 'xcode_settings': { 'ARCHS': [ 'i386' ], }, }], ], }], ['(OS=="linux" or OS=="android") and \ (v8_target_arch=="x64" or v8_target_arch=="arm64" or \ v8_target_arch=="ppc64" or v8_target_arch=="s390x")', { 'target_conditions': [ ['_toolset=="host"', { 'conditions': [ ['host_cxx_is_biarch==1', { 'cflags': [ '-m64' ], 'ldflags': [ '-m64' ] }], ], }], ['_toolset=="target"', { 'conditions': [ ['target_cxx_is_biarch==1', { 'cflags': [ '-m64' ], 'ldflags': [ '-m64' ], }], ] }], ], }], ['OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="solaris" \ or OS=="netbsd" or OS=="qnx" or OS=="aix"', { 'conditions': [ [ 'v8_no_strict_aliasing==1', { 'cflags': [ '-fno-strict-aliasing' ], }], ], # conditions }], ['OS=="solaris"', { 'defines': [ '__C99FEATURES__=1' ], # isinf() etc. }], ['OS=="freebsd" or OS=="openbsd"', { 'cflags': [ '-I/usr/local/include' ], }], ['OS=="netbsd"', { 'cflags': [ '-I/usr/pkg/include' ], }], ['OS=="aix"', { 'defines': [ # Support for malloc(0) '_LINUX_SOURCE_COMPAT=1', '_ALL_SOURCE=1'], 'conditions': [ [ 'v8_target_arch=="ppc"', { 'ldflags': [ '-Wl,-bmaxdata:0x60000000/dsa' ], }], [ 'v8_target_arch=="ppc64"', { 'cflags': [ '-maix64' ], 'ldflags': [ '-maix64' ], }], ], }], ], # conditions 'configurations': { # Abstract configuration for v8_optimized_debug == 0. 'DebugBase0': { 'abstract': 1, 'msvs_settings': { 'VCCLCompilerTool': { 'Optimization': '0', 'conditions': [ ['component=="shared_library"', { 'RuntimeLibrary': '3', # /MDd }, { 'RuntimeLibrary': '1', # /MTd }], ], }, 'VCLinkerTool': { 'LinkIncremental': '2', }, }, 'variables': { 'v8_enable_slow_dchecks%': 1, }, 'conditions': [ ['OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="netbsd" or \ OS=="qnx" or OS=="aix"', { 'cflags!': [ '-O3', '-O2', '-O1', '-Os', ], 'cflags': [ '-fdata-sections', '-ffunction-sections', ], }], ['OS=="mac"', { 'xcode_settings': { 'GCC_OPTIMIZATION_LEVEL': '0', # -O0 }, }], ['v8_enable_slow_dchecks==1', { 'defines': [ 'ENABLE_SLOW_DCHECKS', ], }], ], }, # DebugBase0 # Abstract configuration for v8_optimized_debug == 1. 'DebugBase1': { 'abstract': 1, 'msvs_settings': { 'VCCLCompilerTool': { 'Optimization': '2', 'InlineFunctionExpansion': '2', 'EnableIntrinsicFunctions': 'true', 'FavorSizeOrSpeed': '0', 'StringPooling': 'true', 'BasicRuntimeChecks': '0', 'conditions': [ ['component=="shared_library"', { 'RuntimeLibrary': '3', #/MDd }, { 'RuntimeLibrary': '1', #/MTd }], ], }, 'VCLinkerTool': { 'LinkIncremental': '1', 'OptimizeReferences': '2', 'EnableCOMDATFolding': '2', }, }, 'variables': { 'v8_enable_slow_dchecks%': 0, }, 'conditions': [ ['OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="netbsd" or \ OS=="qnx" or OS=="aix"', { 'cflags!': [ '-O0', '-O1', '-Os', ], 'cflags': [ '-fdata-sections', '-ffunction-sections', ], 'conditions': [ # TODO(crbug.com/272548): Avoid -O3 in NaCl # Don't use -O3 with sanitizers. ['nacl_target_arch=="none" and asan==0 and msan==0 and lsan==0 \ and tsan==0 and ubsan==0 and ubsan_vptr==0', { 'cflags': ['-O3'], 'cflags!': ['-O2'], }, { 'cflags': ['-O2'], 'cflags!': ['-O3'], }], ], }], ['OS=="mac"', { 'xcode_settings': { 'GCC_OPTIMIZATION_LEVEL': '3', # -O3 'GCC_STRICT_ALIASING': 'YES', }, }], ['v8_enable_slow_dchecks==1', { 'defines': [ 'ENABLE_SLOW_DCHECKS', ], }], ], }, # DebugBase1 # Common settings for the Debug configuration. 'DebugBaseCommon': { 'abstract': 1, 'defines': [ 'ENABLE_DISASSEMBLER', 'V8_ENABLE_CHECKS', 'OBJECT_PRINT', 'VERIFY_HEAP', 'DEBUG', 'TRACE_MAPS' ], 'conditions': [ ['OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="netbsd" or \ OS=="qnx" or OS=="aix"', { 'cflags': [ '-Woverloaded-virtual', '<(wno_array_bounds)', ], }], ['OS=="linux" and v8_enable_backtrace==1', { # Support for backtrace_symbols. 'ldflags': [ '-rdynamic' ], }], ['OS=="linux" and disable_glibcxx_debug==0', { # Enable libstdc++ debugging facilities to help catch problems # early, see http://crbug.com/65151 . 'defines': ['_GLIBCXX_DEBUG=1',], }], ['OS=="aix"', { 'ldflags': [ '-Wl,-bbigtoc' ], 'conditions': [ ['v8_target_arch=="ppc64"', { 'cflags': [ '-maix64 -mcmodel=large' ], }], ], }], ['OS=="android"', { 'variables': { 'android_full_debug%': 1, }, 'conditions': [ ['android_full_debug==0', { # Disable full debug if we want a faster v8 in a debug build. # TODO(2304): pass DISABLE_DEBUG_ASSERT instead of hiding DEBUG. 'defines!': [ 'DEBUG', 'ENABLE_SLOW_DCHECKS', ], }], ], }], # TODO(pcc): Re-enable in LTO builds once we've fixed the intermittent # link failures (crbug.com/513074). ['linux_use_gold_flags==1 and use_lto==0', { 'target_conditions': [ ['_toolset=="target"', { 'ldflags': [ # Experimentation found that using four linking threads # saved ~20% of link time. # https://groups.google.com/a/chromium.org/group/chromium-dev/browse_thread/thread/281527606915bb36 # Only apply this to the target linker, since the host # linker might not be gold, but isn't used much anyway. '-Wl,--threads', '-Wl,--thread-count=4', ], }], ], }], ], }, # DebugBaseCommon 'Debug': { 'inherit_from': ['DebugBaseCommon'], 'conditions': [ ['v8_optimized_debug==0', { 'inherit_from': ['DebugBase0'], }, { 'inherit_from': ['DebugBase1'], }], ], }, # Debug 'ReleaseBase': { 'abstract': 1, 'variables': { 'v8_enable_slow_dchecks%': 0, }, 'conditions': [ ['OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="netbsd" \ or OS=="aix"', { 'cflags!': [ '-Os', ], 'cflags': [ '-fdata-sections', '-ffunction-sections', '<(wno_array_bounds)', ], 'conditions': [ # TODO(crbug.com/272548): Avoid -O3 in NaCl # Don't use -O3 with sanitizers. ['nacl_target_arch=="none" and asan==0 and msan==0 and lsan==0 \ and tsan==0 and ubsan==0 and ubsan_vptr==0', { 'cflags': ['-O3'], 'cflags!': ['-O2'], }, { 'cflags': ['-O2'], 'cflags!': ['-O3'], }], ], }], ['OS=="android"', { 'cflags!': [ '-O3', '-Os', ], 'cflags': [ '-fdata-sections', '-ffunction-sections', '-O2', ], }], ['OS=="mac"', { 'xcode_settings': { 'GCC_OPTIMIZATION_LEVEL': '3', # -O3 # -fstrict-aliasing. Mainline gcc # enables this at -O2 and above, # but Apple gcc does not unless it # is specified explicitly. 'GCC_STRICT_ALIASING': 'YES', }, }], # OS=="mac" ['OS=="win"', { 'msvs_settings': { 'VCCLCompilerTool': { 'Optimization': '2', 'InlineFunctionExpansion': '2', 'EnableIntrinsicFunctions': 'true', 'FavorSizeOrSpeed': '0', 'StringPooling': 'true', 'conditions': [ ['component=="shared_library"', { 'RuntimeLibrary': '2', #/MD }, { 'RuntimeLibrary': '0', #/MT }], ], }, 'VCLinkerTool': { 'LinkIncremental': '1', 'OptimizeReferences': '2', 'EnableCOMDATFolding': '2', }, }, }], # OS=="win" ['v8_enable_slow_dchecks==1', { 'defines': [ 'ENABLE_SLOW_DCHECKS', ], }], ], # conditions }, # Release 'Release': { 'inherit_from': ['ReleaseBase'], }, # Debug 'conditions': [ [ 'OS=="win"', { # TODO(bradnelson): add a gyp mechanism to make this more graceful. 'Debug_x64': { 'inherit_from': ['DebugBaseCommon'], 'conditions': [ ['v8_optimized_debug==0', { 'inherit_from': ['DebugBase0'], }, { 'inherit_from': ['DebugBase1'], }], ], }, 'Release_x64': { 'inherit_from': ['ReleaseBase'], }, }], ], }, # configurations }, # target_defaults }