mirror of
https://github.com/nodejs/node.git
synced 2024-11-21 21:19:50 +01:00
build: enabling lto at configure
This modification allows for compiling with link time optimization (lto) using the flag --enable-lto. Refs: https://github.com/nodejs/node/issues/7400 PR-URL: https://github.com/nodejs/node/pull/21677 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net>
This commit is contained in:
parent
4d42083d1a
commit
32cad739b1
11
common.gypi
11
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' ]
|
||||
|
24
configure
vendored
24
configure
vendored
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user