![#DeleteGithub](/assets/img/avatar_default.png)
PIE allows an application to utilize the full benefits of ASLR to prevent itself from exploitations, but it was disabled for all released versions of Electron (3.0 and prior). Currently, PIE is already enabled since 9294fac but enabling it for all released version is still an ongoing work (#14961). This patch backports PIE to the 3.0.x branch. Signed-off-by: Tom Li <tomli@tomli.me>
339 lines
12 KiB
Python
339 lines
12 KiB
Python
{
|
|
'includes': [
|
|
'toolchain.gypi',
|
|
'brightray/brightray.gypi',
|
|
],
|
|
'variables': {
|
|
# Tell crashpad to build as external project.
|
|
'crashpad_dependencies': 'external',
|
|
# Required by breakpad.
|
|
'os_bsd': 0,
|
|
'chromeos': 0,
|
|
# Reflects node's config.gypi.
|
|
'component%': 'static_library',
|
|
'debug_http2': 'false',
|
|
'debug_nghttp2': 'false',
|
|
# XXX(alexeykuzmin): Must match the clang version we use. See `clang -v`.
|
|
'llvm_version': '7.0',
|
|
'python': 'python',
|
|
'openssl_fips': '',
|
|
'openssl_no_asm': 1,
|
|
'use_openssl_def': 0,
|
|
'openssl_product': 'libopenssl.a',
|
|
'node_debug_lib': 'false',
|
|
'node_release_urlbase': 'https://atom.io/download/electron',
|
|
'node_byteorder': '<!(node <(DEPTH)/tools/get-endianness.js)',
|
|
'node_target_type': 'shared_library',
|
|
'node_install_npm': 'false',
|
|
'node_prefix': '',
|
|
'node_shared': 'true',
|
|
'node_shared_cares': 'false',
|
|
'node_shared_http_parser': 'false',
|
|
'node_shared_libuv': 'false',
|
|
'node_shared_openssl': 'false',
|
|
'node_shared_v8': 'true',
|
|
'node_shared_zlib': 'false',
|
|
'node_tag': '',
|
|
'node_use_dtrace': 'false',
|
|
'node_use_etw': 'false',
|
|
'node_use_mdb': 'false',
|
|
'node_use_openssl': 'true',
|
|
'node_use_perfctr': 'false',
|
|
'node_use_v8_platform': 'false',
|
|
'node_use_bundled_v8': 'false',
|
|
'node_enable_d8': 'false',
|
|
'uv_library': 'static_library',
|
|
'uv_parent_path': 'vendor/node/deps/uv',
|
|
'uv_use_dtrace': 'false',
|
|
'v8_base': '',
|
|
'v8_postmortem_support': 'false',
|
|
'v8_enable_i18n_support': 'false',
|
|
'v8_enable_inspector': '1',
|
|
},
|
|
# Settings to compile node under Windows.
|
|
'target_defaults': {
|
|
'target_conditions': [
|
|
['_target_name in ["libuv", "http_parser", "openssl", "openssl-cli", "cares", "node_lib", "zlib", "nghttp2"]', {
|
|
'msvs_disabled_warnings': [
|
|
4003, # not enough actual parameters for macro 'V'
|
|
4013, # 'free' undefined; assuming extern returning int
|
|
4018, # signed/unsigned mismatch
|
|
4054, #
|
|
4055, # 'type cast' : from data pointer 'void *' to function pointer
|
|
4057, # 'function' : 'volatile LONG *' differs in indirection to slightly different base types from 'unsigned long *'
|
|
4065, # switch statement contains 'default' but no 'case' labels
|
|
4129, # unrecognized character escape sequence
|
|
4189, #
|
|
4131, # uses old-style declarator
|
|
4133, # incompatible types
|
|
4146, # unary minus operator applied to unsigned type, result still unsigned
|
|
4164, # intrinsic function not declared
|
|
4152, # function/data pointer conversion in expression
|
|
4206, # translation unit is empty
|
|
4204, # non-constant aggregate initializer
|
|
4210, # nonstandard extension used : function given file scope
|
|
4214, # bit field types other than int
|
|
4232, # address of dllimport 'free' is not static, identity not guaranteed
|
|
4291, # no matching operator delete found
|
|
4295, # array is too small to include a terminating null character
|
|
4309, # 'static_cast': truncation of constant value
|
|
4311, # 'type cast': pointer truncation from 'void *const ' to 'unsigned long'
|
|
4389, # '==' : signed/unsigned mismatch
|
|
4456, # declaration of 'm' hides previous local declaration
|
|
4457, # declaration of 'message' hides function parameter
|
|
4459, # declaration of 'wq' hides global declaration
|
|
4477, # format string '%.*s' requires an argument of type 'int'
|
|
4505, # unreferenced local function has been removed
|
|
4701, # potentially uninitialized local variable 'sizew' used
|
|
4703, # potentially uninitialized local pointer variable 'req' used
|
|
4706, # assignment within conditional expression
|
|
4804, # unsafe use of type 'bool' in operation
|
|
4996, # this function or variable may be unsafe.
|
|
],
|
|
'msvs_settings': {
|
|
'VCCLCompilerTool': {
|
|
'WarnAsError': 'false',
|
|
},
|
|
},
|
|
'xcode_settings': {
|
|
'GCC_TREAT_WARNINGS_AS_ERRORS': 'NO',
|
|
'WARNING_CFLAGS': [
|
|
'-Wno-unknown-warning-option',
|
|
'-Wno-parentheses-equality',
|
|
'-Wno-unused-function',
|
|
'-Wno-sometimes-uninitialized',
|
|
'-Wno-pointer-sign',
|
|
'-Wno-sign-compare',
|
|
'-Wno-string-plus-int',
|
|
'-Wno-unused-variable',
|
|
'-Wno-deprecated-declarations',
|
|
'-Wno-return-type',
|
|
'-Wno-gnu-folding-constant',
|
|
'-Wno-shift-negative-value',
|
|
'-Wno-varargs', # https://git.io/v6Olj
|
|
'-Wno-unused-private-field',
|
|
],
|
|
},
|
|
'conditions': [
|
|
['OS=="linux"', {
|
|
'cflags': [
|
|
'-Wno-unused-function',
|
|
'-Wno-unused-variable',
|
|
'-Wno-unused-value',
|
|
'-Wno-deprecated-declarations',
|
|
'-Wno-return-type',
|
|
'-Wno-format',
|
|
'-Wno-varargs', # https://git.io/v6Olj
|
|
# Required when building as shared library.
|
|
'-fPIC',
|
|
],
|
|
}],
|
|
['OS=="linux" and clang==1', {
|
|
'cflags': [
|
|
'-Wno-pointer-sign',
|
|
'-Wno-parentheses-equality',
|
|
'-Wno-sometimes-uninitialized',
|
|
'-Wno-string-plus-int',
|
|
'-Wno-shift-negative-value',
|
|
'-Wno-reserved-user-defined-literal',
|
|
'-Wno-implicit-function-declaration',
|
|
'-Wno-long-long',
|
|
],
|
|
}],
|
|
],
|
|
}],
|
|
['_target_name=="node_lib"', {
|
|
'include_dirs': [
|
|
'<(libchromiumcontent_src_dir)',
|
|
'<(libchromiumcontent_src_dir)/third_party/icu/source/common',
|
|
'<(libchromiumcontent_src_dir)/third_party/icu/source/i18n',
|
|
'<(libchromiumcontent_src_dir)/v8',
|
|
'<(libchromiumcontent_src_dir)/v8/include',
|
|
],
|
|
'defines': [
|
|
# Export V8 symbols from node.dll / libnode.so
|
|
'BUILDING_V8_SHARED',
|
|
'BUILDING_V8_PLATFORM_SHARED',
|
|
'BUILDING_V8_BASE_SHARED',
|
|
'NODE_WITHOUT_NODE_OPTIONS',
|
|
],
|
|
'conditions': [
|
|
['OS=="mac" and libchromiumcontent_component==0', {
|
|
# -all_load is the "whole-archive" on macOS.
|
|
'xcode_settings': {
|
|
'OTHER_LDFLAGS': [ '-Wl,-all_load' ],
|
|
},
|
|
}],
|
|
['OS=="win"', {
|
|
# Fix passing fd across modules, see |osfhandle.h| for more.
|
|
'sources': [
|
|
'<(DEPTH)/atom/node/osfhandle.cc',
|
|
'<(DEPTH)/atom/node/osfhandle.h',
|
|
],
|
|
'include_dirs': [
|
|
'<(DEPTH)/atom/node',
|
|
],
|
|
'libraries': [
|
|
# Node is using networking API but linking with this itself.
|
|
'-lwinmm.lib',
|
|
# Needed by V8.
|
|
'-ldbghelp.lib',
|
|
'-lshlwapi.lib',
|
|
],
|
|
'msvs_settings': {
|
|
# Change location of some hard-coded paths.
|
|
'VCLinkerTool': {
|
|
'AdditionalOptions!': [
|
|
'/WHOLEARCHIVE:<(PRODUCT_DIR)\\lib\\zlib<(STATIC_LIB_SUFFIX)',
|
|
'/WHOLEARCHIVE:<(PRODUCT_DIR)\\lib\\libuv<(STATIC_LIB_SUFFIX)',
|
|
'/WHOLEARCHIVE:<(PRODUCT_DIR)\\lib\\libopenssl<(openssl_product)',
|
|
'/WHOLEARCHIVE:<(PRODUCT_DIR)\\lib\\<(openssl_product)',
|
|
],
|
|
'AdditionalOptions': [
|
|
'/WHOLEARCHIVE:<(PRODUCT_DIR)\\obj\\vendor\\node\\deps\\zlib\\zlib<(STATIC_LIB_SUFFIX)',
|
|
'/WHOLEARCHIVE:<(PRODUCT_DIR)\\obj\\vendor\\node\\deps\\uv\\libuv<(STATIC_LIB_SUFFIX)',
|
|
'/WHOLEARCHIVE:<(PRODUCT_DIR)\\obj\\vendor\\node\\deps\\openssl\\openssl<(STATIC_LIB_SUFFIX)',
|
|
],
|
|
},
|
|
},
|
|
}],
|
|
['OS=="linux" and libchromiumcontent_component==0', {
|
|
# Prevent the linker from stripping symbols.
|
|
'ldflags': [
|
|
'-Wl,--whole-archive',
|
|
'<@(libchromiumcontent_v8_libraries)',
|
|
'-Wl,--no-whole-archive',
|
|
],
|
|
}, {
|
|
'libraries': [
|
|
'<@(libchromiumcontent_v8_libraries)',
|
|
],
|
|
}],
|
|
],
|
|
}],
|
|
['_target_name=="openssl"', {
|
|
'xcode_settings': {
|
|
'DEAD_CODE_STRIPPING': 'YES', # -Wl,-dead_strip
|
|
'GCC_INLINES_ARE_PRIVATE_EXTERN': 'YES',
|
|
'GCC_SYMBOLS_PRIVATE_EXTERN': 'YES',
|
|
},
|
|
'cflags': [
|
|
'-fvisibility=hidden',
|
|
],
|
|
}],
|
|
['_target_name=="openssl-cli"', {
|
|
'ldflags!': [
|
|
'-nostdlib++',
|
|
]
|
|
}],
|
|
['_target_name=="libuv"', {
|
|
'conditions': [
|
|
['OS=="win"', {
|
|
# Expose libuv's symbols.
|
|
'defines': [
|
|
'BUILDING_UV_SHARED=1',
|
|
],
|
|
}], # OS=="win"
|
|
],
|
|
}],
|
|
['_target_name.startswith("crashpad")', {
|
|
'conditions': [
|
|
['OS=="mac"', {
|
|
'xcode_settings': {
|
|
'WARNING_CFLAGS': [
|
|
'-Wno-unused-private-field',
|
|
'-Wno-address-of-packed-member',
|
|
],
|
|
},
|
|
}], # OS=="mac"
|
|
],
|
|
}],
|
|
['_target_name.startswith("breakpad") or _target_name in ["crash_report_sender", "dump_syms"]', {
|
|
'conditions': [
|
|
['OS=="mac"', {
|
|
'xcode_settings': {
|
|
'WARNING_CFLAGS': [
|
|
'-Wno-deprecated-declarations',
|
|
'-Wno-deprecated-register',
|
|
'-Wno-unused-private-field',
|
|
'-Wno-unused-function',
|
|
],
|
|
},
|
|
}], # OS=="mac"
|
|
['OS=="linux"', {
|
|
'cflags': [
|
|
'-Wno-empty-body',
|
|
'-fPIC',
|
|
],
|
|
}], # OS=="linux"
|
|
['OS=="win"', {
|
|
'msvs_disabled_warnings': [
|
|
# unreferenced local function has been removed.
|
|
4505,
|
|
],
|
|
}], # OS=="win"
|
|
],
|
|
}],
|
|
['OS=="linux" and _toolset=="target" and _target_name in ["dump_syms", "node_lib"]', {
|
|
'conditions': [
|
|
['libchromiumcontent_component==0', {
|
|
'libraries': [
|
|
'<(libchromiumcontent_dir)/libc++.a',
|
|
],
|
|
'ldflags': [
|
|
'-lpthread',
|
|
],
|
|
}, {
|
|
'libraries': [
|
|
'<(libchromiumcontent_dir)/libc++.so',
|
|
],
|
|
'ldflags': [
|
|
'-Wl,-rpath=\$$ORIGIN',
|
|
],
|
|
}],
|
|
],
|
|
}]
|
|
],
|
|
'msvs_cygwin_shell': 0, # Strangely setting it to 1 would make building under cygwin fail.
|
|
'msvs_disabled_warnings': [
|
|
4005, # (node.h) macro redefinition
|
|
4091, # (node_extern.h) '__declspec(dllimport)' : ignored on left of 'node::Environment' when no variable is declared
|
|
4099, # (pdf_render_settings.h) type name first seen using 'class' now seen using 'struct'
|
|
4189, # local variable is initialized but not referenced
|
|
4201, # (uv.h) nameless struct/union
|
|
4267, # conversion from 'size_t' to 'int', possible loss of data
|
|
4302, # (atldlgs.h) 'type cast': truncation from 'LPCTSTR' to 'WORD'
|
|
4458, # (atldlgs.h) declaration of 'dwCommonButtons' hides class member
|
|
4503, # decorated name length exceeded, name was truncated
|
|
4530, # C++ exception handler used, but unwind semantics are not enabled. Specify /EHsc
|
|
4577, # 'noexcept' used with no exception handling mode specified
|
|
4714, # (atomicstring.h) function marked as __forceinline not inlined
|
|
4800, # (v8.h) forcing value to bool 'true' or 'false'
|
|
4819, # The file contains a character that cannot be represented in the current code page
|
|
4838, # (atlgdi.h) conversion from 'int' to 'UINT' requires a narrowing conversion
|
|
4996, # (atlapp.h) 'GetVersionExW': was declared deprecated
|
|
],
|
|
},
|
|
'conditions': [
|
|
# The breakdpad on Windows assumes Debug_x64 and Release_x64 configurations.
|
|
['OS=="win"', {
|
|
'target_defaults': {
|
|
'configurations': {
|
|
'Debug_x64': {
|
|
},
|
|
'Release_x64': {
|
|
},
|
|
},
|
|
},
|
|
}], # OS=="win"
|
|
# The breakdpad on Mac assumes Release_Base configuration.
|
|
['OS=="mac"', {
|
|
'target_defaults': {
|
|
'configurations': {
|
|
'Release_Base': {
|
|
},
|
|
},
|
|
},
|
|
}], # OS=="mac"
|
|
],
|
|
}
|