1# Copyright 2013 The Chromium Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5{
6  'variables': {
7    'chromium_code': 1,
8  },
9  'includes': [
10    'nacl/nacl_defines.gypi',
11  ],
12  'target_defaults': {
13    'variables': {
14      'nacl_target': 0,
15    },
16    'target_conditions': [
17      # This part is shared between the targets defined below. Only files and
18      # settings relevant for building the Win64 target should be added here.
19      ['nacl_target==1', {
20        'include_dirs': [
21          '<(INTERMEDIATE_DIR)',
22        ],
23        'defines': [
24          '<@(nacl_defines)',
25        ],
26        'sources': [
27          # .cc, .h, and .mm files under nacl that are used on all
28          # platforms, including both 32-bit and 64-bit Windows.
29          # Test files are also not included.
30          'nacl/loader/nacl_ipc_adapter.cc',
31          'nacl/loader/nacl_ipc_adapter.h',
32          'nacl/loader/nacl_main.cc',
33          'nacl/loader/nacl_main_platform_delegate.h',
34          'nacl/loader/nacl_main_platform_delegate_linux.cc',
35          'nacl/loader/nacl_main_platform_delegate_mac.mm',
36          'nacl/loader/nacl_main_platform_delegate_win.cc',
37          'nacl/loader/nacl_listener.cc',
38          'nacl/loader/nacl_listener.h',
39          'nacl/loader/nacl_trusted_listener.cc',
40          'nacl/loader/nacl_trusted_listener.h',
41          'nacl/loader/nacl_validation_db.h',
42          'nacl/loader/nacl_validation_query.cc',
43          'nacl/loader/nacl_validation_query.h',
44        ],
45        # TODO(gregoryd): consider switching NaCl to use Chrome OS defines
46        'conditions': [
47          ['OS=="win"', {
48            'defines': [
49              '__STDC_LIMIT_MACROS=1',
50            ],
51            'include_dirs': [
52              '<(DEPTH)/third_party/wtl/include',
53            ],
54          },],
55          ['OS=="linux"', {
56            'defines': [
57              '__STDC_LIMIT_MACROS=1',
58            ],
59            'sources': [
60              '../components/nacl/common/nacl_paths.cc',
61              '../components/nacl/common/nacl_paths.h',
62            ],
63          },],
64        ],
65      }],
66    ],
67  },
68  'conditions': [
69    ['disable_nacl!=1', {
70      'targets': [
71        {
72          'target_name': 'nacl',
73          'type': 'static_library',
74          'variables': {
75            'nacl_target': 1,
76          },
77          'dependencies': [
78            '../base/base.gyp:base',
79            '../base/base.gyp:base_static',
80            '../ipc/ipc.gyp:ipc',
81            '../ppapi/ppapi_internal.gyp:ppapi_shared',
82            '../ppapi/ppapi_internal.gyp:ppapi_ipc',
83            '../native_client/src/trusted/service_runtime/service_runtime.gyp:sel_main_chrome',
84          ],
85          'conditions': [
86            ['disable_nacl_untrusted==0', {
87              'dependencies': [
88                '../ppapi/native_client/native_client.gyp:nacl_irt',
89                '../ppapi/native_client/src/untrusted/pnacl_support_extension/pnacl_support_extension.gyp:pnacl_support_extension',
90              ],
91            }],
92          ],
93          'direct_dependent_settings': {
94            'defines': [
95              '<@(nacl_defines)',
96            ],
97          },
98        },
99        {
100          'target_name': 'nacl_browser',
101          'type': 'static_library',
102          'sources': [
103            'nacl/browser/nacl_broker_host_win.cc',
104            'nacl/browser/nacl_broker_host_win.h',
105            'nacl/browser/nacl_broker_service_win.cc',
106            'nacl/browser/nacl_broker_service_win.h',
107            'nacl/browser/nacl_browser.cc',
108            'nacl/browser/nacl_browser.h',
109            'nacl/browser/nacl_file_host.cc',
110            'nacl/browser/nacl_file_host.h',
111            'nacl/browser/nacl_host_message_filter.cc',
112            'nacl/browser/nacl_host_message_filter.h',
113            'nacl/browser/nacl_process_host.cc',
114            'nacl/browser/nacl_process_host.h',
115            'nacl/browser/nacl_validation_cache.cc',
116            'nacl/browser/nacl_validation_cache.h',
117            'nacl/browser/pnacl_host.cc',
118            'nacl/browser/pnacl_host.h',
119            'nacl/browser/pnacl_translation_cache.cc',
120            'nacl/browser/pnacl_translation_cache.h',
121            'nacl/common/nacl_debug_exception_handler_win.cc',
122            'nacl/common/nacl_debug_exception_handler_win.h',
123          ],
124          'include_dirs': [
125            '..',
126          ],
127          'dependencies': [
128            'nacl_common',
129            'nacl_switches',
130            '../native_client/src/trusted/service_runtime/service_runtime.gyp:sel',
131            '../content/content.gyp:content_browser',
132          ],
133          'defines': [
134            '<@(nacl_defines)',
135          ],
136          # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
137          'msvs_disabled_warnings': [4267, ],
138          'conditions': [
139            ['OS=="linux"', {
140              'sources': [
141                '../components/nacl/zygote/nacl_fork_delegate_linux.cc',
142                '../components/nacl/zygote/nacl_fork_delegate_linux.h',
143              ],
144              'dependencies': [
145                # Required by nacl_fork_delegate_linux.cc.
146                '../sandbox/sandbox.gyp:suid_sandbox_client',
147              ]
148            }],
149          ],
150        },
151        {
152          'target_name': 'nacl_renderer',
153          'type': 'static_library',
154          'sources': [
155            'nacl/renderer/file_downloader.cc',
156            'nacl/renderer/file_downloader.h',
157            'nacl/renderer/histogram.cc',
158            'nacl/renderer/histogram.h',
159            'nacl/renderer/manifest_downloader.cc',
160            'nacl/renderer/manifest_downloader.h',
161            'nacl/renderer/manifest_service_channel.cc',
162            'nacl/renderer/manifest_service_channel.h',
163            'nacl/renderer/nacl_helper.cc',
164            'nacl/renderer/nacl_helper.h',
165            'nacl/renderer/json_manifest.cc',
166            'nacl/renderer/json_manifest.h',
167            'nacl/renderer/nexe_load_manager.cc',
168            'nacl/renderer/nexe_load_manager.h',
169            'nacl/renderer/platform_info.cc',
170            'nacl/renderer/platform_info.h',
171            'nacl/renderer/pnacl_translation_resource_host.cc',
172            'nacl/renderer/pnacl_translation_resource_host.h',
173            'nacl/renderer/ppb_nacl_private_impl.cc',
174            'nacl/renderer/ppb_nacl_private_impl.h',
175            'nacl/renderer/progress_event.cc',
176            'nacl/renderer/progress_event.h',
177            'nacl/renderer/trusted_plugin_channel.cc',
178            'nacl/renderer/trusted_plugin_channel.h',
179          ],
180          'include_dirs': [
181            '..',
182          ],
183          'dependencies': [
184            'nacl_common',
185            '../content/content.gyp:content_renderer',
186            '../ppapi/native_client/src/trusted/plugin/plugin.gyp:nacl_trusted_plugin',
187            '../third_party/jsoncpp/jsoncpp.gyp:jsoncpp',
188            '../third_party/WebKit/public/blink.gyp:blink',
189          ],
190          'defines': [
191            '<@(nacl_defines)',
192          ],
193          'direct_dependent_settings': {
194            'defines': [
195              '<@(nacl_defines)',
196            ],
197          },
198        },
199        {
200          'target_name': 'nacl_loader_unittests',
201          'type': '<(gtest_target_type)',
202          'sources': [
203            'nacl/loader/run_all_unittests.cc',
204          ],
205          'dependencies': [
206            'nacl',
207            '../base/base.gyp:test_support_base',
208            '../testing/gtest.gyp:gtest',
209          ],
210          'conditions': [
211            ['OS=="linux"', {
212              'sources': [
213                # TODO(mazda): Move this to browser_tests once we have
214                # established a way to run browser_tests on ARM Chrome OS
215                # devices (http://crbug.com/364729).
216                'nacl/loader/nonsfi/irt_icache_unittest.cc',
217                # TODO(hamaji): Currently, we build them twice. Stop building
218                # them for components_unittests. See crbug.com/364751
219                'nacl/loader/nonsfi/nonsfi_sandbox_unittest.cc',
220                'nacl/loader/nonsfi/nonsfi_sandbox_sigsys_unittest.cc',
221              ],
222              'dependencies': [
223                'nacl_linux',
224                '../sandbox/sandbox.gyp:sandbox_linux_test_utils',
225              ],
226            }],
227          ],
228        },
229      ],
230      'conditions': [
231        ['OS=="linux"', {
232          'targets': [
233            {
234              'target_name': 'nacl_helper',
235              'type': 'executable',
236              'include_dirs': [
237                '..',
238              ],
239              'sources': [
240                'nacl/loader/nacl_helper_linux.cc',
241                'nacl/loader/nacl_helper_linux.h',
242              ],
243              'dependencies': [
244                'nacl_linux',
245              ],
246              'cflags': ['-fPIE'],
247              'ldflags!': [
248                # Do not pick the default ASan options from
249                # build/sanitizers/sanitizer_options.cc to avoid a conflict with
250                # those in nacl/nacl_helper_linux.cc.
251                '-Wl,-u_sanitizer_options_link_helper',
252              ],
253              'link_settings': {
254                'ldflags': ['-pie'],
255              },
256            }, {
257              'target_name': 'nacl_linux',
258              'type': 'static_library',
259              'include_dirs': [
260                '..',
261              ],
262              'defines': [
263                '<@(nacl_defines)',
264                # Allow .cc files to know if they're being compiled as part
265                # of nacl_helper.
266                'IN_NACL_HELPER=1',
267              ],
268              'sources': [
269                'nacl/loader/nonsfi/abi_conversion.cc',
270                'nacl/loader/nonsfi/abi_conversion.h',
271                'nacl/loader/nonsfi/elf_loader.cc',
272                'nacl/loader/nonsfi/elf_loader.h',
273                'nacl/loader/nonsfi/irt_basic.cc',
274                'nacl/loader/nonsfi/irt_clock.cc',
275                'nacl/loader/nonsfi/irt_exception_handling.cc',
276                'nacl/loader/nonsfi/irt_fdio.cc',
277                'nacl/loader/nonsfi/irt_futex.cc',
278                'nacl/loader/nonsfi/irt_icache.cc',
279                'nacl/loader/nonsfi/irt_interfaces.cc',
280                'nacl/loader/nonsfi/irt_interfaces.h',
281                'nacl/loader/nonsfi/irt_memory.cc',
282                'nacl/loader/nonsfi/irt_ppapi.cc',
283                'nacl/loader/nonsfi/irt_random.cc',
284                'nacl/loader/nonsfi/irt_resource_open.cc',
285                'nacl/loader/nonsfi/irt_thread.cc',
286                'nacl/loader/nonsfi/irt_util.h',
287                'nacl/loader/nonsfi/nonsfi_listener.cc',
288                'nacl/loader/nonsfi/nonsfi_listener.h',
289                'nacl/loader/nonsfi/nonsfi_main.cc',
290                'nacl/loader/nonsfi/nonsfi_main.h',
291                'nacl/loader/nonsfi/nonsfi_sandbox.cc',
292                'nacl/loader/nonsfi/nonsfi_sandbox.h',
293                'nacl/loader/sandbox_linux/nacl_bpf_sandbox_linux.cc',
294                'nacl/loader/sandbox_linux/nacl_sandbox_linux.cc',
295                '../ppapi/nacl_irt/irt_manifest.h',
296                '../ppapi/nacl_irt/manifest_service.cc',
297                '../ppapi/nacl_irt/manifest_service.h',
298                '../ppapi/nacl_irt/plugin_main.cc',
299                '../ppapi/nacl_irt/plugin_main.h',
300                '../ppapi/nacl_irt/plugin_startup.cc',
301                '../ppapi/nacl_irt/plugin_startup.h',
302                '../ppapi/nacl_irt/ppapi_dispatcher.cc',
303                '../ppapi/nacl_irt/ppapi_dispatcher.h',
304              ],
305              'dependencies': [
306                'nacl',
307                'nacl_common',
308                'nacl_switches',
309                '../components/tracing.gyp:tracing',
310                '../crypto/crypto.gyp:crypto',
311                '../sandbox/sandbox.gyp:libc_urandom_override',
312                '../sandbox/sandbox.gyp:sandbox',
313                '../ppapi/ppapi_internal.gyp:ppapi_proxy',
314              ],
315              'conditions': [
316                ['use_glib == 1', {
317                  'dependencies': [
318                    '../build/linux/system.gyp:glib',
319                  ],
320                }],
321                ['os_posix == 1 and OS != "mac"', {
322                  'conditions': [
323                    ['use_allocator!="none"', {
324                      'dependencies': [
325                        '../base/allocator/allocator.gyp:allocator',
326                      ],
327                    }],
328                  ],
329                }],
330                ['use_seccomp_bpf == 0', {
331                  'sources!': [
332                    '../content/common/sandbox_linux/sandbox_bpf_base_policy_linux.cc',
333                    '../content/common/sandbox_linux/sandbox_init_linux.cc',
334                  ],
335                }, {
336                  'defines': ['USE_SECCOMP_BPF'],
337                }],
338              ],
339              'cflags': ['-fPIE'],
340            },
341          ],
342        }],
343        ['OS=="win" and target_arch=="ia32"', {
344          'targets': [
345            {
346              'target_name': 'nacl_win64',
347              'type': 'static_library',
348              'variables': {
349                'nacl_target': 1,
350              },
351              'dependencies': [
352                'nacl_common_win64',
353                '../native_client/src/trusted/service_runtime/service_runtime.gyp:sel_main_chrome64',
354                '../ppapi/ppapi_internal.gyp:ppapi_shared_win64',
355                '../ppapi/ppapi_internal.gyp:ppapi_ipc_win64',
356              ],
357              'export_dependent_settings': [
358                '../ppapi/ppapi_internal.gyp:ppapi_ipc_win64',
359              ],
360              'sources': [
361                '../components/nacl/broker/nacl_broker_listener.cc',
362                '../components/nacl/broker/nacl_broker_listener.h',
363                '../components/nacl/common/nacl_debug_exception_handler_win.cc',
364                '../components/nacl/loader/nacl_helper_win_64.cc',
365                '../components/nacl/loader/nacl_helper_win_64.h',
366              ],
367              'include_dirs': [
368                '..',
369              ],
370              'defines': [
371                '<@(nacl_win64_defines)',
372                'COMPILE_CONTENT_STATICALLY',
373              ],
374              'configurations': {
375                'Common_Base': {
376                  'msvs_target_platform': 'x64',
377                },
378              },
379              'direct_dependent_settings': {
380                'defines': [
381                  '<@(nacl_defines)',
382                ],
383              },
384            },
385            {
386              'target_name': 'nacl_switches_win64',
387              'type': 'static_library',
388              'sources': [
389                'nacl/common/nacl_switches.cc',
390                'nacl/common/nacl_switches.h',
391              ],
392              'include_dirs': [
393                '..',
394              ],
395              'configurations': {
396                'Common_Base': {
397                  'msvs_target_platform': 'x64',
398                },
399              },
400            },
401            {
402              'target_name': 'nacl_common_win64',
403              'type': 'static_library',
404              'defines': [
405                'COMPILE_CONTENT_STATICALLY',
406              ],
407              'sources': [
408                'nacl/common/nacl_cmd_line.cc',
409                'nacl/common/nacl_cmd_line.h',
410                'nacl/common/nacl_constants.cc',
411                'nacl/common/nacl_constants.h',
412                'nacl/common/nacl_messages.cc',
413                'nacl/common/nacl_messages.h',
414                'nacl/common/nacl_renderer_messages.h',
415                'nacl/common/nacl_renderer_messages.cc',
416                'nacl/common/nacl_types.cc',
417                'nacl/common/nacl_types.h',
418              ],
419              'include_dirs': [
420                '..',
421              ],
422              'configurations': {
423                'Common_Base': {
424                  'msvs_target_platform': 'x64',
425                },
426              },
427            },
428          ],
429        }],
430      ],
431    }, {  # else (disable_nacl==1)
432      'targets': [
433        {
434          'target_name': 'nacl',
435          'type': 'none',
436          'sources': [],
437        },
438      ],
439      'conditions': [
440        ['OS=="win"', {
441          'targets': [
442            {
443              'target_name': 'nacl_win64',
444              'type': 'none',
445              'sources': [],
446            },
447            {
448              'target_name': 'nacl_switches_win64',
449              'type': 'none',
450              'sources': [],
451            },
452          ],
453        }],
454      ],
455    }],
456    ['disable_nacl!=1 and test_isolation_mode!="noop"', {
457      'targets': [
458        {
459          'target_name': 'nacl_loader_unittests_run',
460          'type': 'none',
461          'dependencies': [
462            'nacl_loader_unittests',
463          ],
464          'includes': [
465            '../build/isolate.gypi',
466            'nacl_loader_unittests.isolate',
467          ],
468          'sources': [
469            'nacl_loader_unittests.isolate',
470          ],
471        },
472      ],
473    }],
474  ],
475  'targets': [
476    {
477      'target_name': 'nacl_switches',
478      'type': 'static_library',
479      'sources': [
480        'nacl/common/nacl_switches.cc',
481        'nacl/common/nacl_switches.h',
482    ],
483      'include_dirs': [
484        '..',
485      ],
486    },
487    {
488      'target_name': 'nacl_common',
489      'type': 'static_library',
490      'sources': [
491        'nacl/common/nacl_cmd_line.cc',
492        'nacl/common/nacl_cmd_line.h',
493        'nacl/common/nacl_constants.cc',
494        'nacl/common/nacl_constants.h',
495        'nacl/common/nacl_host_messages.h',
496        'nacl/common/nacl_host_messages.cc',
497        'nacl/common/nacl_messages.cc',
498        'nacl/common/nacl_messages.h',
499        'nacl/common/nacl_nonsfi_util.cc',
500        'nacl/common/nacl_nonsfi_util.h',
501        'nacl/common/nacl_process_type.h',
502        'nacl/common/nacl_renderer_messages.h',
503        'nacl/common/nacl_renderer_messages.cc',
504        'nacl/common/nacl_sandbox_type_mac.h',
505        'nacl/common/nacl_types.cc',
506        'nacl/common/nacl_types.h',
507        'nacl/common/pnacl_types.cc',
508        'nacl/common/pnacl_types.h',
509      ],
510      'include_dirs': [
511        '..',
512      ],
513      'dependencies': [
514        '../content/content.gyp:content_common',
515      ],
516    },
517  ]
518}
519