| Index: native_client_sdk/src/doc/sdk/examples.rst
|
| diff --git a/native_client_sdk/src/doc/sdk/examples.rst b/native_client_sdk/src/doc/sdk/examples.rst
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..c11a5fffcc8095059edf25964626e065dc89765c
|
| --- /dev/null
|
| +++ b/native_client_sdk/src/doc/sdk/examples.rst
|
| @@ -0,0 +1,249 @@
|
| +.. _sdk-examples-2:
|
| +
|
| +Running the SDK Examples
|
| +========================
|
| +
|
| +Every Native Client SDK bundle comes with a folder of example applications.
|
| +Each example demonstrates one or two key Native Client programming concepts.
|
| +After you've :doc:`downloaded the SDK <download>`, follow the instructions
|
| +on this page to build and run the examples.
|
| +
|
| +Configure the Google Chrome Browser
|
| +-----------------------------------
|
| +
|
| +1. Your version of Chrome must be equal to or greater than the version of
|
| + your SDK bundle. For example, if you're developing with the ``pepper_28``
|
| + bundle, you must use Google Chrome version 28 or greater. To find out what
|
| + version of Chrome you're using, type ``about:chrome`` or ``about:version``
|
| + in the Chrome address bar.
|
| +
|
| +2. Enable the Native Client flag. Native Client is enabled by default only
|
| + for applications distributed through the Chrome Web Store. To run Native
|
| + Client applications that are not distributed through the Chrome Web Store,
|
| + like the SDK examples, you must specifically enable the Native Client flag
|
| + in Chrome:
|
| +
|
| + * Type ``about:flags`` in the Chrome address bar and scroll down to
|
| + "Native Client".
|
| + * If the link below "Native Client" says "Disable", then Native Client is
|
| + already enabled and you don't need to do anything else.
|
| + * If the link below "Native Client" says "Enable", click the "Enable"
|
| + link, scroll down to the bottom of the page, and click the "Relaunch
|
| + Now" button. All browser windows will restart when you relaunch Chrome.
|
| +
|
| +3. Disable the Chrome cache. Chrome caches resources aggressively; when you
|
| + are building a Native Client application you should disable the cache to
|
| + make sure that Chrome loads the latest version:
|
| +
|
| + * Open Chrome's developer tools by clicking the menu icon |menu-icon| and
|
| + choosing Tools > Developer tools.
|
| + * Click the gear icon |gear-icon| in the bottom right corner of the
|
| + Chrome window.
|
| + * Under the "General" settings, check the box next to "Disable cache".
|
| +
|
| +Build the SDK examples
|
| +----------------------
|
| +
|
| +Starting with the ``pepper_24`` bundle, the Makefile scripts for the SDK
|
| +examples build multiple versions of the examples using all three SDK
|
| +toolchains (newlib, glibc, and PNaCl) and in both release and debug
|
| +configurations. (Note that some examples build only with the particular
|
| +toolchains).
|
| +
|
| +To build all the examples, go to the examples directory in a specific SDK
|
| +bundle and run ``make``::
|
| +
|
| + $ cd pepper_28/examples
|
| + $ make
|
| + make -C api all
|
| + make[1]: Entering directory `pepper_28/examples/api'
|
| + make -C audio all
|
| + make[2]: Entering directory `pepper_28/examples/api/audio'
|
| + CXX newlib/Debug/audio_x86_32.o
|
| + LINK newlib/Debug/audio_x86_32.nexe
|
| + CXX newlib/Debug/audio_x86_64.o
|
| + LINK newlib/Debug/audio_x86_64.nexe
|
| + CXX newlib/Debug/audio_arm.o
|
| + LINK newlib/Debug/audio_arm.nexe
|
| + CREATE_NMF newlib/Debug/audio.nmf
|
| + make[2]: Leaving directory `pepper_28/examples/api/audio'
|
| + make -C url_loader all
|
| + make[2]: Entering directory `pepper_28/examples/api/url_loader'
|
| + CXX newlib/Debug/url_loader_x86_32.o
|
| + ...
|
| +
|
| +Calling ``make`` from inside a particular example's directory will build only
|
| +that example::
|
| +
|
| + $ cd pepper_28/examples/api/core
|
| + $ make
|
| + CXX newlib/Debug/core_x86_32.o
|
| + LINK newlib/Debug/core_x86_32.nexe
|
| + CXX newlib/Debug/core_x86_64.o
|
| + LINK newlib/Debug/core_x86_64.nexe
|
| + CXX newlib/Debug/core_arm.o
|
| + LINK newlib/Debug/core_arm.nexe
|
| + CREATE_NMF newlib/Debug/core.nmf
|
| +
|
| +You can call ``make`` with the ``TOOLCHAIN`` and ``CONFIG`` parameters to
|
| +override the defaults::
|
| +
|
| + $ make TOOLCHAIN=pnacl CONFIG=Release
|
| + CXX pnacl/Release/core_pnacl.o
|
| + LINK pnacl/Release/core.bc
|
| + FINALIZE pnacl/Release/core.pexe
|
| + CREATE_NMF pnacl/Release/core.nmf
|
| +
|
| +
|
| +You can also set ``TOOLCHAIN`` to "all" to build one or more examples with
|
| +all available toolchains::
|
| +
|
| + $ make TOOLCHAIN=all
|
| + make TOOLCHAIN=newlib
|
| + make[1]: Entering directory `pepper_31/examples/api/core'
|
| + CXX newlib/Debug/core_x86_32.o
|
| + LINK newlib/Debug/core_x86_32.nexe
|
| + CXX newlib/Debug/core_x86_64.o
|
| + LINK newlib/Debug/core_x86_64.nexe
|
| + CXX newlib/Debug/core_arm.o
|
| + LINK newlib/Debug/core_arm.nexe
|
| + CREATE_NMF newlib/Debug/core.nmf
|
| + make[1]: Leaving directory `pepper_31/examples/api/core'
|
| + make TOOLCHAIN=glibc
|
| + make[1]: Entering directory `pepper_31/examples/api/core'
|
| + CXX glibc/Debug/core_x86_32.o
|
| + LINK glibc/Debug/core_x86_32.nexe
|
| + CXX glibc/Debug/core_x86_64.o
|
| + LINK glibc/Debug/core_x86_64.nexe
|
| + CREATE_NMF glibc/Debug/core.nmf
|
| + make[1]: Leaving directory `pepper_31/examples/api/core'
|
| + make TOOLCHAIN=pnacl
|
| + make[1]: Entering directory `pepper_31/examples/api/core'
|
| + CXX pnacl/Debug/core_pnacl.o
|
| + LINK pnacl/Debug/core.bc
|
| + FINALIZE pnacl/Debug/core.pexe
|
| + TRANSLATE pnacl/Debug/core_x86_32.nexe
|
| + TRANSLATE pnacl/Debug/core_x86_64.nexe
|
| + TRANSLATE pnacl/Debug/core_arm.nexe
|
| + CREATE_NMF pnacl/Debug/core.nmf
|
| + make[1]: Leaving directory `pepper_31/examples/api/core'
|
| + make TOOLCHAIN=linux
|
| + make[1]: Entering directory `pepper_31/examples/api/core'
|
| + CXX linux/Debug/core.o
|
| + LINK linux/Debug/core.so
|
| + make[1]: Leaving directory `pepper_31/examples/api/core'
|
| +
|
| +
|
| +After running ``make``, each example directory will contain one or more of
|
| +the following subdirectories:
|
| +
|
| +* a ``newlib`` directory with subdirectories ``Debug`` and ``Release``;
|
| +* a ``glibc`` directory with subdirectories ``Debug`` and ``Release``;
|
| +* a ``pnacl`` directory with subdirectories ``Debug`` and ``Release``;
|
| +
|
| +For the newlib and glibc toolchains the Debug and Release subdirectories
|
| +contain .nexe files for all target architectures. For the PNaCl toolchain
|
| +they contain a single .pexe file. PNaCl debug also produces pre-translated
|
| +.nexe files, for ease of debugging. All Debug and Release directories contain
|
| +a manifest (.nmf) file that references the associated .nexe or .pexe files.
|
| +For information about Native Client manifest files, see the :doc:`Technical
|
| +Overview <../overview>`.
|
| +
|
| +For details on how to use ``make``, see the `GNU 'make' Manual
|
| +<http://www.gnu.org/software/make/manual/make.html>`_. For details on how to
|
| +use the SDK toolchain itself, see :doc:`Building Native Client Modules
|
| +<devcycle/building>`.
|
| +
|
| +Run the SDK examples
|
| +--------------------
|
| +
|
| +To run the SDK examples, you can use the ``make run`` command::
|
| +
|
| + $ cd pepper_28/examples/api/core
|
| + $ make run
|
| +
|
| +This will launch a local HTTP server which will serve the data for the
|
| +example. It then launches Chrome with the address of this server, usually
|
| +http://localhost:5103. After you close Chrome, the local HTTP server is
|
| +automatically shutdown.
|
| +
|
| +This command will try to find an executable named ``google-chrome`` in your
|
| +``PATH`` environment variable. If it can't, you'll get an error message like
|
| +this::
|
| +
|
| + pepper_31/tools/common.mk:415: No valid Chrome found at CHROME_PATH=
|
| + pepper_31/tools/common.mk:415: *** Set CHROME_PATH via an environment variable, or command-line.. Stop.
|
| +
|
| +Set the CHROME_PATH environment variable to the location of your Chrome
|
| +executable **TODO(binji):** use default Chrome paths here, especially
|
| +important for Mac:
|
| +
|
| + On Windows::
|
| +
|
| + > set CHROME_PATH=<Path to chrome.exe>
|
| +
|
| + On Linux::
|
| +
|
| + $ export CHROME_PATH=<Path to google-chrome>
|
| +
|
| + On Mac::
|
| +
|
| + $ export CHROME_PATH=<Path to chrome>
|
| +
|
| +
|
| +You can run via a different toolchain or configuration by using the
|
| +``TOOLCHAIN`` and ``CONFIG`` parameters to make::
|
| +
|
| + $ make run TOOLCHAIN=pnacl CONFIG=Debug
|
| +
|
| +
|
| +Run the SDK examples as packaged apps
|
| +-------------------------------------
|
| +
|
| +Each example can also be launched as a packaged app. For more information about
|
| +using Native Client for packaged apps, see :ref:`Packaged appliction
|
| +<packaged>`. For general information about packaged apps, see the
|
| +`Chrome apps documentation
|
| +<http://developer.chrome.com/apps/about_apps.html>`_.
|
| +
|
| +Some Pepper features, such as TCP/UDP socket access, are only allowed in
|
| +packaged apps. The examples that use these features must be run as packaged
|
| +apps, by using the ``make run_package`` command::
|
| +
|
| + $ make run_package
|
| +
|
| +You can use ``TOOLCHAIN`` and ``CONFIG`` parameters as above to run with a
|
| +different toolchain or configuration.
|
| +
|
| +Debugging the SDK examples
|
| +--------------------------
|
| +
|
| +The NaCl SDK uses `GDB <https://www.gnu.org/software/gdb/>`_ to debug Native
|
| +Client code. The SDK includes a prebuilt version of GDB that is compatible with
|
| +NaCl code. To use it, run the ``make debug`` command from an example directory::
|
| +
|
| + $ make debug
|
| +
|
| +This will launch Chrome with the ``--enable-nacl-debug`` flag set. This flag
|
| +will cause Chrome to pause when a NaCl module is first loaded, waiting for a
|
| +connection from gdb. The ``make debug`` command also simultaneously launches
|
| +GDB and loads the symbols for that NEXE. To connect GDB to Chrome, in the GDB
|
| +console, type::
|
| +
|
| + (gdb) target remote :4014
|
| +
|
| +This tells GDB to connect to a TCP port on localhost:4014--the port that
|
| +Chrome is listening on. GDB will respond::
|
| +
|
| + Remote debugging using :4014
|
| + 0x000000000fa00080 in ?? ()
|
| +
|
| +At this point, you can use the standard GDB commands to debug your NaCl module.
|
| +The most common commands you will use to debug are ``continue``, ``step``,
|
| +``next``, ``break`` and ``backtrace``. See :doc:`Debugging
|
| +<devcycle/debugging>` for more information about debugging a Native Client
|
| +application.
|
| +
|
| +
|
| +.. |menu-icon| image:: /images/menu-icon.png
|
| +.. |gear-icon| image:: /images/gear-icon.png
|
|
|