| OLD | NEW |
| 1 {{+bindTo:partials.standard_nacl_article}} | 1 {{+bindTo:partials.standard_nacl_article}} |
| 2 | 2 |
| 3 <section id="c-tutorial-getting-started-part-2"> | 3 <section id="c-tutorial-getting-started-part-2"> |
| 4 <span id="tutorial2"></span><h1 id="c-tutorial-getting-started-part-2"><span id=
"tutorial2"></span>C++ Tutorial: Getting Started (Part 2)</h1> | 4 <span id="tutorial2"></span><h1 id="c-tutorial-getting-started-part-2"><span id=
"tutorial2"></span>C++ Tutorial: Getting Started (Part 2)</h1> |
| 5 <div class="contents local" id="contents" style="display: none"> | 5 <div class="contents local" id="contents" style="display: none"> |
| 6 <ul class="small-gap"> | 6 <ul class="small-gap"> |
| 7 <li><a class="reference internal" href="#overview" id="id1">Overview</a></li> | 7 <li><a class="reference internal" href="#overview" id="id1">Overview</a></li> |
| 8 <li><p class="first"><a class="reference internal" href="#using-the-native-clien
t-sdk-build-system" id="id2">Using the Native Client SDK build system</a></p> | 8 <li><p class="first"><a class="reference internal" href="#using-the-native-clien
t-sdk-build-system" id="id2">Using the Native Client SDK build system</a></p> |
| 9 <ul class="small-gap"> | 9 <ul class="small-gap"> |
| 10 <li><a class="reference internal" href="#simplifying-the-makefile" id="id3">Simp
lifying the Makefile</a></li> | 10 <li><a class="reference internal" href="#simplifying-the-makefile" id="id3">Simp
lifying the Makefile</a></li> |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 69 TARGET = part2 | 69 TARGET = part2 |
| 70 LIBS = ppapi_cpp ppapi | 70 LIBS = ppapi_cpp ppapi |
| 71 | 71 |
| 72 CFLAGS = -Wall | 72 CFLAGS = -Wall |
| 73 SOURCES = hello_tutorial.cc | 73 SOURCES = hello_tutorial.cc |
| 74 | 74 |
| 75 # Build rules generated by macros from common.mk: | 75 # Build rules generated by macros from common.mk: |
| 76 | 76 |
| 77 $(foreach src,$(SOURCES),$(eval $(call COMPILE_RULE,$(src),$(CFLAGS)))) | 77 $(foreach src,$(SOURCES),$(eval $(call COMPILE_RULE,$(src),$(CFLAGS)))) |
| 78 | 78 |
| 79 ifeq ($(CONFIG),Release) | 79 # The PNaCl workflow uses both an unstripped and finalized/stripped binary. |
| 80 # On NaCl, only produce a stripped binary for Release configs (not Debug). |
| 81 ifneq (,$(or $(findstring pnacl,$(TOOLCHAIN)),$(findstring Release,$(CONFIG)))) |
| 80 $(eval $(call LINK_RULE,$(TARGET)_unstripped,$(SOURCES),$(LIBS),$(DEPS))) | 82 $(eval $(call LINK_RULE,$(TARGET)_unstripped,$(SOURCES),$(LIBS),$(DEPS))) |
| 81 $(eval $(call STRIP_RULE,$(TARGET),$(TARGET)_unstripped)) | 83 $(eval $(call STRIP_RULE,$(TARGET),$(TARGET)_unstripped)) |
| 82 else | 84 else |
| 83 $(eval $(call LINK_RULE,$(TARGET),$(SOURCES),$(LIBS),$(DEPS))) | 85 $(eval $(call LINK_RULE,$(TARGET),$(SOURCES),$(LIBS),$(DEPS))) |
| 84 endif | 86 endif |
| 85 | 87 |
| 86 $(eval $(call NMF_RULE,$(TARGET),)) | 88 $(eval $(call NMF_RULE,$(TARGET),)) |
| 87 </pre> | 89 </pre> |
| 88 </section><section id="choosing-valid-toolchains-and-including-common-mk"> | 90 </section><section id="choosing-valid-toolchains-and-including-common-mk"> |
| 89 <h3 id="choosing-valid-toolchains-and-including-common-mk">Choosing valid toolch
ains, and including common.mk</h3> | 91 <h3 id="choosing-valid-toolchains-and-including-common-mk">Choosing valid toolch
ains, and including common.mk</h3> |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 161 baz.cc \ | 163 baz.cc \ |
| 162 quux.cc | 164 quux.cc |
| 163 </pre> | 165 </pre> |
| 164 </section><section id="build-macros"> | 166 </section><section id="build-macros"> |
| 165 <h3 id="build-macros">Build macros</h3> | 167 <h3 id="build-macros">Build macros</h3> |
| 166 <p>For many projects, the following build macros do not need to be changed; they | 168 <p>For many projects, the following build macros do not need to be changed; they |
| 167 will use the variables we’ve defined above.</p> | 169 will use the variables we’ve defined above.</p> |
| 168 <pre class="prettyprint"> | 170 <pre class="prettyprint"> |
| 169 $(foreach src,$(SOURCES),$(eval $(call COMPILE_RULE,$(src),$(CFLAGS)))) | 171 $(foreach src,$(SOURCES),$(eval $(call COMPILE_RULE,$(src),$(CFLAGS)))) |
| 170 | 172 |
| 171 ifeq ($(CONFIG),Release) | 173 ifneq (,$(or $(findstring pnacl,$(TOOLCHAIN)),$(findstring Release,$(CONFIG)))) |
| 172 $(eval $(call LINK_RULE,$(TARGET)_unstripped,$(SOURCES),$(LIBS),$(DEPS))) | 174 $(eval $(call LINK_RULE,$(TARGET)_unstripped,$(SOURCES),$(LIBS),$(DEPS))) |
| 173 $(eval $(call STRIP_RULE,$(TARGET),$(TARGET)_unstripped)) | 175 $(eval $(call STRIP_RULE,$(TARGET),$(TARGET)_unstripped)) |
| 174 else | 176 else |
| 175 $(eval $(call LINK_RULE,$(TARGET),$(SOURCES),$(LIBS),$(DEPS))) | 177 $(eval $(call LINK_RULE,$(TARGET),$(SOURCES),$(LIBS),$(DEPS))) |
| 176 endif | 178 endif |
| 177 | 179 |
| 178 $(eval $(call NMF_RULE,$(TARGET),)) | 180 $(eval $(call NMF_RULE,$(TARGET),)) |
| 179 </pre> | 181 </pre> |
| 180 <p>The first line defines rules to compile each source in <code>SOURCES</code>,
using the | 182 <p>The first line defines rules to compile each source in <code>SOURCES</code>,
using the |
| 181 flags in <code>CFLAGS</code>:</p> | 183 flags in <code>CFLAGS</code>:</p> |
| 182 <pre class="prettyprint"> | 184 <pre class="prettyprint"> |
| 183 $(foreach src,$(SOURCES),$(eval $(call COMPILE_RULE,$(src),$(CFLAGS)))) | 185 $(foreach src,$(SOURCES),$(eval $(call COMPILE_RULE,$(src),$(CFLAGS)))) |
| 184 </pre> | 186 </pre> |
| 185 <p>The next six lines define rules to link the object files into one or more | 187 <p>The next six lines define rules to link the object files into one or more |
| 186 executables. When <code>TOOLCHAIN</code> is <code>pnacl</code>, there is only on
e executable | 188 executables. When <code>TOOLCHAIN</code> is <code>pnacl</code>, there is only on
e executable |
| 187 generated: in the example above, <code>part2.pexe</code>. When using a NaCl tool
chain, | 189 generated: in the example above, <code>part2.pexe</code>. When using a NaCl tool
chain, |
| 188 there will be three executables generated, one for each architecture: in the | 190 there will be three executables generated, one for each architecture: in the |
| 189 example above, <code>part2_arm.nexe</code>, <code>part2_x86_32.nexe</code> and | 191 example above, <code>part2_arm.nexe</code>, <code>part2_x86_32.nexe</code> and |
| 190 <code>part2_x86_64.nexe</code>.</p> | 192 <code>part2_x86_64.nexe</code>.</p> |
| 191 <p>When <code>CONFIG</code> is <code>Release</code>, each executable is also str
ipped to remove | 193 <p>When <code>CONFIG</code> is <code>Release</code>, each executable is also str
ipped to remove |
| 192 debug information and reduce the file size:</p> | 194 debug information and reduce the file size. Otherwise, when the <code>TOOLCHAIN<
/code> |
| 195 is <code>pnacl</code>, the workflow involves creating an unstripped binary for d
ebugging |
| 196 and then finalizing it and stripping it for publishing.</p> |
| 193 <pre class="prettyprint"> | 197 <pre class="prettyprint"> |
| 194 ifeq ($(CONFIG),Release) | 198 ifneq (,$(or $(findstring pnacl,$(TOOLCHAIN)),$(findstring Release,$(CONFIG)))) |
| 195 $(eval $(call LINK_RULE,$(TARGET)_unstripped,$(SOURCES),$(LIBS),$(DEPS))) | 199 $(eval $(call LINK_RULE,$(TARGET)_unstripped,$(SOURCES),$(LIBS),$(DEPS))) |
| 196 $(eval $(call STRIP_RULE,$(TARGET),$(TARGET)_unstripped)) | 200 $(eval $(call STRIP_RULE,$(TARGET),$(TARGET)_unstripped)) |
| 197 else | 201 else |
| 198 $(eval $(call LINK_RULE,$(TARGET),$(SOURCES),$(LIBS),$(DEPS))) | 202 $(eval $(call LINK_RULE,$(TARGET),$(SOURCES),$(LIBS),$(DEPS))) |
| 199 endif | 203 endif |
| 200 </pre> | 204 </pre> |
| 201 <p>Finally, the NMF rule generates a NaCl manifest file (<code>.nmf</code>) that
references | 205 <p>Finally, the NMF rule generates a NaCl manifest file (<code>.nmf</code>) that
references |
| 202 each executable generated in the previous step:</p> | 206 each executable generated in the previous step:</p> |
| 203 <pre class="prettyprint"> | 207 <pre class="prettyprint"> |
| 204 $(eval $(call NMF_RULE,$(TARGET),)) | 208 $(eval $(call NMF_RULE,$(TARGET),)) |
| (...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 430 // This function is called by common.js when a message is received from the | 434 // This function is called by common.js when a message is received from the |
| 431 // NaCl module. | 435 // NaCl module. |
| 432 function handleMessage(message) { | 436 function handleMessage(message) { |
| 433 var logEl = document.getElementById('log'); | 437 var logEl = document.getElementById('log'); |
| 434 logEl.textContent += message.data; | 438 logEl.textContent += message.data; |
| 435 } | 439 } |
| 436 </pre> | 440 </pre> |
| 437 </section></section> | 441 </section></section> |
| 438 | 442 |
| 439 {{/partials.standard_nacl_article}} | 443 {{/partials.standard_nacl_article}} |
| OLD | NEW |