]> git.sur5r.net Git - cc65/blob - doc/cl65.sgml
Improved cbm_dir routines by Thomas Giesel.
[cc65] / doc / cl65.sgml
1 <!doctype linuxdoc system>
2
3 <article>
4 <title>cl65 Users Guide
5 <author>Ullrich von Bassewitz, <htmlurl url="mailto:uz@cc65.org" name="uz@cc65.org">
6 <date>01.08.2000, 27.11.2000, 02.10.2001
7
8 <abstract>
9 cl65 is the compile &amp; link utility for cc65, the 6502 C compiler. It was
10 designed as a smart frontend for the C compiler (cc65), the assembler (ca65),
11 the object file converter (co65), and the linker (ld65).
12 </abstract>
13
14 <!-- Table of contents -->
15 <toc>
16
17 <!-- Begin the document -->
18
19 <sect>Overview<p>
20
21 cl65 is a frontend for cc65, ca65, co65 and ld65. While you may not use the
22 full power of the tools when calling them through cl65, most features are
23 available, and the use of cl65 is much simpler.
24
25
26 <sect>Basic Usage<p>
27
28 The cl65 compile and link utility may be used to convert, compile, assemble
29 and link files. While the separate tools do just one step, cl65 knows how to
30 build object files from C files (by calling the compiler, then the assembler)
31 and other things.
32
33 <tscreen><verb>
34 ---------------------------------------------------------------------------
35 Usage: cl65 [options] file [...]
36 Short options:
37   -c                    Compile and assemble but don't link
38   -d                    Debug mode
39   -g                    Add debug info
40   -h                    Help (this text)
41   -l                    Create an assembler listing
42   -m name               Create a map file
43   -mm model             Set the memory model
44   -o name               Name the output file
45   -r                    Enable register variables
46   -t sys                Set the target system
47   -u sym                Force an import of symbol `sym'
48   -v                    Verbose mode
49   -vm                   Verbose map file
50   -C name               Use linker config file
51   -Cl                   Make local variables static
52   -D sym[=defn]         Define a preprocessor symbol
53   -I dir                Set a compiler include directory path
54   -L path               Specify a library search path
55   -Ln name              Create a VICE label file
56   -O                    Optimize code
57   -Oi                   Optimize code, inline functions
58   -Or                   Optimize code, honour the register keyword
59   -Os                   Optimize code, inline known C funtions
60   -S                    Compile but don't assemble and link
61   -T                    Include source as comment
62   -V                    Print the version number
63   -W                    Suppress warnings
64   -Wa options           Pass options to the assembler
65   -Wl options           Pass options to the linker
66
67 Long options:
68   --add-source          Include source as comment
69   --asm-args options    Pass options to the assembler
70   --asm-define sym[=v]  Define an assembler symbol
71   --asm-include-dir dir Set an assembler include directory
72   --bss-label name      Define and export a BSS segment label
73   --bss-name seg        Set the name of the BSS segment
74   --cfg-path path       Specify a config file search path
75   --check-stack         Generate stack overflow checks
76   --code-label name     Define and export a CODE segment label
77   --code-name seg       Set the name of the CODE segment
78   --codesize x          Accept larger code by factor x
79   --config name         Use linker config file
80   --cpu type            Set cpu type
81   --create-dep          Create a make dependency file
82   --data-label name     Define and export a DATA segment label
83   --data-name seg       Set the name of the DATA segment
84   --debug               Debug mode
85   --debug-info          Add debug info
86   --feature name        Set an emulation feature
87   --force-import sym    Force an import of symbol `sym'
88   --forget-inc-paths    Forget include search paths (compiler)
89   --help                Help (this text)
90   --include-dir dir     Set a compiler include directory path
91   --ld-args options     Pass options to the linker
92   --lib file            Link this library
93   --lib-path path       Specify a library search path
94   --list-targets        List all available targets
95   --listing             Create an assembler listing
96   --list-bytes n        Number of bytes per assembler listing line
97   --mapfile name        Create a map file
98   --memory-model model  Set the memory model
99   --module              Link as a module
100   --module-id id        Specify a module id for the linker
101   --o65-model model     Override the o65 model
102   --obj file            Link this object file
103   --obj-path path       Specify an object file search path
104   --register-space b    Set space available for register variables
105   --register-vars       Enable register variables
106   --rodata-name seg     Set the name of the RODATA segment
107   --signed-chars        Default characters are signed
108   --standard std        Language standard (c89, c99, cc65)
109   --start-addr addr     Set the default start address
110   --static-locals       Make local variables static
111   --target sys          Set the target system
112   --version             Print the version number
113   --verbose             Verbose mode
114   --zeropage-label name Define and export a ZEROPAGE segment label
115   --zeropage-name seg   Set the name of the ZEROPAGE segment
116 ---------------------------------------------------------------------------
117 </verb></tscreen>
118
119 Most of the options have the same meaning than the corresponding compiler,
120 assembler or linker option. See the documentation for these tools for an
121 explanation. If an option is available for more than one of the tools, it
122 is set for all tools, where it is available. One example for this is <tt/-v/:
123 The compiler, the assembler and the linker are all called with the <tt/-v/
124 switch.
125
126 There are a few remaining options that control the behaviour of cl65:
127
128 <descrip>
129
130   <tag><tt>-S</tt></tag>
131
132   This option forces cl65 to stop after the assembly step. This means that
133   C files are translated into assembler files, but nothing more is done.
134   Assembler files, object files and libraries given on the command line
135   are ignored.
136
137
138   <tag><tt>-c</tt></tag>
139
140   This options forces cl65 to stop after the assembly step. This means
141   that C and assembler files given on the command line are translated into
142   object files, but there is no link step, and object files and libraries
143   given on the command line are ignored.
144
145
146   <tag><tt>-o name</tt></tag>
147
148   The -o option is used for the target name in the final step. This causes
149   problems, if the linker will not be called, and there are several input
150   files on the command line. In this case, the name given with -o will be
151   used for all of them, which makes the option pretty useless. You
152   shouldn't use -o when more than one output file is created.
153
154
155   <tag><tt>-t sys, --target sys</tt></tag>
156
157   The default for this option is different from the compiler and linker in the
158   case that the option is missing: While the other tools (compiler, assembler
159   and linker) will use the "none" system settings by default, cl65 will use
160   the C64 as a target system by default. This was chosen since most people
161   seem to use cc65 to develop for the C64.
162
163   <tag><tt>-Wa options, --asm-args options</tt></tag>
164
165   Pass options directly to the assembler. This may be used to pass options
166   that aren't directly supported by cl65. Several options may be separated by
167   commas, the commas are replaced by spaces when passing them to the
168   assembler. Beware: Passing arguments directly to the assembler may interfere
169   with some of the defaults, because cl65 doesn't parse the options passed. So
170   if cl65 supports an option by itself, do not pass this option to the
171   assembler by means of the <tt/-Wa/ switch.
172
173   <tag><tt>-Wl options, --ld-args options</tt></tag>
174
175   Pass options directly to the linker. This may be used to pass options that
176   aren't directly supported by cl65. Several options may be separated by
177   commas, the commas are replaced by spaces when passing them to the linker.
178   Beware: Passing arguments directly to the linker may interfere with some of
179   the defaults, because cl65 doesn't parse the options passed. So if cl65
180   supports an option by itself, do not pass this option to the linker by means
181   of the <tt/-Wl/ switch.
182
183 </descrip>
184
185
186
187 <sect>More usage<p>
188
189 Since cl65 was created to simplify the use of the cc65 development
190 package, it tries to be smart about several things.
191
192 <itemize>
193
194 <item>  If you don't give a target system on the command line, cl65
195         defaults to the C64.
196
197 <item>  When linking, cl65 will supply the names of the startup file and
198         library for the target system to the linker, so you don't have to do
199         that.
200
201 <item>  If the final step is the linker, and the name of the output file was
202         not explicitly given, cl65 will use the name of the first input file
203         without the extension, provided that the name of this file has an
204         extension. So you don't need to name the executable name in most
205         cases, just give the name of your "main" file as first input file.
206 </itemize>
207
208 The type of an input file is derived from its extension:
209
210 <itemize>
211 <item>C files: <tt/.c/
212 <item>Assembler files: <tt/.s/, <tt/.asm/, <tt/.a65/
213 <item>Object files: <tt/.o/ <tt/.obj/
214 <item>Libraries: <tt/.a/, <tt/.lib/
215 <item>GEOS resource files: <tt/.grc/
216 <item>o65 files: <tt/.o65/, <tt/.emd/, <tt/.joy/, <tt/.tgi/
217 </itemize>
218
219 Please note that the program cannot handle input files with unknown file
220 extensions.
221
222
223 <sect>Examples<p>
224
225 The morse trainer software, which consists of one C file (morse.c) and one
226 assembler file (irq.s) will need the following separate steps to compile
227 into an executable named morse:
228
229 <tscreen><verb>
230         cc65 -g -Oi -t c64 morse.c
231         ca65 -g morse.s
232         ca65 -g irq.s
233         ld65 -t c64 -o morse c64.o morse.o irq.o c64.lib
234 </verb></tscreen>
235
236 When using cl65, this is simplified to
237
238 <tscreen><verb>
239         cl65 -g -Oi morse.c irq.s
240 </verb></tscreen>
241
242 As a general rule, you may use cl65 instead of cc65 at most times,
243 especially in makefiles to build object files directly from C files. Use
244
245 <tscreen><verb>
246         .c.o:
247                 cl65 -g -Oi $<
248 </verb></tscreen>
249
250 to do this.
251
252
253
254 <sect>Bugs/Feedback<p>
255
256 If you have problems using the utility, if you find any bugs, or if you're
257 doing something interesting with it, I would be glad to hear from you. Feel
258 free to contact me by email (<htmlurl url="mailto:uz@cc65.org" name="uz@cc65.org">).
259
260
261
262 <sect>Copyright<p>
263
264 cl65 (and all cc65 binutils) are (C) Copyright 1998-2004 Ullrich von
265 Bassewitz. For usage of the binaries and/or sources the following
266 conditions do apply:
267
268 This software is provided 'as-is', without any expressed or implied
269 warranty.  In no event will the authors be held liable for any damages
270 arising from the use of this software.
271
272 Permission is granted to anyone to use this software for any purpose,
273 including commercial applications, and to alter it and redistribute it
274 freely, subject to the following restrictions:
275
276 <enum>
277 <item>  The origin of this software must not be misrepresented; you must not
278         claim that you wrote the original software. If you use this software
279         in a product, an acknowledgment in the product documentation would be
280         appreciated but is not required.
281 <item>  Altered source versions must be plainly marked as such, and must not
282         be misrepresented as being the original software.
283 <item>  This notice may not be removed or altered from any source
284         distribution.
285 </enum>
286
287
288
289 </article>
290