Elim cr-checkbox
[chromium-blink-merge.git] / ppapi / ppapi_nacl.gyp
blobb546954dff81b9451b61301a218e5379ecb85264
1 # Copyright 2014 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.
5 # This GYP file defines untrusted (NaCl) targets.  All targets in this
6 # file should be conditionally depended upon via 'disable_nacl!=1' to avoid
7 # requiring NaCl sources for building.
10   'includes': [
11     '../build/common_untrusted.gypi',
12     'ppapi_sources.gypi',
13   ],
14   'targets': [
15     {
16       'target_name': 'ppapi_cpp_lib',
17       'type': 'none',
18       'variables': {
19         'nlib_target': 'libppapi_cpp.a',
20         'nso_target': 'libppapi_cpp.so',
21         'nacl_untrusted_build': 1,
22         'build_glibc': 1,
23         'build_newlib': 1,
24         'build_pnacl_newlib': 1,
25         'sources': [
26           '<@(cpp_source_files)',
27           'cpp/module_embedder.h',
28           'cpp/ppp_entrypoints.cc',
29         ],
30       },
31     },
32     {
33       'target_name': 'ppapi_gles2_lib',
34       'type': 'none',
35       'variables': {
36         'nlib_target': 'libppapi_gles2.a',
37         'nacl_untrusted_build': 1,
38         'nso_target': 'libppapi_gles2.so',
39         'build_glibc': 1,
40         'build_newlib': 1,
41         'build_pnacl_newlib': 1,
42         'include_dirs': [
43           'lib/gl/include',
44         ],
45         'sources': [
46           'lib/gl/gles2/gl2ext_ppapi.c',
47           'lib/gl/gles2/gl2ext_ppapi.h',
48           'lib/gl/gles2/gles2.c',
49         ],
50       },
51     },
52     {
53       'target_name': 'ppapi_nacl_tests',
54       'type': 'none',
55       'dependencies': [
56          '<(DEPTH)/native_client/src/untrusted/nacl/nacl.gyp:nacl_lib',
57          '<(DEPTH)/native_client/src/untrusted/pthread/pthread.gyp:pthread_lib',
58          'ppapi_cpp_lib',
59          'native_client/native_client.gyp:ppapi_lib',
60       ],
61       'variables': {
62         # This is user code (vs IRT code), so tls accesses do not
63         # need to be indirect through a function call.
64         'newlib_tls_flags=': [],
65         # TODO(bradnelson): Remove this compile flag once new nacl_rev is
66         # above 9362.
67         'compile_flags': [
68           '-DGL_GLEXT_PROTOTYPES',
69         ],
70         # Speed up pnacl linking by not generating debug info for tests.
71         # We compile with --strip-all under extra_args so debug info is
72         # discarded anyway.  Remove this and the --strip-all flag if
73         # debug info is really needed.
74         'compile_flags!': [
75           '-g',
76         ],
77         'defines': [
78           'GL_GLEXT_PROTOTYPES',
79         ],
80         'nexe_target': 'ppapi_nacl_tests',
81         'nacl_untrusted_build': 1,
82         'build_newlib': 1,
83         'include_dirs': [
84           'lib/gl/include',
85           '..',
86         ],
87         'link_flags': [
88           '-lppapi_cpp',
89           '-lppapi',
90           '-pthread',
91         ],
92         'link_flags!': [
93           '-O3',
94         ],
95         'translate_flags': [
96           '-O0',
97         ],
98         'conditions': [
99           ['target_arch=="ia32"', {
100             'extra_deps_newlib32': [
101               '>(tc_lib_dir_newlib32)/libppapi_cpp.a',
102               '>(tc_lib_dir_newlib32)/libppapi.a',
103             ],
104             'extra_deps_glibc32': [
105               '>(tc_lib_dir_glibc32)/libppapi_cpp.so',
106               '>(tc_lib_dir_glibc32)/libppapi.so',
107             ],
108           }],
109           ['target_arch=="x64" or (target_arch=="ia32" and OS=="win")', {
110             'extra_deps_newlib64': [
111               '>(tc_lib_dir_newlib64)/libppapi_cpp.a',
112               '>(tc_lib_dir_newlib64)/libppapi.a',
113             ],
114             'extra_deps_glibc64': [
115               '>(tc_lib_dir_glibc64)/libppapi_cpp.so',
116               '>(tc_lib_dir_glibc64)/libppapi.so',
117             ],
118           }],
119           ['target_arch=="arm"', {
120             'extra_deps_arm': [
121               '>(tc_lib_dir_newlib_arm)/libppapi_cpp.a',
122               '>(tc_lib_dir_newlib_arm)/libppapi.a',
123             ],
124           }],
125         ],
126         'extra_deps_pnacl_newlib': [
127           '>(tc_lib_dir_pnacl_newlib)/libppapi_cpp.a',
128           '>(tc_lib_dir_pnacl_newlib)/libppapi.a',
129         ],
130         'sources': [
131           '<@(test_common_source_files)',
132           '<@(test_nacl_source_files)',
133         ],
134         'extra_args': [
135           '--strip-all',
136         ],
137         'create_nmf': '<(DEPTH)/native_client_sdk/src/tools/create_nmf.py',
138         'create_nmf_flags': [
139           '--no-default-libpath',
140           '--objdump=>(nacl_glibc_tc_root)/bin/x86_64-nacl-objdump',
141         ],
142         'create_nonsfi_test_nmf': 'tests/create_nonsfi_test_nmf.py',
143       },
144       'conditions': [
145         ['(target_arch=="ia32" or target_arch=="x64") and disable_glibc==0', {
146           'variables': {
147             'build_glibc': 1,
148             # NOTE: Use /lib, not /lib64 here; it is a symbolic link which
149             # doesn't work on Windows.
150             'libdir_glibc64': '>(nacl_glibc_tc_root)/x86_64-nacl/lib',
151             'libdir_glibc32': '>(nacl_glibc_tc_root)/x86_64-nacl/lib32',
152             'nmf_glibc%': '<(PRODUCT_DIR)/>(nexe_target)_glibc.nmf',
153           },
154           'actions': [
155           {
156             'action_name': 'Generate GLIBC NMF and copy libs',
157             # NOTE: create_nmf must be first, it is the script python executes
158             # below.
159             'inputs': ['>(create_nmf)'],
160             # NOTE: There is no explicit dependency for the lib32
161             # and lib64 directories created in the PRODUCT_DIR.
162             # They are created as a side-effect of NMF creation.
163             'outputs': ['>(nmf_glibc)'],
164             'action': [
165               'python',
166               '>@(_inputs)',
167               '>@(create_nmf_flags)',
168               '--output=>(nmf_glibc)',
169               '--stage-dependencies=<(PRODUCT_DIR)',
170             ],
171             'conditions': [
172               ['target_arch=="ia32"', {
173                 'action': [
174                   '--library-path=>(libdir_glibc32)',
175                   '--library-path=>(tc_lib_dir_glibc32)',
176                 ],
177                 'inputs': ['>(out_glibc32)'],
178               }],
179               ['target_arch=="x64" or (target_arch=="ia32" and OS=="win")', {
180                 'action': [
181                   '--library-path=>(libdir_glibc64)',
182                   '--library-path=>(tc_lib_dir_glibc64)',
183                 ],
184                 'inputs': ['>(out_glibc64)'],
185               }],
186             ],
187           },
188         ],
189         }],
190         # Test PNaCl pre-translated code (pre-translated to save bot time).
191         # We only care about testing that code generation is correct,
192         # and in-browser translation is tested elsewhere.
193         # NOTE: native_client/build/untrusted.gypi dictates that
194         # PNaCl only generate x86-32 and x86-64 on x86 platforms,
195         # ARM on ARM platforms, or MIPS on MIPS platforms, not all
196         # versions always.
197         # The same goes for the PNaCl shims. So, we have two variations here.
198         ['disable_pnacl==0 and (target_arch=="ia32" or target_arch=="x64")', {
199           'variables': {
200             'build_pnacl_newlib': 1,
201             'translate_pexe_with_build': 1,
202             'nmf_pnacl%': '<(PRODUCT_DIR)/>(nexe_target)_pnacl.nmf',
203           },
204           # Shim is a dependency for the nexe because we pre-translate.
205           'dependencies': [
206             '<(DEPTH)/ppapi/native_client/src/untrusted/pnacl_irt_shim/pnacl_irt_shim.gyp:aot',
207           ],
208           'actions': [
209             {
210               'action_name': 'Generate PNACL NEWLIB NMF',
211               # NOTE: create_nmf must be first, it is the script python executes
212               # below.
213               'inputs': [
214                 '>(create_nmf)',
215               ],
216               'outputs': ['>(nmf_pnacl)'],
217               'action': [
218                 'python',
219                 '>@(_inputs)',
220                 '>@(create_nmf_flags)',
221                 '--output=>(nmf_pnacl)',
222               ],
223               'conditions': [
224                 ['target_arch=="ia32"', {
225                   'inputs': [
226                     '>(out_pnacl_newlib_x86_32_nexe)',
227                   ],
228                 }],
229                 ['target_arch=="x64" or (target_arch=="ia32" and OS=="win")', {
230                   'inputs': [
231                     '>(out_pnacl_newlib_x86_64_nexe)',
232                   ],
233                 }],
234               ],
235             },
236           ],
237         }],
238         ['disable_pnacl==0 and (target_arch=="ia32" or target_arch=="x64" or target_arch=="arm") and OS=="linux"', {
239           # In addition to above configuration, build x86-32 and arm nonsfi
240           # .nexe files by translating from .pexe binary, for non-SFI mode PPAPI
241           # testing.
242           'variables': {
243             'translate_pexe_with_build': 1,
244             'nmf_nonsfi%': '<(PRODUCT_DIR)/>(nexe_target)_pnacl_nonsfi.nmf',
245           },
246           'conditions': [
247             ['target_arch=="ia32" or target_arch=="x64"', {
248               'variables': {
249                 'enable_x86_32_nonsfi': 1,
250               },
251             }],
252             ['target_arch=="arm"', {
253               'variables': {
254                 'enable_arm_nonsfi': 1,
255               },
256             }],
257           ],
258           # Shim is a dependency for the nexe because we pre-translate.
259          'dependencies': [
260             '<(DEPTH)/ppapi/native_client/src/untrusted/pnacl_irt_shim/pnacl_irt_shim.gyp:aot',
261           ],
262           'actions': [
263             {
264               'action_name': 'Generate PNACL NEWLIB NONSFI NMF',
265               'inputs': ['>(create_nonsfi_test_nmf)'],
266               'outputs': ['>(nmf_nonsfi)'],
267               'action': [
268                 'python',
269                 '>(create_nonsfi_test_nmf)',
270                 '--output=>(nmf_nonsfi)',
271               ],
272               'target_conditions': [
273                 ['enable_x86_32_nonsfi==1 and "<(target_arch)"=="ia32"', {
274                   'inputs': ['>(out_pnacl_newlib_x86_32_nonsfi_nexe)'],
275                   'action': [
276                     '--program=>(out_pnacl_newlib_x86_32_nonsfi_nexe)',
277                     '--arch=x86-32',
278                   ]
279                 }],
280                 ['enable_x86_32_nonsfi==1 and "<(target_arch)"=="x64"', {
281                   'inputs': ['>(out_pnacl_newlib_x86_32_nonsfi_nexe)'],
282                   'action': [
283                     '--program=>(out_pnacl_newlib_x86_32_nonsfi_nexe)',
284                     # This should be used only for nacl_helper_nonsfi test.
285                     # In theory this should be x86-32. However, currently
286                     # fallback logic to x86-32-nonsfi is not implemented,
287                     # and, moreover, it would break the tests for current
288                     # nacl_helper in Non-SFI mode on x64 Chrome.
289                     # So, here we introduce the hack to use "x86-64" in order
290                     # to take the benefit to run nacl_helper_nonsfi tests on
291                     # x64 Chrome.
292                     # TODO(hidehiko): Remove this hack.
293                     '--arch=x86-64',
294                   ]
295                 }],
296                 ['enable_arm_nonsfi==1', {
297                   'inputs': ['>(out_pnacl_newlib_arm_nonsfi_nexe)'],
298                   'action': [
299                     '--program=>(out_pnacl_newlib_arm_nonsfi_nexe)',
300                     '--arch=arm',
301                   ]
302                 }],
303               ],
304             },
305           ],
306         }],
307         ['disable_pnacl==0 and target_arch=="arm"', {
308           'variables': {
309             'build_pnacl_newlib': 1,
310             'translate_pexe_with_build': 1,
311             'nmf_pnacl%': '<(PRODUCT_DIR)/>(nexe_target)_pnacl.nmf',
312           },
313           # Shim is a dependency for the nexe because we pre-translate.
314           'dependencies': [
315             '<(DEPTH)/ppapi/native_client/src/untrusted/pnacl_irt_shim/pnacl_irt_shim.gyp:aot',
316           ],
317           'actions': [
318             {
319               'action_name': 'Generate PNACL NEWLIB NMF',
320               # NOTE: create_nmf must be first, it is the script python executes
321               # below.
322               'inputs': ['>(create_nmf)', '>(out_pnacl_newlib_arm_nexe)'],
323               'outputs': ['>(nmf_pnacl)'],
324               'action': [
325                 'python',
326                 '>@(_inputs)',
327                 '>@(create_nmf_flags)',
328                 '--output=>(nmf_pnacl)',
329               ],
330             },
331           ],
332         }],
333         ['disable_pnacl==0 and target_arch=="mipsel"', {
334           'variables': {
335             'build_pnacl_newlib': 1,
336             'translate_pexe_with_build': 1,
337             'nmf_pnacl%': '<(PRODUCT_DIR)/>(nexe_target)_pnacl.nmf',
338           },
339           # Shim is a dependency for the nexe because we pre-translate.
340           'dependencies': [
341             '<(DEPTH)/ppapi/native_client/src/untrusted/pnacl_irt_shim/pnacl_irt_shim.gyp:aot',
342           ],
343           'actions': [
344             {
345               'action_name': 'Generate PNACL NEWLIB NMF',
346               'inputs': ['>(create_nmf)', '>(out_pnacl_newlib_mips_nexe)'],
347               'outputs': ['>(nmf_pnacl)'],
348               'action': [
349                 'python',
350                 '>@(_inputs)',
351                 '>@(create_nmf_flags)',
352                 '--output=>(nmf_pnacl)',
353               ],
354             },
355           ],
356         }],
357       ],
358     },
359   ],