1 {{+bindTo:partials.standard_nacl_article}} 2 3 <section id="release-notes"> 4 <span id="sdk-release-notes"></span><h1 id="release-notes"><span id="sdk-release-notes"></span>Release Notes</h1> 5 <h2 id="chrome-pepper-38-15-august-2014">Chrome/Pepper 38 (15 August 2014)</h2> 6 <h3 id="pnacl">PNaCl</h3> 7 <ul class="small-gap"> 8 <li>Compilation speed improvements due to validation caching of the translator and 9 linker.</li> 10 <li>Performance improvement of SIMD vector shuffle.</li> 11 </ul> 12 <h2 id="chrome-pepper-37-20-june-2014">Chrome/Pepper 37 (20 June 2014)</h2> 13 <h3 id="id1">PNaCl</h3> 14 <ul class="small-gap"> 15 <li>210% translation time improvement.</li> 16 <li>Improved vector load/store and shuffle performance.</li> 17 </ul> 18 <h3 id="pepper">Pepper</h3> 19 <ul class="small-gap"> 20 <li>Media Streams Input support.</li> 21 <li>Compositor API.</li> 22 <li>Hardware Decode API in development preview.</li> 23 <li>Sync API in development preview.</li> 24 </ul> 25 <h3 id="sdk">SDK</h3> 26 <ul class="small-gap"> 27 <li>Demo of a <a class="reference internal" href="/native-client/io2014.html#io2014"><em>full development environment in the browser</em></a>.</li> 28 </ul> 29 <h2 id="chrome-pepper-36-09-may-2014">Chrome/Pepper 36 (09 May 2014)</h2> 30 <h3 id="id2">PNaCl</h3> 31 <ul class="small-gap"> 32 <li>Support <a class="reference external" href="http://clang.llvm.org/docs/LanguageExtensions.html#vectors-and-extended-vectors">LLVM vectors</a> 33 and <a class="reference external" href="http://gcc.gnu.org/onlinedocs/gcc/Vector-Extensions.html">GCC vectors</a> for SIMD 34 vectors through <a class="reference internal" href="/native-client/reference/pnacl-c-cpp-language-support.html#portable-simd-vectors"><em>Portable SIMD Vectors</em></a>. Note that this is still an early release, 35 and performance is expected to become acceptable for version 37 of 36 Chrome. More SIMD instructions will be added in later releases.</li> 37 </ul> 38 <h2 id="chrome-pepper-35-31-mar-2014">Chrome/Pepper 35 (31 Mar 2014)</h2> 39 <h3 id="id3">PNaCl</h3> 40 <ul class="small-gap"> 41 <li>Upgraded LLVM to version 3.4.</li> 42 <li>Translation now uses dynamic load balancing, making translation time faster.</li> 43 <li>Unstable pexes (i.e. non-finalized) with debug information can be loaded by 44 Chrome, simplifying debugging with PNaCl. See <a class="reference internal" href="/native-client/devguide/devcycle/debugging.html#debugging-pnacl-pexes"><em>Debugging PNaCl pexes</em></a></li> 45 </ul> 46 <h2 id="chrome-pepper-34-20-feb-2014">Chrome/Pepper 34 (20 Feb 2014)</h2> 47 <h3 id="id4">Pepper</h3> 48 <ul class="small-gap"> 49 <li>Filesystems can now be passed from JavaScript to NaCl. The resulting 50 <code>pp::Var</code> will contain a <code>pp::Resource</code> that can be given to the 51 <code>pp::FileSystem</code> constructor.</li> 52 <li>New Audio and Video input APIs have been added as dev interfaces. See 53 <a class="reference external" href="/native-client/pepper_dev/cpp/classpp_1_1_media_stream_audio_track">pp::MediaStreamAudioTrack</a> and 54 <a class="reference external" href="/native-client/pepper_dev/cpp/classpp_1_1_media_stream_video_track">pp::MediaStreamVideoTrack</a> for 55 more details.</li> 56 </ul> 57 <h3 id="id5">PNaCl</h3> 58 <ul class="small-gap"> 59 <li>Parallel translation: at least 1.7x faster, even with older pexes.</li> 60 <li>Intelligent abbreviations in the bitcode: 20% reduction in binary size using 61 the <a class="reference internal" href="/native-client/devguide/devcycle/building.html#pnacl-compress"><em>pnacl-compress</em></a> tool.</li> 62 </ul> 63 <h2 id="chrome-pepper-33-16-dec-2013">Chrome/Pepper 33 (16 Dec 2013)</h2> 64 <h3 id="portable-native-client">Portable Native Client</h3> 65 <ul class="small-gap"> 66 <li>PNaCl’s default C++ standard library is now LLVM’s own libc++, based on 67 LLVM 3.3. This library now supports optional <code>setjmp</code>/<code>longjmp</code> exception 68 handling (see <a class="reference external" href="https://groups.google.com/forum/#!topic/native-client-discuss/0spfg6O04FM">announcement</a> 69 for details).</li> 70 </ul> 71 <h3 id="id6">SDK</h3> 72 <ul class="small-gap"> 73 <li>The <code>nacl_io</code> library now includes a FUSE mount.</li> 74 <li>In the SDK examples, <code>common.js</code> now loads the Release version of the 75 nexes/pexes that are built (by default).</li> 76 <li>“<code>make debug</code>” and “<code>make run</code>” have been fixed on Mac.</li> 77 </ul> 78 <h2 id="pnacl-enabled-by-default-in-chrome-31-12-nov-2013">PNaCl enabled by default in Chrome 31 (12 Nov 2013)</h2> 79 <ul class="small-gap"> 80 <li>Portable Native Client (PNaCl) is enabled by default in Chrome 31. See 81 <a class="reference internal" href="/native-client/nacl-and-pnacl.html"><em>NaCl and PNaCl</em></a> for details on the differences between 82 NaCl and PNaCl.</li> 83 <li>The PNaCl ABI has changed from the preview release in Chrome 30. 84 Pexe modules built with the <code>pepper_30</code> bundle in the SDK must be recompiled 85 with the <code>pepper_31</code> bundle or later. 86 As a general rule, we always recommended building applications with the latest 87 stable bundle in the Native Client SDK. 88 The PNaCl ABI will remain stable starting with the release of Chrome 31.</li> 89 <li><p class="first">Additional changes in the Chrome/Pepper 31 release:</p> 90 <ul class="small-gap"> 91 <li>Updates to the Pepper API, including socket and network support</li> 92 <li>Improved socket support in the <code>nacl_io</code> library</li> 93 </ul> 94 </li> 95 </ul> 96 <h2 id="pnacl-in-chrome-30-dev-channel-01-aug-2013">PNaCl in Chrome 30 Dev channel (01 Aug 2013)</h2> 97 <ul class="small-gap"> 98 <li>Portable Native Client (PNaCl) is currently available for preview in Chrome 99 30 (currently in the Dev channel). Apps and sites built with PNaCl can run in 100 Chrome 30 without an explicit flag.</li> 101 <li>See <a class="reference external" href="http://www.chromium.org/nativeclient/pnacl/introduction-to-portable-native-client">Introduction to Portable Native Client</a> 102 for information on developing for PNaCl. More documentation will be available 103 soon.</li> 104 <li>Please note that the <a class="reference external" href="http://www.chromium.org/nativeclient/pnacl/bitcode-abi">PNaCl bitcode ABI</a> may still change 105 before the official public release; if you’re developing a PNaCl-based 106 application, be sure to build your code with the latest version of the Native 107 Client SDK.</li> 108 <li>Update: PNaCl is not enabled by default in beta or stable versions of M30.</li> 109 </ul> 110 <h2 id="pnacl-15-may-2013">PNaCl (15 May 2013)</h2> 111 <ul class="small-gap"> 112 <li>Portable Native Client (PNaCl) is currently available for developer preview 113 in Chrome 29 or higher.</li> 114 <li>To produce a PNaCl executable (.pexe) file, you must use the pnacl toolchain 115 in the current <code>pepper_canary</code> bundle. Chrome 29 does not support .pexe 116 files produced by earlier versions of the pnacl toolchain (that is, 117 executables compiled with the <code>pepper_28</code> bundle or earlier).</li> 118 <li>To run an application with a PNaCl module, you must launch Chrome 29 with the 119 <code>--enable-pnacl</code> flag (for <a class="reference external" href="/apps/about_apps">packaged apps</a>), or the 120 <code>--enable-nacl</code> flag (for other apps).</li> 121 <li>When you launch Chrome with the <code>--enable-pnacl</code> flag, Chrome loads a PNaCl 122 translator in the background. Wait about a minute after you launch Chrome and 123 check <a class="reference external" href="chrome://nacl">chrome://nacl</a> to verify that the translator loaded.</li> 124 <li>PNaCl translators are currently available for 32-bit x86, 64-bit x86, and ARM 125 architectures.</li> 126 <li>PNaCl applications must use the newlib C library (glibc and dynamic linking 127 are not supported yet).</li> 128 <li>The intermediate representation (IR) format may change prior to the release 129 of PNaCl. If so, you will need to recompile your application with the pnacl 130 toolchain in a new SDK bundle.</li> 131 </ul> 132 <h2 id="pepper-27-12-april-2013">Pepper 27 (12 April 2013)</h2> 133 <p>The Pepper 27 bundle features a significant number of new libraries that have 134 been incorporated directly into the SDK.</p> 135 <h3 id="libraries">Libraries</h3> 136 <ul class="small-gap"> 137 <li><p class="first">A number of libraries from the naclports project have been incorporated 138 directly into the Native Client SDK. These libraries include:</p> 139 <ul class="small-gap"> 140 <li>image encoding/decoding: jpeg, tiff, png, webp</li> 141 <li>multimedia: openal, freealut, ogg, vorbis</li> 142 <li>XML parsing: tinyxml, xml2</li> 143 <li>miscellaneous: zlib (general purpose compression), freetype (font 144 rendering), lua (Lua interpreter)</li> 145 </ul> 146 <p>The libraries are located in <code>ports/lib</code>, and the header files are in 147 <code>ports/include</code>.</p> 148 </li> 149 <li>The <code>httpfs</code> filesystem in the nacl_io library now caches content in memory 150 by default; this improves performance considerably.</li> 151 <li>For applications compiled with a glibc toolchain, <code>dlopen()</code> can now be 152 used to open shared libraries that are not specified in an application’s 153 Native Client manifest (.nmf) file. This allows applications, for example, to 154 download a shared object and then use <code>dlopen()</code> to access the shared 155 object. The <code>dlopen</code> example has been modified to demonstrate this 156 functionality: reverse.cc is built into a shared object (.so) file, which is 157 downloaded and opened using an <code>httpfs</code> mount.</li> 158 </ul> 159 <h3 id="examples">Examples</h3> 160 <ul class="small-gap"> 161 <li>Each example now has a single <code>index.html</code> file, instead of multiple HTML 162 files corresponding to NaCl modules built using different toolchains and 163 configurations. By default, most examples are built using one toolchain 164 (newlib) and one configuration (Debug). If you build an example using 165 multiple toolchains or configurations, you can specify which version to run 166 in Chrome using the query parameters <code>tc</code> and <code>config</code>. For example, 167 assuming you are serving an example from the local server localhost:5103, you 168 can run a version of the example built with the glibc toolchain in the 169 Release configuration by specifying the following URL in Chrome: 170 <code>http://localhost:5103/index.html?tc=glibc&config=Release</code>. For additional 171 information about how different NaCl modules are loaded into <code>index.html</code>, 172 see the <code>common.js</code> file in each example.</li> 173 </ul> 174 <h3 id="build-tools-and-toolchains">Build tools and toolchains</h3> 175 <ul class="small-gap"> 176 <li>Common makefiles, including <code>tools/common.mk</code>, can now handle source files 177 located outside of an application’s root directory. For example, a Makefile 178 for an application can specify a source file to compile such as 179 <code>../../some/other/place.cpp</code>.</li> 180 </ul> 181 <h2 id="pepper-26-29-march-2013">Pepper 26 (29 March 2013)</h2> 182 <p>The Pepper 26 bundle includes a new HTTP filesystem type in the nacl_mounts 183 library (which has been renamed nacl_io), changes to the example Makefiles, a 184 simple new 3D example, and a threaded file IO example.</p> 185 <h3 id="id7">Build tools and toolchains</h3> 186 <ul class="small-gap"> 187 <li><p class="first">Makefiles have been changed significantly:</p> 188 <ul class="small-gap"> 189 <li>Build commands are now specified in a number of common files 190 (<code>tools/*.mk</code>), which are included in the Makefiles in the examples.</li> 191 <li>By default, make displays a simplified list of build steps (e.g., <code>CC 192 newlib/Debug/hello_world_x86_32.o</code>) rather than the actual build commands. 193 To see the actual build commands, run <code>make V=1</code>.</li> 194 <li>By default, most examples are built using one toolchain (newlib) and one 195 configuration (Debug). To build an example using a different toolchain or 196 configuration, run <code>make</code> with the parameters <code>TOOLCHAIN=<x></code> or 197 <code>CONFIG=<y></code>. You can also run make <code>all_versions</code> to build an example 198 with all toolchains.</li> 199 </ul> 200 </li> 201 <li>Header files have been moved out of the toolchains. All toolchains now share 202 the same set of header files as host builds. Previously host and NaCl builds 203 used different headers, which could cause build problems.</li> 204 </ul> 205 <h3 id="id8">Libraries</h3> 206 <ul class="small-gap"> 207 <li>The nacl_mounts library has been renamed <strong>nacl_io</strong>, and has been expanded 208 with a new type of mount, httpfs, which can be used to read URLs via HTTP. 209 For details see <code>include/nacl_io/nacl_io.h</code>, as well as the 210 <code>hello_nacl_io</code> example.</li> 211 </ul> 212 <h3 id="id9">Examples</h3> 213 <ul class="small-gap"> 214 <li>A new example, <strong>hello_world_instance3d</strong>, has been added to demonstrate a 215 simplified 3D app.</li> 216 <li>The <strong>file_io</strong> example has been rewritten to do all file operations on a 217 thread. The example demonstrates how to use the MessageLoop API and blocking 218 callbacks on a thread.</li> 219 </ul> 220 <h3 id="general">General</h3> 221 <ul class="small-gap"> 222 <li>Old bundles (<code>pepper_20</code> and earlier) have been removed from the Native 223 Client SDK Manifest, and will no longer be updated by the <code>naclsdk</code> 224 command.</li> 225 </ul> 226 <h2 id="pepper-25-21-december-2012">Pepper 25 (21 December 2012)</h2> 227 <p>The Pepper 25 bundle features an ARM toolchain to build Native Client modules 228 for ARM devices, two new Pepper APIs (including the MessageLoop API, which lets 229 you make Pepper calls on background threads), two new libraries (nacl_mounts, 230 which provides a virtual file system that you can use with standard C file 231 operations, and ppapi_main, which lets you implement a Native Client module 232 using a simple ppapi_main function), and two new examples that demonstrate how 233 to use the nacl_mounts and ppapi_main libraries.</p> 234 <h3 id="id10">Build tools and toolchains</h3> 235 <ul class="small-gap"> 236 <li><p class="first">The SDK includes a new toolchain to build Native Client executables (.nexe 237 files) for <strong>ARM devices</strong>.</p> 238 <ul class="small-gap"> 239 <li>Currently the ARM toolchain can only be used to compile modules that use 240 the <a class="reference internal" href="/native-client/devguide/devcycle/dynamic-loading.html#c-libraries"><em>newlib C library</em></a>. You cannot use the ARM toolchain 241 to compile modules that use the glibc library.</li> 242 <li>The ARM toolchain is in the directory 243 <code>pepper_25/toolchain/<host>_arm_newlib</code>. The bin subdirectory contains 244 the compiler (<code>arm-nacl-gcc</code>), the linker (<code>arm-nacl-g++</code>), and the 245 other tools in the toolchain.</li> 246 <li>Take a look at the <code>hello_world</code> example to see how to use the ARM 247 toolchain. Go to <code>examples/hello_world</code> and run <code>make</code>. When the build 248 finishes, the newlib/Debug and newlib/Release subdirectories will contain 249 .nexe files for the x86-32, x86-64, and ARM target architecutes, and a 250 Native Client manifest (.nmf file) that references those three .nexe files.</li> 251 </ul> 252 </li> 253 <li>The simple web server included in the SDK, <code>httpd.py</code>, has been moved from 254 the <code>examples/</code> directory to the <code>tools/</code> directory. On Windows, you can 255 run <code>httpd.cmd</code> (in the <code>examples/</code> directory) to start the server.</li> 256 </ul> 257 <h3 id="ppapi">PPAPI</h3> 258 <p>Pepper 25 includes two new APIs:</p> 259 <ul class="small-gap"> 260 <li>The <a class="reference external" href="/native-client/pepper_stable/c/struct_p_p_b___console__1__0">Console API</a> lets your 261 module log messages to the JavaScript console in the Chrome browser.</li> 262 <li>The <a class="reference external" href="/native-client/pepper_stable/cpp/classpp_1_1_message_loop">MessageLoop</a> API lets your 263 module make PPAPI calls on a background thread. Once you’ve created a 264 message loop resource, attached it to a thread, and run it, you can post work 265 to the thread, including completion callbacks for asynchronous operations. 266 For a C++ example of how to use the MessageLoop API, see 267 <code>pepper_25/include/ppapi/utility/threading/simple_thread.h</code>. Note that you 268 cannot make asynchronous PPAPI calls on a background thread without creating 269 and using a message loop.</li> 270 </ul> 271 <h3 id="id11">Libraries</h3> 272 <p>The SDK includes two new libraries:</p> 273 <ul class="small-gap"> 274 <li><p class="first">The <strong>nacl_mounts</strong> library provides a virtual file system that your module 275 can “mount” in a given directory tree. The file system can be one of several 276 types:</p> 277 <ul class="small-gap"> 278 <li>“memfs” is an in-memory file system,</li> 279 <li>“dev” is a file system with various utility nodes (e.g., <code>/dev/null</code>, 280 <code>/dev/console[0-3]</code>, <code>/dev/tty</code>), and</li> 281 <li>“html5fs” is a persistent file system.</li> 282 </ul> 283 <p>Once you’ve mounted a file system in your module, you can use standard C 284 library file operations: fopen, fread, fwrite, fseek, and fclose. How those 285 operations are performed depends on the type of file system (e.g., for 286 html5fs, the operations are performed using the Pepper FileIO API). For a 287 list of the types of file systems you can mount, see 288 include/nacl_mounts/nacl_mounts.h. For an example of how to use nacl_mounts, 289 see examples/hello_nacl_mounts. Note that html5fs is subject to the same 290 constraints as persistent <a class="reference internal" href="/native-client/devguide/coding/file-io.html#devguide-coding-fileio"><em>local file IO</em></a> in 291 Chrome (for example, prior to using an html5fs file system, you must <a class="reference external" href="enabling_file_access">enable 292 local file IO</a>).</p> 293 </li> 294 <li>The <strong>ppapi_main</strong> library simplifies the creation of a NaCl module by 295 providing a familiar C programming environment. With this library, your 296 module can have a simple entry point called ppapi_main(), which is similar to 297 the standard C main() function, complete with argc and argv[] parameters. 298 Your module can also use standard C functions such as printf(), fopen(), and 299 fwrite(). For details see include/ppapi_main/ppapi_main.h. For an example of 300 how to use ppapi_main, see examples/hello_world_stdio.</li> 301 </ul> 302 <p>Header files for the new libraries are in the <code>include/</code> directory, source 303 files are in the <code>src/</code> directory, and compiled libraries are in the <code>lib/</code> 304 directory.</p> 305 <h3 id="id12">Examples</h3> 306 <ul class="small-gap"> 307 <li><p class="first">The SDK includes two new examples:</p> 308 <ul class="small-gap"> 309 <li><strong>hello_nacl_mounts</strong> illustrates how to use standard C library file 310 operations in a Native Client module through the use of the nacl_mounts 311 library.</li> 312 <li><strong>hello_world_stdio</strong> illustrates how to implement a Native Client module 313 with a ppapi_main() function, and how to write to STDOUT and STDERR in a 314 module, through the use of the nacl_mounts and ppapi_main libraries. This 315 example makes it easy for new users to get started with Native Client by 316 letting them start making changes in a familiar C environment.</li> 317 </ul> 318 </li> 319 <li><p class="first">With a few exceptions, the Makefile for each example now builds the following 320 versions of each example:</p> 321 <ul class="small-gap"> 322 <li>glibc toolchain: 32-bit and 64-bit .nexes for the x86 target architecture</li> 323 <li>newlib toolchain: 32-bit and 64-bit .nexes for the x86 target architecture, 324 and ARM .nexe for the ARM architecture</li> 325 <li>pnacl toolchain: .pexe (which is subsequently tranlsated to .nexes for the 326 x86-32, x86-64, and ARM architectures)</li> 327 <li>hosted toolchain: .so or .dll (to be executed as a Pepper plug-in in 328 Chrome)</li> 329 </ul> 330 </li> 331 <li>Additionally, each version is built in both a Debug and a Release 332 configuration.</li> 333 <li>The Makefile for each example includes two new targets: <code>make RUN</code> and 334 <code>make LAUNCH</code>. These targets, which are interchangeable, launch a local 335 server and an instance of Chrome to run an example. When the instance of 336 Chrome is closed, the local server is shut down as well.</li> 337 <li>The hello_world_stdio example includes a simplified Makefile that only lists 338 source dependencies, and invokes the build rules in a separate file 339 (common.mk).</li> 340 </ul> 341 <h2 id="pepper-24-5-december-2012">Pepper 24 (5 December 2012)</h2> 342 <p>The Pepper 24 bundle features a new, experimental toolchain called PNaCl (short 343 for “Portable Native Client”), a new library (pthreads-win32) for the Windows 344 SDK, and an expanded list of attributes for Pepper 3D contexts that lets 345 applications specify a GPU preference for low power or performance.</p> 346 <h3 id="id13">Build tools and toolchains</h3> 347 <ul class="small-gap"> 348 <li>The SDK includes a new, experimental toolchain called <a class="reference external" href="http://nativeclient.googlecode.com/svn/data/site/pnacl.pdf">PNaCl</a> (pronounced 349 “pinnacle”). The PNaCl toolchain produces architecture-independent executable 350 files (.pexe files). Chrome doesn’t yet support .pexe files directly, but if 351 you want to experiment with this early preview of PNaCl, the toolchain 352 includes a tool to translate .pexe files into architecture-specific .nexe 353 files. Take a look at the <code>hello_world</code> example to see how to build a .pexe 354 file and translate it into multiple .nexe files. Note that PNaCl is currently 355 restricted to the newlib C standard library if your application uses glibc, 356 you can’t build it with PNaCl.</li> 357 <li>The <code>create_nmf.py</code> script uses ELF headers (rather than file names) to 358 determine the architecture of .nexe files. That means you can change the 359 names of your .nexe files and <code>create_nmf.py</code> will still be able to 360 generate the appropriate Native Client manifest file for your application.</li> 361 </ul> 362 <h3 id="id15">Examples</h3> 363 <ul class="small-gap"> 364 <li>The SDK examples now build with four toolchains: the glibc and newlib 365 toolchains, the experimental PNaCl toolchain, and the hosted toolchain on 366 your development machine. Within each toolchain build, each example also 367 builds both a debug and a release version.</li> 368 <li>The example Makefiles use dependency (.d) files to enable incremental builds.</li> 369 <li>The pong example has been cleaned up and modified to run more smoothly. The 370 drawing function is now set up as the Flush() callback, which allows 2D 371 drawing to occur as quickly as possible.</li> 372 </ul> 373 <h3 id="id16">PPAPI</h3> 374 <ul class="small-gap"> 375 <li>When creating a 3D rendering context, the <a class="reference external" href="/native-client/pepper_stable/c/group___enums#ga7df48e1c55f6401beea2a1b9c07967e8">attribute list</a> 376 for the context can specify whether to prefer low power or performance for 377 the GPU. Contexts with a low power preference may be created on an integrated 378 GPU; contexts with a performance preference may be created on a discrete GPU.</li> 379 </ul> 380 <h3 id="windows-sdk">Windows SDK</h3> 381 <ul class="small-gap"> 382 <li>The Windows SDK includes the pthreads-win32 library to assist in porting from 383 win32 code. You can use this library when developing your module as a Pepper 384 plug-in (.dll). See pepper_24/include/win/pthread.h and 385 pepper_24/src/pthread/README for additional information.</li> 386 <li>The update utility naclsdk.bat works when it is run from a path with spaces.</li> 387 </ul> 388 <h2 id="pepper-23-15-october-2012">Pepper 23 (15 October 2012)</h2> 389 <p>The Pepper 23 bundle includes support for the nacl-gdb debugger on Mac and 390 32-bit Windows, resources to enable hosted development on Linux, and changes to 391 make the SDK examples compliant with version 2 of the Chrome Web Store manifest 392 file format.</p> 393 <h3 id="tools">Tools</h3> 394 <ul class="small-gap"> 395 <li>The <a class="reference internal" href="/native-client/devguide/devcycle/debugging.html#using-gdb"><em>nacl-gdb debugger</em></a> now works on all systems (Mac, 396 Windows, and Linux).</li> 397 <li>The output of the SDK update utility has been simplified. When you run the 398 command <code>naclsdk list</code>, the utility displays one line for each available 399 bundle, annotated with an “<code>I</code>” if the bundle is already installed on your 400 system, and a “<code>*</code>” if the bundle has an update available. To see full 401 information about a bundle, use the command <code>naclsdk info <bundle></code> (for 402 example, <code>naclsdk info pepper_28</code>).</li> 403 </ul> 404 <h3 id="linux-sdk">Linux SDK</h3> 405 <ul class="small-gap"> 406 <li><p class="first">Developers using the Linux SDK now have resources, including pre-built 407 libraries and example Makefiles, that make it easier to <strong>build a module as a 408 Pepper plugin</strong> (sometimes called a “trusted” or “in-process” plugin) using 409 the native C/C++ compiler on their development system. In essence this makes 410 developing a Native Client module a two-step process:</p> 411 <ol class="arabic simple"> 412 <li>Build the module into a shared library (.so file) using your system’s 413 C/C++ compiler. Test and debug the .so file using the tools in your normal 414 development environment.</li> 415 <li>Build the module into a .nexe file using the compiler from one of the 416 Native Client toolchains in the SDK (nacl-gcc or nacl-g++). Test and debug 417 the .nexe file using nacl-gdb.</li> 418 </ol> 419 <p>This two step development process has many benefitsin particular, you can 420 use the compilers, debuggers, profilers, and other tools that you’re already 421 familiar with. But there are a few potential issues to keep in mind:</p> 422 <ul class="small-gap"> 423 <li>Chrome uses different threading models for trusted plugins and Native 424 Client modules.</li> 425 <li>Certain operations such as platform-specific library calls and system calls 426 may succeed during trusted development, but fail in Native Client.</li> 427 </ul> 428 <p>Here are the resources you can use to build your module into a Pepper plugin:</p> 429 <ul class="small-gap"> 430 <li>header files are in <code>pepper_23/include</code></li> 431 <li>source files are in <code>pepper_23/src</code></li> 432 <li>pre-built libraries are in <code>pepper_23/lib</code></li> 433 </ul> 434 <p>You can now build and run most of the examples in the SDK as Pepper plugins.</p> 435 <ul class="small-gap"> 436 <li>Look at the example Makefiles or run <code>make</code> in the example directories to 437 see the commands and flags used to build modules as Pepper plugins.</li> 438 <li>Run <code>make LAUNCH</code> in the example directories to see how to use the 439 <code>--register-pepper-plugins</code> argument to load a Pepper plugin in Chrome. 440 Note that you must set the <code>CHROME_PATH</code> environment variable and start a 441 <a class="reference internal" href="/native-client/devguide/devcycle/running.html#web-server"><em>local server</em></a> prior to running this command.</li> 442 </ul> 443 </li> 444 </ul> 445 <h3 id="id17">Examples</h3> 446 <ul class="small-gap"> 447 <li>On Linux and Windows systems, most of the examples now build with three 448 toolchains: the Native Client glibc and newlib toolchains, and the native 449 toolchain on the host system. Modules built with the native toolchain on the 450 host system can only run as Pepper plugins.</li> 451 <li>All examples in the SDK now comply with version 2 of the Chrome Web Store 452 <a class="reference external" href="/extensions/manifest">manifest file format</a>. By default, 453 applications that use version 2 of the manifest file format apply a strict 454 <a class="reference external" href="/extensions/contentSecurityPolicy">content security policy</a>, which 455 includes a restriction against inline JavaScript. This restriction prohibits 456 both inline <code><script></code> blocks and inline event handlers (e.g., <code><button 457 onclick="..."></code>). See <a class="reference external" href="/extensions/manifestVersion">Manifest Version</a> for 458 a list of changes between version 1 and version 2 of the manifest file 459 format, and a support schedule for applications that use version 1.</li> 460 </ul> 461 <h3 id="id18">PPAPI</h3> 462 <ul class="small-gap"> 463 <li><a class="reference external" href="/native-client/pepper_stable/c/group___enums#ga21b811ac0484a214a8751aa3e1c959d9">PP_InputEvent_Modifier</a> 464 has two new enum values (_ISLEFT and _ISRIGHT).</li> 465 <li>The memory leak in the <a class="reference external" href="/native-client/pepper_stable/c/struct_p_p_b___web_socket__1__0">WebSocket</a> API has 466 been fixed.</li> 467 </ul> 468 <h2 id="pepper-22-22-august-2012">Pepper 22 (22 August 2012)</h2> 469 <p>The Pepper 22 bundle includes a <strong>command-line debugger</strong>, resources to enable 470 <strong>hosted development on Windows</strong>, and changes to the example Makefiles (each 471 example now builds both a debug and a release version).</p> 472 <h3 id="id19">Tools</h3> 473 <ul class="small-gap"> 474 <li>The SDK now includes a <strong>command-line debugger</strong> that you can use to debug 475 Native Client modules. See <a class="reference internal" href="/native-client/devguide/devcycle/debugging.html#devcycle-debugging"><em>Debugging with nacl-gdb</em></a> for instructions on how to use this debugger. For now, 476 nacl-gdb only works on 64-bit Windows, 64-bit Linux, and 32-bit Linux 477 systems. Support for Mac and 32-bit Windows systems will be added soon.</li> 478 </ul> 479 <h3 id="id20">Windows SDK</h3> 480 <ul class="small-gap"> 481 <li><p class="first">Developers using the Windows SDK can now <strong>build a module as a Pepper 482 plugin</strong> (sometimes called a “trusted” or “in-process” plugin) using the 483 native C/C++ compiler on their development system. In essence this makes 484 developing a Native Client module a two-step process:</p> 485 <ol class="arabic simple"> 486 <li>Build the module into a DLL using your system’s C/C++ compiler. Test and 487 debug the DLL using the tools in your normal development environment.</li> 488 <li>Build the module into a .nexe using the compiler from one of the Native 489 Client toolchains in the SDK (nacl-gcc or nacl-g++). Test and debug the 490 .nexe using nacl-gdb.</li> 491 </ol> 492 <p>This two step development process has many benefitsin particular, you can 493 use the compilers, debuggers, profilers, and other tools that you’re already 494 familiar with. But there are a few potential issues to keep in mind:</p> 495 <ul class="small-gap"> 496 <li>Some libraries that are commonly used with Native Client may not build 497 easily on Windows.</li> 498 <li>You may need to put in extra effort to get source code to compile with 499 multiple compilers, e.g., Microsoft Visual Studio and GCC.</li> 500 <li>Chrome uses different threading models for trusted plugins and Native 501 Client modules.</li> 502 <li>Certain operations such as platform-specific library calls and system calls 503 may succeed during trusted development, but fail in Native Client.</li> 504 </ul> 505 <p>Here are the resources you can use to build your module into a DLL:</p> 506 <ul class="small-gap"> 507 <li>header files are in <code>pepper_22\include</code></li> 508 <li>source files are in <code>pepper_22\src</code></li> 509 <li>pre-built libraries are in <code>pepper_22\lib</code></li> 510 </ul> 511 </li> 512 <li>A Visual Studio add-in will be available in the near future with 513 configurations that include platforms for both Pepper plugins and NaCl 514 modules.</li> 515 </ul> 516 <aside class="note"> 517 <strong>Note:</strong> It’s also possible to build a module as a trusted plugin on Mac and 518 Linux systems, but doing so requires more work because the SDK does not yet 519 include the above resources (library source files and pre-built libraries) 520 for Mac and Linux systems. To build and debug a trusted plugin on Mac and 521 Linux systems, you need to <a class="reference external" href="http://dev.chromium.org/developers/how-tos/get-the-code">get the Chromium code</a> and then follow 522 the <a class="reference external" href="http://www.chromium.org/nativeclient/how-tos/debugging-documentation/debugging-a-trusted-plugin/trusted-debugging-on-mac">Mac instructions</a> 523 or <a class="reference external" href="http://www.chromium.org/nativeclient/how-tos/debugging-documentation/debugging-a-trusted-plugin/debugging-a-trusted-plugin-on-linux">Linux instructions</a>. 524 In the future, the SDK will include resources for hosted development on Mac 525 and Linux as well as Windows. 526 </aside> 527 <h3 id="id21">Examples</h3> 528 <ul class="small-gap"> 529 <li>Each example in the SDK now builds both a debug and a release version. As 530 before, most examples also build newlib and glibc versions, which means that 531 there are now four versions for each example. Take a look at the Makefiles in 532 the examples to see the compiler flags that are used for debug and release 533 versions. For a description of those flags, see <a class="reference internal" href="/native-client/devguide/devcycle/building.html#compile-flags"><em>Compile flags for 534 different development scenarios</em></a>.</li> 535 <li>Comments have been added to common.js, which is used in all the examples. The 536 JavaScript in common.js inserts an <embed> element that loads the NaCl module 537 in each example’s web page, attaches event listeners to monitor the loading 538 of the module, and implements handleMessage() to respond to messages sent 539 from the NaCl module to the JavaScript side of the application</li> 540 </ul> 541 <h3 id="id22">PPAPI</h3> 542 <ul class="small-gap"> 543 <li>The <code>CompletionCallbackFactory</code> class template now takes a thread traits 544 class as its second parameter. For details see the <a class="reference external" href="/native-client/pepper_stable/cpp/classpp_1_1_completion_callback_factory#details">CompletionCallbackFactory 545 class template reference</a>.</li> 546 </ul> 547 </section> 548 549 {{/partials.standard_nacl_article}} 550