add/re-enable at_wini debug output
[minix3.git] / man / man1 / cc.1
blobdf903e0c576bccd9fe70c1a89150f2f342433a74
1 .TH CC 1
2 .SH NAME
3 cc, pc, m2 \- MINIX 3 C, Pascal, and Modula-2 compilers
4 .SH SYNOPSIS
5 .in +.5i
6 .ti -.5i
7 .BR cc |\c
8 .BR pc |\c
9 .BR m2
10 .RB [ "\-D \fIname\fR[\fB=\fIvalue" ]]
11 \&...
12 .RB [ "\-U \fIname" ]
13 \&...
14 .RB [ "\-I \fIdirectory" ]
15 \&...
16 .RB [ \-.\fIsuffix ]
17 \&...
18 .RB [ \-c ]
19 .RB [ \-E ]
20 .RB [ \-P ]
21 .RB [ \-S ]
22 .RB [ \-c.\fIsuffix ]
23 .RB [ \-O ]
24 .RB [ \-O\fIlevel ]
25 .RB [ \-OS ]
26 .RB [ \-OT ]
27 .RB [ \-g ]
28 .RB [ \-n ]
29 .RB [ \-a ]
30 .RB [ \-R ]
31 .RB [ \-A ]
32 .RB [ \-s ]
33 .RB [ \-fsoft ]
34 .RB [ \-fnone ]
35 .RB [ \-w ]
36 .RB [ \-wo ]
37 .RB [ \-ws ]
38 .RB [ \-wa ]
39 .RB [ \-3 ]
40 .RB [ \-_ ]
41 .RB [ \-W\fIname\fB\-\fIoption ]
42 \&...
43 .RB [ \-m\fIarch ]
44 .RB [ "\-o \fIoutfile" ]
45 .RB [ "\-L \fIdirectory" ]
46 \&...
47 .RB [ \-i ]
48 .RB [ \-sep ]
49 .RB [ \-com ]
50 .RB [ \-r ]
51 .RB [ "\-stack \fIsize" ]
52 .I operand
53 \&...
54 .sp .4v
55 .ti -.5i
56 (Minix-86 subset:)
57 .ti -.5i
58 .BR cc |\c
59 .BR pc |\c
60 .BR m2
61 .RB [ "\-D\fIname\fR[\fB=\fIvalue" ]]
62 \&...
63 .RB [ "\-U\fIname" ]
64 \&...
65 .RB [ "\-I\fIdirectory" ]
66 \&...
67 .RB [ \-.o ]
68 \&...
69 .RB [ \-c ]
70 .RB [ \-E ]
71 .RB [ \-P ]
72 .RB [ \-S ]
73 .RB [ \-c.\fIsuffix ]
74 .RB [ \-O ]
75 .RB [ \-O\fIlevel ]
76 .RB [ \-n ]
77 .RB [ \-a ]
78 .RB [ \-R ]
79 .RB [ \-A ]
80 .RB [ \-s ]
81 .RB [ \-f ]
82 .RB [ \-w ]
83 .RB [ \-wo ]
84 .RB [ \-ws ]
85 .RB [ \-wa ]
86 .RB [ \-3 ]
87 .RB [ \-_ ]
88 \&...
89 .RB [ \-m ]
90 .RB [ "\-o \fIoutfile" ]
91 .RB [ "\-L\fIdirectory" ]
92 \&...
93 .RB [ \-i ]
94 .RB [ \-sep ]
95 .RB [ \-com ]
96 .I operand
97 \&...
98 .in -.5i
99 .SH DESCRIPTION
100 .BR Cc ,
101 .BR pc ,
103 .BR m2
104 are the call names of the MINIX 3 C, Pascal, and Modula-2 compilers from
105 the Amsterdam Compiler Kit (ACK).
107 All these call names are links to the
108 .B acd
109 driver program.
110 .B Acd
111 uses the driver description file
112 .B /usr/lib/descr
113 that describes the steps necessary to compile a source file.  The
114 .BR acd (1)
115 manual page describes a few more flags, like
116 .BR \-v ,
117 that may be useful for debugging compiler problems.
119 Minix-86 uses a C program as the compiler driver.  This driver is not as
120 flexible as the one implemented with the
121 .B acd
122 driver, and offers a smaller number of options.  The second line of
123 the synopsis above shows the options that the Minix-86 driver supports.  The
124 rest of this manual page is geared towards the
125 .B acd
126 driver.  People writing software for Minix-86, or that should be
127 portable to all MINIX 3 versions should stick to the options listed under
128 the Minix-86 compiler.
129 .SH OPTIONS
130 The transformations done by the compiler are modified by the following
131 options.  They are a superset of the options required by \s-2POSIX\s+2,
132 with the MINIX 3 or compiler specific ones are marked as such.  Options
133 for one specific compiler are ignored for others.  Read the OPTIONS section
135 .BR acd (1)
136 for the driver specific options.
139 .BI \-D " name\fR[\fB=\fIvalue\fR]"
140 Same as if
141 .BI #define " name value"
142 had been given.
143 .B 1
144 is assumed if
145 .I value
146 is omitted.  This argument, like all the other double arguments, may also
147 be given as a single argument.  (I.e. either as
148 .BI \-D "\0name"
150 .BI \-D name\fR.)
151 (The Minix-86 driver is not so flexible, the proper form can be seen in
152 the synopsis.)
154 .BI \-U " \fIname"
155 Undefine the pre-defined symbol
156 .IR name .
158 .BI \-I " directory"
159 Extend the include directory path with the given directory.  These
160 directories are searched for include files in the given order before the
161 standard places.  The standard place for the C compiler is
162 .BR /usr/include ,
163 and for the Modula-2 compiler it is
164 .BR /usr/lib/m2 .
166 .BI \-. suffix
167 Act as if a source file with the given suffix is present on the command line.
168 For each language found on the command line the appropriate libraries are
169 selected.  The first language mentioned selects the runtime startoff.
170 The call name of the driver also chooses the language, so \fBcc\fP is an
171 implicit
172 .BR \-.c .
173 The runtime startoff can be omitted by specifying
174 .B \-.o
175 for those rare cases where you want to supply your own startoff.  (MINIX 3)
177 .B \-c
178 Transform the input files to object files and stop.  The
179 .B \-o
180 option may be used under MINIX 3 to set the name of the object file.
181 .BR Make (1)
182 likes this, because
183 .BI "cc \-c" " dir/file" .c
184 puts
185 .IB file .o
186 in the current directory, but
187 .BI "cc \-c" " dir/file" .c
188 .BI \-o " dir/file" .o
189 puts the
190 .B .o
191 file where
192 .B make
193 expects it to be by its builtin
194 .B .c.o
195 rule.
196 (Minix-86 can only use
197 .B \-o
198 to name an executable.)
200 .B \-E
201 Run the preprocessor over the input files and send the result to standard
202 output or the file named by
203 .BR \-o .
204 Standard input is read if an input file is named "\fB\-\fR".
206 .B \-P
207 Run the preprocessor over the input files and put the result to files
208 with the suffix
209 .BR .i .
210 File and line number information is omitted from the output.  Use
211 .B \-P \-E
212 under MINIX 3 to omit this info for
213 .B \-E
214 too.
216 .B \-S
217 Transform the input files to assembly files with suffix
218 .BR .s .
220 .BI \-c. suffix
221 Transform the input files to files with the given suffix.  This can only
222 succeed if there is a valid transformation from the input file to the
223 given suffix.  The same goes for
224 .B \-c
225 and other options that are just special cases of this option, except for
226 .BR \-P ,
227 .B \-c.i
228 keeps the line number info.  The option
229 .B \-c.a
230 makes the driver transform the input files to object files and add them to a
231 library.  (So you do not need to know how the archiver works.)  Note that you
232 need to give object files as arguments if you want to replace old object
233 files.  Transformed files are added under a (unique) temporary name.  With
234 .B \-o
235 you can name the library.  (MINIX 3)  (Minix-86 can't do
236 .BR \-c.a .)
238 .B \-O
239 Optimize code.  This option is a no-op, because all the compilers already
240 use the
241 .BR \-O1
242 optimization level to get code of reasonable quality.  Use
243 .BR \-O0
244 to turn off optimization to speed up compilation at debug time.
246 .BI \-O level
247 Compile with the given optimization level.  (MINIX 3)
249 .B \-OS
251 .B \-OT
253 Optimize for space or for time.  (MINIX 3)
256 .B \-g
257 Compile the C source with debugging information.  (The way
258 .BR \-g ,
259 .B \-s
261 .B \-O
262 interact is left unspecified.)
264 .B \-n
265 Omit the file and line number tracking that is used for runtime error reports
266 from Pascal or Modula-2 programs.  The
267 .B \-n
268 flag is normally used to compile library modules, but may also be useful to
269 make a program smaller and faster once debugged.  (Pascal & Modula-2)
271 .B \-a
272 Enable assertions, i.e. statements of the form \fBassert\fI\ test\fR
273 that cause a descriptive runtime error if the boolean expression
274 .I test
275 evaluates false.  (Pascal & Modula-2)
277 .B \-R
278 Disable runtime checks like overflow checking.  (Pascal & Modula-2)
280 .B \-A
281 Enable array bound checks.  (Pascal & Modula-2)
283 .B \-s
284 Strip the resulting executable of its symbol table.
286 .B \-fsoft
288 .B \-f
290 Use software floating point instead of hardware floating point.  This is
291 a loader flag, but in general it is best to specify this flag in all
292 phases of the compilation.  (MINIX 3)
295 .B \-fnone
296 Ignored.  Used under Minix-vmd to omit floating point printing/scanning
297 code.  The standard MINIX 3 compiler figures this out automatically using
298 a special loader trick.  (MINIX 3)
300 .B \-w
301 Do not produce warnings about dubious C language constructs.  Normally
302 the compiler is configured to do the maximum amount of checking
303 without being too annoying.  (MINIX 3)
305 .B \-wo
306 Omit warnings about old (K&R) style.  (MINIX 3)
308 .B \-ws
309 Omit strict warnings.  (MINIX 3)
311 .B \-wa
312 Omit all warnings.  (MINIX 3)
314 .B \-3
315 Only accept 3rd edition Modula-2.  (Modula-2)
317 .B \-_
318 Allow underscores in Pascal or Modula-2 identifiers, but not at the beginning
319 of an identifier.  (Pascal & Modula-2)
321 .BI \-W name \- option
323 .I name
324 is the name of the compiler this driver is working for, then
325 .I option
326 is activated for that compiler.  See below for a per-compiler list.  Any other
327 .B \-W
328 option is ignored.  (\fB\-W\fP is described by \s-2POSIX\s+2 as an optional
329 flag to send options to the different compiler passes with a totally
330 different (and nicely ignored) syntax as described here.)  (Minix-86 ignores
332 .B \-W
333 flag.)
335 .B \-m
336 Under Minix-86 this option transforms the function declarations (prototypes)
337 to the old K&R form, i.e. the arguments declarations are removed.  This saves
338 a lot of memory in the compiler and may allow a large program to be compiled.
339 One must make sure that function arguments are properly type-cast where
340 necessary.  (MINIX 3)
342 .BI \-m arch
343 Set the target architecture for a cross compiler.  Normally the compiler
344 produces code for the same architecture it itself is compiled for.  The
345 .B ARCH
346 environment variable may also be used to set the architecture.  Architectures
347 names are:
348 .B i86
349 (Intel 8086 and 286),
350 .B i386
351 (Intel 386, 486, ...),
352 .B m68000
353 (Motorola MC68000 & MC68010, 16-bit ints),
354 .B m68010
355 (Motorola MC68000 & MC68010, 32-bit ints),
356 .B m68020
357 (Motorola MC68020, 32-bit ints),
358 .B sparc
359 (Sun SPARC).  (MINIX 3)  (Ignored under Minix-86.)
361 .BI \-o " outfile"
362 Set the output file for the
363 .BR \-c ,
364 .BR \-c.a ,
366 .BR \-E
367 options, or choose the executable name instead of the default
368 .BR a.out .
369 (Minix-86 can only choose the executable name.)
371 .BI \-L " directory"
372 Extend the library search path with
373 .IR directory .
374 These directories are searched for libraries named by
375 .B \-l
376 in the given order before the standard places.  The standard places are
377 .B /lib/\c
378 .IR arch ,
380 .B /usr/lib/\c
381 .IR arch .
382 The search for libaries in directories added with
383 .B \-L
384 looks in
385 .IB directory /\c
386 .IR arch
388 .I directory
389 itself.
390 .RI ( Arch
391 is the machine architecture name.  This is
392 MINIX 3 dependent, compilers on other systems usually only look in
393 .IR directory .)
394 (Minix-86 only has
395 .B /lib
397 .B /usr/lib
398 as the standard places.)
400 .B \-sep
402 .B \-com
404 Create a Separate I&D or a common I&D executable.  The text segment of a
405 separate I&D executable is read-only and shareable.  For an
406 .B i86
407 binary this also means that the text and data segment can each be 64
408 kilobytes large instead of just 64 kilobytes together.  Separate I&D is the
409 default.  Common I&D is probably only useful for the bootstraps.  The
410 .B \-i
411 option has the same meaning as
412 .BR \-sep ,
413 but should no longer be used.
414 (MINIX 3)
417 .B \-r
418 Makes the loader produce a relocatable object file, i.e. a file that
419 may be loaded again.  The runtime startoff and the default libraries are
420 omitted, only the files mentioned are combined.  (MINIX 3)
422 .BI \-stack " size"
423 Allow the process
424 .I size
425 bytes of heap and stack.
426 .I Size
427 is a C-style decimal, octal, or hexadecimal number, optionally followed by
428 the multipliers
429 .BR m ,
430 .BR k ,
431 .BR w ,
433 .B b
434 for mega (1024*1024), kilo (1024), "word" (2 or 4), and byte (1).  Uppercase
435 letters are accepted too.  A size of
436 .B 32kw
437 is used by default, translating to 64k for
438 .BR i86 ,
439 and 132k for other architectures.  Too large a size is rounded down to keep
440 the data segment within 64 kilobytes for the
441 .BR i86 .
442 (MINIX 3)
443 .SH OPERANDS
444 All leftover operands are treated as files to be compiled, with one
445 exception.  The construct
446 .BI \-l " library"
447 is used to denote a library, usually
448 .BI lib library .a\fR,
449 that is to be searched in the directories mentioned with
450 .B \-L
451 or the standard places.  These libraries keep their place among the
452 (transformed) input files when presented to the loader.  (It is a common
453 mistake to write
454 .BR "cc\ \-lcurses\ x.c"
455 instead of
456 .BR "cc\ x.c\ \-lcurses" .)
457 .SH IMPLEMENTATION
458 The MINIX 3 compiler implementation uses the ACK compilers adapted for use
459 under MINIX 3 as described below.  Read
460 .BR ACK (7)
461 for more detailed information on the ACK compilers themselves.
462 .SS "Feature test macros"
463 The preprocessors are given these arguments to define feature test macros:
464 .B \-D__ACK__
465 tells what compiler is used.
466 .B \-D__minix
467 tells that this is MINIX 3.
468 .BI \-D__ arch
469 tells the architecture.
470 (More macros are defined, but they are only to be used in the include files.)
472 The symbols above are predefined by the preprocessor so that your program is
473 able to "sense" the environment it is in.  It is also possible for your
474 program to do the opposite, to tell what kind of environment it likes to
475 have.  By default,
476 .B cc
477 compiles a standard C program.  If you want the extensions described in
478 POSIX.1 to become visible, then you have to set
479 .BR _POSIX_SOURCE " to " 1
480 at the start of your program.
481 To enable \s-2UNIX\s+2 or MINIX 3 extensions you need to also set
482 .BR _MINIX " to " 1 .
483 If you don't want to clutter your source files with these symbols then you
484 can use
485 .B cc \-D_MINIX \-D_POSIX_SOURCE
486 to get the POSIX.1 and the MINIX 3 extensions.
487 .SS "Preprocessing"
488 Pascal, Modula-2, EM source (see below), and Assembly source are
489 preprocessed by the C preprocessor if the very first character in the file
490 is a '\fB#\fP' character.
491 .SS "Assembly dialects"
492 No two compilers use the same assembly language.  To be able to use the same
493 assembly dialect for the low level support routines an assembly converter is
494 provided.  The input of this converter can be of type
495 .BR ack ,
496 .BR ncc ,
498 .BR bas ,
499 and the output can be of type
500 .BR ack ,
501 .BR ncc ,
503 .BR gnu .
504 The suffix of the file tells the assembly dialect (see below), or one can
505 use the option
506 .BI \-Was\- dialect
507 to tell the driver what the dialect of a plain
508 .B .s
509 file is.  The assembly converter is not as smart as the assembler, the
510 translation is more or less a text substitution.  It leaves a lot of
511 checking to the target assembler.  You have to restrict yourself to a subset
512 that is understood by both assemblers.  The ACK assembler for instance
513 doesn't care if you use `ax' or `eax' for a 32 bit register, it looks at the
514 instruction type.  The GNU assembler doesn't like this, so you have to use
515 the proper register name in ACK assembly that is to be translated to GNU
516 assembly.  Expressions are converted as is, even if the operator precedence
517 rules of the two assembly languages differ.  So use parentheses.  The
518 converter does promise one thing: compiler output can be properly
519 translated.  (Note that under Minix-86
520 .B \-W
521 is ignored.  All assembly should therefore be in the "ncc" dialect.)
522 .SH FILES
523 .TP 10
524 .B /usr/lib/descr
525 The compiler description file.
527 .B .c
528 Suffix of a C source file.
530 .B .mod
531 Modula-2.
533 .B .p
534 Pascal.
536 .B .i
537 Preprocessed C source.
539 .B .k
540 ACK machine independent compact EM code produced by the C, Pascal, or
541 Modula-2 front end (or any other ACK front end.)  The ACK compilers are
542 based on the UNCOL idea where several front ends compile to a common
543 intermediate language, and several back ends transform the intermediate
544 language to the target machine language.  The ACK intermediate language
545 is named "EM".
547 .B .m
548 Peephole optimized EM.
550 .B .gk
551 Result of the (optional) EM global optimizer.
553 .B .g
554 Result of the second EM peephole optimizer used after the global optimizer.
556 .B .e
557 Human readable EM.  (Human created or decoded compact EM.)
559 .B .s
560 Target machine assembly.  (Current compiler dialect.)
562 .B .ack.s
563 ACK assembly.
565 .B .ncc.s
566 ACK Xenix style assembly.  This dialect is used by the 16 bit ACK ANSI C
567 compiler.
569 .B .gnu.s
570 GNU assembly.
572 .B .bas.s
573 BCC assembly.  (Used by the Bruce Evans' BCC compiler, for many years the
574 compiler for Minix-386.)
576 .B .o
577 Object code.
579 .B .a
580 Object code library.
582 .B a.out
583 Default output executable.
584 .SH "SEE ALSO"
585 .BR acd (1),
586 .BR ACK (7).
587 .SH AUTHOR
588 Kees J. Bot (kjb@cs.vu.nl)