build: build v8 with -fvisibility=hidden -fvisibility-inlines-hidden

PR-URL: https://github.com/nodejs/node/pull/56290
Reviewed-By: Richard Lau <richard.lau@ibm.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
Joyee Cheung 2025-10-19 16:56:57 +02:00 committed by GitHub
parent 48f3c8e4f2
commit 3437e1c4bd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 30 additions and 8 deletions

View File

@ -491,6 +491,19 @@
['clang==0 and OS!="win"', {
'cflags': [ '-Wno-restrict', ],
}],
# TODO(joyeecheung): investigate if it breaks addons.
# ['OS=="mac"', {
# 'xcode_settings': {
# 'GCC_SYMBOLS_PRIVATE_EXTERN': 'YES', # -fvisibility=hidden
# 'GCC_INLINES_ARE_PRIVATE_EXTERN': 'YES' # -fvisibility-inlines-hidden
# },
# }],
# ['OS!="win" or clang==1', {
# 'cflags': [
# '-fvisibility=hidden',
# '-fvisibility-inlines-hidden'
# ],
# }],
# Pointer authentication for ARM64.
['target_arch=="arm64"', {
'target_conditions': [

View File

@ -46,22 +46,31 @@
}
},
'conditions': [
['OS=="mac"', {
# Hide symbols that are not explicitly exported with V8_EXPORT.
# TODO(joyeecheung): enable it on other platforms. Currently gcc times out
# or run out of memory with -fvisibility=hidden on some machines in the CI.
'xcode_settings': {
'GCC_SYMBOLS_PRIVATE_EXTERN': 'YES', # -fvisibility=hidden
},
# Build with -fvisibility=hidden and -fvisibility-inlines-hidden to avoid
# including unnecessary internal symbols, which may lead to run-time fixups.
# This is not done on AIX where symbols are exported by tools/create_expfile.sh
# see https://github.com/nodejs/node/pull/56290#issuecomment-2582703109
['OS!="aix"', {
'defines': [
'BUILDING_V8_SHARED', # Make V8_EXPORT visible.
],
]
}],
['node_shared=="true"', {
'defines': [
'V8_TLS_USED_IN_LIBRARY', # Enable V8_TLS_LIBRARY_MODE.
],
}],
['OS=="mac"', {
'xcode_settings': {
'GCC_SYMBOLS_PRIVATE_EXTERN': 'YES', # -fvisibility=hidden
'GCC_INLINES_ARE_PRIVATE_EXTERN': 'YES' # -fvisibility-inlines-hidden
},
}, 'OS!="aix" and (OS!="win" or clang==1)', {
'cflags': [
'-fvisibility=hidden',
'-fvisibility-inlines-hidden'
],
}], # MSVC hides the non-public symbols by default so no need to configure it.
],
},
'targets': [