Index: native_client_sdk/src/doc/_developer.chrome.com_generated/reference/nacl-manifest-format.html |
diff --git a/native_client_sdk/src/doc/_developer.chrome.com_generated/reference/nacl-manifest-format.html b/native_client_sdk/src/doc/_developer.chrome.com_generated/reference/nacl-manifest-format.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..109e86c9221074c3f503abd0c87faebd48df8ca6 |
--- /dev/null |
+++ b/native_client_sdk/src/doc/_developer.chrome.com_generated/reference/nacl-manifest-format.html |
@@ -0,0 +1,237 @@ |
+{{+bindTo:partials.standard_nacl_article}} |
+ |
+<section id="native-client-manifest-nmf-format"> |
+<h1 id="native-client-manifest-nmf-format">Native Client Manifest (nmf) Format</h1> |
+<div class="contents local topic" id="contents"> |
+<ul class="small-gap"> |
+<li><a class="reference internal" href="#overview" id="id1">Overview</a></li> |
+<li><a class="reference internal" href="#field-summary" id="id2">Field summary</a></li> |
+<li><p class="first"><a class="reference internal" href="#field-details" id="id3">Field details</a></p> |
+<ul class="small-gap"> |
+<li><a class="reference internal" href="#program" id="id4">program</a></li> |
+<li><a class="reference internal" href="#files" id="id5">files</a></li> |
+</ul> |
+</li> |
+<li><p class="first"><a class="reference internal" href="#semantics" id="id6">Semantics</a></p> |
+<ul class="small-gap"> |
+<li><a class="reference internal" href="#schema-validation" id="id7">Schema validation</a></li> |
+<li><a class="reference internal" href="#nexe-matching" id="id8">Nexe matching</a></li> |
+<li><a class="reference internal" href="#file-matching" id="id9">File matching</a></li> |
+<li><a class="reference internal" href="#url-of-the-nmf-file-from-embed-src-and-data-uri" id="id10">URL of the nmf file, from <code><embed></code> src, and data URI</a></li> |
+<li><a class="reference internal" href="#url-resolution" id="id11">URL resolution</a></li> |
+</ul> |
+</li> |
+</ul> |
+</div> |
+<section id="overview"> |
+<h2 id="overview">Overview</h2> |
+<p>Every Native Client application has a <a class="reference external" href="http://www.json.org/">JSON-formatted</a> |
+NaCl Manifest File (<code>nmf</code>). The <code>nmf</code> tells the browser where to |
+download and load your Native Client application files and libraries. |
+The file can also contain configuration options.</p> |
+</section><section id="field-summary"> |
+<h2 id="field-summary">Field summary</h2> |
+<p>The following shows the supported top-level manifest fields. There is one |
+section that discusses each field in detail. The only field that is required |
+is the <code>program</code> field.</p> |
+<pre class="prettyprint"> |
+{ |
+ // Required |
+ "program": { ... } |
+ |
+ // Only required for glibc |
+ "files": { ... } |
+} |
+</pre> |
+</section><section id="field-details"> |
+<h2 id="field-details">Field details</h2> |
+<section id="program"> |
+<h3 id="program">program</h3> |
+<p>The <code>program</code> field specifies the main program that will be loaded |
+in the Native Client runtime environment. For a Portable Native Client |
+application, this is a URL for the statically linked bitcode <code>pexe</code> file. |
+For architecture-specific Native Client applications, this is a list |
+of URLs, one URL for each supported architecture (currently the choices |
+are “arm”, “x86-32”, and “x86-64”). For a dynamically linked executable, |
+<code>program</code> is the dynamic loader used to load the dynamic executable |
+and its dynamic libraries. See the <a class="reference internal" href="#nmf-url-resolution"><em>semantics</em></a> |
+section for the rules on URL resolution.</p> |
+<section id="example-of-a-program-for-portable-native-client"> |
+<h4 id="example-of-a-program-for-portable-native-client">Example of a <code>program</code> for Portable Native Client:</h4> |
+<pre class="prettyprint"> |
+{ |
+ "program": { |
+ "pnacl-translate": { |
+ // url is required |
+ "url": "url_to_my_pexe" |
+ |
+ // optlevel is optional |
+ "optlevel": 0 |
+ } |
+ } |
+} |
+</pre> |
+<p>Portable Native Client applications can also specify an <code>optlevel</code> field. |
+The <code>optlevel</code> field is an optimization level <em>hint</em>, which is a number |
+(zero and higher). Higher numbers indicate more optimization effort. |
+Setting a higher optimization level will improve the application’s |
+performance, but it will also slow down the first load experience. |
+The default is <code>optlevel</code> is currently <code>2</code>, and values higher |
+than 2 are no different than 2. If compute speed is not as important |
+as first load speed, an application could specify an <code>optlevel</code> |
+of <code>0</code>. Note that <code>optlevel</code> is only a <em>hint</em>. In the future, the |
+Portable Native Client translator and runtime may <em>automatically</em> choose |
+an <code>optlevel</code> to best balance load time and application performance.</p> |
+</section><section id="example-of-a-program-for-statically-linked-native-client-executables"> |
+<h4 id="example-of-a-program-for-statically-linked-native-client-executables">Example of a <code>program</code> for statically linked Native Client executables</h4> |
+<pre class="prettyprint"> |
+{ |
+ "program": { |
+ // Required: at least one entry |
+ // Add one of these for each architecture supported by the application. |
+ "arm": { "url": "url_to_arm_nexe" }, |
+ "x86-32": { "url": "url_to_x86_32_nexe" }, |
+ "x86-64": { "url": "url_to_x86_64_nexe" } |
+ } |
+} |
+</pre> |
+</section><section id="example-of-a-program-for-dynamically-linked-native-client-executables"> |
+<h4 id="example-of-a-program-for-dynamically-linked-native-client-executables">Example of a <code>program</code> for dynamically linked Native Client executables</h4> |
+<pre class="prettyprint"> |
+{ |
+ "program": { |
+ // Required: at least one entry |
+ // Add one of these for each architecture supported by the application. |
+ "x86-32": { "url": "lib32/runnable-ld.so" }, |
+ "x86-64": { "url": "lib64/runnable-ld.so" } |
+ }, |
+ // discussed in next section |
+ "files": { |
+ "main.nexe": { |
+ "x86-32": { "url": "url_to_x86_32_nexe" }, |
+ "x86-64": { "url": "url_to_x86_64_nexe" } |
+ }, |
+ // ... |
+ } |
+} |
+</pre> |
+</section></section><section id="files"> |
+<h3 id="files">files</h3> |
+<p>The <code>files</code> field specifies a dictionary of file resources to be |
+used by a Native Client application. This is not supported and |
+not needed by Portable Native Client applications (use the PPAPI |
+<a class="reference external" href="https://developers.google.com/native-client/peppercpp/classpp_1_1_u_r_l_loader">URL Loader interfaces</a> |
+to load resources instead). However, the <code>files</code> manifest field |
+is important for dynamically linked executables, which must |
+load files before PPAPI is initialized. The <code>files</code> dictionary |
+should include the main dynamic program and its dynamic libraries. |
+There should be one file entry that corresponds to each a |
+dynamic library. Each file entry is a dictionary of supported architectures |
+and the URLs where the appropriate Native Client shared object |
+(<code>.so</code>) for that architecture may be found.</p> |
+<p>Since <code>program</code> is used to refer to the dynamic linker that comes |
+with the NaCl port of glibc, the main program is specified in the |
+<code>files</code> dictionary. The main program is specified under the |
+<code>"main.nexe"</code> field of the <code>files</code> dictionary.</p> |
+<pre class="prettyprint"> |
+{ |
+ "program": { |
+ "x86-64": {"url": "lib64/runnable-ld.so"}, |
+ "x86-32": {"url": "lib32/runnable-ld.so"} |
+ }, |
+ "files": { |
+ "main.nexe" : { |
+ "x86-64": {"url": "pi_generator_x86_64.nexe"}, |
+ "x86-32": {"url": "pi_generator_x86_32.nexe"} |
+ }, |
+ "libpthread.so.5055067a" : { |
+ "x86-64": {"url": "lib64/libpthread.so.5055067a"}, |
+ "x86-32": {"url": "lib32/libpthread.so.5055067a"} |
+ }, |
+ "libppapi_cpp.so" : { |
+ "x86-64": {"url": "lib64/libppapi_cpp.so"}, |
+ "x86-32": {"url": "lib32/libppapi_cpp.so"} |
+ }, |
+ "libstdc++.so.6" : { |
+ "x86-64": {"url": "lib64/libstdc++.so.6"}, |
+ "x86-32": {"url": "lib32/libstdc++.so.6"} |
+ }, |
+ "libm.so.5055067a" : { |
+ "x86-64": {"url": "lib64/libm.so.5055067a"}, |
+ "x86-32": {"url": "lib32/libm.so.5055067a"} |
+ }, |
+ "libgcc_s.so.1" : { |
+ "x86-64": {"url": "lib64/libgcc_s.so.1"}, |
+ "x86-32": {"url": "lib32/libgcc_s.so.1"} |
+ }, |
+ "libc.so.5055067a" : { |
+ "x86-64": {"url": "lib64/libc.so.5055067a"}, |
+ "x86-32": {"url": "lib32/libc.so.5055067a"} |
+ } |
+ } |
+} |
+</pre> |
+<p>Dynamic libraries that the dynamic program depends upon and links in at program |
+startup must be listed in the <code>files</code> dictionary. Library files that are |
+loaded after startup using <code>dlopen()</code> should either be listed in the <code>files</code> |
+dictionary, or should be made accessible by the <code>nacl_io</code> library. The |
+<code>nacl_io</code> library provides various file system <em>mounts</em> such as HTTP-based |
+file systems and memory-based file systems. The Native Client SDK includes |
+helpful tools for determining library dependencies and generating NaCl manifest |
+files for programs that that use dynamic linking. See |
+<a class="reference internal" href="/native-client/devguide/devcycle/dynamic-loading.html#dynamic-loading-manifest"><em>Generating a Native Client manifest file for a dynamically linked application</em></a>.</p> |
+</section></section><section id="semantics"> |
+<h2 id="semantics">Semantics</h2> |
+<section id="schema-validation"> |
+<h3 id="schema-validation">Schema validation</h3> |
+<p>Manifests are validated before the program files are downloaded. |
+Schema validation checks the following properties:</p> |
+<ul class="small-gap"> |
+<li>The schema must be valid JSON.</li> |
+<li>The schema must conform to the grammar given above.</li> |
+<li>If the program is not a PNaCl program, then the manifest |
+must contain at least one applicable match for the current ISA |
+in “program” and in every entry within “files”.</li> |
+</ul> |
+<p>If the manifest contains a field that is not in the official |
+set of supported fields, it is ignored. This allows the grammar to be |
+extended without breaking compatibility with older browsers.</p> |
+</section><section id="nexe-matching"> |
+<h3 id="nexe-matching">Nexe matching</h3> |
+<p>For Portable Native Client, there are no architecture variations, so |
+matching is simple.</p> |
+<p>For Native Client, the main nexe for the application is determined by |
+looking up the browser’s current architecture in the <code>"program"</code> |
+dictionary. Failure to provide an entry for the browser’s architecture |
+will result in a load error.</p> |
+</section><section id="file-matching"> |
+<h3 id="file-matching">File matching</h3> |
+<p>All files (shared objects and other assets, typically) are looked up |
+by a UTF8 string that is the file name. To load a library with a certain |
+file name, the browser searches the <code>"files"</code> dictionary for an entry |
+corresponding to that file name. Failure to find that name in the |
+<code>"files"</code> dictionary is a run-time error. The architecture matching |
+rule for all files is from most to least specific. That is, if there |
+is an exact match for the current architecture (e.g., “x86-32”) it is |
+used in preference to more general “portable”. This is useful for |
+non-architecture-specific asset files. Note that <code>"files"</code> is only |
+useful for files that must be loaded early in application startup |
+(before PPAPI interfaces are initialized to provide the standard |
+file loading mechanisms).</p> |
+</section><section id="url-of-the-nmf-file-from-embed-src-and-data-uri"> |
+<h3 id="url-of-the-nmf-file-from-embed-src-and-data-uri">URL of the nmf file, from <code><embed></code> src, and data URI</h3> |
+<p>The URL for the manifest file should be specified by the <code>src</code> attribute |
+of the <code><embed></code> tag for a Native Client module instance. The URL for |
+a manifest file can refer to an actual file, or it can be a |
+<a class="reference external" href="http://en.wikipedia.org/wiki/Data_URI_scheme">data URI</a> |
+representing the contents of the file. Specifying the <code>nmf</code> contents |
+inline with a data URI can help reduce the amount of network traffic |
+required to load the Native Client application.</p> |
+</section><section id="url-resolution"> |
+<span id="nmf-url-resolution"></span><h3 id="url-resolution"><span id="nmf-url-resolution"></span>URL resolution</h3> |
+<p>All URLs contained in a manifest are resolved relative to the URL of |
+the manifest. If the manifest was specified as a data URI, the URLs must |
+all be absolute.</p> |
+</section></section></section> |
+ |
+{{/partials.standard_nacl_article}} |