Merge remote-tracking branch 'origin/v0.8'
[platform/upstream/nodejs.git] / node.gyp
1 {
2   'variables': {
3     'v8_use_snapshot%': 'true',
4     # Turn off -Werror in V8
5     # See http://codereview.chromium.org/8159015
6     'werror': '',
7     'node_use_dtrace%': 'false',
8     'node_use_etw%': 'false',
9     'node_use_perfctr%': 'false',
10     'node_has_winsdk%': 'false',
11     'node_shared_v8%': 'false',
12     'node_shared_zlib%': 'false',
13     'node_shared_http_parser%': 'false',
14     'node_shared_cares%': 'false',
15     'node_shared_libuv%': 'false',
16     'node_use_openssl%': 'true',
17     'node_use_systemtap%': 'false',
18     'node_shared_openssl%': 'false',
19     'library_files': [
20       'src/node.js',
21       'lib/_debugger.js',
22       'lib/_linklist.js',
23       'lib/assert.js',
24       'lib/buffer.js',
25       'lib/child_process.js',
26       'lib/console.js',
27       'lib/constants.js',
28       'lib/crypto.js',
29       'lib/cluster.js',
30       'lib/dgram.js',
31       'lib/dns.js',
32       'lib/domain.js',
33       'lib/events.js',
34       'lib/freelist.js',
35       'lib/fs.js',
36       'lib/http.js',
37       'lib/https.js',
38       'lib/module.js',
39       'lib/net.js',
40       'lib/os.js',
41       'lib/path.js',
42       'lib/punycode.js',
43       'lib/querystring.js',
44       'lib/readline.js',
45       'lib/repl.js',
46       'lib/stream.js',
47       'lib/_stream_readable.js',
48       'lib/_stream_writable.js',
49       'lib/_stream_duplex.js',
50       'lib/_stream_transform.js',
51       'lib/_stream_passthrough.js',
52       'lib/string_decoder.js',
53       'lib/sys.js',
54       'lib/timers.js',
55       'lib/tls.js',
56       'lib/tty.js',
57       'lib/url.js',
58       'lib/util.js',
59       'lib/vm.js',
60       'lib/zlib.js',
61     ],
62   },
63
64   'targets': [
65     {
66       'target_name': 'node',
67       'type': 'executable',
68
69       'dependencies': [
70         'node_js2c#host',
71       ],
72
73       'include_dirs': [
74         'src',
75         'tools/msvs/genfiles',
76         'deps/uv/src/ares',
77         '<(SHARED_INTERMEDIATE_DIR)' # for node_natives.h
78       ],
79
80       'sources': [
81         'src/fs_event_wrap.cc',
82         'src/cares_wrap.cc',
83         'src/handle_wrap.cc',
84         'src/node.cc',
85         'src/node_buffer.cc',
86         'src/node_constants.cc',
87         'src/node_extensions.cc',
88         'src/node_file.cc',
89         'src/node_http_parser.cc',
90         'src/node_javascript.cc',
91         'src/node_main.cc',
92         'src/node_os.cc',
93         'src/node_script.cc',
94         'src/node_stat_watcher.cc',
95         'src/node_string.cc',
96         'src/node_zlib.cc',
97         'src/pipe_wrap.cc',
98         'src/signal_wrap.cc',
99         'src/stream_wrap.cc',
100         'src/slab_allocator.cc',
101         'src/tcp_wrap.cc',
102         'src/timer_wrap.cc',
103         'src/tty_wrap.cc',
104         'src/process_wrap.cc',
105         'src/v8_typed_array.cc',
106         'src/udp_wrap.cc',
107         # headers to make for a more pleasant IDE experience
108         'src/handle_wrap.h',
109         'src/node.h',
110         'src/node_buffer.h',
111         'src/node_constants.h',
112         'src/node_crypto.h',
113         'src/node_extensions.h',
114         'src/node_file.h',
115         'src/node_http_parser.h',
116         'src/node_javascript.h',
117         'src/node_os.h',
118         'src/node_root_certs.h',
119         'src/node_script.h',
120         'src/node_string.h',
121         'src/node_version.h',
122         'src/ngx-queue.h',
123         'src/pipe_wrap.h',
124         'src/tty_wrap.h',
125         'src/tcp_wrap.h',
126         'src/udp_wrap.h',
127         'src/req_wrap.h',
128         'src/slab_allocator.h',
129         'src/stream_wrap.h',
130         'src/tree.h',
131         'src/v8_typed_array.h',
132         'deps/http_parser/http_parser.h',
133         '<(SHARED_INTERMEDIATE_DIR)/node_natives.h',
134         # javascript files to make for an even more pleasant IDE experience
135         '<@(library_files)',
136         # node.gyp is added to the project by default.
137         'common.gypi',
138       ],
139
140       'defines': [
141         'NODE_WANT_INTERNALS=1',
142         'ARCH="<(target_arch)"',
143         'PLATFORM="<(OS)"',
144         'NODE_TAG="<(node_tag)"',
145       ],
146
147       'conditions': [
148         [ 'node_use_openssl=="true"', {
149           'defines': [ 'HAVE_OPENSSL=1' ],
150           'sources': [ 'src/node_crypto.cc' ],
151           'conditions': [
152             [ 'node_shared_openssl=="false"', {
153               'dependencies': [ './deps/openssl/openssl.gyp:openssl' ],
154             }]]
155         }, {
156           'defines': [ 'HAVE_OPENSSL=0' ]
157         }],
158         [ 'node_use_dtrace=="true"', {
159           'defines': [ 'HAVE_DTRACE=1' ],
160           'dependencies': [ 'node_dtrace_header' ],
161           'include_dirs': [ '<(SHARED_INTERMEDIATE_DIR)' ],
162           #
163           # node_dtrace_provider.cc and node_dtrace_ustack.cc do not actually
164           # exist.  They're here to trick GYP into linking the corresponding
165           # object files into the final "node" executable.  These files are
166           # generated by "dtrace -G" using custom actions below, and the
167           # GYP-generated Makefiles will properly build them when needed.
168           #
169           'sources': [
170             'src/node_dtrace.cc',
171             'src/node_dtrace_provider.cc',
172             'src/node_dtrace_ustack.cc',
173           ],
174         } ],
175         [ 'node_use_systemtap=="true"', {
176           'defines': [ 'HAVE_SYSTEMTAP=1', 'STAP_SDT_V1=1' ],
177           'dependencies': [ 'node_systemtap_header' ],
178           'include_dirs': [ '<(SHARED_INTERMEDIATE_DIR)' ],
179           'sources': [
180             'src/node_dtrace.cc',
181             '<(SHARED_INTERMEDIATE_DIR)/node_systemtap.h',
182           ],
183         } ],
184         [ 'node_use_etw=="true"', {
185           'defines': [ 'HAVE_ETW=1' ],
186           'dependencies': [ 'node_etw' ],
187           'sources': [
188             'src/node_win32_etw_provider.h',
189             'src/node_win32_etw_provider-inl.h',
190             'src/node_win32_etw_provider.cc',
191             'src/node_dtrace.cc',
192             'tools/msvs/genfiles/node_etw_provider.h',
193             'tools/msvs/genfiles/node_etw_provider.rc',
194           ]
195         } ],
196         [ 'node_use_perfctr=="true"', {
197           'defines': [ 'HAVE_PERFCTR=1' ],
198           'dependencies': [ 'node_perfctr' ],
199           'sources': [
200             'src/node_win32_perfctr_provider.h',
201             'src/node_win32_perfctr_provider.cc',
202             'src/node_counters.cc',
203             'src/node_counters.h',
204             'tools/msvs/genfiles/node_perfctr_provider.rc',
205           ]
206         } ],
207         [ 'node_shared_v8=="false"', {
208           'sources': [
209             'deps/v8/include/v8.h',
210             'deps/v8/include/v8-debug.h',
211           ],
212           'dependencies': [ 'deps/v8/tools/gyp/v8.gyp:v8' ],
213         }],
214
215         [ 'node_shared_zlib=="false"', {
216           'dependencies': [ 'deps/zlib/zlib.gyp:zlib' ],
217         }],
218
219         [ 'node_shared_http_parser=="false"', {
220           'dependencies': [ 'deps/http_parser/http_parser.gyp:http_parser' ],
221         }],
222
223         [ 'node_shared_cares=="false"', {
224           'dependencies': [ 'deps/cares/cares.gyp:cares' ],
225         }],
226
227         [ 'node_shared_libuv=="false"', {
228           'dependencies': [ 'deps/uv/uv.gyp:libuv' ],
229         }],
230
231         [ 'OS=="win"', {
232           'sources': [
233             'src/res/node.rc',
234           ],
235           'defines': [
236             'FD_SETSIZE=1024',
237             # we need to use node's preferred "win32" rather than gyp's preferred "win"
238             'PLATFORM="win32"',
239             '_UNICODE=1',
240           ],
241           'libraries': [ '-lpsapi.lib' ]
242         }, { # POSIX
243           'defines': [ '__POSIX__' ],
244         }],
245         [ 'OS=="mac"', {
246           'libraries': [ '-framework Carbon' ],
247           'defines!': [
248             'PLATFORM="mac"',
249           ],
250           'defines': [
251             # we need to use node's preferred "darwin" rather than gyp's preferred "mac"
252             'PLATFORM="darwin"',
253           ],
254         }],
255         [ 'OS=="freebsd"', {
256           'libraries': [
257             '-lutil',
258             '-lkvm',
259           ],
260         }],
261         [ 'OS=="solaris"', {
262           'libraries': [
263             '-lkstat',
264             '-lumem',
265           ],
266           'defines!': [
267             'PLATFORM="solaris"',
268           ],
269           'defines': [
270             # we need to use node's preferred "sunos"
271             # rather than gyp's preferred "solaris"
272             'PLATFORM="sunos"',
273           ],
274         }],
275       ],
276       'msvs_settings': {
277         'VCLinkerTool': {
278           'SubSystem': 1, # /subsystem:console
279         },
280       },
281     },
282     # generate ETW header and resource files
283     {
284       'target_name': 'node_etw',
285       'type': 'none',
286       'conditions': [
287         [ 'node_use_etw=="true" and node_has_winsdk=="true"', {
288           'actions': [
289             {
290               'action_name': 'node_etw',
291               'inputs': [ 'src/res/node_etw_provider.man' ],
292               'outputs': [
293                 'tools/msvs/genfiles/node_etw_provider.rc',
294                 'tools/msvs/genfiles/node_etw_provider.h',
295                 'tools/msvs/genfiles/node_etw_providerTEMP.BIN',
296               ],
297               'action': [ 'mc <@(_inputs) -h tools/msvs/genfiles -r tools/msvs/genfiles' ]
298             }
299           ]
300         } ]
301       ]
302     },
303     # generate perf counter header and resource files
304     {
305       'target_name': 'node_perfctr',
306       'type': 'none',
307       'conditions': [
308         [ 'node_use_perfctr=="true" and node_has_winsdk=="true"', {
309           'actions': [
310             {
311               'action_name': 'node_perfctr_man',
312               'inputs': [ 'src/res/node_perfctr_provider.man' ],
313               'outputs': [
314                 'tools/msvs/genfiles/node_perfctr_provider.h',
315                 'tools/msvs/genfiles/node_perfctr_provider.rc',
316                 'tools/msvs/genfiles/MSG00001.BIN',
317               ],
318               'action': [ 'ctrpp <@(_inputs) '
319                           '-o tools/msvs/genfiles/node_perfctr_provider.h '
320                           '-rc tools/msvs/genfiles/node_perfctr_provider.rc'
321               ]
322             },
323           ],
324         } ]
325       ]
326     },
327     {
328       'target_name': 'node_js2c',
329       'type': 'none',
330       'toolsets': ['host'],
331       'actions': [
332         {
333           'action_name': 'node_js2c',
334           'inputs': [
335             '<@(library_files)',
336             './config.gypi',
337           ],
338           'outputs': [
339             '<(SHARED_INTERMEDIATE_DIR)/node_natives.h',
340           ],
341           'conditions': [
342             [ 'node_use_dtrace=="false"'
343               ' and node_use_etw=="false"'
344               ' and node_use_systemtap=="false"',
345             {
346                 'inputs': ['src/macros.py']
347               }
348               ],
349             [ 'node_use_perfctr=="false"', {
350               'inputs': [ 'src/perfctr_macros.py' ]
351             }]
352           ],
353               'action': [
354                 '<(python)',
355                 'tools/js2c.py',
356                 '<@(_outputs)',
357                 '<@(_inputs)',
358               ],
359         },
360       ],
361     }, # end node_js2c
362     {
363       'target_name': 'node_dtrace_header',
364       'type': 'none',
365       'conditions': [
366         [ 'node_use_dtrace=="true"', {
367           'actions': [
368             {
369               'action_name': 'node_dtrace_header',
370               'inputs': [ 'src/node_provider.d' ],
371               'outputs': [ '<(SHARED_INTERMEDIATE_DIR)/node_provider.h' ],
372               'action': [ 'dtrace', '-h', '-xnolibs', '-s', '<@(_inputs)',
373                 '-o', '<@(_outputs)' ]
374             }
375           ]
376         } ]
377       ]
378     },
379     {
380       'target_name': 'node_systemtap_header',
381       'type': 'none',
382       'conditions': [
383         [ 'node_use_systemtap=="true"', {
384           'actions': [
385             {
386               'action_name': 'node_systemtap_header',
387               'inputs': [ 'src/node_systemtap.d' ],
388               'outputs': [ '<(SHARED_INTERMEDIATE_DIR)/node_systemtap.h' ],
389               'action': [ 'dtrace', '-h', '-C', '-s', '<@(_inputs)',
390                 '-o', '<@(_outputs)' ]
391             }
392           ]
393         } ]
394       ]
395     },
396     {
397       'target_name': 'node_dtrace_provider',
398       'type': 'none',
399       'conditions': [
400         [ 'node_use_dtrace=="true"', {
401           'actions': [
402             {
403               'action_name': 'node_dtrace_provider_o',
404               'inputs': [
405                 'src/node_provider.d',
406                 '<(PRODUCT_DIR)/obj.target/node/src/node_dtrace.o'
407               ],
408               'outputs': [
409                 '<(PRODUCT_DIR)/obj.target/node/src/node_dtrace_provider.o'
410               ],
411               'action': [ 'dtrace', '-G', '-xnolibs', '-s', '<@(_inputs)',
412                 '-o', '<@(_outputs)' ]
413             }
414           ]
415         } ]
416       ]
417     },
418     {
419       'target_name': 'node_dtrace_ustack',
420       'type': 'none',
421       'conditions': [
422         [ 'node_use_dtrace=="true"', {
423           'actions': [
424             {
425               'action_name': 'node_dtrace_ustack_constants',
426               'inputs': [
427                 '<(PRODUCT_DIR)/obj.target/deps/v8/tools/gyp/libv8_base.a'
428               ],
429               'outputs': [
430                 '<(SHARED_INTERMEDIATE_DIR)/v8constants.h'
431               ],
432               'action': [
433                 'tools/genv8constants.py',
434                 '<@(_outputs)',
435                 '<@(_inputs)'
436               ]
437             },
438             {
439               'action_name': 'node_dtrace_ustack',
440               'inputs': [
441                 'src/v8ustack.d',
442                 '<(SHARED_INTERMEDIATE_DIR)/v8constants.h'
443               ],
444               'outputs': [
445                 '<(PRODUCT_DIR)/obj.target/node/src/node_dtrace_ustack.o'
446               ],
447               'conditions': [
448                 [ 'target_arch=="ia32"', {
449                   'action': [
450                     'dtrace', '-32', '-I<(SHARED_INTERMEDIATE_DIR)', '-Isrc',
451                     '-C', '-G', '-s', 'src/v8ustack.d', '-o', '<@(_outputs)',
452                   ]
453                 } ],
454                 [ 'target_arch=="x64"', {
455                   'action': [
456                     'dtrace', '-64', '-I<(SHARED_INTERMEDIATE_DIR)', '-Isrc',
457                     '-C', '-G', '-s', 'src/v8ustack.d', '-o', '<@(_outputs)',
458                   ]
459                 } ],
460               ]
461             }
462           ]
463         } ],
464       ]
465     }
466   ] # end targets
467 }