| .. _io2014: |
| |
| ################### |
| Building a NaCl App |
| ################### |
| |
| In the browser! |
| --------------- |
| |
| Follow along with Brad Nelson's Google I/O 2014 talk. |
| Explore our new in-browser development environment and debugger. |
| |
| Learn how easy it is to edit, build, and debug NaCl application |
| all in your desktop web browser or on a Chromebook. |
| Work either on-line or off-line! |
| |
| .. raw:: html |
| |
| <iframe class="video" width="500" height="281" |
| src="//www.youtube.com/embed/OzNuzBDEWzk?rel=0" frameborder="0"></iframe> |
| |
| .. include:: nacldev/web_tools_note.inc |
| |
| Installation |
| ============ |
| |
| The setup process currently requires several steps. |
| We're working to reduce the number of steps in future releases. |
| As the process gets easier, we'll update this page. |
| |
| To install the development environment: |
| |
| * Install the `NaCl Development Environment <https://chrome.google.com/webstore/detail/nacl-development-environm/aljpgkjeipgnmdpikaajmnepbcfkglfa>`_. |
| |
| * Navigate to: chrome://flags and: |
| |
| * Enable **Native Client**. |
| * Restart your browser by clicking **Relaunch Now**. |
| |
| * First run is slow (as it downloads and installs packages). Launch and allow |
| initial install to complete before first use. |
| |
| When initially experimenting with the development environment, |
| at this time, we recommend you run it without the debugger activated. |
| Once you're ready to apply the debugger, follow these steps: |
| |
| * Install a usable version of |
| `Chrome Linux (M36+, Dev or Beta channel) <http://www.chromium.org/getting-involved/dev-channel>`_. |
| * Install the `Native Client Debugger Extension <https://chrome.google.com/webstore/detail/nacl-debugger/ncpkkhabohglmhjibnloicgdfjmojkfd>`_. |
| * Install `Native Client GDB <https://chrome.google.com/webstore/detail/gdb/gkjoooooiaohiceibmdleokniplmbahe>`_. |
| |
| * Navigate to: chrome://flags and: |
| |
| * Enable **Native Client GDB-based debugging**. |
| * Restart your browser by clicking **Relaunch Now**. |
| |
| * NOTE: If you experience unexplained hangs, disable GDB-based debugging |
| temporarily and try again. |
| |
| |
| .. include:: nacldev/editing.inc |
| |
| .. include:: nacldev/git.inc |
| |
| |
| Tour (follow the video) |
| ======================= |
| |
| Create a working directory and go into it:: |
| |
| $ mkdir work |
| $ cd work |
| |
| Download a zip file containing our sample:: |
| |
| $ curl http://nacltools.storage.googleapis.com/io2014/voronoi.zip -O |
| $ ls -l |
| |
| Unzip the sample:: |
| |
| $ unzip voronoi.zip |
| |
| Go into the sample and take a look at the files inside:: |
| |
| $ cd voronoi |
| $ ls |
| |
| Our project combines voronoi.cc with several C++ libraries to produce a NEXE |
| (or Native Client Executable). |
| |
| .. image:: /images/voronoi1.png |
| |
| The resulting application combines the NEXE with some Javascript to load |
| the NaCl module, producing the complete application. |
| |
| .. image:: /images/voronoi2.png |
| |
| Let's use git (a revision control program) to track our changes. |
| |
| First, create a new repository:: |
| |
| $ git init |
| |
| Add everything here:: |
| |
| $ git add . |
| |
| Then commit our starting state:: |
| |
| $ git commit -m "imported voronoi demo" |
| |
| Now, likes run **make** to compile our program (NOTE: Changed since video, |
| we've got Makefiles!):: |
| |
| $ make |
| |
| Oops, we get this error:: |
| |
| voronoi.cc: In member function 'void Voronoi::Update()': |
| voronoi.cc:506: error: 'struct PSContext2D_t' has no member named 'hieght' |
| |
| We'll need to start an editor to fix this. |
| You'll want to change *hieght* to *height* on line 506. |
| Then rebuild:: |
| |
| $ make -j10 |
| |
| Lets look at the diff:: |
| |
| $ git diff |
| |
| And commit our fix:: |
| |
| $ git commit -am "fixed build error" |
| |
| To test our application, we run a local web server, written in python. |
| Run the server with this command (NOTE: Running through a Makefile |
| now):: |
| |
| $ make serve |
| |
| Then, navigate to http://localhost:5103/ to test the demo. |
| |
| If you follow along with the demo video, you will discover the sample crashes |
| when you change the thread count. |
| |
| Debugging |
| ========= |
| |
| If you haven't installed the debugger at this point, skip to the next section. |
| |
| At this point, if you have the debugger installed, you should be able to open |
| the developer console and view the resulting crash. |
| |
| You can see a backtrace with:: |
| |
| bt |
| |
| You can see active threads with:: |
| |
| info threads |
| |
| Currently, symbol information is limited for GLibC executables. |
| We have improvements coming that will improve the experience further. |
| |
| For newlib and PNaCl executables you can retrieve full symbols information |
| with:: |
| |
| remote get irt irt |
| add-symbol-file irt |
| remote get nexe nexe |
| add-symbol-file nexe |
| |
| Fix it up |
| ========= |
| |
| Return to the development environment and stop the test server, |
| by pressing Ctrl-C. |
| |
| Open your editor again, navigate to line 485 and change *valu* to *value*. |
| |
| Then rebuild:: |
| |
| $ make -j10 |
| |
| Check the diff and commit our fix:: |
| |
| $ git diff |
| $ git commit -am "fixed thread ui bug" |
| |
| Now look at your commit history:: |
| |
| $ git log |
| |
| Run the demo again. And everything now works:: |
| |
| $ make serve |
| |
| Thanks |
| ====== |
| |
| Thanks for checking out our environment. |
| Things are rapidly changing and in the coming months you can expect to see |
| further improvements and filling out of our platform and library support. |
| |
| Follow the status of the NaCl Dev Environment at :doc:`this page <nacldev>`. |