electron/common.gypi
#DeleteGithub 70d4644742 build: enable PIE when compiling Linux builds, fix #14961. (#15152)
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>
2018-10-14 12:47:55 +11:00

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"
],
}