]> git.sur5r.net Git - cc65/blob - doc/cl65.sgml
ccb614efcf2c25c370303a4d1a19aeefbd854da8
[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 command line is parsed from left to right, and the actual processing tool
209 (compiler, assembler, ...) is invoked whenever a file name is encountered.
210 This means that only the options to the left of a file name are in effect when
211 this file is processed. It does also mean that you're able to specify
212 different options for different files on the command line. As an example.
213
214 <tscreen><verb>
215         cl65 -Oirs main.c -O -g module.c
216 </verb></tscreen>
217
218 translates main.c with full optimization and module.c with less optimization
219 and debug info enabled.
220
221 The type of an input file is derived from its extension:
222
223 <itemize>
224 <item>C files: <tt/.c/
225 <item>Assembler files: <tt/.s/, <tt/.asm/, <tt/.a65/
226 <item>Object files: <tt/.o/ <tt/.obj/
227 <item>Libraries: <tt/.a/, <tt/.lib/
228 <item>GEOS resource files: <tt/.grc/
229 <item>o65 files: <tt/.o65/, <tt/.emd/, <tt/.joy/, <tt/.tgi/
230 </itemize>
231
232 Please note that the program cannot handle input files with unknown file
233 extensions.
234
235
236 <sect>Examples<p>
237
238 The morse trainer software, which consists of one C file (morse.c) and one
239 assembler file (irq.s) will need the following separate steps to compile
240 into an executable named morse:
241
242 <tscreen><verb>
243         cc65 -g -Oi -t c64 morse.c
244         ca65 -g morse.s
245         ca65 -g irq.s
246         ld65 -t c64 -o morse c64.o morse.o irq.o c64.lib
247 </verb></tscreen>
248
249 When using cl65, this is simplified to
250
251 <tscreen><verb>
252         cl65 -g -Oi morse.c irq.s
253 </verb></tscreen>
254
255 As a general rule, you may use cl65 instead of cc65 at most times,
256 especially in makefiles to build object files directly from C files. Use
257
258 <tscreen><verb>
259         .c.o:
260                 cl65 -g -Oi $<
261 </verb></tscreen>
262
263 to do this.
264
265
266
267 <sect>Bugs/Feedback<p>
268
269 If you have problems using the utility, if you find any bugs, or if you're
270 doing something interesting with it, I would be glad to hear from you. Feel
271 free to contact me by email (<htmlurl url="mailto:uz@cc65.org" name="uz@cc65.org">).
272
273
274
275 <sect>Copyright<p>
276
277 cl65 (and all cc65 binutils) are (C) Copyright 1998-2004 Ullrich von
278 Bassewitz. For usage of the binaries and/or sources the following
279 conditions do apply:
280
281 This software is provided 'as-is', without any expressed or implied
282 warranty.  In no event will the authors be held liable for any damages
283 arising from the use of this software.
284
285 Permission is granted to anyone to use this software for any purpose,
286 including commercial applications, and to alter it and redistribute it
287 freely, subject to the following restrictions:
288
289 <enum>
290 <item>  The origin of this software must not be misrepresented; you must not
291         claim that you wrote the original software. If you use this software
292         in a product, an acknowledgment in the product documentation would be
293         appreciated but is not required.
294 <item>  Altered source versions must be plainly marked as such, and must not
295         be misrepresented as being the original software.
296 <item>  This notice may not be removed or altered from any source
297         distribution.
298 </enum>
299
300
301
302 </article>
303