Index: build/standalone.gypi |
diff --git a/build/standalone.gypi b/build/standalone.gypi |
index f175ce004020251845964c3ad88b3517fcb9b459..3d81a16c00bcc8f48dfbbcb0dfbce8c7b7268042 100644 |
--- a/build/standalone.gypi |
+++ b/build/standalone.gypi |
@@ -88,6 +88,13 @@ |
'clang_dir%': '<(base_dir)/third_party/llvm-build/Release+Asserts', |
+ 'use_lto%': 0, |
+ |
+ # Control Flow Integrity for virtual calls and casts. |
+ # See http://clang.llvm.org/docs/ControlFlowIntegrity.html |
+ 'cfi_vptr%': 0, |
+ 'cfi_diag%': 0, |
+ |
# goma settings. |
# 1 to use goma. |
# If no gomadir is set, it uses the default gomadir. |
@@ -105,6 +112,16 @@ |
}, { |
'host_clang%': '0', |
}], |
+ # 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" or OS=="android") and (target_arch=="x64" or target_arch=="arm" or (target_arch=="ia32" and host_arch=="x64"))', { |
+ 'linux_use_bundled_gold%': 1, |
+ }, { |
+ 'linux_use_bundled_gold%': 0, |
+ }], |
], |
}, |
'base_dir%': '<(base_dir)', |
@@ -122,6 +139,10 @@ |
'tsan%': '<(tsan)', |
'sanitizer_coverage%': '<(sanitizer_coverage)', |
'use_custom_libcxx%': '<(use_custom_libcxx)', |
+ 'linux_use_bundled_gold%': '<(linux_use_bundled_gold)', |
+ 'use_lto%': '<(use_lto)', |
+ 'cfi_vptr%': '<(cfi_vptr)', |
+ 'cfi_diag%': '<(cfi_diag)', |
# Add a simple extra solely for the purpose of the cctests |
'v8_extra_library_files': ['../test/cctest/test-extra.js'], |
@@ -207,6 +228,9 @@ |
# the C++ standard library is used. |
'use_custom_libcxx%': 1, |
}], |
+ ['cfi_vptr==1', { |
+ 'use_lto%': 1, |
+ }], |
['OS=="linux"', { |
# Gradually roll out v8_use_external_startup_data. |
# Should eventually be default enabled on all platforms. |
@@ -535,6 +559,21 @@ |
}], |
], |
}], |
+ ['linux_use_bundled_gold==1 and not (clang==0 and use_lto==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. |
+ # |
+ # Disabled when using GCC LTO because GCC also uses the -B search |
+ # path at link time to find "as", and our bundled "as" can only |
+ # target x86. |
+ 'ldflags': [ |
+ # Note, Chromium allows ia32 host arch as well, we limit this to |
+ # x64 in v8. |
+ '-B<(base_dir)/third_party/binutils/Linux_x64/Release/bin', |
+ ], |
+ }], |
], |
}, |
}], |
@@ -1144,5 +1183,100 @@ |
['CXX.host_wrapper', '<(gomadir)/gomacc'], |
], |
}], |
+ ['use_lto==1', { |
+ 'target_defaults': { |
+ 'target_conditions': [ |
+ ['_toolset=="target"', { |
+ 'cflags': [ |
+ '-flto', |
+ ], |
+ }], |
+ ], |
+ }, |
+ }], |
+ ['use_lto==1 and clang==0', { |
+ 'target_defaults': { |
+ 'target_conditions': [ |
+ ['_toolset=="target"', { |
+ 'cflags': [ |
+ '-ffat-lto-objects', |
+ ], |
+ }], |
+ ], |
+ }, |
+ }], |
+ ['use_lto==1 and clang==1', { |
+ 'target_defaults': { |
+ 'target_conditions': [ |
+ ['_toolset=="target"', { |
+ 'arflags': [ |
+ '--plugin', '<(clang_dir)/lib/LLVMgold.so', |
+ ], |
+ # Apply a lower optimization level with lto. Chromium does this |
+ # for non-official builds only - a differentiation that doesn't |
+ # exist in v8. |
+ 'ldflags': [ |
+ '-Wl,--plugin-opt,O1', |
+ ], |
+ }], |
+ ], |
+ }, |
+ }], |
+ ['use_lto==1 and clang==0', { |
+ 'target_defaults': { |
+ 'target_conditions': [ |
+ ['_toolset=="target"', { |
+ 'ldflags': [ |
+ '-flto=32', |
+ ], |
+ }], |
+ ], |
+ }, |
+ }], |
+ ['use_lto==1 and clang==1', { |
+ 'target_defaults': { |
+ 'target_conditions': [ |
+ ['_toolset=="target"', { |
+ 'ldflags': [ |
+ '-flto', |
+ ], |
+ }], |
+ ], |
+ }, |
+ }], |
+ ['cfi_diag==1', { |
+ 'target_defaults': { |
+ 'target_conditions': [ |
+ ['_toolset=="target"', { |
+ 'cflags': [ |
+ '-fno-sanitize-trap=cfi', |
+ '-fsanitize-recover=cfi', |
+ ], |
+ 'ldflags': [ |
+ '-fno-sanitize-trap=cfi', |
+ '-fsanitize-recover=cfi', |
+ ], |
+ }], |
+ ], |
+ }, |
+ }], |
+ ['cfi_vptr==1', { |
+ 'target_defaults': { |
+ 'target_conditions': [ |
+ ['_toolset=="target"', { |
+ 'cflags': [ |
+ '-fsanitize=cfi-vcall', |
+ '-fsanitize=cfi-derived-cast', |
+ '-fsanitize=cfi-unrelated-cast', |
+ ], |
+ 'ldflags': [ |
+ '-fsanitize=cfi-vcall', |
+ '-fsanitize=cfi-derived-cast', |
+ '-fsanitize=cfi-unrelated-cast', |
+ ], |
+ }], |
+ ], |
+ }, |
+ }], |
], |
} |