%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. # 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(): '${item}', % endfor ], % endif % endfor 'include_dirs': [ '.', 'include' ], 'defines': [ 'GPR_BACKWARDS_COMPATIBILITY_MODE', 'GRPC_ARES=0', 'GRPC_UV' ], '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' ] }], ['OS!="win" and runtime=="electron"', { "defines": [ 'OPENSSL_NO_THREADS' ] }], # This is the condition for using boringssl ['OS=="win" or runtime=="electron"', { "include_dirs": [ "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": [ "third_party/zlib", "third_party/cares/cares" ], "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', '<(node_root_dir)/deps/cares/include' ] }] ] }, 'conditions': [ ['OS=="win" or runtime=="electron"', { 'targets': [ % for module in node_modules: % for lib in libs: % if lib.name in module.transitive_deps and lib.name == 'boringssl': { 'cflags': [ '-std=c99', '-Wall', '-Werror' ], '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: '${source}', % endfor ] }, % endif % endfor % 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 module in node_modules: % for lib in libs: % if lib.name in module.transitive_deps and lib.name == 'z': { 'cflags': [ '-std=c99', '-Wall', '-Werror' ], '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: '${source}', % endfor ] }, % endif % endfor % endfor ] }] ], 'targets': [ % for module in node_modules: % for lib in libs: % if lib.name in module.transitive_deps and lib.name not in ('boringssl', 'z'): { 'cflags': [ '-std=c99', '-Wall', '-Werror' ], '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: '${source}', % endfor ], "conditions": [ ['OS == "mac"', { 'xcode_settings': { 'MACOSX_DEPLOYMENT_TARGET': '10.9' } }] ] }, % endif % endfor { 'include_dirs': [ "