grpc-node/templates/packages/grpc-native-core/binding.gyp.template

421 lines
12 KiB
Plaintext

%YAML 1.2
--- |
# GRPC Node gyp file
# This currently builds the Node extension and dependencies
# This file has been automatically generated from a template file.
# Please look at the templates directory instead.
# This file can be regenerated from the template by running
# tools/buildgen/generate_projects.sh
# Copyright 2015 gRPC authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
<%
def gyp_target_name(lib_name):
if lib_name.startswith("absl/"):
return lib_name.replace("/", "__").replace(":", "__")
else:
return lib_name
%>
# Some of this file is built with the help of
# https://n8.io/converting-a-c-library-to-gyp/
{
'variables': {
'runtime%': 'node',
# Some Node installations use the system installation of OpenSSL, and on
# some systems, the system OpenSSL still does not have ALPN support. This
# will let users recompile gRPC to work without ALPN.
'grpc_alpn%': 'true',
# Indicates that the library should be built with gcov.
'grpc_gcov%': 'false',
# Indicates that the library should be built with compatibility for musl
# libc, so that it can run on Alpine Linux. This is only necessary if not
# building on Alpine Linux
'grpc_alpine%': 'false'
},
'target_defaults': {
'configurations': {
% for name, args in configs.iteritems():
% if name in ['dbg', 'opt']:
'${{'dbg':'Debug', 'opt': 'Release'}[name]}': {
% for arg, prop in [('CPPFLAGS', 'cflags'), ('DEFINES', 'defines')]:
% if args.get(arg, None) is not None:
'${prop}': [
% for item in args.get(arg).split():
'${item}',
% endfor
],
% endif
% endfor
},
% endif
% endfor
},
% for arg, prop in [('CPPFLAGS', 'cflags'), ('LDFLAGS', 'ldflags')]:
% if defaults['global'].get(arg, None) is not None:
'${prop}': [
% for item in defaults['global'].get(arg).split() + (['-fvisibility=hidden'] if arg == 'CPPFLAGS' else []):
'${item}',
% endfor
],
% endif
% endfor
'cflags_c': [
'-std=c99'
],
'cflags_cc': [
'-std=c++1y'
],
'include_dirs': [
'deps/grpc',
'deps/grpc/include',
'deps/grpc/src/core/ext/upb-generated',
'deps/grpc/third_party/abseil-cpp',
'deps/grpc/third_party/address_sorting/include',
'deps/grpc/third_party/cares',
'deps/grpc/third_party/cares/cares',
'deps/grpc/third_party/upb',
'deps/grpc/third_party/upb/generated_for_cmake',
],
'defines': [
'GPR_BACKWARDS_COMPATIBILITY_MODE',
'GRPC_ARES=1',
'GRPC_UV',
'GRPC_NODE_VERSION="${settings.get('node_version', settings.version)}"',
'CARES_STATICLIB',
'CARES_SYMBOL_HIDING'
],
'defines!': [
'OPENSSL_THREADS'
],
'conditions': [
['grpc_gcov=="true"', {
% for arg, prop in [('CPPFLAGS', 'cflags'), ('DEFINES', 'defines'), ('LDFLAGS', 'ldflags')]:
% if configs['gcov'].get(arg, None) is not None:
'${prop}': [
% for item in configs['gcov'].get(arg).split():
'${item}',
% endfor
],
% endif
% endfor
}],
['grpc_alpine=="true"', {
'defines': [
'GPR_MUSL_LIBC_COMPAT'
]
}],
# This is the condition for using boringssl
['OS=="win" or runtime=="electron"', {
"include_dirs": [
"deps/grpc/third_party/boringssl/include"
],
"defines": [
'OPENSSL_NO_ASM'
]
}, {
'conditions': [
["target_arch=='ia32'", {
"include_dirs": [ "<(node_root_dir)/deps/openssl/config/piii" ]
}],
["target_arch=='x64'", {
"include_dirs": [ "<(node_root_dir)/deps/openssl/config/k8" ]
}],
["target_arch=='arm'", {
"include_dirs": [ "<(node_root_dir)/deps/openssl/config/arm" ]
}],
['grpc_alpn=="true"', {
'defines': [
'TSI_OPENSSL_ALPN_SUPPORT=1'
],
}, {
'defines': [
'TSI_OPENSSL_ALPN_SUPPORT=0'
],
}]
],
'include_dirs': [
'<(node_root_dir)/deps/openssl/openssl/include',
]
}],
['OS == "win"', {
"include_dirs": [
"deps/grpc/third_party/zlib"
],
"defines": [
'_WIN32_WINNT=0x0600',
'WIN32_LEAN_AND_MEAN',
'_HAS_EXCEPTIONS=0',
'UNICODE',
'_UNICODE',
'NOMINMAX',
],
"msvs_settings": {
'VCCLCompilerTool': {
'RuntimeLibrary': 1, # static debug
}
},
"libraries": [
"ws2_32"
]
}, { # OS != "win"
'include_dirs': [
'<(node_root_dir)/deps/zlib'
]
}],
['OS == "mac"', {
'xcode_settings': {
% if defaults['global'].get('CPPFLAGS', None) is not None:
'OTHER_CFLAGS': [
% for item in defaults['global'].get('CPPFLAGS').split() + ['-fvisibility=hidden']:
'${item}',
% endfor
],
'OTHER_CPLUSPLUSFLAGS': [
% for item in defaults['global'].get('CPPFLAGS').split() + ['-fvisibility=hidden']:
'${item}',
% endfor
'-stdlib=libc++',
'-std=c++1y',
'-Wno-error=deprecated-declarations'
],
% endif
},
}]
]
},
'conditions': [
['OS=="win" or runtime=="electron"', {
'targets': [
% for lib in libs:
% if lib.name == 'boringssl':
{
'target_name': '${lib.name}',
'product_prefix': 'lib',
'type': 'static_library',
'cflags': [
'-Wno-implicit-fallthrough'
],
'defines': [
'_XOPEN_SOURCE=700'
],
'dependencies': [
% for dep in getattr(lib, 'deps', []):
'${dep}',
% endfor
],
'sources': [
% for source in lib.src:
'deps/grpc/${source}',
% endfor
],
'conditions': [
['OS == "mac"', {
'xcode_settings': {
'MACOSX_DEPLOYMENT_TARGET': '10.9'
}
}]
]
},
% endif
% endfor
],
}],
['OS == "win" and runtime!="electron"', {
'targets': [
{
# IMPORTANT WINDOWS BUILD INFORMATION
# This library does not build on Windows without modifying the Node
# development packages that node-gyp downloads in order to build.
# Due to https://github.com/nodejs/node/issues/4932, the headers for
# BoringSSL conflict with the OpenSSL headers included by default
# when including the Node headers. The remedy for this is to remove
# the OpenSSL headers, from the downloaded Node development package,
# which is typically located in `.node-gyp` in your home directory.
#
# This is not true of Electron, which does not have OpenSSL headers.
'target_name': 'WINDOWS_BUILD_WARNING',
'rules': [
{
'rule_name': 'WINDOWS_BUILD_WARNING',
'extension': 'S',
'inputs': [
'package.json'
],
'outputs': [
'ignore_this_part'
],
'action': ['echo', 'IMPORTANT: Due to https://github.com/nodejs/node/issues/4932, to build this library on Windows, you must first remove <(node_root_dir)/include/node/openssl/']
}
]
},
]
}],
['OS == "win"', {
'targets': [
# Only want to compile zlib under Windows
% for lib in libs:
% if lib.name == 'z':
{
'target_name': '${lib.name}',
'product_prefix': 'lib',
'type': 'static_library',
'dependencies': [
% for dep in getattr(lib, 'deps', []):
'${dep}',
% endfor
],
'sources': [
% for source in lib.src:
'deps/grpc/${source}',
% endfor
]
},
% endif
% endfor
]
}]
],
'targets': [
% for lib in libs:
% if lib.name == 'ares':
{
'target_name': '${lib.name}',
'product_prefix': 'lib',
'type': 'static_library',
'sources': [
% for source in lib.src:
'deps/grpc/${source}',
% endfor
],
'defines': [
'_GNU_SOURCE'
],
'conditions': [
['OS == "mac"', {
'xcode_settings': {
'MACOSX_DEPLOYMENT_TARGET': '10.9'
},
'include_dirs': [
'deps/grpc/third_party/cares/config_darwin'
],
'defines': [
'HAVE_CONFIG_H'
]
}],
['OS == "linux"', {
'include_dirs': [
'deps/grpc/third_party/cares/config_linux'
],
'defines': [
'HAVE_CONFIG_H'
]
}],
['OS == "win"', {
'include_dirs': [
'deps/grpc/third_party/cares/config_windows'
],
'defines': [
'HAVE_CONFIG_H'
]
}]
]
},
% endif
% endfor
% for core in libs:
% if core.name == 'grpc' or core.name == 'address_sorting':
% for lib in libs:
% if lib.name == core.name or (lib.name in core.transitive_deps and lib.name not in ('boringssl', 'z')):
{
'target_name': '${gyp_target_name(lib.name)}',
'product_prefix': 'lib',
'type': 'static_library',
'dependencies': [
% for dep in getattr(lib, 'deps', []):
'${gyp_target_name(dep)}',
% endfor
],
'sources': [
% for source in lib.src:
'deps/grpc/${source}',
% endfor
],
'conditions': [
['OS == "mac"', {
'xcode_settings': {
'MACOSX_DEPLOYMENT_TARGET': '10.9'
}
}]
]
},
% endif
% endfor
% endif
% endfor
{
'include_dirs': [
"<!(node -e \"require('nan')\")"
],
'cflags': [
'-pthread',
'-Wno-error=deprecated-declarations',
'-Wno-cast-function-type'
],
"conditions": [
['OS=="win" or runtime=="electron"', {
'dependencies': [
"boringssl",
]
}],
['OS=="win"', {
'dependencies': [
"z",
]
}],
['OS=="linux"', {
'ldflags': [
'-Wl,-wrap,memcpy'
]
}],
['OS == "mac"', {
'xcode_settings': {
'MACOSX_DEPLOYMENT_TARGET': '10.9'
}
}]
],
"target_name": "grpc_node",
"sources": [
"<!@(node -p \"require('fs').readdirSync('./ext').map(f=>'ext/'+f).join(' ')\")"
],
"dependencies": [
"grpc",
"gpr",
"ares",
"address_sorting"
]
},
{
"target_name": "action_after_build",
"type": "none",
"dependencies": [ "<(module_name)" ],
"copies": [
{
"files": [ "<(PRODUCT_DIR)/<(module_name).node"],
"destination": "<(module_path)"
}
]
}
]
}