mirror of https://github.com/grpc/grpc-node.git
421 lines
12 KiB
Plaintext
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)"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|