summaryrefslogtreecommitdiffstats
path: root/native_client_sdk/src/BUILDING.rst
blob: b41caaea5551ad58a03f05afa8a562a75aa804b8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
Building the Full SDK
=====================

*Linux users*: Before you run build_sdk.py (below), you must run::

  GYP_DEFINES=target_arch=arm gclient runhooks

This will install some ARM-specific tools that are necessary to build the SDK.

*Everyone else*:

To build the NaCl SDK, run::

  build_tools/build_sdk.py

This will generate a new SDK in your out directory::

  $CHROME_ROOT/out/pepper_XX

Where "XX" in pepper_XX is the current Chrome release (e.g. pepper_38).

The libraries will be built, but no examples will be built by default. This is
consistent with the SDK that is shipped to users.


Testing the SDK
===============

To build all examples, you can run the test_sdk.py script::

  build_tools/test_sdk.py

This will build all examples and tests, then run tests. It will take a long
time. You can run a subset of these "phases" by passing the desired phases as
arguments to test_sdk::

  build_tools/test_sdk.py build_examples copy_tests build_tests

These are the valid phases:

* `build_examples`: Build all examples, for all configurations and toolchains.
  (everything in the examples directory)
* `copy_tests`: Copy all tests to the SDK (everything in the tests directory)
* `build_tests`: Build all tests, for all configurations and toolchains.
* `sel_ldr_tests`: Run the sel_ldr tests; these run from the command line, and
  are much faster that browser tests. They can't test PPAPI, however.
* `browser_tests`: Run the browser tests. This launches a locally built copy of
  Chrome and runs all examples and tests for all configurations. It is very
  slow.


Testing a Single Example/Test
=============================

To test a specific example, you can run the test_projects.py script::

  # Test the core example. This will test all toolchains/configs.
  build_tools/test_projects.py core

  # Test the graphics_2d example, newlib/Debug only.
  build_tools/test_projects.py graphics_2d -t newlib -c Debug

This assumes that the example is already built. If not, you can use the `-b`
flag to build it first::

  build_tools/test_projects.py nacl_io_test -t newlib -c Debug -b


Rebuilding the Projects
=======================

If you have made changes to examples, libraries or tests directory, you can
copy these new sources to the built SDK by running build_projects.py::

  build_tools/build_projects.py

You can then rebuild the example by running Make::

  cd $CHROME_ROOT/out/pepper_XX
  cd examples/api/graphics_2d  # e.g. to rebuild the Graphics2D example.
  make -j8

You can build a specific toolchain/configuration combination::

  make TOOLCHAIN=newlib CONFIG=Debug -j8

The valid toolchains are: `newlib`, `glibc`, `clang-newlib` and `pnacl`.
The valid configurations are: `Debug` and `Release`.

To run the example::

  # Run the default configuration
  make run

  # Run the newlib/Debug configuration
  make TOOLCHAIN=newlib CONFIG=Debug -j8

This will try to find Chrome and launch it. You can specify this manually via
the CHROME_PATH environment variable::

  CHROME_PATH=/absolute/path/to/google-chrome make run


Building Standalone Examples/Tests
-------------------------------

Building the standalone tests is often more convenient, because they are faster
to run, and don't require a copy of Chrome. We often use the standalone tests
first when developing for nacl_io, for example. However, note that most tests
cannot be built this way.

To build the standalone configuration::

  cd tests/nacl_io_test
  make STANDALONE=1 TOOLCHAIN=newlib -j8

To run the standalone tests, you must specify an architecture explicitly::

  make STANDALONE=1 TOOLCHAIN=newlib NACL_ARCH=x86_64 -j8 run