• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1{{+bindTo:partials.standard_nacl_article}}
2
3<section id="building-a-nacl-app">
4<h1 id="building-a-nacl-app">Building a NaCl App</h1>
5<section id="in-the-browser">
6<h2 id="in-the-browser">In the browser!</h2>
7<p>Follow along with Brad Nelson&#8217;s Google I/O 2014 talk.
8Explore our new in-browser development environment and debugger.</p>
9<p>Learn how easy it is to edit, build, and debug NaCl application
10all in your desktop web browser or on a Chromebook.
11Work either on-line or off-line!</p>
12<iframe class="video" width="500" height="281"
13src="//www.youtube.com/embed/MvKEomoiKBA?rel=0" frameborder="0"></iframe><section id="installation">
14<h3 id="installation">Installation</h3>
15<p>The setup process currently requires several steps.
16We&#8217;re working to reduce the number of steps in future releases.
17As the process gets easier, we&#8217;ll update this page.</p>
18<p>You currently need to:</p>
19<ul class="small-gap">
20<li><p class="first">Navigate to: chrome://flags and:</p>
21<ul class="small-gap">
22<li>Enable <strong>Native Client</strong>.</li>
23<li>Enable <strong>Native Client GDB-based debugging</strong>.  (For the debugger)</li>
24</ul>
25</li>
26<li><p class="first">Install the NaCl in-browser debugger.</p>
27<ul class="small-gap">
28<li>Install the <a class="reference external" href="https://chrome.google.com/webstore/detail/nacl-debugger/ncpkkhabohglmhjibnloicgdfjmojkfd">NaCl Debugger Extension</a>.</li>
29<li>Install <a class="reference external" href="https://chrome.google.com/webstore/detail/gdb/gkjoooooiaohiceibmdleokniplmbahe">GDB</a>.</li>
30</ul>
31</li>
32<li><p class="first">Install the <a class="reference external" href="https://chrome.google.com/webstore/detail/nacl-development-environm/aljpgkjeipgnmdpikaajmnepbcfkglfa">NaCl Development Environment</a>.</p>
33<ul class="small-gap">
34<li>First run is slow (as it downloads and installs packages).</li>
35</ul>
36</li>
37</ul>
38</section><section id="editor">
39<h3 id="editor">Editor</h3>
40<p>To follow along in this tutorial, you&#8217;ll need to use a text editor to modify
41various files in our development environment.
42There are currently two editor options, nano or vim.
43Emacs is coming soon...
44If you&#8217;re unsure what to pick, nano is simpler to start with and has on-screen
45help.</p>
46<ul class="small-gap">
47<li><p class="first">You can open <strong>nano</strong> like this:</p>
48<pre class="prettyprint">
49$ nano &lt;filename&gt;
50</pre>
51<p>Here&#8217;s an online <a class="reference external" href="http://mintaka.sdsu.edu/reu/nano.html">nano tutorial</a>.</p>
52</li>
53<li><p class="first">You can open <strong>vim</strong> like this:</p>
54<pre class="prettyprint">
55$ vim &lt;filename&gt;
56</pre>
57<p>Here&#8217;s an online <a class="reference external" href="http://www.openvim.com/tutorial.html">vim tutorial</a>.</p>
58</li>
59</ul>
60</section><section id="git-setup">
61<h3 id="git-setup">Git Setup</h3>
62<p>This tutorial also uses a revision control program called
63<a class="reference external" href="http://en.wikipedia.org/wiki/Git_(software)">git</a>.
64In order to commit to a git repository,
65you need to setup your environment to with your identity.</p>
66<p>You&#8217;ll need to add these lines to <cite>~/.bashrc</cite> to cause them to be invoked each
67time you start the development environment.</p>
68<pre class="prettyprint">
69git config --global user.name &quot;John Doe&quot;
70git config --global user.email johndoe&#64;example.com
71</pre>
72</section><section id="tour-follow-the-video">
73<h3 id="tour-follow-the-video">Tour (follow the video)</h3>
74<p>Create a working directory and go into it:</p>
75<pre class="prettyprint">
76$ mkdir work
77$ cd work
78</pre>
79<p>Download a zip file containing our sample:</p>
80<pre class="prettyprint">
81$ curl http://nacltools.storage.googleapis.com/io2014/voronoi.zip -O
82$ ls -l
83</pre>
84<p>Unzip the sample:</p>
85<pre class="prettyprint">
86$ unzip voronoi.zip
87</pre>
88<p>Go into the sample and take a look at the files inside:</p>
89<pre class="prettyprint">
90$ cd voronoi
91$ ls
92</pre>
93<p>Our project combines voronoi.cc with several C++ libraries to produce a NEXE
94(or Native Client Executable).</p>
95<img alt="/native-client/images/voronoi1.png" src="/native-client/images/voronoi1.png" />
96<p>The resulting application combines the NEXE with some Javascript to load
97the NaCl module, producing the complete application.</p>
98<img alt="/native-client/images/voronoi2.png" src="/native-client/images/voronoi2.png" />
99<p>Let&#8217;s use git (a revision control program) to track our changes.</p>
100<p>First, create a new repository:</p>
101<pre class="prettyprint">
102$ git init
103</pre>
104<p>Add everything here:</p>
105<pre class="prettyprint">
106$ git add .
107</pre>
108<p>Then commit our starting state:</p>
109<pre class="prettyprint">
110$ git commit -m &quot;imported voronoi demo&quot;
111</pre>
112<p>Now, likes run <strong>make</strong> to compile our program (NOTE: Changed since video,
113we&#8217;ve got Makefiles!):</p>
114<pre class="prettyprint">
115$ make
116</pre>
117<p>Oops, we get this error:</p>
118<pre class="prettyprint">
119voronoi.cc: In member function 'void Voronoi::Update()':
120voronoi.cc:506: error: 'struct PSContext2D_t' has no member named 'hieght'
121</pre>
122<p>We&#8217;ll need to start an editor to fix this.
123You&#8217;ll want to change <em>hieght</em> to <em>height</em> on line 506.
124Then rebuild:</p>
125<pre class="prettyprint">
126$ make
127</pre>
128<p>Lets look at the diff:</p>
129<pre class="prettyprint">
130$ git diff
131</pre>
132<p>And commit our fix:</p>
133<pre class="prettyprint">
134$ git commit -am &quot;fixed build error&quot;
135</pre>
136<p>To test our application, we run a local web server, written in python.
137Run the server with this command (NOTE: Running through a Makefile
138now):</p>
139<pre class="prettyprint">
140$ make serve
141</pre>
142<p>Then, navigate to <a class="reference external" href="http://localhost:5103/">http://localhost:5103/</a> to test the demo.</p>
143<p>If you follow along with the demo video, you will discover the sample crashes
144when you change the thread count.</p>
145<p><em>Debugger walk-thru coming soon.</em></p>
146<p>Once you&#8217;ve identified the problem. You&#8217;ll want to stop the test server.
147Press enter to halt it.</p>
148<p>Open your editor again, navigate to line 485 and change <em>valu</em> to <em>value</em>.</p>
149<p>Then rebuild:</p>
150<pre class="prettyprint">
151$ make
152</pre>
153<p>Check the diff and commit our fix:</p>
154<pre class="prettyprint">
155$ git diff
156$ git commit -am &quot;fixed thread ui bug&quot;
157</pre>
158<p>Now look at your commit history:</p>
159<pre class="prettyprint">
160$ git log
161</pre>
162<p>Run the demo again. And everything now works:</p>
163<pre class="prettyprint">
164$ make serve
165</pre>
166</section></section></section>
167
168{{/partials.standard_nacl_article}}
169