binding.gyp (4474B)
1 # @license Apache-2.0 2 # 3 # Copyright (c) 2021 The Stdlib Authors. 4 # 5 # Licensed under the Apache License, Version 2.0 (the "License"); 6 # you may not use this file except in compliance with the License. 7 # You may obtain a copy of the License at 8 # 9 # http://www.apache.org/licenses/LICENSE-2.0 10 # 11 # Unless required by applicable law or agreed to in writing, software 12 # distributed under the License is distributed on an "AS IS" BASIS, 13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 # See the License for the specific language governing permissions and 15 # limitations under the License. 16 17 # A `.gyp` file for building a Node.js native add-on. 18 # 19 # [1]: https://gyp.gsrc.io/docs/InputFormatReference.md 20 # [2]: https://gyp.gsrc.io/docs/UserDocumentation.md 21 { 22 # List of files to include in this file: 23 'includes': [ 24 './include.gypi', 25 ], 26 27 # Define variables to be used throughout the configuration for all targets: 28 'variables': { 29 # Target name should match the add-on export name: 30 'addon_target_name%': 'addon', 31 32 # Set variables based on the host OS: 33 'conditions': [ 34 [ 35 'OS=="win"', 36 { 37 # Define the object file suffix: 38 'obj': 'obj', 39 }, 40 { 41 # Define the object file suffix: 42 'obj': 'o', 43 } 44 ], # end condition (OS=="win") 45 ], # end conditions 46 }, # end variables 47 48 # Define compile targets: 49 'targets': [ 50 51 # Target to generate an add-on: 52 { 53 # The target name should match the add-on export name: 54 'target_name': '<(addon_target_name)', 55 56 # Define dependencies: 57 'dependencies': [], 58 59 # Define directories which contain relevant include headers: 60 'include_dirs': [ 61 # Local include directory: 62 '<@(include_dirs)', 63 ], 64 65 # List of source files: 66 'sources': [ 67 '<@(src_files)', 68 ], 69 70 # Settings which should be applied when a target's object files are used as linker input: 71 'link_settings': { 72 # Define libraries: 73 'libraries': [ 74 '<@(libraries)', 75 ], 76 77 # Define library directories: 78 'library_dirs': [ 79 '<@(library_dirs)', 80 ], 81 }, 82 83 # C/C++ compiler flags: 84 'cflags': [ 85 # Enable commonly used warning options: 86 '-Wall', 87 88 # Aggressive optimization: 89 '-O3', 90 ], 91 92 # C specific compiler flags: 93 'cflags_c': [ 94 # Specify the C standard to which a program is expected to conform: 95 '-std=c99', 96 ], 97 98 # C++ specific compiler flags: 99 'cflags_cpp': [ 100 # Specify the C++ standard to which a program is expected to conform: 101 '-std=c++11', 102 ], 103 104 # Linker flags: 105 'ldflags': [], 106 107 # Apply conditions based on the host OS: 108 'conditions': [ 109 [ 110 'OS=="mac"', 111 { 112 # Linker flags: 113 'ldflags': [ 114 '-undefined dynamic_lookup', 115 '-Wl,-no-pie', 116 '-Wl,-search_paths_first', 117 ], 118 }, 119 ], # end condition (OS=="mac") 120 [ 121 'OS!="win"', 122 { 123 # C/C++ flags: 124 'cflags': [ 125 # Generate platform-independent code: 126 '-fPIC', 127 ], 128 }, 129 ], # end condition (OS!="win") 130 ], # end conditions 131 }, # end target <(addon_target_name) 132 133 # Target to copy a generated add-on to a standard location: 134 { 135 'target_name': 'copy_addon', 136 137 # Declare that the output of this target is not linked: 138 'type': 'none', 139 140 # Define dependencies: 141 'dependencies': [ 142 # Require that the add-on be generated before building this target: 143 '<(addon_target_name)', 144 ], 145 146 # Define a list of actions: 147 'actions': [ 148 { 149 'action_name': 'copy_addon', 150 'message': 'Copying addon...', 151 152 # Explicitly list the inputs in the command-line invocation below: 153 'inputs': [], 154 155 # Declare the expected outputs: 156 'outputs': [ 157 '<(addon_output_dir)/<(addon_target_name).node', 158 ], 159 160 # Define the command-line invocation: 161 'action': [ 162 'cp', 163 '<(PRODUCT_DIR)/<(addon_target_name).node', 164 '<(addon_output_dir)/<(addon_target_name).node', 165 ], 166 }, 167 ], # end actions 168 }, # end target copy_addon 169 ], # end targets 170 }