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 (&quot;&lt;&quot; and &quot;&gt;&quot;) verbatim as part of the command syntax. Instead, substitute an appropriate entry for the placeholder description. For example, the string <code>&lt;CTRSDK_ROOT&gt;</code> indicates that you must enter the CTR-SDK installation path.
427</P>
428<P>
429    Text enclosed by square brackets (&quot;[&quot; and &quot;]&quot;) is optional.
430</P>
431<pre>
432makecia -i &lt;CXI_FILE&gt; -o &lt;OUTPUT_FILE&gt; [-man &lt;E_MANUAL_CFA_FILE&gt;]
433</pre>
434<P>
435    Elements preceding ellipses (...) can be repeated any number of times.
436</P>
437<pre>
438armar --create &lt;OUTPUT_FILE&gt; &lt;INPUT_FILE&gt;...
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&lt;CTRSDK_ROOT&gt;/include
490    -o &lt;OUTPUT_FILE&gt;
491    &lt;SOURCE_FILE&gt;
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 &lt;OUTPUT_FILE&gt; &lt;INPUT_FILE&gt;...
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 &lt;BSF_FILE&gt; &lt;BANNER_FILE&gt; &lt;ICON_FILE&gt;
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&lt;CTRSDK_ROOT&gt;/resources/banner/Default.bnr
534&lt;CTRSDK_ROOT&gt;/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=&lt;CTRSDK_ROOT&gt;/resources/specfiles/linker/CTR.Process.MPCore.ldscript
550    -o &lt;OUTPUT_FILE&gt;
551    &lt;INPUT_FILE&gt; ...
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 &lt;INPUT_FILE&gt;...  -o &lt;OUTPUT_FILE&gt;
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 &lt;RSF_FILE&gt;
606        -o &lt;OUTPUT_FILE&gt;
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        &lt;AXF_FILE&gt;
624        -rsf &lt;RSF_FILE&gt;
625        -desc &lt;CTRSDK_ROOT&gt;/resources/specfiles/Application.desc
626        -banner &lt;BANNER_FILE&gt;
627        -icon &lt;ICON_FILE&gt;
628        -o &lt;OUTPUT_FILE&gt;
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        &lt;AXF_FILE&gt;
647        -rsf &lt;RSF_FILE&gt;
648        -desc &lt;CTRSDK_ROOT&gt;/resources/specfiles/Application.desc
649        -banner &lt;BANNER_FILE&gt;
650        -icon &lt;ICON_FILE&gt;
651        [-content &lt;E_MANUAL_CFA_FILE&gt;:1]
652        [-content &lt;DOWNLOAD_PLAY_CFA_FILE&gt;:2]
653        -o &lt;OUTPUT_FILE&gt;
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 &lt;CXI_FILE&gt; -o &lt;OUTPUT_FILE&gt; [-man &lt;E_MANUAL_CFA_FILE&gt;]
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 &lt;RSF_FILE&gt; -o &lt;OUTPUT_FILE&gt;
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        &lt;AXF_FILE&gt;
693        -rsf &lt;RSF_FILE&gt;
694        -desc &lt;CTRSDK_ROOT&gt;/resources/specfiles/Application.desc
695        -banner &lt;BANNER_FILE&gt;
696        -icon &lt;ICON_FILE&gt;
697        -lr &lt;LR_FILE&gt;
698        -m 0x01000000
699        -o &lt;OUTPUT_FILE&gt;
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 &lt;LE_FILE&gt; -lr &lt;LR_FILE&gt; -o &lt;OUTPUT_FILE&gt;
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>&lt;CTRSDK_ROOT&gt;/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 &lt;CTRSDK_ROOT&gt;/resources/specfiles/Manual.rsf
769        -DROMFS_ROOT=&lt;MANUAL_DIRECTORY&gt;
770        -o &lt;OUTPUT_FILE&gt;
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>&lt;CTRSDK_ROOT&gt;/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=&lt;CTRSDK_ROOT&gt;/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&lt;CTRSDK_ROOT&gt;/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 &times; 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&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For development, optimized for speed
1353verbose/*.small.a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For development, optimized for size
1354release/*.fast.a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For release, optimized for speed
1355release/*.small.a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;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 &lt;CTRSDK_ROOT&gt;\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>