time-to-botec

Benchmark sampling in different programming languages
Log | Files | Refs | README

binding.gyp (4472B)


      1 # @license Apache-2.0
      2 #
      3 # Copyright (c) 2020 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 }