Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(155)

Side by Side Diff: native_client_sdk/src/doc/devguide/devcycle/building.rst

Issue 479623002: Fix incorrect paths. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 .. _devcycle-building: 1 .. _devcycle-building:
2 2
3 ######## 3 ########
4 Building 4 Building
5 ######## 5 ########
6 6
7 .. contents:: Table Of Contents 7 .. contents:: Table Of Contents
8 :local: 8 :local:
9 :backlinks: none 9 :backlinks: none
10 :depth: 2 10 :depth: 2
(...skipping 22 matching lines...) Expand all
33 will run on Windows, Mac OS X, Linux, and ChromeOS and it will run on x86-32, 33 will run on Windows, Mac OS X, Linux, and ChromeOS and it will run on x86-32,
34 x86-64, ARM and MIPS processors. 34 x86-64, ARM and MIPS processors.
35 35
36 Native Client also supports architecture-specific **nexe** files. 36 Native Client also supports architecture-specific **nexe** files.
37 These **nexe** files are **also** operating-system-independent, 37 These **nexe** files are **also** operating-system-independent,
38 but they are **not** processor-independent. To support a wide variety of 38 but they are **not** processor-independent. To support a wide variety of
39 devices you must compile separate versions of your Native Client module 39 devices you must compile separate versions of your Native Client module
40 for different processors on end-user machines. A 40 for different processors on end-user machines. A
41 :ref:`manifest file <application_files>` will then specify which version 41 :ref:`manifest file <application_files>` will then specify which version
42 of the module to load based on the end-user's architecture. The SDK 42 of the module to load based on the end-user's architecture. The SDK
43 includes a script---``create_nmf.py`` (in the ``tools/`` directory)---to 43 includes a script for generating manifest files called ``create_nmf.py``. This
44 generate manifest files. For examples of how to compile modules 44 script is located in the ``pepper_<version>/tools/``, meaning under your
JF 2014/08/15 21:17:08 in the ... directory
jpmedley 2014/08/18 14:58:23 Done.
45 for multiple target architectures and how to generate manifest files, see the 45 installed pepper bundle. For examples of how to compile modules for multiple
46 Makefiles included with the SDK examples. 46 target architectures and how to generate manifest files, see the Makefiles
47 included with the SDK examples.
47 48
48 This section will mostly cover PNaCl, but also describes how to build 49 This section will mostly cover PNaCl, but also describes how to build
49 **nexe** applications. 50 **nexe** applications.
50 51
51 C libraries 52 C libraries
52 ----------- 53 -----------
53 54
54 The PNaCl SDK has a single choice of C library: newlib_. 55 The PNaCl SDK has a single choice of C library: newlib_.
55 56
56 The Native Client SDK also has a GCC-based toolchain for building 57 The Native Client SDK also has a GCC-based toolchain for building
(...skipping 21 matching lines...) Expand all
78 ``-std=gnu++11`` command line argument can be used to indicate which C++ 79 ``-std=gnu++11`` command line argument can be used to indicate which C++
79 language standard to use (``-std=c++11`` often doesn't work well because newlib 80 language standard to use (``-std=c++11`` often doesn't work well because newlib
80 relies on some GNU extensions). 81 relies on some GNU extensions).
81 82
82 SDK toolchains 83 SDK toolchains
83 -------------- 84 --------------
84 85
85 The Native Client SDK includes multiple toolchains. It has one PNaCl toolchain 86 The Native Client SDK includes multiple toolchains. It has one PNaCl toolchain
86 and it has multiple GCC-based toolchains that are differentiated by target 87 and it has multiple GCC-based toolchains that are differentiated by target
87 architectures and C libraries. The single PNaCl toolchain is located 88 architectures and C libraries. The single PNaCl toolchain is located
88 in a directory named ``toolchain/<OS_platform>_pnacl``, and the GCC-based 89 in a directory named ``pepper_<version>/toolchain/<OS_platform>_pnacl``,
89 toolchains are located in directories named 90 and the GCC-based toolchains are located in directories named
90 ``toolchain/<OS_platform>_<architecture>_<library>``, where: 91 ``pepper_<version>/toolchain/<OS_platform>_<architecture>_<library>``.
JF 2014/08/15 21:17:08 Replace "library" with "c_library" since the defin
jpmedley 2014/08/18 14:58:23 Done.
91
92 * *<platform>* is the platform of your development machine (*win*, *mac*, or
93 *linux*)
94 * *<architecture>* is your target architecture (*x86* or *arm*)
95 * *<library>* is the C library you are compiling with (*newlib* or *glibc*)
96 92
97 The compilers, linkers, and other tools are located in the ``bin/`` 93 The compilers, linkers, and other tools are located in the ``bin/``
98 subdirectory in each toolchain. For example, the tools in the Windows SDK 94 subdirectory in each toolchain. For example, the tools in the Windows SDK
99 for PNaCl has a C++ compiler in ``toolchain/win_pnacl/bin/pnacl-clang++``. 95 for PNaCl has a C++ compiler in ``toolchain/win_pnacl/bin/pnacl-clang++``.
100 As another example, the GCC-based C++ compiler that targets x86 and uses the
101 newlib library, is located at ``toolchain/win_x86_newlib/bin/x86_64-nacl-g++``.
102
103 .. Note::
104 :class: note
105
106 The SDK toolchains descend from the ``toolchain/`` directory. The SDK also
107 has a ``tools/`` directory; this directory contains utilities that are not
108 properly part of the toolchains but that you may find helpful in building and
109 testing your application (e.g., the ``create_nmf.py`` script, which you can
110 use to create a manifest file).
111 96
112 SDK toolchains versus your hosted toolchain 97 SDK toolchains versus your hosted toolchain
113 ------------------------------------------- 98 -------------------------------------------
114 99
115 To build NaCl modules, you must use one of the Native Client toolchains 100 To build NaCl modules, you must use one of the Native Client toolchains
116 included in the SDK. The SDK toolchains use a variety of techniques to 101 included in the SDK. The SDK toolchains use a variety of techniques to
117 ensure that your NaCl modules comply with the security constraints of 102 ensure that your NaCl modules comply with the security constraints of
118 the Native Client sandbox. 103 the Native Client sandbox.
119 104
120 During development, you have another choice: You can build modules using a 105 During development, you have another choice: You can build modules using a
(...skipping 23 matching lines...) Expand all
144 =================== 129 ===================
145 130
146 The PNaCl toolchain contains modified versions of the tools in the 131 The PNaCl toolchain contains modified versions of the tools in the
147 LLVM toolchain, as well as linkers and other tools from binutils. 132 LLVM toolchain, as well as linkers and other tools from binutils.
148 To determine which version of LLVM or binutils the tools are based upon, 133 To determine which version of LLVM or binutils the tools are based upon,
149 run the tool with the ``--version`` command line flag. These tools 134 run the tool with the ``--version`` command line flag. These tools
150 are used to compile and link applications into **.pexe** files. The toolchain 135 are used to compile and link applications into **.pexe** files. The toolchain
151 also contains a tool to translate a **pexe** file into a 136 also contains a tool to translate a **pexe** file into a
152 architecture-specific **.nexe** (e.g., for debugging purposes). 137 architecture-specific **.nexe** (e.g., for debugging purposes).
153 138
154 Each tool's name is preceded by the prefix "pnacl-". Some of the useful 139 Some of the useful tools include:
155 tools include:
156 140
157 pnacl-abicheck 141 pnacl-abicheck
158 Check that the **pexe** follows the PNaCl ABI rules. 142 Checks that the **pexe** follows the PNaCl ABI rules.
159 pnacl-ar 143 pnacl-ar
160 Creates archives (i.e., static libraries) 144 Creates archives (i.e., static libraries)
161 pnacl-clang 145 pnacl-clang
162 C compiler and compiler driver 146 C compiler and compiler driver
163 pnacl-clang++ 147 pnacl-clang++
164 C++ compiler and compiler driver 148 C++ compiler and compiler driver
165 pnacl-compress 149 pnacl-compress
166 Size compresses a finalized **pexe** file for deployment. 150 Compresses a finalized **pexe** file for deployment.
167 pnacl-dis 151 pnacl-dis
168 Disassembler for both **pexe** files and **nexe** files 152 Disassembler for both **pexe** files and **nexe** files
169 pnacl-finalize 153 pnacl-finalize
170 Finalizes **pexe** files for deployment 154 Finalizes **pexe** files for deployment
171 pnacl-ld 155 pnacl-ld
172 Bitcode linker 156 Bitcode linker
173 pnacl-nm 157 pnacl-nm
174 Lists symbols in bitcode files, native code, and libraries 158 Lists symbols in bitcode files, native code, and libraries
175 pnacl-ranlib 159 pnacl-ranlib
176 Generates a symbol table for archives (i.e., static libraries) 160 Generates a symbol table for archives (i.e., static libraries)
177 pnacl-translate 161 pnacl-translate
178 Translates a **pexe** to a native architecture, outside of the browser 162 Translates a **pexe** to a native architecture, outside of the browser
179 163
180 For the full list of tools, see the 164 For the full list of tools, see the
181 ``<NACL_SDK_ROOT>/toolchain/<platform>_pnacl/bin`` directory. 165 ``pepper_<version>/toolchain/<platform>_pnacl/bin`` directory.
182 166
183 Using the PNaCl tools to compile, link, debug, and deploy 167 Using the PNaCl tools to compile, link, debug, and deploy
184 ========================================================= 168 =========================================================
185 169
186 To build an application with the PNaCl SDK toolchain, you must compile 170 To build an application with the PNaCl SDK toolchain, you must compile
187 your code, link it, test and debug it, and then deploy it. This section goes 171 your code, link it, test and debug it, and then deploy it. This section goes
188 over some examples of how to use the tools. 172 over some examples of how to use the tools.
189 173
190 Compile 174 Compile
191 ------- 175 -------
192 176
193 To compile a simple application consisting of ``file1.cc`` and ``file2.cc`` into 177 To compile a simple application consisting of ``file1.cc`` and ``file2.cc`` into
194 ``hello_world.pexe`` with a single command, use the ``pnacl-clang++`` tool 178 ``hello_world.pexe`` use the ``pnacl-clang++`` tool
195 179
196 .. naclcode:: 180 .. naclcode::
197 :prettyprint: 0 181 :prettyprint: 0
198 182
199 <NACL_SDK_ROOT>/toolchain/win_pnacl/bin/pnacl-clang++ file1.cc file2.cc ^ 183 <NACL_SDK_ROOT>/pepper_<version>/toolchain/win_pnacl/bin/pnacl-clang++ \
200 -I<NACL_SDK_ROOT>/include -L<NACL_SDK_ROOT>/lib/pnacl/Release ^ 184 file1.cc file2.cc -I<NACL_SDK_ROOT>/pepper_<version>/include \
201 -o hello_world.pexe -g -O2 -lppapi_cpp -lppapi 185 -L<NACL_SDK_ROOT>/pepper_<version>/lib/pnacl/Release -o hello_world.pexe \
186 -g -O2 -lppapi_cpp -lppapi
202 187
203 (The carat ``^`` allows the command to span multiple lines on Windows; 188 The typical application consists of many files. In that case,
204 to do the same on Mac and Linux use a backslash instead. Or you can
205 simply type the command and all its arguments on one
206 line. ``<NACL_SDK_ROOT>`` represents the path to the top-level
207 directory of the bundle you are using, e.g.,
208 ``<location-where-you-installed-the-SDK>/pepper_31``.)
209
210 However, the typical application consists of many files. In that case,
211 each file can be compiled separately so that only files that are 189 each file can be compiled separately so that only files that are
212 affected by a change need to be recompiled. To compile an individual 190 affected by a change need to be recompiled. To compile an individual
213 file from your application, you must use either the ``pnacl-clang`` C 191 file from your application, you must use either the ``pnacl-clang`` C
214 compiler, or the ``pnacl-clang++`` C++ compiler. The compiler produces 192 compiler, or the ``pnacl-clang++`` C++ compiler. The compiler produces
215 separate bitcode files. For example: 193 separate bitcode files. For example:
216 194
217 .. naclcode:: 195 .. naclcode::
218 :prettyprint: 0 196 :prettyprint: 0
219 197
220 <NACL_SDK_ROOT>/toolchain/win_pnacl/bin/pnacl-clang++ hello_world.cc ^ 198 <NACL_SDK_ROOT>/pepper_<version>/toolchain/win_pnacl/bin/pnacl-clang++ \
221 -I<NACL_SDK_ROOT>/include -c -o hello_world.o -g -O0 199 hello_world.cc -I<NACL_SDK_ROOT>/include -c -o hello_world.o -g -O0
222 200
223 For a description of each command line flag, run ``pnacl-clang --help``. 201 For a description of each command line flag, run ``pnacl-clang --help``.
224 For convenience, here is a description of some of the flags used in 202 For convenience, here is a description of some of the flags used in
225 the example. 203 the example.
226 204
227 .. _compile_flags: 205 .. _compile_flags:
228 206
229 ``-c`` 207 ``-c``
230 indicates that ``pnacl-clang++`` should only compile an individual file, 208 indicates that ``pnacl-clang++`` should only compile an individual file,
231 rather than continue the build process and link together the 209 rather than continue the build process and link together the
(...skipping 19 matching lines...) Expand all
251 which level of optimization is right for you. When looking at code size, note 229 which level of optimization is right for you. When looking at code size, note
252 that what you generally care about is not the size of the **pexe** produced by 230 that what you generally care about is not the size of the **pexe** produced by
253 ``pnacl-clang``, but the size of the compressed **pexe** that you upload to 231 ``pnacl-clang``, but the size of the compressed **pexe** that you upload to
254 the server or to the Chrome Web Store. Optimizations that increase the size of 232 the server or to the Chrome Web Store. Optimizations that increase the size of
255 an uncompressed **pexe** may not increase the size of the compressed **pexe** 233 an uncompressed **pexe** may not increase the size of the compressed **pexe**
256 very much. You should also verify how optimization level affects on-device 234 very much. You should also verify how optimization level affects on-device
257 translation time, this can be tested locally with ``pnacl-translate``. 235 translation time, this can be tested locally with ``pnacl-translate``.
258 236
259 ``-I<directory>`` 237 ``-I<directory>``
260 adds a directory to the search path for **include** files. The SDK has 238 adds a directory to the search path for **include** files. The SDK has
261 Pepper (PPAPI) headers located at ``<NACL_SDK_ROOT>/include``, so add 239 Pepper (PPAPI) headers located at ``<NACL_SDK_ROOT>/pepper_<version>/
262 that directory when compiling to be able to include the headers. 240 include``, so add that directory when compiling to be able to include the
241 headers.
263 242
264 ``-mllvm -inline-threshold=n`` 243 ``-mllvm -inline-threshold=n``
265 change how much inlining is performed by LLVM (the default is 225, a smaller 244 change how much inlining is performed by LLVM (the default is 225, a smaller
266 value will result in less inlining being performed). The right number to 245 value will result in less inlining being performed). The right number to
267 choose is application-specific, you'll therefore want to experiment with the 246 choose is application-specific, you'll therefore want to experiment with the
268 value that you pass in: you'll be trading off potential performance with 247 value that you pass in: you'll be trading off potential performance with
269 **pexe** size and on-device translation speed. 248 **pexe** size and on-device translation speed.
270 249
271 Create a static library 250 Create a static library
272 ----------------------- 251 -----------------------
273 252
274 The ``pnacl-ar`` and ``pnacl-ranlib`` tools allow you to create a 253 The ``pnacl-ar`` and ``pnacl-ranlib`` tools allow you to create a
275 **static** library from a set of bitcode files, which can later be linked 254 **static** library from a set of bitcode files, which can later be linked
276 into the full application. 255 into the full application.
277 256
278 .. naclcode:: 257 .. naclcode::
279 :prettyprint: 0 258 :prettyprint: 0
280 259
281 <NACL_SDK_ROOT>/toolchain/win_pnacl/bin/pnacl-ar cr libfoo.a ^ 260 <NACL_SDK_ROOT>/pepper_<version>/toolchain/win_pnacl/bin/pnacl-ar cr \
282 foo1.o foo2.o foo3.o 261 libfoo.a foo1.o foo2.o foo3.o
283 262
284 <NACL_SDK_ROOT>/toolchain/win_pnacl/bin/pnacl-ranlib libfoo.a 263 <NACL_SDK_ROOT>/pepper_<version>/toolchain/win_pnacl/bin/pnacl-ranlib libfoo.a
285 264
286 265
287 Link the application 266 Link the application
288 -------------------- 267 --------------------
289 268
290 The ``pnacl-clang++`` tool is used to compile applications, but it can 269 The ``pnacl-clang++`` tool is used to compile applications, but it can
291 also be used link together compiled bitcode and libraries into a 270 also be used link together compiled bitcode and libraries into a
292 full application. 271 full application.
293 272
294 .. naclcode:: 273 .. naclcode::
295 :prettyprint: 0 274 :prettyprint: 0
296 275
297 <NACL_SDK_ROOT>/toolchain/win_pnacl/bin/pnacl-clang++ -o hello_world.pexe ^ 276 <NACL_SDK_ROOT>/pepper_<version>/toolchain/win_pnacl/bin/pnacl-clang++ \
298 hello_world.o -L<NACL_SDK_ROOT>/lib/pnacl/Debug ^ 277 -o hello_world.pexe hello_world.o -L<NACL_SDK_ROOT>/lib/pnacl/Debug \
299 -lfoo -lppapi_cpp -lppapi 278 -lfoo -lppapi_cpp -lppapi
300 279
301 This links the hello world bitcode with the ``foo`` library in the example 280 This links the hello world bitcode with the ``foo`` library in the example
302 as well as the *Debug* version of the Pepper libraries which are located 281 as well as the *Debug* version of the Pepper libraries which are located
303 in ``<NACL_SDK_ROOT>/lib/pnacl/Debug``. If you wish to link against the 282 in ``<NACL_SDK_ROOT>/pepper_<version>/lib/pnacl/Debug``. If you wish to link
304 *Release* version of the Pepper libraries, change the 283 against the *Release* version of the Pepper libraries, change the
305 ``-L<NACL_SDK_ROOT>/lib/pnacl/Debug`` to 284 ``-L<NACL_SDK_ROOT>/pepper_<version>/lib/pnacl/Debug`` to
306 ``-L<NACL_SDK_ROOT>/lib/pnacl/Release``. 285 ``-L<NACL_SDK_ROOT>/pepper_<version>/lib/pnacl/Release``.
307 286
308 In a release build you'll want to pass ``-O2`` to the compiler *as well as to 287 In a release build you'll want to pass ``-O2`` to the compiler *as well as to
309 the linker* to enable link-time optimizations. This reduces the size and 288 the linker* to enable link-time optimizations. This reduces the size and
310 increases the performance of the final **pexe**, and leads to faster downloads 289 increases the performance of the final **pexe**, and leads to faster downloads
311 and on-device translation. 290 and on-device translation.
312 291
313 .. naclcode:: 292 .. naclcode::
314 :prettyprint: 0 293 :prettyprint: 0
315 294
316 <NACL_SDK_ROOT>/toolchain/win_pnacl/bin/pnacl-clang++ -o hello_world.pexe ^ 295 <NACL_SDK_ROOT>/pepper_<version>/toolchain/win_pnacl/bin/pnacl-clang++ \
317 hello_world.o -L<NACL_SDK_ROOT>/lib/pnacl/Release ^ 296 -o hello_world.pexe hello_world.o -L<NACL_SDK_ROOT>/lib/pnacl/Release \
318 -lfoo -lppapi_cpp -lppapi -O2 297 -lfoo -lppapi_cpp -lppapi -O2
319 298
320 By default the link step will turn all C++ exceptions into calls to ``abort()`` 299 By default the link step will turn all C++ exceptions into calls to ``abort()``
321 to reduce the size of the final **pexe** as well as making it translate and run 300 to reduce the size of the final **pexe** as well as making it translate and run
322 faster. If you want to use C++ exceptions you should use the 301 faster. If you want to use C++ exceptions you should use the
323 ``--pnacl-exceptions=sjlj`` linker flag as explained in the :ref:`exception 302 ``--pnacl-exceptions=sjlj`` linker flag as explained in the :ref:`exception
324 handling <exception_handling>` section of the C++ language support reference. 303 handling <exception_handling>` section of the C++ language support reference.
325 304
326 305
327 Finalizing the **pexe** for deployment 306 Finalizing the **pexe** for deployment
328 -------------------------------------- 307 --------------------------------------
329 308
330 Typically you would run the application to test it and debug it if needed before 309 Typically you would run the application to test it and debug it if needed before
331 deploying. See the :doc:`running <running>` documentation for how to run a PNaCl 310 deploying. See the :doc:`running <running>` documentation for how to run a PNaCl
332 application, and see the :doc:`debugging <debugging>` documentation for 311 application, and see the :doc:`debugging <debugging>` documentation for
333 debugging techniques and workflow. After testing a PNaCl application, you must 312 debugging techniques and workflow. After testing a PNaCl application, you must
334 **finalize** it. The ``pnacl-finalize`` tool handles this. 313 **finalize** it. The ``pnacl-finalize`` tool handles this.
335 314
336 .. naclcode:: 315 .. naclcode::
337 :prettyprint: 0 316 :prettyprint: 0
338 317
339 <NACL_SDK_ROOT>/toolchain/win_pnacl/bin/pnacl-finalize ^ 318 <NACL_SDK_ROOT>/pepper_<version>/toolchain/win_pnacl/bin/pnacl-finalize \
340 hello_world.pexe -o hello_world.final.pexe 319 hello_world.pexe -o hello_world.final.pexe
341 320
342 Prior to finalization, the application **pexe** is stored in a binary 321 Prior to finalization, the application **pexe** is stored in a binary
343 format that is subject to change. After finalization, the application 322 format that is subject to change. After finalization, the application
344 **pexe** is **rewritten** into a different binary format that is **stable** 323 **pexe** is **rewritten** into a different binary format that is **stable**
345 and will be supported by future versions of PNaCl. The finalization step 324 and will be supported by future versions of PNaCl. The finalization step
346 also helps minimize the size of your application for distribution by 325 also helps minimize the size of your application for distribution by
347 stripping out debug information and other metadata. 326 stripping out debug information and other metadata.
348 327
349 Once the application is finalized, be sure to adjust the manifest file to 328 Once the application is finalized, be sure to adjust the manifest file to
(...skipping 15 matching lines...) Expand all
365 decompressed on the client's side. All costs are upfront when you call 344 decompressed on the client's side. All costs are upfront when you call
366 ``pnacl-compress``. 345 ``pnacl-compress``.
367 346
368 Currently, this tool will compress **pexe** files by about 25%. However, 347 Currently, this tool will compress **pexe** files by about 25%. However,
369 it is somewhat slow (can take from seconds to minutes on large 348 it is somewhat slow (can take from seconds to minutes on large
370 appications). Hence, this step is optional. 349 appications). Hence, this step is optional.
371 350
372 .. naclcode:: 351 .. naclcode::
373 :prettyprint: 0 352 :prettyprint: 0
374 353
375 <NACL_SDK_ROOT>/toolchain/win_pnacl/bin/pnacl-compress ^ 354 <NACL_SDK_ROOT>/pepper_<version>/toolchain/win_pnacl/bin/pnacl-compress \
376 hello_world.final.pexe 355 hello_world.final.pexe
377 356
378 ``pnacl-compress`` must be called after a **pexe** file has been finalized for 357 ``pnacl-compress`` must be called after a **pexe** file has been finalized for
379 deployment (via ``pnacl-finalize``). Alternatively, you can apply this step as 358 deployment (via ``pnacl-finalize``). Alternatively, you can apply this step as
380 part of the finalizing step by adding the ``--compress`` flag to the 359 part of the finalizing step by adding the ``--compress`` flag to the
381 ``pnacl-finalize`` command line. 360 ``pnacl-finalize`` command line.
382 361
383 This compression step doesn't replace the gzip compression performed web servers 362 This compression step doesn't replace the gzip compression performed web servers
384 configured for HTTP compression: both compressions are complementary. You'll 363 configured for HTTP compression: both compressions are complementary. You'll
385 want to configure your web server to gzip **pexe** files: the gzipped version of 364 want to configure your web server to gzip **pexe** files: the gzipped version of
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
444 files with the PNaCl-based toolchain, except that the output is 423 files with the PNaCl-based toolchain, except that the output is
445 architecture specific. 424 architecture specific.
446 425
447 For example, assuming you're developing on a Windows machine, targeting the x86 426 For example, assuming you're developing on a Windows machine, targeting the x86
448 architecture, and using the newlib library, you can compile a 32-bit **.nexe** 427 architecture, and using the newlib library, you can compile a 32-bit **.nexe**
449 for the hello_world example with the following command: 428 for the hello_world example with the following command:
450 429
451 .. naclcode:: 430 .. naclcode::
452 :prettyprint: 0 431 :prettyprint: 0
453 432
454 <NACL_SDK_ROOT>/toolchain/win_x86_newlib/bin/i686-nacl-gcc hello_world.c ^ 433 <NACL_SDK_ROOT>/pepper_<version>/toolchain/win_x86_newlib/bin/i686-nacl-gcc \
455 -I<NACL_SDK_ROOT>/include -L<NACL_SDK_ROOT>/lib/newlib/Release ^ 434 hello_world.c -I<NACL_SDK_ROOT>/pepper_<version>/include \
456 -o hello_world_x86_32.nexe -m32 -g -O2 -lppapi 435 -L<NACL_SDK_ROOT>/lib/newlib/Release -o hello_world_x86_32.nexe \
436 -m32 -g -O2 -lppapi
457 437
458 To compile a 64-bit **.nexe**, you can run the same command but use -m64 instead 438 To compile a 64-bit **.nexe**, you can run the same command but use -m64 instead
459 of -m32. Alternatively, you could also use the version of the compiler that 439 of -m32. Alternatively, you could also use the version of the compiler that
460 targets the x86-64 architecture, i.e., ``x86_64-nacl-gcc``. 440 targets the x86-64 architecture, i.e., ``x86_64-nacl-gcc``.
461 441
462 You should name executable modules with a **.nexe** filename extension, 442 You should name executable modules with a **.nexe** filename extension,
463 regardless of what platform you're using. 443 regardless of what platform you're using.
464 444
465 Creating libraries and Linking 445 Creating libraries and Linking
466 ------------------------------ 446 ------------------------------
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
555 for each command. 535 for each command.
556 536
557 For details on how to use make, see the `GNU 'make' Manual 537 For details on how to use make, see the `GNU 'make' Manual
558 <http://www.gnu.org/software/make/manual/make.html>`_. 538 <http://www.gnu.org/software/make/manual/make.html>`_.
559 539
560 Libraries and header files provided with the SDK 540 Libraries and header files provided with the SDK
561 ================================================ 541 ================================================
562 542
563 The Native Client SDK includes modified versions of standard toolchain-support 543 The Native Client SDK includes modified versions of standard toolchain-support
564 libraries, such as libpthread and libc, plus the relevant header files. 544 libraries, such as libpthread and libc, plus the relevant header files.
565 The standard libraries are located in the following directories: 545 The standard libraries are located under the ``/pepper_<version>`` directory
546 in the following locations:
566 547
567 * PNaCl toolchain: ``toolchain/<platform>_pnacl/usr/lib`` 548 * PNaCl toolchain: ``toolchain/<platform>_pnacl/usr/lib``
568 * x86 toolchains: ``toolchain/<platform>_x86_<library>/x86_64-nacl/lib32`` and 549 * x86 toolchains: ``toolchain/<platform>_x86_<library>/x86_64-nacl/lib32`` and
569 ``/lib64`` (for the 32-bit and 64-bit target architectures, respectively) 550 ``/lib64`` (for the 32-bit and 64-bit target architectures, respectively)
570 * ARM toolchain: ``toolchain/<platform>_arm_<library>/arm-nacl/lib`` 551 * ARM toolchain: ``toolchain/<platform>_arm_<library>/arm-nacl/lib``
JF 2014/08/15 21:17:08 Same here on c_library?
jpmedley 2014/08/18 14:58:23 Done. Also did lines 559 and 560, below.
571 552
572 For example, on Windows, the libraries for the x86-64 architecture in the 553 For example, on Windows, the libraries for the x86-64 architecture in the
573 newlib toolchain are in ``toolchain/win_x86_newlib/x86_64-nacl/lib64``. 554 newlib toolchain are in ``toolchain/win_x86_newlib/x86_64-nacl/lib64``.
574 555
575 The header files are in: 556 The header files are in:
576 557
577 * PNaCl toolchain: ``toolchain/<platform>_pnacl/usr/include`` 558 * PNaCl toolchain: ``toolchain/<platform>_pnacl/usr/include``
578 * x86 toolchains: ``toolchain/<platform>_x86_<library>/x86_64-nacl/include`` 559 * x86 toolchains: ``toolchain/<platform>_x86_<library>/x86_64-nacl/include``
579 * ARM toolchain: ``toolchain/<platform>_arm_<library>/arm-nacl/include`` 560 * ARM toolchain: ``toolchain/<platform>_arm_<library>/arm-nacl/include``
580 561
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
629 .. Note:: 610 .. Note::
630 :class: note 611 :class: note
631 612
632 * Since the Native Client toolchains use their own library and header search 613 * Since the Native Client toolchains use their own library and header search
633 paths, the tools won't find third-party libraries you use in your 614 paths, the tools won't find third-party libraries you use in your
634 non-Native-Client development. If you want to use a specific third-party 615 non-Native-Client development. If you want to use a specific third-party
635 library for Native Client development, look for it in `naclports 616 library for Native Client development, look for it in `naclports
636 <http://code.google.com/p/naclports/>`_, or port the library yourself. 617 <http://code.google.com/p/naclports/>`_, or port the library yourself.
637 * The order in which you list libraries in your build commands is important, 618 * The order in which you list libraries in your build commands is important,
638 since the linker searches and processes libraries in the order in which they 619 since the linker searches and processes libraries in the order in which they
639 are specified. See the \*_LDFLAGS variables in the Makefiles of the SDK 620 are specified. See the ``\*_LDFLAGS`` variables in the Makefiles of the SDK
640 examples for the order in which specific libraries should be listed. 621 examples for the order in which specific libraries should be listed.
641 622
642 Troubleshooting 623 Troubleshooting
643 =============== 624 ===============
644 625
645 Some common problems, and how to fix them: 626 Some common problems, and how to fix them:
646 627
647 "Undefined reference" error 628 "Undefined reference" error
648 --------------------------- 629 ---------------------------
649 630
(...skipping 21 matching lines...) Expand all
671 use URL loaders, or an in-memory filesystem). 652 use URL loaders, or an in-memory filesystem).
672 653
673 Can't find libraries containing necessary symbols 654 Can't find libraries containing necessary symbols
674 ------------------------------------------------- 655 -------------------------------------------------
675 656
676 Here is one way to find the appropriate library for a given symbol: 657 Here is one way to find the appropriate library for a given symbol:
677 658
678 .. naclcode:: 659 .. naclcode::
679 :prettyprint: 0 660 :prettyprint: 0
680 661
681 <NACL_SDK_ROOT>/toolchain/<platform>_pnacl/bin/pnacl-nm -o \ 662 <NACL_SDK_ROOT>/pepper_<version>/toolchain/<platform>_pnacl/bin/pnacl-nm -o \
682 toolchain/<platform>_pnacl/usr/lib/*.a | grep <MySymbolName> 663 <NACL_SDK_ROOT>/pepper_<version>toolchain/<platform>_pnacl/usr/lib/*.a | \
664 grep <MySymbolName>
683 665
684 666
685 PNaCl ABI Verification errors 667 PNaCl ABI Verification errors
686 ----------------------------- 668 -----------------------------
687 669
688 PNaCl has restrictions on what is supported in bitcode. There is a bitcode 670 PNaCl has restrictions on what is supported in bitcode. There is a bitcode
689 ABI verifier which checks that the application conforms to the ABI restrictions, 671 ABI verifier which checks that the application conforms to the ABI restrictions,
690 before it is translated and run in the browser. However, it is best to 672 before it is translated and run in the browser. However, it is best to
691 avoid runtime errors for users, so the verifier also runs on the developer's 673 avoid runtime errors for users, so the verifier also runs on the developer's
692 machine at link time. 674 machine at link time.
(...skipping 18 matching lines...) Expand all
711 Function foo has disallowed type: i128 (i128) 693 Function foo has disallowed type: i128 (i128)
712 LLVM ERROR: PNaCl ABI verification failed 694 LLVM ERROR: PNaCl ABI verification failed
713 695
714 When faced with a PNaCl ABI verification error, check the list of features 696 When faced with a PNaCl ABI verification error, check the list of features
715 that are :ref:`not supported by PNaCl <when-to-use-nacl>`. 697 that are :ref:`not supported by PNaCl <when-to-use-nacl>`.
716 If the problem you face is not listed as restricted, 698 If the problem you face is not listed as restricted,
717 :ref:`let us know <help>`! 699 :ref:`let us know <help>`!
718 700
719 .. _glibc: http://www.gnu.org/software/libc/ 701 .. _glibc: http://www.gnu.org/software/libc/
720 .. _newlib: http://sourceware.org/newlib/ 702 .. _newlib: http://sourceware.org/newlib/
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698