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