1 {{+bindTo:partials.standard_nacl_article}}
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 <p>The dates in the following release notes denote when Chrome and the NaCl SDK
6 reached canary status. The stable release is typically
6 weeks later.
</p>
7 <h2 id=
"chrome-pepper-45-10-july-2015">Chrome/Pepper
45 (
10 July
2015)
</h2>
8 <h3 id=
"pepper">Pepper
</h3>
10 <li>UDP Socket Multicast API in stable (PPB_UDP_SOCKET
1.2).
</li>
12 <h2 id=
"chrome-pepper-43-03-april-2015">Chrome/Pepper
43 (
03 April
2015)
</h2>
13 <h3 id=
"pnacl">PNaCl
</h3>
14 <ul class=
"small-gap">
15 <li>The C11/C++
11 <code>acquire
</code>,
<code>release
</code>, and
<code>acq_rel
</code> memory orders are now
16 generated by default. The in-browser Chrome
42 translator supports them, the
17 SDK can therefore generate them.
</li>
18 <li>Fix a
<a class=
"reference external" href=
"https://code.google.com/p/chromium/issues/detail?id=460432">code generation bug on ARM
</a> when dealing with
16-bit load/store and
19 <code>bswap
</code> which led to a NaCl validation failure.
</li>
20 <li>PNaCl is now based on LLVM
3.6. If you are using GDB to debug PNaCl
21 <a class=
"reference internal" href=
"/native-client/devguide/devcycle/debugging.html#debugging-pnacl-pexes"><em>BC files with debug metadata in the browser
</em></a>,
22 remember that debug info from SDK version
<code>X
</code> is only compatible with the
23 PNaCl translator in chrome version
<code>X
</code>. The bitcode debug metadata format
24 changed from LLVM
3.5 to
3.6. If you need to debug an app built with SDK
25 version
<code>X
</code> running in Chrome version
<code>Y
</code> (with
<code>X != Y
</code>), it is still
26 possible to do so. Simply translate the pexe to a nexe using the
27 <a class=
"reference internal" href=
"/native-client/devguide/devcycle/debugging.html#debugging-pexes-via-nexes"><em>offline pnacl-translate tool from SDK version X
</em></a> instead of using the translator in the
28 browser (version
<code>Y
</code>).
</li>
29 <li>PNaCl
’s support for use of libstdc++
4.6 as the C++ standard library is
30 deprecated and will be removed in the next release. PNaCl has used libc++
31 (which is much more up-to-date, currently based on LLVM
3.6) as the default
33 <li>PNaCl
’s experimental
<a class=
"reference external" href=
"https://chromium.googlesource.com/native_client/pnacl-subzero/+/master/README.rst">Subzero translator
</a> is available for x86-
32 NaCl in
34 Chrome version
43, behind a flag. To give it a try, run Chrome with the
35 <code>--enable-pnacl-subzero
</code> commandline flag, and use the
<code>optlevel
0</code>
36 <a class=
"reference internal" href=
"/native-client/reference/nacl-manifest-format.html#pnacl-nmf-optlevels"><em>NaCl manifest option
</em></a>. Application startup time
37 should be several times faster than the previous LLVM-based
<code>optlevel
0</code>
38 mode, with similar code quality. Note that x86-
32 NaCl requires a
32-bit
39 Chrome. On Windows, it also requires a
32-bit Windows OS, but
64-bit Linux
40 OSes can run x86-
32 NaCl. If you try it out, please send us feedback
41 on
<a class=
"reference external" href=
"https://groups.google.com/forum/#!forum/native-client-dev">native-client-dev
</a>. We are working on improvements and adding
44 <h3 id=
"id1">Pepper
</h3>
45 <ul class=
"small-gap">
46 <li>UDP Socket Multicast API in development preview (PPB_UDP_SOCKET
1.2).
</li>
47 <li>Hardware Video Encoder API in development preview (PPB_VIDEO_ENCODER
0.1).
</li>
49 <h2 id=
"chrome-pepper-42-20-february-2015">Chrome/Pepper
42 (
20 February
2015)
</h2>
51 <ul class=
"small-gap">
52 <li>The SDK now contains experimental versions of
<code>i686-nacl-clang
</code>,
53 <code>x86_64-nacl-clang
</code>, and
<code>arm-nacl-clang
</code> as well as the
<code>clang++
</code>
54 equivalents. These toolchains are based on the same LLVM version as PNaCl, but
55 can be used to generate NaCl
<code>.nexe
</code> files instead of translating a
56 <code>.pexe
</code> locally or using the GCC toolchain.
</li>
58 <h3 id=
"nacl">NaCl
</h3>
59 <ul class=
"small-gap">
60 <li>The x86 NaCl validators accept instructions from the FMA3 extensions, as well
61 as AVX2 instructions (except
<code>VGATHER
</code>).
</li>
63 <h3 id=
"id2">PNaCl
</h3>
64 <ul class=
"small-gap">
65 <li>PNaCl supports C11/C++
11 memory orders
<code>acquire
</code>,
<code>release
</code>, and
66 <code>acq_rel
</code>. It used to upgrade all accesses to
<code>seq_cst
</code>. It still upgrades
67 <code>consume
</code> to
<code>acquire
</code> (no compiler currently implements
<code>consume
</code>), and
68 <code>relaxed
</code> to
<code>seq_cst
</code> (to conservatively avoid platform differences due
69 to out-of-thin-air problems). This is currently disabled by default in the SDK
70 so that the in-browser translator installed on users
’ machines has time to
71 gain this support. Developers can turn it on by passing the
72 <code>-pnacl-memory-order-seq-cst-only=false
</code> flag to
<code>opt
</code>.
</li>
73 <li>PNaCl handles nested struct type expansion, which allows it to better support
74 non-C languages such as Rust.
</li>
75 <li>PNaCl breaks up many integer operations over
64-bits into individual
64-bit
76 operations. This is often encountered when using large consecutive bitfields.
</li>
78 <h2 id=
"chrome-pepper-41-09-january-2015">Chrome/Pepper
41 (
09 January
2015)
</h2>
79 <h3 id=
"id3">NaCl
</h3>
80 <ul class=
"small-gap">
81 <li>The x86 NaCl validators accept instructions from the AVX1 extensions.
</li>
83 <h3 id=
"id4">PNaCl
</h3>
84 <ul class=
"small-gap">
85 <li>PNaCl is now based on LLVM
3.5.
</li>
87 <h2 id=
"chrome-pepper-40-november-07-2014">Chrome/Pepper
40 (November
07 2014)
</h2>
88 <ul class=
"small-gap">
89 <li><a class=
"reference external" href=
"/native-client/pepper_stable/cpp/classpp_1_1_video_decoder.html">VideoDecoder
</a> is now
90 stable, see the SDK example in
<code>pepper_canary/examples/api/video_decode
</code>.
</li>
92 <h2 id=
"chrome-pepper-39-26-september-2014">Chrome/Pepper
39 (
26 September
2014)
</h2>
93 <h3 id=
"id5">NaCl
</h3>
94 <ul class=
"small-gap">
95 <li>This release contains a fix for CVE-
2015-
0565:
<a class=
"reference external" href=
"https://code.google.com/p/nativeclient/issues/detail?id=3944">disable the x86 CLFLUSH
96 instruction due to rowhammer problem
</a>.
</li>
98 <h3 id=
"id6">Pepper
</h3>
99 <ul class=
"small-gap">
100 <li>Support for
<code>DEBUG_ONLY:dev://postmessage
</code> has been removed in favor of
101 <a class=
"reference internal" href=
"/native-client/devguide/devcycle/debugging.html#devcycle-debugging"><em>other more useful debugging approaches
</em></a>.
</li>
102 <li><code>postMessageAndAwaitResponse
</code> is now stable and allows JavaScript to
103 <a class=
"reference external" href=
"/native-client/pepper_stable/cpp/classpp_1_1_message_handler">communicate synchronously
</a> with PNaCl
106 <h2 id=
"chrome-pepper-38-15-august-2014">Chrome/Pepper
38 (
15 August
2014)
</h2>
107 <h3 id=
"id7">PNaCl
</h3>
108 <ul class=
"small-gap">
109 <li>Compilation speed improvements due to validation caching of the translator and
111 <li>Performance improvement of SIMD vector shuffle.
</li>
113 <h2 id=
"chrome-pepper-37-20-june-2014">Chrome/Pepper
37 (
20 June
2014)
</h2>
114 <h3 id=
"id8">PNaCl
</h3>
115 <ul class=
"small-gap">
116 <li>2–
10% translation time improvement.
</li>
117 <li>Improved vector load/store and shuffle performance.
</li>
119 <h3 id=
"id9">Pepper
</h3>
120 <ul class=
"small-gap">
121 <li>Media Streams Input support.
</li>
122 <li>Compositor API.
</li>
123 <li>Hardware Decode API in development preview.
</li>
124 <li>Sync API in development preview.
</li>
126 <h3 id=
"id10">SDK
</h3>
127 <ul class=
"small-gap">
128 <li>Demo of a
<a class=
"reference internal" href=
"/native-client/io2014.html#io2014"><em>full development environment in the browser
</em></a>.
</li>
130 <h2 id=
"chrome-pepper-36-09-may-2014">Chrome/Pepper
36 (
09 May
2014)
</h2>
131 <h3 id=
"id11">PNaCl
</h3>
132 <ul class=
"small-gap">
133 <li>Support
<a class=
"reference external" href=
"http://clang.llvm.org/docs/LanguageExtensions.html#vectors-and-extended-vectors">LLVM vectors
</a>
134 and
<a class=
"reference external" href=
"http://gcc.gnu.org/onlinedocs/gcc/Vector-Extensions.html">GCC vectors
</a> for SIMD
135 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,
136 and performance is expected to become acceptable for version
37 of
137 Chrome. More SIMD instructions will be added in later releases.
</li>
139 <h2 id=
"chrome-pepper-35-31-mar-2014">Chrome/Pepper
35 (
31 Mar
2014)
</h2>
140 <h3 id=
"id12">PNaCl
</h3>
141 <ul class=
"small-gap">
142 <li>Upgraded LLVM to version
3.4.
</li>
143 <li>Translation now uses dynamic load balancing, making translation time faster.
</li>
144 <li>Unstable pexes (i.e. non-finalized) with debug information can be loaded by
145 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>
147 <h2 id=
"chrome-pepper-34-20-feb-2014">Chrome/Pepper
34 (
20 Feb
2014)
</h2>
148 <h3 id=
"id13">Pepper
</h3>
149 <ul class=
"small-gap">
150 <li>Filesystems can now be passed from JavaScript to NaCl. The resulting
151 <code>pp::Var
</code> will contain a
<code>pp::Resource
</code> that can be given to the
152 <code>pp::FileSystem
</code> constructor.
</li>
153 <li>New Audio and Video input APIs have been added as dev interfaces. See
154 <a class=
"reference external" href=
"/native-client/pepper_dev/cpp/classpp_1_1_media_stream_audio_track">pp::MediaStreamAudioTrack
</a> and
155 <a class=
"reference external" href=
"/native-client/pepper_dev/cpp/classpp_1_1_media_stream_video_track">pp::MediaStreamVideoTrack
</a> for
158 <h3 id=
"id14">PNaCl
</h3>
159 <ul class=
"small-gap">
160 <li>Parallel translation: at least
1.7x faster, even with older pexes.
</li>
161 <li>Intelligent abbreviations in the bitcode:
20% reduction in binary size using
162 the
<a class=
"reference internal" href=
"/native-client/devguide/devcycle/building.html#pnacl-compress"><em>pnacl-compress
</em></a> tool.
</li>
164 <h2 id=
"chrome-pepper-33-16-dec-2013">Chrome/Pepper
33 (
16 Dec
2013)
</h2>
165 <h3 id=
"portable-native-client">Portable Native Client
</h3>
166 <ul class=
"small-gap">
167 <li>PNaCl
’s default C++ standard library is now LLVM
’s own libc++, based on
168 LLVM
3.3. This library now supports optional
<code>setjmp
</code>/
<code>longjmp
</code> exception
169 handling (see
<a class=
"reference external" href=
"https://groups.google.com/forum/#!topic/native-client-discuss/0spfg6O04FM">announcement
</a>
172 <h3 id=
"id15">SDK
</h3>
173 <ul class=
"small-gap">
174 <li>The
<code>nacl_io
</code> library now includes a FUSE mount.
</li>
175 <li>In the SDK examples,
<code>common.js
</code> now loads the Release version of the
176 nexes/pexes that are built (by default).
</li>
177 <li>“<code>make debug
</code>” and
“<code>make run
</code>” have been fixed on Mac.
</li>
179 <h2 id=
"pnacl-enabled-by-default-in-chrome-31-12-nov-2013">PNaCl enabled by default in Chrome
31 (
12 Nov
2013)
</h2>
180 <ul class=
"small-gap">
181 <li>Portable Native Client (PNaCl) is enabled by default in Chrome
31. See
182 <a class=
"reference internal" href=
"/native-client/nacl-and-pnacl.html"><em>NaCl and PNaCl
</em></a> for details on the differences between
184 <li>The PNaCl ABI has changed from the preview release in Chrome
30.
185 Pexe modules built with the
<code>pepper_30
</code> bundle in the SDK must be recompiled
186 with the
<code>pepper_31
</code> bundle or later.
187 As a general rule, we always recommended building applications with the latest
188 stable bundle in the Native Client SDK.
189 The PNaCl ABI will remain stable starting with the release of Chrome
31.
</li>
190 <li><p class=
"first">Additional changes in the Chrome/Pepper
31 release:
</p>
191 <ul class=
"small-gap">
192 <li>Updates to the Pepper API, including socket and network support
</li>
193 <li>Improved socket support in the
<code>nacl_io
</code> library
</li>
197 <h2 id=
"pnacl-in-chrome-30-dev-channel-01-aug-2013">PNaCl in Chrome
30 Dev channel (
01 Aug
2013)
</h2>
198 <ul class=
"small-gap">
199 <li>Portable Native Client (PNaCl) is currently available for preview in Chrome
200 30 (currently in the Dev channel). Apps and sites built with PNaCl can run in
201 Chrome
30 without an explicit flag.
</li>
202 <li>See
<a class=
"reference external" href=
"http://www.chromium.org/nativeclient/pnacl/introduction-to-portable-native-client">Introduction to Portable Native Client
</a>
203 for information on developing for PNaCl. More documentation will be available
205 <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
206 before the official public release; if you
’re developing a PNaCl-based
207 application, be sure to build your code with the latest version of the Native
209 <li>Update: PNaCl is not enabled by default in beta or stable versions of M30.
</li>
211 <h2 id=
"pnacl-15-may-2013">PNaCl (
15 May
2013)
</h2>
212 <ul class=
"small-gap">
213 <li>Portable Native Client (PNaCl) is currently available for developer preview
214 in Chrome
29 or higher.
</li>
215 <li>To produce a PNaCl executable (.pexe) file, you must use the pnacl toolchain
216 in the current
<code>pepper_canary
</code> bundle. Chrome
29 does not support .pexe
217 files produced by earlier versions of the pnacl toolchain (that is,
218 executables compiled with the
<code>pepper_28
</code> bundle or earlier).
</li>
219 <li>To run an application with a PNaCl module, you must launch Chrome
29 with the
220 <code>--enable-pnacl
</code> flag (for
<a class=
"reference external" href=
"/apps">Chrome apps
</a>), or the
<code>--enable-nacl
</code>
221 flag (for other apps).
</li>
222 <li>When you launch Chrome with the
<code>--enable-pnacl
</code> flag, Chrome loads a PNaCl
223 translator in the background. Wait about a minute after you launch Chrome and
224 check
<a class=
"reference external" href=
"chrome://nacl">chrome://nacl
</a> to verify that the translator loaded.
</li>
225 <li>PNaCl translators are currently available for
32-bit x86,
64-bit x86, and ARM
227 <li>PNaCl applications must use the newlib C library (glibc and dynamic linking
228 are not supported yet).
</li>
229 <li>The intermediate representation (IR) format may change prior to the release
230 of PNaCl. If so, you will need to recompile your application with the pnacl
231 toolchain in a new SDK bundle.
</li>
233 <h2 id=
"pepper-27-12-april-2013">Pepper
27 (
12 April
2013)
</h2>
234 <p>The Pepper
27 bundle features a significant number of new libraries that have
235 been incorporated directly into the SDK.
</p>
236 <h3 id=
"libraries">Libraries
</h3>
237 <ul class=
"small-gap">
238 <li><p class=
"first">A number of libraries from the naclports project have been incorporated
239 directly into the Native Client SDK. These libraries include:
</p>
240 <ul class=
"small-gap">
241 <li>image encoding/decoding: jpeg, tiff, png, webp
</li>
242 <li>multimedia: openal, freealut, ogg, vorbis
</li>
243 <li>XML parsing: tinyxml, xml2
</li>
244 <li>miscellaneous: zlib (general purpose compression), freetype (font
245 rendering), lua (Lua interpreter)
</li>
247 <p>The libraries are located in
<code>ports/lib
</code>, and the header files are in
248 <code>ports/include
</code>.
</p>
250 <li>The
<code>httpfs
</code> filesystem in the nacl_io library now caches content in memory
251 by default; this improves performance considerably.
</li>
252 <li>For applications compiled with a glibc toolchain,
<code>dlopen()
</code> can now be
253 used to open shared libraries that are not specified in an application
’s
254 Native Client manifest (.nmf) file. This allows applications, for example, to
255 download a shared object and then use
<code>dlopen()
</code> to access the shared
256 object. The
<code>dlopen
</code> example has been modified to demonstrate this
257 functionality: reverse.cc is built into a shared object (.so) file, which is
258 downloaded and opened using an
<code>httpfs
</code> mount.
</li>
260 <h3 id=
"examples">Examples
</h3>
261 <ul class=
"small-gap">
262 <li>Each example now has a single
<code>index.html
</code> file, instead of multiple HTML
263 files corresponding to NaCl modules built using different toolchains and
264 configurations. By default, most examples are built using one toolchain
265 (newlib) and one configuration (Debug). If you build an example using
266 multiple toolchains or configurations, you can specify which version to run
267 in Chrome using the query parameters
<code>tc
</code> and
<code>config
</code>. For example,
268 assuming you are serving an example from the local server localhost:
5103, you
269 can run a version of the example built with the glibc toolchain in the
270 Release configuration by specifying the following URL in Chrome:
271 <code>http://localhost:
5103/index.html?tc=glibc
&config=Release
</code>. For additional
272 information about how different NaCl modules are loaded into
<code>index.html
</code>,
273 see the
<code>common.js
</code> file in each example.
</li>
275 <h3 id=
"build-tools-and-toolchains">Build tools and toolchains
</h3>
276 <ul class=
"small-gap">
277 <li>Common makefiles, including
<code>tools/common.mk
</code>, can now handle source files
278 located outside of an application
’s root directory. For example, a Makefile
279 for an application can specify a source file to compile such as
280 <code>../../some/other/place.cpp
</code>.
</li>
282 <h2 id=
"pepper-26-29-march-2013">Pepper
26 (
29 March
2013)
</h2>
283 <p>The Pepper
26 bundle includes a new HTTP filesystem type in the nacl_mounts
284 library (which has been renamed nacl_io), changes to the example Makefiles, a
285 simple new
3D example, and a threaded file IO example.
</p>
286 <h3 id=
"id16">Build tools and toolchains
</h3>
287 <ul class=
"small-gap">
288 <li><p class=
"first">Makefiles have been changed significantly:
</p>
289 <ul class=
"small-gap">
290 <li>Build commands are now specified in a number of common files
291 (
<code>tools/*.mk
</code>), which are included in the Makefiles in the examples.
</li>
292 <li>By default, make displays a simplified list of build steps (e.g.,
<code>CC
293 newlib/Debug/hello_world_x86_32.o
</code>) rather than the actual build commands.
294 To see the actual build commands, run
<code>make V=
1</code>.
</li>
295 <li>By default, most examples are built using one toolchain (newlib) and one
296 configuration (Debug). To build an example using a different toolchain or
297 configuration, run
<code>make
</code> with the parameters
<code>TOOLCHAIN=
<x
></code> or
298 <code>CONFIG=
<y
></code>. You can also run make
<code>all_versions
</code> to build an example
299 with all toolchains.
</li>
302 <li>Header files have been moved out of the toolchains. All toolchains now share
303 the same set of header files as host builds. Previously host and NaCl builds
304 used different headers, which could cause build problems.
</li>
306 <h3 id=
"id17">Libraries
</h3>
307 <ul class=
"small-gap">
308 <li>The nacl_mounts library has been renamed
<strong>nacl_io
</strong>, and has been expanded
309 with a new type of mount, httpfs, which can be used to read URLs via HTTP.
310 For details see
<code>include/nacl_io/nacl_io.h
</code>, as well as the
311 <code>hello_nacl_io
</code> example.
</li>
313 <h3 id=
"id18">Examples
</h3>
314 <ul class=
"small-gap">
315 <li>A new example,
<strong>hello_world_instance3d
</strong>, has been added to demonstrate a
316 simplified
3D app.
</li>
317 <li>The
<strong>file_io
</strong> example has been rewritten to do all file operations on a
318 thread. The example demonstrates how to use the MessageLoop API and blocking
319 callbacks on a thread.
</li>
321 <h3 id=
"general">General
</h3>
322 <ul class=
"small-gap">
323 <li>Old bundles (
<code>pepper_20
</code> and earlier) have been removed from the Native
324 Client SDK Manifest, and will no longer be updated by the
<code>naclsdk
</code>
327 <h2 id=
"pepper-25-21-december-2012">Pepper
25 (
21 December
2012)
</h2>
328 <p>The Pepper
25 bundle features an ARM toolchain to build Native Client modules
329 for ARM devices, two new Pepper APIs (including the MessageLoop API, which lets
330 you make Pepper calls on background threads), two new libraries (nacl_mounts,
331 which provides a virtual file system that you can use with standard C file
332 operations, and ppapi_main, which lets you implement a Native Client module
333 using a simple ppapi_main function), and two new examples that demonstrate how
334 to use the nacl_mounts and ppapi_main libraries.
</p>
335 <h3 id=
"id19">Build tools and toolchains
</h3>
336 <ul class=
"small-gap">
337 <li><p class=
"first">The SDK includes a new toolchain to build Native Client executables (.nexe
338 files) for
<strong>ARM devices
</strong>.
</p>
339 <ul class=
"small-gap">
340 <li>Currently the ARM toolchain can only be used to compile modules that use
341 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
342 to compile modules that use the glibc library.
</li>
343 <li>The ARM toolchain is in the directory
344 <code>pepper_25/toolchain/
<host
>_arm_newlib
</code>. The bin subdirectory contains
345 the compiler (
<code>arm-nacl-gcc
</code>), the linker (
<code>arm-nacl-g++
</code>), and the
346 other tools in the toolchain.
</li>
347 <li>Take a look at the
<code>hello_world
</code> example to see how to use the ARM
348 toolchain. Go to
<code>examples/hello_world
</code> and run
<code>make
</code>. When the build
349 finishes, the newlib/Debug and newlib/Release subdirectories will contain
350 .nexe files for the x86-
32, x86-
64, and ARM target architecutes, and a
351 Native Client manifest (.nmf file) that references those three .nexe files.
</li>
354 <li>The simple web server included in the SDK,
<code>httpd.py
</code>, has been moved from
355 the
<code>examples/
</code> directory to the
<code>tools/
</code> directory. On Windows, you can
356 run
<code>httpd.cmd
</code> (in the
<code>examples/
</code> directory) to start the server.
</li>
358 <h3 id=
"ppapi">PPAPI
</h3>
359 <p>Pepper
25 includes two new APIs:
</p>
360 <ul class=
"small-gap">
361 <li>The
<a class=
"reference external" href=
"/native-client/pepper_stable/c/struct_p_p_b___console__1__0">Console API
</a> lets your
362 module log messages to the JavaScript console in the Chrome browser.
</li>
363 <li>The
<a class=
"reference external" href=
"/native-client/pepper_stable/cpp/classpp_1_1_message_loop">MessageLoop
</a> API lets your
364 module make PPAPI calls on a background thread. Once you
’ve created a
365 message loop resource, attached it to a thread, and run it, you can post work
366 to the thread, including completion callbacks for asynchronous operations.
367 For a C++ example of how to use the MessageLoop API, see
368 <code>pepper_25/include/ppapi/utility/threading/simple_thread.h
</code>. Note that you
369 cannot make asynchronous PPAPI calls on a background thread without creating
370 and using a message loop.
</li>
372 <h3 id=
"id20">Libraries
</h3>
373 <p>The SDK includes two new libraries:
</p>
374 <ul class=
"small-gap">
375 <li><p class=
"first">The
<strong>nacl_mounts
</strong> library provides a virtual file system that your module
376 can
“mount
” in a given directory tree. The file system can be one of several
378 <ul class=
"small-gap">
379 <li>“memfs
” is an in-memory file system,
</li>
380 <li>“dev
” is a file system with various utility nodes (e.g.,
<code>/dev/null
</code>,
381 <code>/dev/console[
0-
3]
</code>,
<code>/dev/tty
</code>), and
</li>
382 <li>“html5fs
” is a persistent file system.
</li>
384 <p>Once you
’ve mounted a file system in your module, you can use standard C
385 library file operations: fopen, fread, fwrite, fseek, and fclose. How those
386 operations are performed depends on the type of file system (e.g., for
387 html5fs, the operations are performed using the Pepper FileIO API). For a
388 list of the types of file systems you can mount, see
389 include/nacl_mounts/nacl_mounts.h. For an example of how to use nacl_mounts,
390 see examples/hello_nacl_mounts. Note that html5fs is subject to the same
391 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
392 Chrome (for example, prior to using an html5fs file system, you must
<a class=
"reference external" href=
"enabling_file_access">enable
393 local file IO
</a>).
</p>
395 <li>The
<strong>ppapi_main
</strong> library simplifies the creation of a NaCl module by
396 providing a familiar C programming environment. With this library, your
397 module can have a simple entry point called ppapi_main(), which is similar to
398 the standard C main() function, complete with argc and argv[] parameters.
399 Your module can also use standard C functions such as printf(), fopen(), and
400 fwrite(). For details see include/ppapi_main/ppapi_main.h. For an example of
401 how to use ppapi_main, see examples/hello_world_stdio.
</li>
403 <p>Header files for the new libraries are in the
<code>include/
</code> directory, source
404 files are in the
<code>src/
</code> directory, and compiled libraries are in the
<code>lib/
</code>
406 <h3 id=
"id21">Examples
</h3>
407 <ul class=
"small-gap">
408 <li><p class=
"first">The SDK includes two new examples:
</p>
409 <ul class=
"small-gap">
410 <li><strong>hello_nacl_mounts
</strong> illustrates how to use standard C library file
411 operations in a Native Client module through the use of the nacl_mounts
413 <li><strong>hello_world_stdio
</strong> illustrates how to implement a Native Client module
414 with a ppapi_main() function, and how to write to STDOUT and STDERR in a
415 module, through the use of the nacl_mounts and ppapi_main libraries. This
416 example makes it easy for new users to get started with Native Client by
417 letting them start making changes in a familiar C environment.
</li>
420 <li><p class=
"first">With a few exceptions, the Makefile for each example now builds the following
421 versions of each example:
</p>
422 <ul class=
"small-gap">
423 <li>glibc toolchain:
32-bit and
64-bit .nexes for the x86 target architecture
</li>
424 <li>newlib toolchain:
32-bit and
64-bit .nexes for the x86 target architecture,
425 and ARM .nexe for the ARM architecture
</li>
426 <li>pnacl toolchain: .pexe (which is subsequently tranlsated to .nexes for the
427 x86-
32, x86-
64, and ARM architectures)
</li>
428 <li>hosted toolchain: .so or .dll (to be executed as a Pepper plug-in in
432 <li>Additionally, each version is built in both a Debug and a Release
434 <li>The Makefile for each example includes two new targets:
<code>make RUN
</code> and
435 <code>make LAUNCH
</code>. These targets, which are interchangeable, launch a local
436 server and an instance of Chrome to run an example. When the instance of
437 Chrome is closed, the local server is shut down as well.
</li>
438 <li>The hello_world_stdio example includes a simplified Makefile that only lists
439 source dependencies, and invokes the build rules in a separate file
442 <h2 id=
"pepper-24-5-december-2012">Pepper
24 (
5 December
2012)
</h2>
443 <p>The Pepper
24 bundle features a new, experimental toolchain called PNaCl (short
444 for
“Portable Native Client
”), a new library (pthreads-win32) for the Windows
445 SDK, and an expanded list of attributes for Pepper
3D contexts that lets
446 applications specify a GPU preference for low power or performance.
</p>
447 <h3 id=
"id22">Build tools and toolchains
</h3>
448 <ul class=
"small-gap">
449 <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
450 “pinnacle
”). The PNaCl toolchain produces architecture-independent executable
451 files (.pexe files). Chrome doesn
’t yet support .pexe files directly, but if
452 you want to experiment with this early preview of PNaCl, the toolchain
453 includes a tool to translate .pexe files into architecture-specific .nexe
454 files. Take a look at the
<code>hello_world
</code> example to see how to build a .pexe
455 file and translate it into multiple .nexe files. Note that PNaCl is currently
456 restricted to the newlib C standard library – if your application uses glibc,
457 you can
’t build it with PNaCl.
</li>
458 <li>The
<code>create_nmf.py
</code> script uses ELF headers (rather than file names) to
459 determine the architecture of .nexe files. That means you can change the
460 names of your .nexe files and
<code>create_nmf.py
</code> will still be able to
461 generate the appropriate Native Client manifest file for your application.
</li>
463 <h3 id=
"id24">Examples
</h3>
464 <ul class=
"small-gap">
465 <li>The SDK examples now build with four toolchains: the glibc and newlib
466 toolchains, the experimental PNaCl toolchain, and the hosted toolchain on
467 your development machine. Within each toolchain build, each example also
468 builds both a debug and a release version.
</li>
469 <li>The example Makefiles use dependency (.d) files to enable incremental builds.
</li>
470 <li>The pong example has been cleaned up and modified to run more smoothly. The
471 drawing function is now set up as the Flush() callback, which allows
2D
472 drawing to occur as quickly as possible.
</li>
474 <h3 id=
"id25">PPAPI
</h3>
475 <ul class=
"small-gap">
476 <li>When creating a
3D rendering context, the
<a class=
"reference external" href=
"/native-client/pepper_stable/c/group___enums#ga7df48e1c55f6401beea2a1b9c07967e8">attribute list
</a>
477 for the context can specify whether to prefer low power or performance for
478 the GPU. Contexts with a low power preference may be created on an integrated
479 GPU; contexts with a performance preference may be created on a discrete GPU.
</li>
481 <h3 id=
"windows-sdk">Windows SDK
</h3>
482 <ul class=
"small-gap">
483 <li>The Windows SDK includes the pthreads-win32 library to assist in porting from
484 win32 code. You can use this library when developing your module as a Pepper
485 plug-in (.dll). See pepper_24/include/win/pthread.h and
486 pepper_24/src/pthread/README for additional information.
</li>
487 <li>The update utility naclsdk.bat works when it is run from a path with spaces.
</li>
489 <h2 id=
"pepper-23-15-october-2012">Pepper
23 (
15 October
2012)
</h2>
490 <p>The Pepper
23 bundle includes support for the nacl-gdb debugger on Mac and
491 32-bit Windows, resources to enable hosted development on Linux, and changes to
492 make the SDK examples compliant with version
2 of the Chrome Web Store manifest
494 <h3 id=
"tools">Tools
</h3>
495 <ul class=
"small-gap">
496 <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,
497 Windows, and Linux).
</li>
498 <li>The output of the SDK update utility has been simplified. When you run the
499 command
<code>naclsdk list
</code>, the utility displays one line for each available
500 bundle, annotated with an
“<code>I
</code>” if the bundle is already installed on your
501 system, and a
“<code>*
</code>” if the bundle has an update available. To see full
502 information about a bundle, use the command
<code>naclsdk info
<bundle
></code> (for
503 example,
<code>naclsdk info pepper_28
</code>).
</li>
505 <h3 id=
"linux-sdk">Linux SDK
</h3>
506 <ul class=
"small-gap">
507 <li><p class=
"first">Developers using the Linux SDK now have resources, including pre-built
508 libraries and example Makefiles, that make it easier to
<strong>build a module as a
509 Pepper plugin
</strong> (sometimes called a
“trusted
” or
“in-process
” plugin) using
510 the native C/C++ compiler on their development system. In essence this makes
511 developing a Native Client module a two-step process:
</p>
512 <ol class=
"arabic simple">
513 <li>Build the module into a shared library (.so file) using your system
’s
514 C/C++ compiler. Test and debug the .so file using the tools in your normal
515 development environment.
</li>
516 <li>Build the module into a .nexe file using the compiler from one of the
517 Native Client toolchains in the SDK (nacl-gcc or nacl-g++). Test and debug
518 the .nexe file using nacl-gdb.
</li>
520 <p>This two step development process has many benefits—in particular, you can
521 use the compilers, debuggers, profilers, and other tools that you
’re already
522 familiar with. But there are a few potential issues to keep in mind:
</p>
523 <ul class=
"small-gap">
524 <li>Chrome uses different threading models for trusted plugins and Native
526 <li>Certain operations such as platform-specific library calls and system calls
527 may succeed during trusted development, but fail in Native Client.
</li>
529 <p>Here are the resources you can use to build your module into a Pepper plugin:
</p>
530 <ul class=
"small-gap">
531 <li>header files are in
<code>pepper_23/include
</code></li>
532 <li>source files are in
<code>pepper_23/src
</code></li>
533 <li>pre-built libraries are in
<code>pepper_23/lib
</code></li>
535 <p>You can now build and run most of the examples in the SDK as Pepper plugins.
</p>
536 <ul class=
"small-gap">
537 <li>Look at the example Makefiles or run
<code>make
</code> in the example directories to
538 see the commands and flags used to build modules as Pepper plugins.
</li>
539 <li>Run
<code>make LAUNCH
</code> in the example directories to see how to use the
540 <code>--register-pepper-plugins
</code> argument to load a Pepper plugin in Chrome.
541 Note that you must set the
<code>CHROME_PATH
</code> environment variable and start a
542 <a class=
"reference internal" href=
"/native-client/devguide/devcycle/running.html#web-server"><em>local server
</em></a> prior to running this command.
</li>
546 <h3 id=
"id26">Examples
</h3>
547 <ul class=
"small-gap">
548 <li>On Linux and Windows systems, most of the examples now build with three
549 toolchains: the Native Client glibc and newlib toolchains, and the native
550 toolchain on the host system. Modules built with the native toolchain on the
551 host system can only run as Pepper plugins.
</li>
552 <li>All examples in the SDK now comply with version
2 of the Chrome Web Store
553 <a class=
"reference external" href=
"/extensions/manifest">manifest file format
</a>. By default,
554 applications that use version
2 of the manifest file format apply a strict
555 <a class=
"reference external" href=
"/extensions/contentSecurityPolicy">content security policy
</a>, which
556 includes a restriction against inline JavaScript. This restriction prohibits
557 both inline
<code><script
></code> blocks and inline event handlers (e.g.,
<code><button
558 onclick=
"...
"></code>). See
<a class=
"reference external" href=
"/extensions/manifestVersion">Manifest Version
</a> for
559 a list of changes between version
1 and version
2 of the manifest file
560 format, and a support schedule for applications that use version
1.
</li>
562 <h3 id=
"id27">PPAPI
</h3>
563 <ul class=
"small-gap">
564 <li><a class=
"reference external" href=
"/native-client/pepper_stable/c/group___enums#ga21b811ac0484a214a8751aa3e1c959d9">PP_InputEvent_Modifier
</a>
565 has two new enum values (_ISLEFT and _ISRIGHT).
</li>
566 <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
569 <h2 id=
"pepper-22-22-august-2012">Pepper
22 (
22 August
2012)
</h2>
570 <p>The Pepper
22 bundle includes a
<strong>command-line debugger
</strong>, resources to enable
571 <strong>hosted development on Windows
</strong>, and changes to the example Makefiles (each
572 example now builds both a debug and a release version).
</p>
573 <h3 id=
"id28">Tools
</h3>
574 <ul class=
"small-gap">
575 <li>The SDK now includes a
<strong>command-line debugger
</strong> that you can use to debug
576 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,
577 nacl-gdb only works on
64-bit Windows,
64-bit Linux, and
32-bit Linux
578 systems. Support for Mac and
32-bit Windows systems will be added soon.
</li>
580 <h3 id=
"id29">Windows SDK
</h3>
581 <ul class=
"small-gap">
582 <li><p class=
"first">Developers using the Windows SDK can now
<strong>build a module as a Pepper
583 plugin
</strong> (sometimes called a
“trusted
” or
“in-process
” plugin) using the
584 native C/C++ compiler on their development system. In essence this makes
585 developing a Native Client module a two-step process:
</p>
586 <ol class=
"arabic simple">
587 <li>Build the module into a DLL using your system
’s C/C++ compiler. Test and
588 debug the DLL using the tools in your normal development environment.
</li>
589 <li>Build the module into a .nexe using the compiler from one of the Native
590 Client toolchains in the SDK (nacl-gcc or nacl-g++). Test and debug the
591 .nexe using nacl-gdb.
</li>
593 <p>This two step development process has many benefits—in particular, you can
594 use the compilers, debuggers, profilers, and other tools that you
’re already
595 familiar with. But there are a few potential issues to keep in mind:
</p>
596 <ul class=
"small-gap">
597 <li>Some libraries that are commonly used with Native Client may not build
598 easily on Windows.
</li>
599 <li>You may need to put in extra effort to get source code to compile with
600 multiple compilers, e.g., Microsoft Visual Studio and GCC.
</li>
601 <li>Chrome uses different threading models for trusted plugins and Native
603 <li>Certain operations such as platform-specific library calls and system calls
604 may succeed during trusted development, but fail in Native Client.
</li>
606 <p>Here are the resources you can use to build your module into a DLL:
</p>
607 <ul class=
"small-gap">
608 <li>header files are in
<code>pepper_22\include
</code></li>
609 <li>source files are in
<code>pepper_22\src
</code></li>
610 <li>pre-built libraries are in
<code>pepper_22\lib
</code></li>
613 <li>A Visual Studio add-in will be available in the near future with
614 configurations that include platforms for both Pepper plugins and NaCl
618 <strong>Note:
</strong> It
’s also possible to build a module as a trusted plugin on Mac and
619 Linux systems, but doing so requires more work because the SDK does not yet
620 include the above resources (library source files and pre-built libraries)
621 for Mac and Linux systems. To build and debug a trusted plugin on Mac and
622 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
623 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>
624 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>.
625 In the future, the SDK will include resources for hosted development on Mac
626 and Linux as well as Windows.
628 <h3 id=
"id30">Examples
</h3>
629 <ul class=
"small-gap">
630 <li>Each example in the SDK now builds both a debug and a release version. As
631 before, most examples also build newlib and glibc versions, which means that
632 there are now four versions for each example. Take a look at the Makefiles in
633 the examples to see the compiler flags that are used for debug and release
634 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
635 different development scenarios
</em></a>.
</li>
636 <li>Comments have been added to common.js, which is used in all the examples. The
637 JavaScript in common.js inserts an
<embed
> element that loads the NaCl module
638 in each example
’s web page, attaches event listeners to monitor the loading
639 of the module, and implements handleMessage() to respond to messages sent
640 from the NaCl module to the JavaScript side of the application
</li>
642 <h3 id=
"id31">PPAPI
</h3>
643 <ul class=
"small-gap">
644 <li>The
<code>CompletionCallbackFactory
</code> class template now takes a thread traits
645 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
646 class template reference
</a>.
</li>
650 {{/partials.standard_nacl_article}}