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> 399 This document is for those who want to develop their own build systems, rather than use the one in the SDK. 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 the SDK 406 <li>Libraries Provided by the SDK 407 <li>RSF and DESC Files Provided by the SDK 408</ul> 409 410<P> 411For information about the structure and usage of the build system provided by the SDK, see <a href="../../SDKRules/BuildRules.html">Build System</a>. 412</P> 413<P> 414This document assumes basic knowledge of CTR-SDK terminology. For a glossary of basic CTR-SDK terms, see <i><a href="../Glossary/Glossary.html">CTR-SDK Terminology</a></i>. 415</P> 416 417<H3>Notation Used in This Document</H3> 418<P> 419Content in shaded boxes, as shown below, indicate a sequence to be entered on the command line. 420</P> 421<pre> 422command option1 option2 423</pre> 424 425<P> 426 Do not enter text enclosed in angle brackets ("<" and ">") verbatim as part of the command syntax. 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> 429 Text 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> 435 Elements preceding ellipses (...) can be repeated any number of times. 436</P> 437<pre> 438armar --create <OUTPUT_FILE> <INPUT_FILE>... 439</pre> 440<P> 441 In 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 numeric value and 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> 449 The 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 the SDK</a> for the macro definitions that the SDK requires. See <a href="#sdk_lib">SDK Libraries</a> for information about the options that are required in order to use the SDK libraries. 456</p> 457<p> 458 This section describes the basic use of <CODE>armcc</CODE> with the CTR-SDK. (Although the following command is separated into multiple lines for readability, 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> 494 The 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> 500 You 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 504 Use <CODE>armar</CODE> as follows: 505</p> 506 507<pre> 508armar --create <OUTPUT_FILE> <INPUT_FILE>... 509</pre> 510 511<p> 512 The 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> 518 Each application must have a banner and icon that 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> 526 The 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> 529 The SDK includes a default banner and icon that you can use during development. The default banner and icon are as follows: 530</p> 531 532<pre> 533<CTRSDK_ROOT>/resources/banner/Default.bnr 534<CTRSDK_ROOT>/resources/banner/Default.icn 535</pre> 536 537<H3>Creating AXF Files</H3> 538<p> 539 <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> For instructions on using <CODE>armlink</CODE>, see the RVCT and RMCC documentation. For information about the restrictions on <CODE>armlink</CODE> options with CTR-SDK, see <a href="#rvct_options">Restrictions on Compiler and Linker Options</a>. For more information about the options that are required to use the SDK libraries, see <a href="#sdk_lib">Libraries Provided by SDK</a>. 540</p> 541<p> 542 This section describes the basic use of <CODE>armlink</CODE> with CTR-SDK. (Although the following command is separated into multiple lines for readability, an actual command cannot contain newline characters.) 543</p> 544 545<pre> 546armlink 547 --datacompressor off 548 --keep=nnMain 549 --scatter=<CTRSDK_ROOT>/resources/specfiles/linker/CTR.Process.MPCore.ldscript 550 -o <OUTPUT_FILE> 551 <INPUT_FILE> ... 552</pre> 553<p> 554 The command combines files specified by <CODE>INPUT_FILE</CODE> and outputs the results to <CODE>OUTPUT_FILE</CODE>. 555</p> 556 557 558<H3>Creating CFA Files</H3> 559<p> 560 A 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 programs and e-manuals. 561</p> 562 563<p> 564 <br> <img src="img/flow_cfa.png"> <br> 565</p> 566 567<p> 568 There 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. 569</p> 570 571<a name="makeciaarchive"></a> 572<H4> Creating a CFA File Using <CODE>makeciaarchive</CODE></H4> 573 574<p> 575 <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. 576 577<p> 578 Use <CODE><a href="../../tools/ctr_makeciaarchive.html">makeciaarchive</a></CODE> as follows: 579</p> 580 581<pre> 582makeciaarchive -cia <INPUT_FILE>... -o <OUTPUT_FILE> 583</pre> 584 585<p> 586 Specify 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. 587</p> 588 589<p> 590 You 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. 591</p> 592 593<H4> Creating a CFA File Using <CODE>makerom</CODE></H4> 594 595<p> 596Create a CFA file using <a href="../../tools/ctr_makerom.html"><CODE>makerom</CODE></a> by specifying the <code>-data</code> option. 597</p> 598 599<p> 600Create a CFA file using <a href="../../tools/ctr_makerom.html"><CODE>makerom</CODE></a> as follows. (Although the following command is separated into multiple lines for readability, an actual command cannot contain newline characters.) 601</p> 602 603<pre> 604makerom -f data 605 -rsf <RSF_FILE> 606 -o <OUTPUT_FILE> 607</pre> 608 609<p> 610 The tool creates <CODE>OUTPUT_FILE</CODE> as a CFA file that contains the content specified by <CODE>RSF_FILE</CODE>. 611</p> 612 613 614 615 616<H3>Creating CXI Files</H3> 617<p> 618 You 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 following command is separated into multiple lines for readability, an actual command cannot contain newline characters.) 619</p> 620 621<pre> 622makerom -f exec 623 <AXF_FILE> 624 -rsf <RSF_FILE> 625 -desc <CTRSDK_ROOT>/resources/specfiles/Application.desc 626 -banner <BANNER_FILE> 627 -icon <ICON_FILE> 628 -o <OUTPUT_FILE> 629</pre> 630 631<p> 632The 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>, the files below the directory specified as <CODE>ROM-FS</CODE> are stored in <CODE>OUTPUT_FILE</CODE>. 633</p> 634 635<a name="cci"></a> 636<H3>Creating CCI Files</H3> 637<p> 638 When you create a card application, the final step is creating a CCI file. Use <CODE>makerom</CODE> to create a CCI file. <br> <br> 639 <img src="img/flow_cci.png"> 640<br> 641 Create a CCI file using <a href="../../tools/ctr_makerom.html"><CODE>makerom</CODE></a> as follows. (Although the following command is separated into multiple lines for readability, an actual command cannot contain newline characters.) 642</p> 643 644<pre> 645makerom -f card 646 <AXF_FILE> 647 -rsf <RSF_FILE> 648 -desc <CTRSDK_ROOT>/resources/specfiles/Application.desc 649 -banner <BANNER_FILE> 650 -icon <ICON_FILE> 651 [-content <E_MANUAL_CFA_FILE>:1] 652 [-content <DOWNLOAD_PLAY_CFA_FILE>:2] 653 -o <OUTPUT_FILE> 654</pre> 655 656<p> 657This 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>, 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. 658</p> 659 660<a name="cia"></a> 661<H3>Creating CIA Files</H3> 662<p> 663 When 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: 664</p> 665 666<pre> 667makecia -i <CXI_FILE> -o <OUTPUT_FILE> [-man <E_MANUAL_CFA_FILE>] 668</pre> 669 670<p> 671 This 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. 672</p> 673 674 675<H3>Creating CCL Files</H3> 676<p> 677 A 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. 678</p> 679 680<pre> 681makerom -f lr -rsf <RSF_FILE> -o <OUTPUT_FILE> 682</pre> 683<p> 684This 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>, the files below the directory specified as <CODE>ROM-FS</CODE> are stored in <CODE>OUTPUT_FILE</CODE>. 685</p> 686<p> 687 Create the LE file using <a href="../../tools/ctr_makerom.html"><CODE>makerom</CODE></a> as follows. (Although the following command is separated into multiple lines for readability, an actual command cannot contain newline characters.) 688</p> 689 690<pre> 691makerom -f le 692 <AXF_FILE> 693 -rsf <RSF_FILE> 694 -desc <CTRSDK_ROOT>/resources/specfiles/Application.desc 695 -banner <BANNER_FILE> 696 -icon <ICON_FILE> 697 -lr <LR_FILE> 698 -m 0x01000000 699 -o <OUTPUT_FILE> 700</pre> 701 702<p> 703 The 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>. 704</p> 705<p> 706 Create the CCL file using <a href="../../tools/ctr_makerom.html"><CODE>makerom</CODE></a> as follows. 707</p> 708 709<pre> 710makerom -f list -le <LE_FILE> -lr <LR_FILE> -o <OUTPUT_FILE> 711</pre> 712 713<p> 714 This command creates <CODE>OUTPUT_FILE</CODE> as a CCL file, corresponding to <CODE>LE_FILE</CODE> and <CODE>LR_FILE</CODE>. 715</p> 716 717<H2> Builds for Special Uses </H2> 718 719<H3> Creating a Download Play Child Program CIA File </H3> 720 721<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> 722 723<p>When building, take care with unique IDs and client indexes.</p> 724 725<p> 726All stored download play child programs must have the same unique ID as the download play parent program. 727</p> 728 729<p> 730If 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. 731</p> 732 733<p> 734Specify 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 more information about RSF files, see <a href="../../tools/ctr_makerom.html"><CODE>makerom</CODE></a>. 735 736Use the described RSF file configurations to create a CXI file for a download play child program. 737</p> 738 739<H3> Creating a CFA File That Contains a Download Play Child Program </H3> 740 741<p> 742To create an application that supports download play, you must include a CFA file containing a download play child program in your CCI file. 743</p> 744 745<p> 746For instructions on creating a CCI file with a CFA file that contains a download play child program, see <a href="#cci">Creating CCI Files</a>. 747</p> 748 749<p> 750Use <a href="../../tools/ctr_makeciaarchive.html"><CODE>makeciaarchive</CODE></a> to create a CFA file that contains a download play child program. For instructions on creating a CFA file that contains a download play child program, see <a href="#makeciaarchive">Creating CFA Files Using <CODE>makeciaarchive</CODE></a>. 751</p> 752 753<p> 754 You 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. 755</p> 756 757<H3> Creating a CFA File That Contains an E-Manual </H3> 758<p> 759 A CFA file that contains an e-manual is an archive with a BCMA file created using <CODE>CTR-ManualTools</CODE>. For information about BCMA files and how to create them, see the <CODE>CTR-ManualTools</CODE> documentation. 760</p> 761 762<p> 763 Use <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 following command is separated into multiple lines for readability, an actual command cannot contain newline characters.) 764</p> 765 766<pre> 767makerom -f data 768 -rsf <CTRSDK_ROOT>/resources/specfiles/Manual.rsf 769 -DROMFS_ROOT=<MANUAL_DIRECTORY> 770 -o <OUTPUT_FILE> 771</pre> 772 773<p> 774 This command creates <CODE>OUTPUT_FILE</CODE> as a CFA file storing the e-manual in <CODE>MANUAL_DIRECTORY</CODE>. 775</p> 776 777<p> 778Put 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. 779</p> 780 781 782<p> 783 Specify 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. 784</p> 785 786<a name="rvct_options"></a> 787<H2>Compiler and Linker Options</H2> 788 789<H3>RVCT and ARMCC</H3> 790<p> 791 CTR-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 and linkers. This documentation makes no distinction between RVCT and ARMCC and simply calls them <I>compiler</I> and <I>linker</I>. 792</p> 793 794<H3>Options</H3> 795<p> 796 The compiler and linker have large numbers of command-line options, and the generated code depends on the options that are specified. 797</p> 798<p> 799 CTR-SDK assumes that some options will or will not be used, and the created program may fail to function 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. 800</p> 801<p> 802 Make sure to follow the option availability below when using the compiler and linker. 803</p> 804 805 806<H3>Compiler Options</H3> 807<p> 808 The following sections list the allowed and prohibited compiler options. 809</p> 810 811<h4>Required</h4> 812<p> 813 The following options are required. These options must be specified every time you use this tool. 814</p> 815<pre> 816--apcs=/interwork 817--c99 (when compiling C source) 818--cpu=MPCore 819--fpmode=fast 820--signed_chars 821</pre> 822 823<h4>Different Specifications Prohibited</h4> 824<p> 825 You must use the defaults for the following options. Specify these options by using the default values. Do not specify any other values. 826</p> 827<pre> 828--library_interface=rvct 829--library_type=standardlib 830--littleend 831--wchar16 832--wchar 833</pre> 834 835<h4>Recommended</h4> 836<p> 837 Although these options are not mandatory, Nintendo recommends their use. 838</p> 839<pre> 840--debug 841--debug_info=line_inlining_extensions 842--no_debug_macros 843--remove_unneeded_entities 844--split_sections 845</pre> 846 847<h4>Optional</h4> 848<p> 849 The following options are optional. 850</p> 851<pre> 852--allow_null_this 853--arm 854--asm 855--asm_dir 856--autoinline 857--brief_diagnostics 858--bss_threshold 859--code_gen 860--compile_all_input 861--cpp 862--create_pch 863--data_reorder 864--debug_info 865--debug_macros 866--default_extension 867--depend 868--depend_dir 869--depend_format 870--depend_system_headers 871--depend_target 872--diag_error 873--diag_remark 874--diag_style 875--diag_suppress 876--diag_warning 877--dollar 878--dwarf2 879--dwarf3 880--emit_frame_directives 881--errors 882--exceptions 883--exceptions_unwind 884--feedback 885--force_new_nothrow 886--gnu 887--help 888--ignore_missing_headers 889--implicit_include 890--info=totals 891--inline 892--instrument_inline 893--interleave 894--intermediate_object_files 895--link_all_input 896--list 897--list_dir 898--list_macros 899--locale 900--long_long 901--loose_implicit_cast 902--md 903--message_locale 904--mm 905--multibyte_chars 906--multifile 907--output_dir 908--pch 909--pch_dir 910--pch_messages 911--pch_verbose 912--phony_targets 913--preinclude 914--preprocessed 915--reassociate_saturation 916--reduce_paths 917--restrict 918--retain 919--rtti 920--rtti_data 921--show_cmdline 922--sys_include 923--thumb 924--use_pch 925--version_number 926--vfe 927--via 928--vla 929--vsn 930--whole_program 931--wrap_diagonostics 932-A 933-C 934-E 935-I 936-L 937-M 938-O 939-Ospace 940-Otime 941-P 942-S 943-U 944-W 945-c 946-g 947-o 948</pre> 949 950<h4>Use Is Prohibited</h4> 951<p> 952The following options are prohibited. You must not use them. 953</p> 954<pre> 955--alternative_tokens 956--anachronisms 957--arm_linux 958--arm_linux_config_file 959--arm_linux_configure 960--arm_linux_paths 961--arm_only 962--bigend 963--bitband 964--c90 965--compatible 966--configure_cpp_headers 967--configure_extra_includes 968--configure_extra_libraries 969--configure_gas 970--configure_gcc 971--configure_gcc_version 972--configure_gld 973--configure_sysroot 974--default_definition_visibility 975--dep_name 976--device 977--dllexport_all 978--dllimport_runtime 979--enum_is_int 980--execstack 981--export_all_vtbl 982--export_defs_implicity 983--extended_initializers 984--forceinline 985--fp16_format 986--fpu 987--friend_injection 988--global_reg 989--gnu_defaults 990--gnu_version 991--guiding_decls 992--hide_all 993--implicit_include_searches 994--implicit_key_function 995--implicit_typename 996--import_all_vtbl 997--interface_enums_are_32_bit 998--kandr_include 999--licretry 1000--lower_ropi 1001--lower_rwpi 1002--ltcg 1003--min_array_alignment 1004--multiply_latency 1005--nonstd_qualifier_deduction 1006--nonstd_qualifier_deduction 1007--old_specializations 1008--old_style_preprocessing 1009--parse_templates 1010--pending_instanciations 1011--pointer_alignment 1012--profile 1013--project 1014--reinitialize_workdir 1015--relaxed_ref_def 1016--shared 1017--signed_bitfields 1018--split_ldm 1019--strict 1020--strict_warnings 1021--translate_g++ 1022--translate_gcc 1023--translate_gld 1024--trigraphs 1025--type_traits_helpers 1026--use_gas 1027--using_std 1028--vectorize 1029--visibility_inlines_hidden 1030--wchar32 1031--workdir 1032-J 1033-Warmcc,[option] 1034</pre> 1035 1036 1037<H3>Linker Options</H3> 1038 1039<p> 1040 The following sections list the allowed and prohibited linker options. 1041</p> 1042 1043<h4>Required</h4> 1044<p> 1045 The following options are required. These options must be specified every time you use this tool. 1046</p> 1047<pre> 1048--datacompressor=off 1049--keep=nnMain 1050--scatter=<CTRSDK_ROOT>/resources/specfiles/linker/CTR.Process.MPCore.ldscript 1051</pre> 1052 1053<h4>Different Specifications Prohibited</h4> 1054<p> 1055 You must use the defaults for the following options. Specify these options by using the default values. Do not specify any other values. 1056</p> 1057<pre> 1058--be8 1059--cpu=MPCore 1060--entry=__ctr_start 1061--legacyalign 1062--library_type=standardlib 1063--ref_cpp_init 1064--scanlib 1065--startup=__ctr_start 1066</pre> 1067 1068<h4>Recommended</h4> 1069<p> 1070 Although these options are not mandatory, Nintendo recommends their use. 1071</p> 1072<pre> 1073--largeregions 1074--no_eager_load_debug 1075--strict 1076</pre> 1077 1078<h4>Optional</h4> 1079<p> 1080 The following options are optional. 1081</p> 1082<pre> 1083--bestdebug 1084--branchnop 1085--callgraph 1086--callgraph_file 1087--callgraph_output 1088--cgfile 1089--cgsymbol 1090--cgundefined 1091--comment_section 1092--compress_debug 1093--crosser_veneershare 1094--diag_error 1095--diag_remark 1096--diag_style 1097--diag_suppress 1098--diag_warning 1099--eager_load_debug 1100--errors 1101--exceptions 1102--exceptions_table 1103--feedback 1104--feedback_image 1105--feedback_type 1106--filtercomment 1107--help 1108--info 1109--info_lib_prefix 1110--inline 1111--inlineveneer 1112--libpath 1113--list 1114--list_mapping_symbols 1115--mangled 1116--map 1117--max_veneer_passes 1118--merge 1119--merge_partial_comdat 1120--output 1121--pad 1122--partial 1123--privacy 1124--reduce_paths 1125--remarks 1126--remove 1127--section_index_display 1128--show_cmdline 1129--show_full_path 1130--show_parent_lib 1131--show_sec_index 1132--sort 1133--strict 1134--strict_enum_size 1135--strict_wchar_sizse 1136--symbols 1137--symdefs 1138--tailreorder 1139--tiebreaker 1140--userlibpath 1141--veneer_inject_type 1142--veneershare 1143--verbose 1144--version_number 1145--vfemode 1146--via 1147--vsn 1148--xref 1149--xrefdbg 1150--xref{from|to} 1151</pre> 1152 1153<h4>Use Is Prohibited</h4> 1154<p> 1155The following options are prohibited. You must not use them. 1156</p> 1157<pre> 1158--add_needed 1159--add_shared_references 1160--any_placement 1161--any_sort_order 1162--arm_linux 1163--arm_only 1164--as_needed 1165--autoat 1166--base_platform 1167--be32 1168--bpabi 1169--combreloc 1170--cppinit 1171--device 1172--dll 1173--dynamic_debug 1174--dynamiclinker 1175--edit 1176--emit_debug_overlay_relocs 1177--emit_debug_overlay_section 1178--emit_non_debug_relocs 1179--emit_relocs 1180--execstack 1181--export_all 1182--export_dynamic 1183--fini 1184--first 1185--force_explicit_attr 1186--force_so_throw 1187--fpic 1188--fpu 1189--gnu_linker_defined_syms 1190--implicit_branchpatch 1191--import_unresolved 1192--init 1193--keep_protected_symbols 1194--last 1195--ldpartial 1196--library 1197--licretry 1198--linker_script 1199--linux_abitag 1200--locals 1201--ltcg 1202--match 1203--max_visibility 1204--muldefweak 1205--override_visibility 1206--paged 1207--pagesize 1208--pivenner 1209--pltgot 1210--pltgot_opts 1211--predefine 1212--prelink_support 1213--profile 1214--project 1215--reinitialize_workdir 1216--reloc 1217--ro_base 1218--ropi 1219--rosplit 1220--runpath 1221--rw_base 1222--rwpi 1223--search_dynamic_libraries 1224--shared 1225--soname 1226--split 1227--strict_ph 1228--strict_relocations 1229--symbolic 1230--symver_script 1231--symver_soname 1232--sysv 1233--undefined 1234--undefined_and_export 1235--unresolved 1236--use_definition_visibility 1237--use_sysv_default_script 1238--workdir 1239--zi_base 1240</pre> 1241 1242 1243<a name="macro"></a> 1244<H2>Macros Required by the SDK</H2> 1245 1246<p> 1247 CTR-SDK uses C/C++ macros to enable or disable a number of features. Accordingly, you must provide the appropriate macro definitions as compiler options. 1248</p> 1249 1250<H3>Required Macros</H3> 1251<P> 1252 The following macros must always be set for CTR. You must define them for all CTR projects. 1253</P> 1254<pre> 1255NN_COMPILER_OPTION_ARM 1256NN_COMPILER_RVCT 1257NN_DEBUGGER_KMC_PARTNER 1258NN_HARDWARE_CTR 1259NN_HARDWARE_CTR_TS 1260NN_PLATFORM_CTR 1261NN_PROCESSOR_ARM 1262NN_PROCESSOR_ARM11MPCORE 1263NN_PROCESSOR_ARM_V6 1264NN_PROCESSOR_ARM_VFP_V2 1265NN_SYSTEM_PROCESS 1266</pre> 1267 1268<H3>Selection Macros</H3> 1269<P> 1270 You must change your macro specifications based on the following selections. 1271</P> 1272 1273<H4><CODE>RVCT/ARMCC Version</CODE></H4> 1274<pre> 1275NN_COMPILER_RVCT_VERSION_MAJOR=4 1276</pre> 1277<P> 1278 You 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. Even if you are using ARMCC, the name of the macro does not change. 1279</P> 1280 1281<H4>Optimization Type</H4> 1282<pre> 1283NN_EFFORT_FAST 1284NN_EFFORT_SMALL 1285</pre> 1286<P> 1287Specify 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 options. 1288</P> 1289 1290<H4>Library Selection</H4> 1291<pre> 1292NN_BUILD_VERBOSE 1293NN_SWITCH_DISABLE_DEBUG_PRINT_FOR_SDK 1294NN_SWITCH_DISABLE_ASSERT_WARNING_FOR_SDK 1295</pre> 1296<P> 1297 The SDK provides a <CODE>verbose</CODE> and <CODE>release</CODE> version of the static libraries. You must change your macro definitions based on which version you use. 1298</P> 1299<P> 1300 To 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>. 1301</P> 1302<P> 1303 Your application may fail to link or run properly if there are inconsistencies between the macro definitions that you specify with compiler options and the static libraries you link to. 1304</P> 1305 1306<H3>Optional Macros</H3> 1307<P> 1308 The following macros are not required in order to use the SDK. You can use them as needed for application development. 1309</P> 1310 1311<H4>Enabling and Disabling <CODE>ASSERT</CODE> and <CODE>WARNING</CODE></H4> 1312<pre> 1313NN_SWITCH_DISABLE_ASSERT_WARNING 1314</pre> 1315<P> 1316 Defining <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. 1317</P> 1318 1319<H4>Enabling and Disabling Debug Output</H4> 1320<pre> 1321NN_SWITCH_DISABLE_DEBUG_PRINT 1322</pre> 1323<P> 1324 Defining <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. 1325</P> 1326<P> 1327 All debug output must be disabled in the final ROM image. 1328</P> 1329 1330 1331<a name="sdk_lib"></a> 1332<H2>SDK Libraries</H2> 1333<p> 1334 The libraries provided by the SDK consist of C/C++ header files and static library files. 1335</p> 1336 1337<a name="include"></a> 1338<H3>Using Header Files</H3> 1339<p> 1340 The 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. 1341</p> 1342<pre> 1343armcc -I<CTRSDK_ROOT>/include ... (omitted) ... 1344</pre> 1345 1346<H3>Static Library Types</H3> 1347 1348<p> 1349 The 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 × 2 = 4). <br> The development libraries are in the <code>verbose</code> directory and the release libraries are in the <code>release</code> directory. Each of those directories contains the library optimized for speed (<code>*.fast.*</code> files) and the library optimized for size (<code>*.small.*</code> files). 1350</p> 1351<pre> 1352verbose/*.fast.a For development, optimized for speed 1353verbose/*.small.a For development, optimized for size 1354release/*.fast.a For release, optimized for speed 1355release/*.small.a For release, optimized for size 1356</pre> 1357<p> 1358 When 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. 1359</p> 1360 1361<H3>Development and Release Versions</H3> 1362 1363<p> 1364 The development libraries differ from the release libraries in the following ways to facilitate development and debugging: 1365</p> 1366<ul> 1367 <li>Assertions and warnings in the libraries are enabled. 1368 <li>Debugging code in the libraries is enabled. 1369 <li>Some of the API functions produce debugging output. 1370</ul> 1371<p> 1372Ordinarily, use the development libraries while you are developing your application. Your final ROM image must link to the release libraries. 1373</p> 1374 1375<H3>Using Static Libraries</H3> 1376 1377<p> 1378 To make an SDK library available to your application, you must specify the appropriate static library as one of the input files of the linker. 1379</p> 1380<pre> 1381armlink <CTRSDK_ROOT>\libraries\CTR-TS.Process.MPCore\release\libnn_os.fast.a ... (omitted) ... 1382</pre> 1383<p> 1384 The libraries have interdependencies. 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 specify all libraries to the linker, with the exception of the development-only libraries and optional libraries described in the following sections. 1385</p> 1386 1387<H3>Development-Only Libraries</H3> 1388<p> 1389 Some of the libraries provided by the SDK are specialized for development. Specifically, the functions in the <code>nn::hio</code>, <code>nn::midi</code>, and <code>nn::fs::hio</code> namespaces are for development only. 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. 1390</p> 1391 1392<H3>Optional Libraries</H3> 1393<p> 1394 Some 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. Currently, the only static library that is optional is <code>libzlib.*.a</code>. 1395</p> 1396 1397<H3><CODE>crt0.o</CODE></H3> 1398<p> 1399 The 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. 1400</p> 1401 1402 1403 1404<a name="rsf_desc"></a> 1405<H2>RSF and DESC Files</H2> 1406 1407<p> 1408 RSF and DESC files are necessary for creating an application. 1409</p> 1410 1411<H3>RSF Files</H3> 1412<p> 1413 You 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 more information about writing RSF files, see the <a href="../../tools/ctr_makerom.html#rsf"><CODE>makerom</CODE> reference</a>. The following RSF files are in <code>CTR_SDK/resources/specfiles</code>: 1414</p> 1415<dl> 1416 <dt><CODE>Application.rsf</CODE> 1417 <dd> 1418 This RSF file contains the minimum necessary instructions to create a CTR application that is not a download play child program. Use this file in the initial stages of development. 1419 1420 <dt><CODE>Child.rsf</CODE> 1421 <dd> 1422 Use this RSF file when you are creating a CFA file that contains a download play child program. 1423 1424 You must use this RSF file if you are creating a CFA file that contains a download play child program. 1425 1426 You cannot use it to create a download play child application. 1427 1428 <dt><CODE>Manual.rsf</CODE> 1429 <dd> 1430 Use 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. 1431</dl> 1432 1433<H3>DESC Files</H3> 1434<p> 1435 The 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. 1436</p> 1437<dl> 1438 <dt><CODE>Application.desc</CODE> 1439 <dd> 1440 Use this DESC file when creating a CTR application that does not contain a download play child program. 1441 1442 <dt><CODE>DlpChild.desc</CODE> 1443 <dd> 1444 Use this DESC file when creating a download play child program. 1445</dl> 1446 1447 1448 1449 1450 1451<H2>Revision History</H2> 1452<dl class="history"> 1453 1454 <dt>2012/08/11</dt> 1455 <dd> 1456 Deleted <CODE>NN_COMPILER_RVCT_VERSION_MINOR</CODE>.<br/> 1457 </dd> 1458 1459 <dt>2012/05/25</dt> 1460 <dd> 1461Added the <B>Optional Libraries</B> section. <br/> Added the <B>Revision History</B> section. <br/> 1462 </dd> 1463 1464 <dt>2011/12/21</dt> 1465 <dd> 1466Separated <B>Creating a Download Play Child Program CIA File</B> out as its own section. <br/> 1467 </dd> 1468 1469 <dt>2011/10/06</dt> 1470 <dd> 1471 Added an explanation about the <CODE>makerom</CODE> content index. <br/> 1472 </dd> 1473 1474 <dt>2011/08/05</dt> 1475 <dd> 1476Revised the link to <B>Build System</B>. <br/> 1477 </dd> 1478 1479 <dt>2011/07/19</dt> 1480 <dd> 1481 Added information about building download play child programs and e-manuals. <br/> Corrected the <CODE>--scatter</CODE> linker option, which was missing its argument. 1482 </dd> 1483 1484 <dt>2011/05/18</dt> 1485 <dd> 1486 Initial version. 1487 </dd> 1488</dl> 1489 1490 1491<div class="footer"><span>Guide to Developing a Build System</span></div> 1492 1493<p>CTR-06-0200-002-L<br>CONFIDENTIAL</p></body> 1494</HTML>