summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common.gypi11
-rwxr-xr-xconfigure24
2 files changed, 35 insertions, 0 deletions
diff --git a/common.gypi b/common.gypi
index 65eb7caf57..9d74b46a8d 100644
--- a/common.gypi
+++ b/common.gypi
@@ -176,6 +176,17 @@
['OS!="mac" and OS!="win"', {
'cflags': [ '-fno-omit-frame-pointer' ],
}],
+ ['OS=="linux"', {
+ 'variables': {
+ 'lto': ' -flto=4 -fuse-linker-plugin -ffat-lto-objects ',
+ },
+ 'conditions': [
+ ['enable_lto=="true"', {
+ 'cflags': ['<(lto)'],
+ 'ldflags': ['<(lto)'],
+ },],
+ ],
+ },],
['OS == "android"', {
'cflags': [ '-fPIE' ],
'ldflags': [ '-fPIE', '-pie' ]
diff --git a/configure b/configure
index 094d8e09f7..068fb8a769 100755
--- a/configure
+++ b/configure
@@ -157,6 +157,11 @@ parser.add_option("--enable-vtune-profiling",
"JavaScript code executed in nodejs. This feature is only available "
"for x32, x86, and x64 architectures.")
+parser.add_option("--enable-lto",
+ action="store_true",
+ dest="enable_lto",
+ help="Enable compiling with lto of a binary. This feature is only available "
+ "on linux with gcc and g++.")
parser.add_option("--link-module",
action="append",
@@ -932,6 +937,25 @@ def configure_node(o):
else:
o['variables']['node_enable_v8_vtunejit'] = 'false'
+ if flavor != 'linux' and (options.enable_lto):
+ raise Exception(
+ 'The lto option is supported only on linux.')
+
+ if flavor == 'linux':
+ if options.enable_lto:
+ version_checked = (5, 4, 1)
+ for compiler in [(CC, 'c'), (CXX, 'c++')]:
+ ok, is_clang, clang_version, compiler_version = \
+ try_check_compiler(compiler[0], compiler[1])
+ compiler_version_num = tuple(map(int, compiler_version))
+ if is_clang or compiler_version_num < version_checked:
+ version_checked_str = ".".join(map(str, version_checked))
+ raise Exception(
+ 'The option --enable-lto is supported for gcc and gxx %s'
+ ' or newer only.' % (version_checked_str))
+
+ o['variables']['enable_lto'] = b(options.enable_lto)
+
if flavor in ('solaris', 'mac', 'linux', 'freebsd'):
use_dtrace = not options.without_dtrace
# Don't enable by default on linux and freebsd