1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 2<HTML LANG="en"> 3 4<HEAD> 5 <META http-equiv="Content-Type" content="text/html; charset=utf-8"> 6 <META http-equiv="Content-Style-Type" content="text/css"> 7 8<TITLE>Guide to Developing a Build System</TITLE> 9 10 <STYLE> 11 h1.left 12 { 13 color: #46f; 14 font-size: 120%; 15 } 16 ul.left, ul.left ul 17 { 18 margin: 0; 19 padding: 0; 20 } 21 ul.left 22 { 23 font-size: 0.8em; 24 } 25 ul.left li 26 { 27 margin: 0; 28 padding: 0; 29 margin-left: 1em; 30 line-height: 1.5em; 31 } 32 ul.left li a 33 { 34 margin: 0; 35 padding: 0; 36 } 37 38 H1 39 { 40 font-weight : bold; 41 font-size : 250%; 42 text-align : left; 43 color : #46f; 44 margin-bottom : 0px; 45 } 46 47 H2 48 { 49 font-weight : normal; 50 font-size : 180%; 51 margin : 24pt 0pt 6pt 0pt; 52 border-bottom-style : solid; 53 border-bottom-width : 1px; 54 } 55 56 H3 57 { 58 font-weight : bold; 59 font-size : 120%; 60 border-bottom-style : solid; 61 border-bottom-width : 1px; 62 width: 75%; 63 margin : 18pt 0pt 6pt 30pt; 64 } 65 66 H4 67 { 68 font-weight : bold; 69 font-size : 100%; 70 margin : 12pt 0pt 6pt 30pt; 71 } 72 73 H5 74 { 75 font-weight : bold; 76 margin : 12pt 0pt 6pt 30pt; 77 } 78 79 H6 80 { 81 font-weight : bold; 82 margin : 12pt 0pt 6pt 30pt; 83 } 84 85 DIV.date 86 { 87 text-align : right; 88 color : #46f; 89 margin-bottom : 30pt; 90 line-height : 150%; 91 } 92 93 P 94 { 95 margin : 0pt 0pt 12pt 30pt; 96 line-height : 150%; 97 } 98 99 OL,UL,DL 100 { 101 margin : 6pt 0pt 6pt 50pt; 102 } 103 OL OL, UL UL 104 { 105 margin-left: 3em; 106 } 107 108 DT 109 { 110 font-family : "Courier New", monospace; 111 margin-top : 0.3em; 112 margin-bottom : 0.3em; 113 } 114 DD 115 { 116 margin-top : 0.3em; 117 margin-bottom : 0.6em; 118 } 119 120 PRE 121 { 122 font-family : "Courier New", monospace; 123 font-weight : normal; 124 125 margin : 0pt 0pt 20pt 50pt; 126 padding : 2pt 8pt 2pt 8pt; 127 background-color : #eee; 128 129 border-style : solid; 130 border-width : 1px; 131 } 132 em 133 { 134 font-style: normal; 135 color: red; 136 } 137 TABLE 138 { 139 margin-left : 40pt; 140 margin-bottom : 20pt; 141 border-color : #aaa; 142 border-width : 1pt; 143 border-style : solid; 144 } 145 TD 146 { 147 font-style : normal; 148 padding : 2pt 4pt 2pt 4pt; 149 150 border-color : #aaa; 151 border-width : 1pt; 152 border-style : solid; 153 } 154 div.footer 155 { 156 border-color: black; 157 padding-top: 0.5em; 158 border-top-style : solid; 159 border-top-width : 1px; 160 width: 100%; 161 margin-top: 4em;; 162 } 163 div.footer span 164 { 165 color : #46f; 166 float: right; 167 } 168 table 169 { 170 border-collapse: collapse; 171 } 172 table td 173 { 174 } 175 table th 176 { 177 } 178 ul 179 { 180 margin-top: 1em; 181 margin-bottom: 1em; 182 } 183 DL.history 184 { 185 margin: 1em; 186 } 187 DL.history DT 188 { 189 font-family : sans-serif; 190 font-weight : bold; 191 font-size : 0.8em; 192 margin : 0px; 193 } 194 DL.history DD 195 { 196 font-size : 0.9em; 197 margin : 0px 0px 4px 0px; 198 } 199 </STYLE> 200 <SCRIPT type="text/javascript"> 201 <!-- 202 function DeleteRule(index) 203 { 204 var ss = document.styleSheets.item(0); 205 206 if( ss.removeRule ) 207 { 208 ss.removeRule(index); 209 } 210 else 211 { 212 ss.deleteRule(index); 213 } 214 } 215 function OnClickAnchor(e, anchor) 216 { 217 window.parent.frames[1].location.hash = anchor; 218 219 if( e.preventDefault ) 220 { 221 e.preventDefault(); 222 } 223 else 224 { 225 e.returnValue = false; 226 } 227 } 228 function TravLeft(obj) 229 { 230 var ary = new Array(); 231 var index = 0; 232 233 for( var i = 0; i < obj.childNodes.length; ++i ) 234 { 235 var c = obj.childNodes.item(i); 236 237 if( c.nodeType == 1 ) 238 { 239 if( c.tagName == "H2" || c.tagName == "H3" ) 240 { 241 var a = c.childNodes.item(0); 242 var text = ""; 243 244 var anchor = "name-" + index; 245 index++; 246 247 if( a && a.tagName == "A" ) 248 { 249 text = a.innerHTML; 250 } 251 else 252 { 253 text = c.innerHTML; 254 } 255 256 ary.push([c.tagName.substr(1,1), "<a target=\"right\" href=\"?right#" + anchor + "\" onclick=\"OnClickAnchor(event, '" + anchor + "')\">" + text + "</a>"]); 257 } 258 else 259 { 260 ary = ary.concat(TravLeft(c)); 261 } 262 } 263 } 264 265 return ary; 266 } 267 function TravRight(obj) 268 { 269 var index = 0; 270 271 for( var i = 0; i < obj.childNodes.length; ++i ) 272 { 273 var c = obj.childNodes.item(i); 274 275 if( c.nodeType == 1 ) 276 { 277 if( c.tagName == "H2" || c.tagName == "H3" ) 278 { 279 var anchor = "name-" + index; 280 index++; 281 282 c.innerHTML = "<a name=\"" + anchor + "\">" + c.innerHTML + "</a>" 283 } 284 else 285 { 286 TravRight(c); 287 } 288 } 289 } 290 } 291 function OnLoad_Left() 292 { 293 var test = TravLeft(document.body); 294 var test2 = ""; 295 var level = 2; 296 297 test2 += "<h1 class='left'>" + document.title + "</h1>"; 298 test2 += "<ul class='left'>"; 299 for( var i in test ) 300 { 301 while( test[i][0] > level ) 302 { 303 level++; 304 test2 += "<ul>"; 305 } 306 while( test[i][0] < level ) 307 { 308 level--; 309 test2 += "</ul>"; 310 } 311 312 test2 += "<li>" + test[i][1]; 313 } 314 test2 += "</ul>"; 315 316 document.body.innerHTML = test2; 317 DeleteRule(0); 318 } 319 function OnLoad_Right() 320 { 321 TravRight(document.body); 322 } 323 function OnLoad_Frame() 324 { 325 var myname = location.pathname.substr(location.pathname.lastIndexOf("/") + 1); 326 327 var f = document.createElement("frameset"); 328 var l = document.createElement("frame"); 329 var r = document.createElement("frame"); 330 331 f.appendChild(l); 332 f.appendChild(r); 333 f.cols = "250,*"; 334 335 l.src = myname + "?left" + location.hash; 336 r.src = myname + "?right" + location.hash; 337 l.name = "left"; 338 r.name = "right"; 339 340 var h = document.documentElement; 341 var b = h.getElementsByTagName("body").item(0); 342 343 h.replaceChild(f, b); 344 } 345 346 347 if( ! window.opera ) 348 { 349 var search = location.search; 350 351 if( search == "?left" ) 352 { 353 window.onload = OnLoad_Left; 354 } 355 else if( search == "" ) 356 { 357 window.onload = OnLoad_Frame; 358 } 359 else if( search == "?right" ) 360 { 361 window.onload = OnLoad_Right; 362 } 363 364 if( search != "?right" ) 365 { 366 var ss = document.styleSheets.item(0); 367 368 if( ss.addRule ) 369 { 370 ss.addRule("body", "display: none", 0); 371 } 372 else 373 { 374 ss.insertRule("body {display: none}", 0); 375 } 376 } 377 } 378 //--> 379 </SCRIPT> 380</HEAD> 381 382<BODY> 383 384 385 386 387 388<H1>Guide to Developing a Build System</H1> 389<DIV class="date">(2012/05/25)</DIV> 390 391 392 393 394 395<H2>Introduction</H2> 396 397<H3>About This Document</H3> 398<P> 399This document is for those who wish to develop their own build systems, rather than the one that the SDK provides. It provides information necessary for building CTR applications. 400</P> 401<ul> 402<li>Application Build Sequence 403<li>Procedures for Creating Each File 404<li>Restrictions on Compiler and Linker Options 405<li>Macros Required by SDK 406<li>Libraries Provided by SDK 407<li>RSF and DESC Files Provided by SDK 408</ul> 409 410<P> 411See <a href="../../SDKRules/BuildRules.html">Build System</a> for information about the structure and usage of the build system provided by the SDK. 412</P> 413<P> 414This document assumes basic knowledge of CTR-SDK terminology. See <a href="../Glossary/Glossary.html">CTR-SDK Terminology</a> for a glossary of basic CTR-SDK terms. 415</P> 416 417<H3>Notation Used in This Document</H3> 418<P> 419This document sometimes puts content in colored boxes like the one below to indicate that it is a command sequence to be entered on the command line. 420</P> 421<pre> 422command option1 option2 423</pre> 424 425<P> 426With respect to command syntax, do not enter text enclosed in angle brackets ("<" and ">") verbatim. Instead, substitute an appropriate entry for the placeholder description. For example, the string <code><CTRSDK_ROOT></code> indicates that you must enter the CTR-SDK installation path. 427</P> 428<P> 429Text in the command sequence enclosed by square brackets ("[" and "]") is optional. 430</P> 431<pre> 432makecia -i <CXI_FILE> -o <OUTPUT_FILE> [-man <E_MANUAL_CFA_FILE>] 433</pre> 434<P> 435Elements in the command sequence preceding ellipses (...) can be repeated any number of times. 436</P> 437<pre> 438armar --create <OUTPUT_FILE> <INPUT_FILE>... 439</pre> 440<P> 441In this document, the names of Windows tools contained in the <CODE>tools/CommandLineTools</CODE> directory are abbreviated by omitting the leading <CODE>ctr_</CODE> and the ending file extension. For example, the abbreviation for <CODE>ctr_makerom32.exe</CODE> is <CODE>makerom</CODE>. 442</P> 443 444 445<H2>Build Sequence</H2> 446 447<H3>Overall Sequence</H3> 448<p> 449The following figure illustrates the overall build sequence, from the source files and other resources up to the creation of a ROM image (CCI and CIA files). <br> <br> <a href="img/flow.png"><img src="img/flow.png" width="536" height="581"></a> <br> 450</p> 451 452 453<H3>Creating Object Files</H3> 454<p> 455Use <CODE>armcc</CODE> to compile C/C++ source files. <CODE>armcc</CODE> converts source files into object files.<br> <br> <img src="img/flow_o.png"> <br> See the RVCT and RMCC documentation for instructions on using <CODE>armcc</CODE>. See <a href="#rvct_options">Restrictions on Compiler and Linker Options</a> for restrictions on <CODE>armcc</CODE> options used with CTR-SDK. See <a href="#macro">Macros Required by SDK</a> for the macro definitions that the SDK requires. For more information about the options that are required in order to use the SDK libraries, see <a href="#sdk_lib">Libraries Provided by SDK</a>. 456</p> 457<p> 458This section describes the basic use of <CODE>armcc</CODE> with the CTR-SDK. (Although the command below is separated into multiple lines for ease of viewing, an actual command cannot contain newline characters.) 459</p> 460 461<pre> 462armcc 463 -c 464 --apcs=/interwork 465 --cpu=MPCore 466 --fpmode=fast 467 --signed_chars 468 --cpp 469 --force_new_nothrow 470 --no_exceptions 471 --no_rtti 472 -DNN_COMPILER_OPTION_ARM 473 -DNN_COMPILER_RVCT 474 -DNN_COMPILER_RVCT_VERSION_MAJOR=4 475 -DNN_DEBUGGER_KMC_PARTNER 476 -DNN_EFFORT_FAST 477 -DNN_HARDWARE_CTR 478 -DNN_HARDWARE_CTR_TS 479 -DNN_PLATFORM_CTR 480 -DNN_PROCESSOR_ARM 481 -DNN_PROCESSOR_ARM11MPCORE 482 -DNN_PROCESSOR_ARM_V6 483 -DNN_PROCESSOR_ARM_VFP_V2 484 -DNN_SWITCH_DISABLE_ASSERT_WARNING=1 485 -DNN_SWITCH_DISABLE_ASSERT_WARNING_FOR_SDK=1 486 -DNN_SWITCH_DISABLE_DEBUG_PRINT=1 487 -DNN_SWITCH_DISABLE_DEBUG_PRINT_FOR_SDK=1 488 -DNN_SYSTEM_PROCESS 489 -I<CTRSDK_ROOT>/include 490 -o <Output file> 491 <Source file> 492</pre> 493<p> 494The command compiles <CODE>SOURCE_FILE</CODE> and outputs the results to <CODE>OUTPUT_FILE</CODE>. 495</p> 496 497 498<H3>Creating Static Libraries</H3> 499<p> 500You can combine multiple object files and static libraries into a single static library. Use <CODE>armar</CODE> to create a static library. 501 502 <br> <br> <img src="img/flow_a.png"> <br> <br> 503 504Use <CODE>armar</CODE> as follows: 505</p> 506 507<pre> 508armar --create <OUTPUT_FILE> <INPUT_FILE>... 509</pre> 510 511<p> 512The command combines the files specified by <CODE>INPUT_FILE</CODE> and creates <CODE>OUTPUT_FILE</CODE>. 513</p> 514 515 516<H3>Creating Banners and Icons</H3> 517<p> 518Each application must have a banner and icon, which are used on the HOME Menu. Use <a href="../../tools/ctr_makebanner.html"><CODE>makebanner</CODE></a> to create the banner and icon.<br> <br> <br> <img src="img/flow_bnr.png"> <br> <br> Use <CODE><a href="../../tools/ctr_makebanner.html"><CODE>makebanner</CODE></a></CODE> as follows. You must specify the options in this order, because the options are parsed based on their order on the command line. 519</p> 520 521<pre> 522makebanner <BSF_FILE> <BANNER_FILE> <ICON_FILE> 523</pre> 524 525<p> 526The command takes the information stored in each file and creates <CODE>BANNER_FILE</CODE> and <CODE>ICON_FILE</CODE> based on the instructions in <CODE>BSF_FILE</CODE>. 527</p> 528<p> 529The SDK includes a default banner and icon that you can use during development. The default banner and icon are shown below: 530</p> 531 532<pre> 533<CTRSDK_ROOT>/resources/banner/Default.bnr 534<CTRSDK_ROOT>/resources/banner/Default.icn 535</pre> 536 537<p> 538 539</p> 540 541 542<H3>Creating AXF Files</H3> 543<p> 544<CODE>armlink</CODE> combines the object files generated by the compiler and the static libraries that combine them into an AXF file.<br> <br> <img src="img/flow_axf.png"> <br> See the RVCT and RMCC documentation for instructions on using <CODE>armlink</CODE>. See <a href="#rvct_options">Restrictions on Compiler and Linker Options</a> for information about the restrictions on <CODE>armlink</CODE> options with CTR-SDK. For more information about the options that are required in order to use the SDK libraries, see <a href="#sdk_lib">Libraries Provided by SDK</a>. 545</p> 546<p> 547This section describes the basic use of <CODE>armlink</CODE> with CTR-SDK. (Although the command below is separated into multiple lines for ease of viewing, an actual command cannot contain newline characters.) 548</p> 549 550<pre> 551armlink 552 --datacompressor off 553 --keep=nnMain 554 --scatter=<CTRSDK_ROOT>/resources/specfiles/linker/CTR.Process.MPCore.ldscript 555 -o <Output file> 556 <Input file>... 557</pre> 558<p> 559The command combines files specified by <CODE>INPUT_FILE</CODE> and outputs the results to <CODE>OUTPUT_FILE</CODE>. 560</p> 561 562 563<H3>Creating CFA Files</H3> 564<p> 565A CFA file is an archive that converts a directory structure containing multiple files into a single file. It is mainly used to store download-play child program and e-manuals. 566</p> 567 568<p> 569 <br> <img src="img/flow_cfa.png"> <br> 570</p> 571 572<p> 573There are two ways to create a CFA file: (1) use <CODE>makeciaarchive</CODE> to store download-play child programs, and (2) use <CODE>makerom</CODE> to store e-manuals. 574</p> 575 576<a name="makeciaarchive"></a> 577<H4> Creating a CFA File Using <CODE>makeciaarchive</CODE></H4> 578 579<p> 580<CODE>makeciaarchive</CODE> is a tool for creating a CFA file from multiple CIA files. It is used to create CFA files storing download-play programs. 581 582<p> 583Use <CODE><a href="../../tools/ctr_makeciaarchive.html">makeciaarchive</a></CODE> as follows: 584</p> 585 586<pre> 587makeciaarchive -cia <INPUT_FILE>... -o <OUTPUT_FILE> 588</pre> 589 590<p> 591Specify the CIA files with <CODE>INPUT_FILE</CODE>. The tool combines the CIA files and outputs them to <CODE>OUTPUT_FILE</CODE> in CFA format. 592</p> 593 594<p> 595You can use the <code>-cia</code> option multiple times. You can create a CFA file storing multiple CIA files by specifying <CODE>INPUT_FILE</CODE> multiple times. 596</p> 597 598<H4> Creating a CFA File Using makerom</H4> 599 600<p> 601Create a CFA file using <a href="../../tools/ctr_makerom.html"><CODE>makerom</CODE></a> by specifying the <code>-data</code> option. 602</p> 603 604<p> 605Create a CFA file using <a href="../../tools/ctr_makerom.html"><CODE>makerom</CODE></a> as follows. (Although the command below is separated into multiple lines for ease of viewing, an actual command cannot contain newline characters.) 606</p> 607 608<pre> 609makerom -f data 610 -rsf <rsf file> 611 -o <Output file> 612</pre> 613 614<p> 615The tool creates <CODE>OUTPUT_FILE</CODE> as a CFA file that contains the content specified by <CODE>RSF_FILE</CODE>. 616</p> 617 618 619 620 621<H3>Creating CXI Files</H3> 622<p> 623You must create a CXI file as part of the process of creating an import application. Use <CODE>makerom</CODE> to create a CXI file.<br> <br> <img src="img/flow_cxi.png"> <br> Create a CXI file using <a href="../../tools/ctr_makerom.html"><CODE>makerom</CODE></a> as follows. (Although the command below is separated into multiple lines for ease of viewing, an actual command cannot contain newline characters.) 624</p> 625 626<pre> 627makerom -f exec 628 <axf file> 629 -rsf <rsf file> 630 -desc <CTRSDK_ROOT>/resources/specfiles/Application.desc 631 -banner <banner file> 632 -icon <icon file> 633 -o <Output file> 634</pre> 635 636<p> 637The tool creates <CODE>OUTPUT_FILE</CODE> as a CXI file, storing the content in <CODE>AXF_FILE</CODE>, <CODE>BANNER_FILE</CODE>, and <CODE>ICON_FILE</CODE> in accordance with the settings in <CODE>RSF_FILE</CODE>. If <code>HostRoot</code> is specified in <CODE>RSF_FILE</CODE>, then the files below the directory specified as <CODE>ROM-FS</CODE> are stored in <CODE>OUTPUT_FILE</CODE>. 638</p> 639 640 641<a name="cci"></a> 642<H3>Creating CCI Files</H3> 643<p> 644When you create a Card application, the final step is creating a CCI file. Use <CODE>makerom</CODE> to create a CCI file.<br> <br> <img src="img/flow_cci.png"> <br> Create a CCI file using <a href="../../tools/ctr_makerom.html"><CODE>makerom</CODE></a> as follows. (Although the command below is separated into multiple lines for ease of viewing, an actual command cannot contain newline characters.) 645</p> 646 647<pre> 648makerom -f card 649 <axf file> 650 -rsf <rsf file> 651 -desc <CTRSDK_ROOT>/resources/specfiles/Application.desc 652 -banner <banner file> 653 -icon <icon file> 654 [-content <e-manual cfa file>:1] 655 [-content <download play cfa file>:2] 656 -o <Output file> 657</pre> 658 659<p> 660This command creates <CODE>OUTPUT_FILE</CODE> as a CCI file, storing <CODE>AXF_FILE</CODE>, <CODE>BANNER_FILE</CODE>, <CODE>ICON_FILE</CODE>, <CODE>E_MANUAL_CFA_FILE</CODE> (the CFA file storing the e-manual), and <CODE>DOWNLOAD_PLAY_CFA_FILE</CODE> (the CFA file storing the download play child program) in accordance with the settings in <CODE>RSF_FILE</CODE>. If <code>HostRoot</code> is specified in <CODE>RSF_FILE</CODE>, then the files below the directory specified as <CODE>ROM-FS</CODE> are stored in <CODE>OUTPUT_FILE</CODE>. <CODE>E_MANUAL_CFA_FILE</CODE> and <CODE>DOWNLOAD_PLAY_CFA_FILE</CODE> are optional; only specify them when needed. Specify <CODE>1</CODE> for the content index of a CFA file storing an e-manual. Specify <CODE>2</CODE> for the content index of a CFA file storing a download-play child program. You must not specify any other indexes. 661</p> 662 663<a name="cia"></a> 664<H3>Creating CIA Files</H3> 665<p> 666When you create an import application, the final step is creating a CIA file. Use <CODE>makecia</CODE> to create a CIA file.<br> <br> <img src="img/flow_cia.png"> <br> Create a CIA file using <a href="../../tools/ctr_makecia.html"><CODE>makecia</CODE></a> as follows: 667</p> 668 669<pre> 670makecia -i <CXI_FILE> -o <OUTPUT_FILE> [-man <E_MANUAL_CFA_FILE>] 671</pre> 672 673<p> 674This command creates <CODE>OUTPUT_FILE</CODE> as a CIA file storing <CODE>CXI_FILE</CODE> and <CODE>E_MANUAL_CFA_FILE</CODE>. <CODE>E_MANUAL_CFA_FILE</CODE> is optional; only specify it when needed. 675</p> 676 677 678<H3>Creating CCL Files</H3> 679<p> 680A CCL file is a modified version of the CCI format. It requires three files: the CCL file itself, and the LR file (<CODE>.r.bin</CODE>) and LE file (<CODE>.e.bin</CODE>) that it references. Create these three files using <CODE>makerom</CODE>.<br> <br> <img src="img/flow_ccl.png"> <br> Create the LR file using <a href="../../tools/ctr_makerom.html"><CODE>makerom</CODE></a> as follows. 681</p> 682 683<pre> 684makerom -f lr -rsf <RSF_FILE> -o <OUTPUT_FILE> 685</pre> 686<p> 687This command creates <CODE>OUTPUT_FILE</CODE> as an LR file in accordance with the settings in <CODE>RSF_FILE</CODE>. If <code>HostRoot</code> is specified in <CODE>RSF_FILE</CODE>, then the files below the directory specified as <CODE>ROM-FS</CODE> are stored in <CODE>OUTPUT_FILE</CODE>. 688</p> 689<p> 690Create the LE file using <a href="../../tools/ctr_makerom.html"><CODE>makerom</CODE></a> as follows. (Although the command below is separated into multiple lines for ease of viewing, an actual command cannot contain newline characters.) 691</p> 692 693<pre> 694makerom -f le 695 <axf file> 696 -rsf <rsf file> 697 -desc <CTRSDK_ROOT>/resources/specfiles/Application.desc 698 -banner <banner file> 699 -icon <icon file> 700 -lr <LR format file> 701 -m 0x01000000 702 -o <Output file> 703</pre> 704 705<p> 706The tool creates <CODE>OUTPUT_FILE</CODE> as an LE file storing the content in <CODE>AXF_FILE</CODE>, <CODE>BANNER_FILE</CODE>, and <CODE>ICON_FILE</CODE> in accordance with the settings in <CODE>RSF_FILE</CODE> and <CODE>LR_FILE</CODE>. 707</p> 708<p> 709Create the CCL file using <a href="../../tools/ctr_makerom.html"><CODE>makerom</CODE></a> as follows. 710</p> 711 712<pre> 713makerom -f list -le <LE_FILE> -lr <LR_FILE> -o <OUTPUT_FILE> 714</pre> 715 716<p> 717This command creates <CODE>OUTPUT_FILE</CODE> as a CCL file, corresponding to <CODE>LE_FILE</CODE> and <CODE>LR_FILE</CODE>. 718</p> 719 720<H2> Builds for Special Uses </H2> 721 722<H3> Creating a Download Play Child Program CIA File </H3> 723 724<p>A Download Play child program is a type of imported application. For this reason, when you create a Download Play child program you create a CIA file. When creating Download Play child programs, refer to <a href="#cia">Creating CIA Files</a> and the <I>Programming Manual: Application Creation Procedures</I>.</p> 725 726<p>When building, take care with unique IDs and child device indexes.</p> 727 728<p> 729All stored download play child programs must have the same unique ID as the download play parent program. 730</p> 731 732<p> 733If you want to store more than one Download Play child program in the CIA file, you must specify them so that no child indexes overlap. 734</p> 735 736<p> 737Specify the unique ID using the <CODE>UniqueId</CODE> parameter in the RSF file. Specify the child-program index using the <CODE>ChildIndex</CODE> parameter in the RSF file. For details on RSF files, see <a href="../../tools/ctr_makerom.html"><CODE>makerom</CODE></a>. 738 739Use the described RSF file configurations to create a CXI file for a download play child program. 740</p> 741 742<H3> Creating a CFA File That Contains a Download Play Child Program </H3> 743 744<p> 745In order to create an application that supports download play, you must include a CFA file containing a download play child program in your CCI file . 746</p> 747 748<p> 749See <a href="#cci">Creating CCI Files</a> for instructions on creating a CCI file with a CFA file that contains a download play child program. 750</p> 751 752<p> 753Use <a href="../../tools/ctr_makeciaarchive.html"><CODE>makeciaarchive</CODE></a> to create a CFA file that contains a download play child program. See <a href="#makeciaarchive">Creating CFA Files Using <CODE>makeciaarchive</CODE></a> for instructions on creating a CFA file that contains a download play child program. 754</p> 755 756<p> 757You can specify an RSF file to <a href="../../tools/ctr_makeciaarchive.html"><CODE>makeciaarchive</CODE></a> using the <code>-rsf</code> option. If you want to create a CFA file that contains a download play child program, only specify <code><CTRSDK_ROOT>/resources/specfiles/Child.rsf</code> as your RSF file. You must not use any other RSF file. 758</p> 759 760<H3> Creating a CFA File That Contains an E-manual </H3> 761<p> 762A CFA file that contains an e-manual is an archive with a BCMA file created using <CODE>CTR-ManualTools</CODE>. See the <CODE>CTR-ManualTools</CODE> documentation for information about BCMA files and how to create them. 763</p> 764 765<p> 766Use <a href="../../tools/ctr_makerom.html"><CODE>makerom</CODE></a> to create a CFA file that contains an e-manual. Create a CFA file that contains an e-manual using <a href="../../tools/ctr_makerom.html"><CODE>makerom</CODE></a> as follows. (Although the command below is separated into multiple lines for ease of viewing, an actual command cannot contain newline characters.) 767</p> 768 769<pre> 770makerom -f data 771 -rsf <CTRSDK_ROOT>/resources/specfiles/Manual.rsf 772 -DROMFS_ROOT=<manual directory> 773 -o <Output file> 774</pre> 775 776<p> 777This command creates <CODE>OUTPUT_FILE</CODE> as a CFA file storing the e-manual in <CODE>MANUAL_DIRECTORY</CODE>. 778</p> 779 780<p> 781Put the BCMA file <code>Manual.bcma</code> in <CODE>MANUAL_DIRECTORY</CODE>. You must not place any other files in this directory. You also must not use a BCMA file with a different name. 782</p> 783 784 785<p> 786Specify only the RSF file in <code><CTRSDK_ROOT>/resources/specfiles/Manual.rsf </code> using the <code>-rsf</code> option. You must not use any other RSF file. 787</p> 788 789<a name="rvct_options"></a> 790<H2>Compiler and Linker Options</H2> 791 792<H3>RVCT and ARMCC</H3> 793<p> 794CTR-SDK uses RVCT and ARMCC as its compiler and linker. The only difference between RVCT and ARMCC is their versions; they are from the same series of compilers/linkers. This documentation makes no distinction between RVCT and ARMCC and simply calls them <I>compiler</I> and <I>linker</I>. 795</p> 796 797<H3>Options</H3> 798<p> 799The compiler and linker have large numbers of command-line options, and the generated code will depend on the options that are specified. 800</p> 801<p> 802CTR-SDK assumes that some options will or will not be used, and the created program may fail to behave correctly if these assumptions are not met. The compiler or linker may report an error if certain options are specified and prevent the program from being created. Even if the tools succeed in creating an AXF file, the SDK tools may subsequently report an error. 803</p> 804<p> 805Make sure to follow the option availability below when using the compiler and linker. 806</p> 807 808 809<H3>Compiler Options</H3> 810<p> 811Below are lists of allowed and prohibited compiler options. 812</p> 813 814<h4>Required</h4> 815<p> 816The following options are required. These options must be specified every time you use this tool. 817</p> 818<pre> 819--apcs=/interwork 820--c99 (when compiling C source) 821--cpu=MPCore 822--fpmode=fast 823--signed_chars 824</pre> 825 826<h4>Different Specifications Prohibited</h4> 827<p> 828You must use the defaults for the following options. Specify these options by using the default values. Do not specify any other values. 829</p> 830<pre> 831--library_interface=rvct 832--library_type=standardlib 833--littleend 834--wchar16 835--wchar 836</pre> 837 838<h4>Recommended</h4> 839<p> 840Although these options are not mandatory, Nintendo recommends their use. 841</p> 842<pre> 843--debug 844--debug_info=line_inlining_extensions 845--no_debug_macros 846--remove_unneeded_entities 847--split_sections 848</pre> 849 850<h4>Optional</h4> 851<p> 852The following options are optional. 853</p> 854<pre> 855--allow_null_this 856--arm 857--asm 858--asm_dir 859--autoinline 860--brief_diagnostics 861--bss_threshold 862--code_gen 863--compile_all_input 864--cpp 865--create_pch 866--data_reorder 867--debug_info 868--debug_macros 869--default_extension 870--depend 871--depend_dir 872--depend_format 873--depend_system_headers 874--depend_target 875--diag_error 876--diag_remark 877--diag_style 878--diag_suppress 879--diag_warning 880--dollar 881--dwarf2 882--dwarf3 883--emit_frame_directives 884--errors 885--exceptions 886--exceptions_unwind 887--feedback 888--force_new_nothrow 889--gnu 890--help 891--ignore_missing_headers 892--implicit_include 893--info=totals 894--inline 895--instrument_inline 896--interleave 897--intermediate_object_files 898--link_all_input 899--list 900--list_dir 901--list_macros 902--locale 903--long_long 904--loose_implicit_cast 905--md 906--message_locale 907--mm 908--multibyte_chars 909--multifile 910--output_dir 911--pch 912--pch_dir 913--pch_messages 914--pch_verbose 915--phony_targets 916--preinclude 917--preprocessed 918--reassociate_saturation 919--reduce_paths 920--restrict 921--retain 922--rtti 923--rtti_data 924--show_cmdline 925--sys_include 926--thumb 927--use_pch 928--version_number 929--vfe 930--via 931--vla 932--vsn 933--whole_program 934--wrap_diagonostics 935-A 936-C 937-E 938-I 939-L 940-M 941-O 942-Ospace 943-Otime 944-P 945-S 946-U 947-W 948-c 949-g 950-o 951</pre> 952 953<h4>Use Is Prohibited</h4> 954<p> 955The following options are prohibited. You must not use them. 956</p> 957<pre> 958--alternative_tokens 959--anachronisms 960--arm_linux 961--arm_linux_config_file 962--arm_linux_configure 963--arm_linux_paths 964--arm_only 965--bigend 966--bitband 967--c90 968--compatible 969--configure_cpp_headers 970--configure_extra_includes 971--configure_extra_libraries 972--configure_gas 973--configure_gcc 974--configure_gcc_version 975--configure_gld 976--configure_sysroot 977--default_definition_visibility 978--dep_name 979--device 980--dllexport_all 981--dllimport_runtime 982--enum_is_int 983--execstack 984--export_all_vtbl 985--export_defs_implicity 986--extended_initializers 987--forceinline 988--fp16_format 989--fpu 990--friend_injection 991--global_reg 992--gnu_defaults 993--gnu_version 994--guiding_decls 995--hide_all 996--implicit_include_searches 997--implicit_key_function 998--implicit_typename 999--import_all_vtbl 1000--interface_enums_are_32_bit 1001--kandr_include 1002--licretry 1003--lower_ropi 1004--lower_rwpi 1005--ltcg 1006--min_array_alignment 1007--multiply_latency 1008--nonstd_qualifier_deduction 1009--nonstd_qualifier_deduction 1010--old_specializations 1011--old_style_preprocessing 1012--parse_templates 1013--pending_instanciations 1014--pointer_alignment 1015--profile 1016--project 1017--reinitialize_workdir 1018--relaxed_ref_def 1019--shared 1020--signed_bitfields 1021--split_ldm 1022--strict 1023--strict_warnings 1024--translate_g++ 1025--translate_gcc 1026--translate_gld 1027--trigraphs 1028--type_traits_helpers 1029--use_gas 1030--using_std 1031--vectorize 1032--visibility_inlines_hidden 1033--wchar32 1034--workdir 1035-J 1036-Warmcc,[option] 1037</pre> 1038 1039 1040<H3>Linker Options</H3> 1041 1042<p> 1043Below are lists of allowed and prohibited linker options. 1044</p> 1045 1046<h4>Required</h4> 1047<p> 1048The following options are required. These options must be specified every time you use this tool. 1049</p> 1050<pre> 1051--datacompressor=off 1052--keep=nnMain 1053--scatter=<CTRSDK_ROOT>/resources/specfiles/linker/CTR.Process.MPCore.ldscript 1054</pre> 1055 1056<h4>Different Specifications Prohibited</h4> 1057<p> 1058You must use the defaults for the following options. Specify these options by using the default values. Do not specify any other values. 1059</p> 1060<pre> 1061--be8 1062--cpu=MPCore 1063--entry=__ctr_start 1064--legacyalign 1065--library_type=standardlib 1066--ref_cpp_init 1067--scanlib 1068--startup=__ctr_start 1069</pre> 1070 1071<h4>Recommended</h4> 1072<p> 1073Although these options are not mandatory, Nintendo recommends their use. 1074</p> 1075<pre> 1076--largeregions 1077--no_eager_load_debug 1078--strict 1079</pre> 1080 1081<h4>Optional</h4> 1082<p> 1083The following options are optional. 1084</p> 1085<pre> 1086--bestdebug 1087--branchnop 1088--callgraph 1089--callgraph_file 1090--callgraph_output 1091--cgfile 1092--cgsymbol 1093--cgundefined 1094--comment_section 1095--compress_debug 1096--crosser_veneershare 1097--diag_error 1098--diag_remark 1099--diag_style 1100--diag_suppress 1101--diag_warning 1102--eager_load_debug 1103--errors 1104--exceptions 1105--exceptions_table 1106--feedback 1107--feedback_image 1108--feedback_type 1109--filtercomment 1110--help 1111--info 1112--info_lib_prefix 1113--inline 1114--inlineveneer 1115--libpath 1116--list 1117--list_mapping_symbols 1118--mangled 1119--map 1120--max_veneer_passes 1121--merge 1122--merge_partial_comdat 1123--output 1124--pad 1125--partial 1126--privacy 1127--reduce_paths 1128--remarks 1129--remove 1130--section_index_display 1131--show_cmdline 1132--show_full_path 1133--show_parent_lib 1134--show_sec_index 1135--sort 1136--strict 1137--strict_enum_size 1138--strict_wchar_sizse 1139--symbols 1140--symdefs 1141--tailreorder 1142--tiebreaker 1143--userlibpath 1144--veneer_inject_type 1145--veneershare 1146--verbose 1147--version_number 1148--vfemode 1149--via 1150--vsn 1151--xref 1152--xrefdbg 1153--xref{from|to} 1154</pre> 1155 1156<h4>Use Is Prohibited</h4> 1157<p> 1158The following options are prohibited. You must not use this attribute. 1159</p> 1160<pre> 1161--add_needed 1162--add_shared_references 1163--any_placement 1164--any_sort_order 1165--arm_linux 1166--arm_only 1167--as_needed 1168--autoat 1169--base_platform 1170--be32 1171--bpabi 1172--combreloc 1173--cppinit 1174--device 1175--dll 1176--dynamic_debug 1177--dynamiclinker 1178--edit 1179--emit_debug_overlay_relocs 1180--emit_debug_overlay_section 1181--emit_non_debug_relocs 1182--emit_relocs 1183--execstack 1184--export_all 1185--export_dynamic 1186--fini 1187--first 1188--force_explicit_attr 1189--force_so_throw 1190--fpic 1191--fpu 1192--gnu_linker_defined_syms 1193--implicit_branchpatch 1194--import_unresolved 1195--init 1196--keep_protected_symbols 1197--last 1198--ldpartial 1199--library 1200--licretry 1201--linker_script 1202--linux_abitag 1203--locals 1204--ltcg 1205--match 1206--max_visibility 1207--muldefweak 1208--override_visibility 1209--paged 1210--pagesize 1211--pivenner 1212--pltgot 1213--pltgot_opts 1214--predefine 1215--prelink_support 1216--profile 1217--project 1218--reinitialize_workdir 1219--reloc 1220--ro_base 1221--ropi 1222--rosplit 1223--runpath 1224--rw_base 1225--rwpi 1226--search_dynamic_libraries 1227--shared 1228--soname 1229--split 1230--strict_ph 1231--strict_relocations 1232--symbolic 1233--symver_script 1234--symver_soname 1235--sysv 1236--undefined 1237--undefined_and_export 1238--unresolved 1239--use_definition_visibility 1240--use_sysv_default_script 1241--workdir 1242--zi_base 1243</pre> 1244 1245 1246<a name="macro"></a> 1247<H2>Macros Required by SDK</H2> 1248 1249<p> 1250CTR-SDK uses C/C++ macros to enable or disable a number of features. Accordingly, you must provide the appropriate macro definitions as compiler options. 1251</p> 1252 1253<H3>Required Macros</H3> 1254<P> 1255The macros below must always be set for CTR. You must therefore define them for all CTR projects. 1256</P> 1257<pre> 1258NN_COMPILER_OPTION_ARM 1259NN_COMPILER_RVCT 1260NN_DEBUGGER_KMC_PARTNER 1261NN_HARDWARE_CTR 1262NN_HARDWARE_CTR_TS 1263NN_PLATFORM_CTR 1264NN_PROCESSOR_ARM 1265NN_PROCESSOR_ARM11MPCORE 1266NN_PROCESSOR_ARM_V6 1267NN_PROCESSOR_ARM_VFP_V2 1268NN_SYSTEM_PROCESS 1269</pre> 1270 1271<H3>Selection Macros</H3> 1272<P> 1273You must change your macro specifications based on the following selections. 1274</P> 1275 1276<H4><CODE>RVCT/ARMCC Version</CODE></H4> 1277<pre> 1278NN_COMPILER_RVCT_VERSION_MAJOR=4 1279</pre> 1280<P> 1281You must specify an appropriate value in accordance with your RVCT/ARMCC version. If you are using RVCT version 4.0, set <CODE>NN_COMPILER_RVCT_VERSION_MAJOR</CODE> to <CODE>4</CODE>, as shown above. Even if you are using ARMCC, the name of the macro does not change. 1282</P> 1283 1284<H4>Optimization Type</H4> 1285<pre> 1286NN_EFFORT_FAST 1287NN_EFFORT_SMALL 1288</pre> 1289<P> 1290Specify whether to favor speed or size when optimizing. Define <CODE>NN_EFFORT_FAST</CODE> for <CODE>-Otime</CODE> and <CODE>NN_EFFORT_SMALL</CODE> for <CODE>-Ospace</CODE>. You must define one of these. 1291</P> 1292 1293<H4>Library Selection</H4> 1294<pre> 1295NN_BUILD_VERBOSE 1296NN_SWITCH_DISABLE_DEBUG_PRINT_FOR_SDK 1297NN_SWITCH_DISABLE_ASSERT_WARNING_FOR_SDK 1298</pre> 1299<P> 1300The SDK provides a <CODE>verbose</CODE> and <CODE>release</CODE> version of the static libraries. You must change your macro definitions based on which of these you use. 1301</P> 1302<P> 1303To use the <CODE>verbose</CODE> version, you must define <CODE>NN_BUILD_VERBOSE</CODE>. To use the <CODE>release</CODE> version, you must define <CODE>NN_SWITCH_DISABLE_DEBUG_PRINT_FOR_SDK</CODE> and <CODE>NN_SWITCH_DISABLE_ASSERT_WARNING_FOR_SDK</CODE>. 1304</P> 1305<P> 1306Your application may fail to link or run properly if there are inconsistencies between the macro definitions that you specify via compiler options and the static libraries you link to. 1307</P> 1308 1309<H3>Optional Macros</H3> 1310<P> 1311To use the SDK, the following macros are not required. You can use them as needed for application development. 1312</P> 1313 1314<H4>Enabling and Disabling <CODE>ASSERT</CODE> and <CODE>WARNING</CODE></H4> 1315<pre> 1316NN_SWITCH_DISABLE_ASSERT_WARNING 1317</pre> 1318<P> 1319Defining <code>NN_SWITCH_DISABLE_ASSERT_WARNING</code> replaces <CODE>ASSERT</CODE> and <CODE>WARNING</CODE> functions with no-ops. This lets you disable <CODE>ASSERT</CODE> and <CODE>WARNING</CODE> statements without changing the source code. 1320</P> 1321 1322<H4>Enabling and Disabling Debug Output</H4> 1323<pre> 1324NN_SWITCH_DISABLE_DEBUG_PRINT 1325</pre> 1326<P> 1327Defining <code>NN_SWITCH_DISABLE_DEBUG_PRINT</code> replaces <code>NN_LOG</code>, <code>NN_LOGV</code>, and <code>NN_PUT</code> with no-ops. This lets you disable debug output without changing the source code. 1328</P> 1329<P> 1330All debug output must be disabled in the final ROM image. 1331</P> 1332 1333 1334<a name="sdk_lib"></a> 1335<H2>SDK Libraries</H2> 1336<p> 1337The libraries provided by the SDK consist of C/C++ header files and static library files. 1338</p> 1339 1340<a name="include"></a> 1341<H3>Using Header Files</H3> 1342<p> 1343The C/C++ header files are located in <code>CTR_SDK/include</code>. You must specify <code>CTR_SDK/include</code> as an include to your compiler so that you can include these header files from your application's source files. 1344</p> 1345<pre> 1346armcc -I<CTRSDK_ROOT>/include ... (omitted) ... 1347</pre> 1348 1349<H3>Static Library Types</H3> 1350 1351<p> 1352The static libraries are in the <code>CTR_SDK/libraries/CTR-TS.Process.MPCore</code> directory. There are a total of four library types, formed by combination of two binary choices (development or release, and optimization for speed or size; 2 x 2 = 4).<br> The development libraries are in the <code>verbose</code> directory and the release libraries are in the <code>release</code> directory. Within those directories, the library optimized for speed is in the <code>.fast.</code> directory and the library optimized for size is in the <code>.small.</code> directory. 1353</p> 1354<pre> 1355verbose/*.fast.a For development, optimized for speed 1356verbose/*.small.a For development, optimized for size 1357release/*.fast.a For release, optimized for speed 1358release/*.small.a For release, optimized for size 1359</pre> 1360<p> 1361When you use a library, you must choose which of the four library types to use. Although you can mix the speed and size-optimized types in a single program, you cannot mix development and release libraries in this way. 1362</p> 1363 1364<H3>Development and Release Versions</H3> 1365 1366<p> 1367The development libraries differ from the release libraries in the following ways to facilitate development and debugging: 1368</p> 1369<ul> 1370<li>Assertions and warnings in the libraries are enabled. 1371<li>Debugging code in the libraries is enabled. 1372<li>Some of the API functions produce debugging output. 1373</ul> 1374<p> 1375Ordinarily, you should use the development libraries while you are developing your application. Your final ROM image must link to the release libraries. 1376</p> 1377 1378<H3>Using Static Libraries</H3> 1379 1380<p> 1381To make a library provided by the SDK available to your application, you must specify the appropriate static library as one of the input files of the linker. 1382</p> 1383<pre> 1384armlink <CTRSDK_ROOT>\libraries\CTR-TS.Process.MPCore\release\libnn_os.fast.a ... (omitted) ... 1385</pre> 1386<p> 1387The libraries have interdependencies, so providing only a portion of the static libraries as input to the linker may cause an error. Even if linking is successful, the program may fail to run correctly. You must therefore specify all libraries to the linker, with the exception of the development-only libraries and optional libraries described below. 1388</p> 1389 1390<H3>Development-Only Libraries</H3> 1391<p> 1392Some of the libraries provided by the SDK are specialized for development. Specifically, the functions in the following namespaces are for development only: <code>nn::hio</code>, <code>nn::midi</code>, and <code>nn::fs::hio</code>. You must ensure that you do not use these functions in your final ROM image. The following four static libraries support these functions: <code>libnn_hio.*.a</code>, <code>libnn_midi.*.a</code>, <code>libnn_fshio.*.a</code>, and <code>libnn_dev.*.a</code>. When you create your final ROM image, you can detect the use of development-only functions as linker errors by ensuring that these static libraries are not specified as input files for the linker. 1393</p> 1394 1395<H3>Optional Libraries</H3> 1396<p> 1397Some of the libraries provided by the SDK are not essential libraries. Most of these libraries are open source, and you do not need to take steps to avoid symbol conflicts.<br> At the present time, the only static library that is an optional library is <code>libzlib.*.a</code>. 1398</p> 1399 1400<H3><CODE>crt0.o</CODE></H3> 1401<p> 1402The directory containing the static libraries also contains the object files <CODE>crt0.*.o</CODE>. As with other static libraries, you must specify this file as one of the linker's input files. 1403</p> 1404 1405 1406 1407<a name="rsf_desc"></a> 1408<H2>RSF and DESC Files</H2> 1409 1410<p> 1411RSF and DESC files are necessary for creating an application. 1412</p> 1413 1414<H3>RSF Files</H3> 1415<p> 1416You must create a separate RSF file for each application. However, if you create a CFA file that contains an e-manual or a download-play child program, you must use the appropriate RSF file included in the SDK. For details on writing RSF files, see the <a href="../../tools/ctr_makerom.html#rsf"><CODE>makerom reference</CODE></a>.<br> The following RSF files can be found in <code>CTR_SDK/resources/specfiles</code>: 1417</p> 1418<dl> 1419<dt><CODE>Application.rsf</CODE> 1420 <dd> 1421This RSF file contains the minimum necessary instructions to create a CTR application that is not a download-play child program. You can use this in the initial stages of development. 1422 1423<dt><CODE>Child.rsf</CODE> 1424 <dd> 1425Use this RSF file when you are creating a CFA file that contains a download-play child program. 1426 1427You must use this RSF file if you are creating a CFA file that contains a download-play child program. 1428 1429You cannot use it to create a download-play child application. 1430 1431<dt><CODE>Manual.rsf</CODE> 1432 <dd> 1433Use this RSF file when you are creating a CFA file that contains an e-manual. You must use this RSF file in order to create an e-manual. 1434</dl> 1435 1436<H3>DESC Files</H3> 1437<p> 1438The DESC files are the same for all applications. You must use one of the files included in the SDK without modifications of any kind.<br> The DESC files are located in the <code>CTR_SDK/resources/specfiles</code> directory. Use the appropriate file for your application. 1439</p> 1440<dl> 1441<dt><CODE>Application.desc</CODE> 1442 <dd> 1443Use this DESC file when creating a CTR application that does not contain a download-play child program. 1444 1445<dt><CODE>DlpChild.desc</CODE> 1446 <dd> 1447Use this DESC file when creating a download-play child program. 1448</dl> 1449 1450 1451 1452 1453 1454<H2>Revision History</H2> 1455<dl class="history"> 1456 1457 <dt>2012/08/11</dt> 1458 <dd> 1459Deleted <CODE>NN_COMPILER_RVCT_VERSION_MINOR</CODE>.<BR> 1460 </dd> 1461 1462 <dt>2012/05/25</dt> 1463 <dd> 1464Added the <B>Optional Libraries</B> section. <br/> Added the <B>Revision History</B> section. <br/> 1465 </dd> 1466 1467 <dt>2011/12/21</dt> 1468 <dd> 1469Separated <B>Creating a Download Play Child Program CIA File</B> out as its own section. <br/> 1470 </dd> 1471 1472 <dt>2011/10/06</dt> 1473 <dd> 1474Added an explanation about <CODE>makerom</CODE> content index. <br/> 1475 </dd> 1476 1477 <dt>2011/08/05</dt> 1478 <dd> 1479Revised the link to <B>Build System</B>. <br/> 1480 </dd> 1481 1482 <dt>2011/07/19</dt> 1483 <dd> 1484Added information about building Download-Play child programs and e-manuals. <br/> Corrected the <CODE>--scatter</CODE> linker option, which was missing its argument. 1485 </dd> 1486 1487 <dt>2011/05/18</dt> 1488 <dd> 1489Initial version. 1490 </dd> 1491</dl> 1492 1493 1494<div class="footer"><span>Guide to Developing a Build System</span></div> 1495 1496 <hr><p>CTR-06-0200-002-I<br>CONFIDENTIAL</p></body> 1497</HTML>