.. _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
-----------------------------------

#. 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_31``
   bundle, you must use Google Chrome version 31 or greater. To find out what
   version of Chrome you're using, type ``about:chrome`` or ``about:version``
   in the Chrome address bar.

#. For Portable Native Client, no extra Chrome flags are needed as of
   Chrome version 31.

   For other Native Client applications, or to **debug** Portable Native
   Client applications by translating the **pexe** to a **nexe** ahead of
   time, 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.

#. 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_31/examples
  $ make
  make -C api  all
  make[1]: Entering directory `pepper_31/examples/api'
  make -C audio  all
  make[2]: Entering directory `pepper_31/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_31/examples/api/audio'
  make -C url_loader  all
  make[2]: Entering directory `pepper_31/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_31/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
<../devguide/devcycle/building>`.

.. _running_the_sdk_examples:

Run the SDK examples
--------------------

To run the SDK examples, you can use the ``make run`` command::

  $ cd pepper_31/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.

* On Windows:

  The default install location of Chrome is
  ``C:\Program Files (x86)\Google\Chrome\Application\chrome.exe`` for Chrome
  stable and
  ``C:\Users\<username>\AppData\Local\Google\Chrome SxS\Application\chrome.exe``
  for Chrome Canary; try looking in those directories first::

    > set CHROME_PATH=<Path to chrome.exe>

* On Linux::

    $ export CHROME_PATH=<Path to google-chrome>

* On Mac:

  The default install location of Chrome is
  ``/Applications/Google Chrome.app/Contents/MacOS/Google Chrome`` for
  Chrome Stable and
  ``Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary``
  for Chrome Canary. Note that you have to reference the executable inside the
  application bundle, not the top-level ``.app`` directory::

    $ export CHROME_PATH=<Path to Google 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_sdk_examples_as_packaged:

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
<distributing_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:

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
<../devguide/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
