Created
April 17, 2020 13:57
-
-
Save NickNaso/85ed5a9b7667cbdae55ba52dd3d240e5 to your computer and use it in GitHub Desktop.
How to change default compiler to build native addon for Node.js
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# This file inherits default targets for Node addons, see https://github.com/nodejs/node-gyp/blob/master/addon.gypi | |
{ | |
# https://github.com/springmeyer/gyp/blob/master/test/make_global_settings/wrapper/wrapper.gyp | |
'make_global_settings': [ | |
['CXX', '<(module_root_dir)/mason_packages/.link/bin/clang++'], | |
['CC', '<(module_root_dir)/mason_packages/.link/bin/clang'], | |
['LINK', '<(module_root_dir)/mason_packages/.link/bin/clang++'], | |
['AR', '<(module_root_dir)/mason_packages/.link/bin/llvm-ar'], | |
['NM', '<(module_root_dir)/mason_packages/.link/bin/llvm-nm'] | |
], | |
'includes': [ 'common.gypi' ], # brings in a default set of options that are inherited from gyp | |
'variables': { # custom variables we use specific to this file | |
'error_on_warnings%':'true', # can be overriden by a command line variable because of the % sign using "WERROR" (defined in Makefile) | |
# Use this variable to silence warnings from mason dependencies and from NAN | |
# It's a variable to make easy to pass to | |
# cflags (linux) and xcode (mac) | |
'system_includes': [ | |
"-isystem <!@(node -p \"require('node-addon-api').include.slice(1,-1)\")", | |
"-isystem <(module_root_dir)/mason_packages/.link/include/" | |
], | |
# Flags we pass to the compiler to ensure the compiler | |
# warns us about potentially buggy or dangerous code | |
'compiler_checks': [ | |
'-Wall', | |
'-Wextra', | |
'-Weffc++', | |
'-Wconversion', | |
'-pedantic-errors', | |
'-Wconversion', | |
'-Wshadow', | |
'-Wfloat-equal', | |
'-Wuninitialized', | |
'-Wunreachable-code', | |
'-Wold-style-cast', | |
'-Wno-error=unused-variable' | |
] | |
}, | |
# `targets` is a list of targets for gyp to run. | |
# Different types of targets: | |
# - [executable](https://github.com/mapbox/cpp/blob/master/glossary.md#executable) | |
# - [loadable_module](https://github.com/mapbox/cpp/blob/master/glossary.md#loadable-module) | |
# - [static library](https://github.com/mapbox/cpp/blob/master/glossary.md#static-library) | |
# - [shared library](https://github.com/mapbox/cpp/blob/master/glossary.md#shared-library) | |
# - none: a trick to tell gyp not to run the compiler for a given target. | |
'targets': [ | |
{ | |
'target_name': 'action_before_build', | |
'type': 'none', | |
'hard_dependency': 1, | |
'actions': [ | |
{ | |
'action_name': 'install_deps', | |
'inputs': ['./node_modules/.bin/mason-js'], | |
'outputs': ['./mason_packages'], | |
'action': ['./node_modules/.bin/mason-js', 'install'] | |
}, | |
{ | |
'action_name': 'link_deps', | |
'inputs': ['./node_modules/.bin/mason-js'], | |
'outputs': ['./mason_packages/.link'], | |
'action': ['./node_modules/.bin/mason-js', 'link'] | |
} | |
] | |
}, | |
{ | |
# module_name and module_path are both variables passed by node-pre-gyp from package.json | |
'target_name': '<(module_name)', # sets the name of the binary file | |
'product_dir': '<(module_path)', # controls where the node binary file gets copied to (./lib/binding/module.node) | |
'type': 'loadable_module', | |
'dependencies': [ 'action_before_build' ], | |
# "make" only watches files specified here, and will sometimes cache these files after the first compile. | |
# This cache can sometimes cause confusing errors when removing/renaming/adding new files. | |
# Running "make clean" helps to prevent this "mysterious error by cache" scenario | |
# This also is where the benefits of using a "glob" come into play... | |
# See: https://github.com/mapbox/node-cpp-skel/pull/44#discussion_r122050205 | |
'sources': [ | |
'./src/module.cpp', | |
'./src/standalone/hello.cpp', | |
'./src/standalone_async/hello_async.cpp', | |
'./src/object_sync/hello.cpp', | |
'./src/object_async/hello_async.cpp' | |
], | |
'ldflags': [ | |
'-Wl,-z,now', | |
], | |
'conditions': [ | |
['error_on_warnings == "true"', { | |
'cflags_cc' : [ '-Werror' ], | |
'xcode_settings': { | |
'OTHER_CPLUSPLUSFLAGS': [ '-Werror' ] | |
} | |
}] | |
], | |
'cflags_cc': [ | |
'<@(system_includes)', | |
'<@(compiler_checks)' | |
], | |
'xcode_settings': { | |
'OTHER_LDFLAGS':[ | |
'-Wl,-bind_at_load' | |
], | |
'OTHER_CPLUSPLUSFLAGS': [ | |
'<@(system_includes)', | |
'<@(compiler_checks)' | |
], | |
'GCC_ENABLE_CPP_RTTI': 'YES', | |
'GCC_ENABLE_CPP_EXCEPTIONS': 'YES', | |
'MACOSX_DEPLOYMENT_TARGET':'10.8', | |
'CLANG_CXX_LIBRARY': 'libc++', | |
'CLANG_CXX_LANGUAGE_STANDARD':'c++14', | |
'GCC_VERSION': 'com.apple.compilers.llvm.clang.1_0' | |
} | |
} | |
] | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment