quakeforge/tools/qfcc/doc/man/qfcc.1

430 lines
16 KiB
Groff
Raw Normal View History

.\" hey, Emacs: -*- nroff -*-
.\" qfcc is free software; you can redistribute it and/or modify
.\" it under the terms of the GNU General Public License as published by
.\" the Free Software Foundation; either version 2 of the License, or
.\" (at your option) any later version.
.\"
.\" This program is distributed in the hope that it will be useful,
.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
2002-01-05 18:46:05 +00:00
.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
.\"
.\" See the GNU General Public License for more details.
.\"
.\" You should have received a copy of the GNU General Public License
2002-01-05 18:46:05 +00:00
.\" along with this program; see the file COPYING. If not, write to:
.\"
2002-01-05 18:46:05 +00:00
.\" Free Software Foundation, Inc.
.\" 59 Temple Place, Suite 330
.\" Boston, MA 02111-1307, USA
.\"
.\" Some roff macros, for reference:
.\" .nh disable hyphenation
.\" .hy enable hyphenation
.\" .ad l left justify
.\" .ad b justify to both left and right margins (default)
.\" .nf disable filling
.\" .fi enable filling
.\" .br insert line break
.\" .sp <n> insert n+1 empty lines
.\" for manpage-specific macros, see man(7)
2002-01-05 18:46:05 +00:00
.\"
.ds qfcc \fBqfcc\fP
.ds cpp \fBcpp\fP
.ds progs.src \fIprogs.src\fP
2004-04-28 04:49:15 +00:00
.TH QFCC 1 "28 April, 2004" QuakeForge "QuakeForge Developer's Manual"
2002-01-05 18:46:05 +00:00
.\" Please update the above date whenever this man page is modified.
.SH NAME
qfcc \- The QuakeForge Code Compiler
.SH SYNOPSIS
.B qfcc
.RI [ options ]
2003-05-15 18:53:45 +00:00
.RI [ files ]
.SH DESCRIPTION
\*[qfcc] compiles Ruamoko source into a form that the QuakeForge engine can
understand.
.SH OPTIONS
\*[qfcc] takes the following arguments:
.TP
.B \-\-advanced
2007-04-11 12:04:53 +00:00
Use advanced Ruamoko features.
This is the default when using separate compilation.
.TP
2003-05-16 00:08:20 +00:00
.B \-C, \-\-code OPTION,...
2007-04-11 12:04:53 +00:00
Set code generation options.
See \fBCODE GENERATION OPTIONS\fP for details.
.TP
2003-05-16 00:08:20 +00:00
.B \-c
2007-04-11 12:04:53 +00:00
Compile only, do not link.
Can be used in either \fBprogs.src\fP or separate compilation modes.
.TP
.B \-\-cpp CPPSPEC
\*[cpp] execution command line.
2007-04-11 12:04:53 +00:00
See \fBCPP NAME\fP for details.
.TP
.B \-D, \-\-define SYMBOL[=VAL]
2004-02-09 16:51:06 +00:00
Define a symbol for the preprocessor, if it is in use.
2003-05-16 00:08:20 +00:00
.TP
.B \-E
2007-04-11 12:04:53 +00:00
Preprocessor only.
No compilation or linking is done.
.TP
2003-05-16 00:08:20 +00:00
.B \-F, \-\-files
2007-04-11 12:04:53 +00:00
Generate \fIfiles.dat\fP.
This list is created by checking the parameters to the precache_* functions.
.TP
2003-05-15 18:53:45 +00:00
.B \-g
2007-04-11 12:04:53 +00:00
Generate debugging info.
Synonym for \fB\-\-code debug\fP.
2003-05-15 18:53:45 +00:00
.TP
2003-05-16 00:08:20 +00:00
.B \-h, \-\-help
Show summary of options.
.TP
.B \-I DIR
2003-05-16 00:08:20 +00:00
Add DIR to the list of directories for the preprocessor to search when looking
for include files.
.TP
.B \-\-include FILE
Process FILE as if \fB#include "FILE"\fP appeared as the first line of the
primary source file. See the \*[cpp] man page (\fB\-include\fP) for details.
.TP
2003-05-16 00:08:20 +00:00
.B \-L DIR
Add DIR to the search path used for finding libraries specified with \fB-l\fP.
2003-05-16 00:08:20 +00:00
.TP
.B \-l LIB
Add libLIB.a to the list of libraries to be used for resolving undefined
symbols. \*[qfcc] expects libraries to be \fBpak\fP files of \*[qfcc]
object files built using the \fBpak\fP utility. (\fBFIXME\fP: add sections
on object files and library files)
2003-05-16 00:08:20 +00:00
.TP
.B \-M, \-MD, \-MMD
Generate dependency info. Dependent on \*[cpp] version, so check \*[cpp]'s
documentation.
.TP
2003-05-16 00:08:20 +00:00
.B \-N, \-\-notice OPTION,...
Set notice options. See \fBNOTICE OPTIONS\fP for details.
.TP
2004-04-28 04:49:15 +00:00
.B \-o, \-\-output\-file FILE
Specify output file name.
In \fBprogs.src\fP mode, this overides the output file in \*[progs.src].
2003-05-15 18:53:45 +00:00
.TP
.B \-P, \-\-progs\-src FILE
File to use instead of \*[progs.src].
No effect in separate compilation mode.
2003-05-15 18:53:45 +00:00
.TP
.B \-p, \-\-strip\-path NUM
Strip NUM leading path elements from file names.
eg. -p 3 will strip the
2007-04-11 12:04:53 +00:00
.I ../../../
from
.I ../../../src/foo.r
when embedding the source file name in the output code.
2003-05-15 18:53:45 +00:00
.TP
2003-05-16 00:08:20 +00:00
.B \-q, \-\-quiet
Inhibit some of \*[qfcc]'s normal output.
Specifying this option multiple times further inhibits \*[qfcc]'s output.
Counteracts the effects of \fB-v\fP.
.TP
.B \-r, \-\-relocatable
2007-04-11 12:04:53 +00:00
Incremental linking.
Generate a larger object file from other object files and libraries.
(\fBFIXME\fP: add section describing the linker and its operation)
.TP
2003-05-15 18:53:45 +00:00
.B \-S, \-\-save\-temps
Do not delete temporary files.
.TP
2003-05-16 00:08:20 +00:00
.B \-s, \-\-source DIR
Look for \*[progs.src] in \fBDIR\fP instead of the current directory.
.TP
.B \-\-traditional
2007-04-11 12:04:53 +00:00
Use traditional QuakeC syntax, semantics and \*(lqbugs\*(rq.
Also implies the \fBv6only\fP, \fBno-short-circuit\fP and
\fBno-local-merging\fP code generation options (see
\fBCODE GENERATION OPTIONS\fP).
This is the default when using \fBprogs.src\fP mode.
.TP
.B \-U, \-\-undefine SYMBOL
Undefine a preprocessor symbol, if the preprocessor is in use.
2003-05-15 18:53:45 +00:00
.TP
2003-05-16 00:08:20 +00:00
.B \-V, \-\-version
Show the version of \*[qfcc].
2003-05-15 18:53:45 +00:00
.TP
2003-05-16 00:08:20 +00:00
.B \-v, \-\-verbose
Display more output than usual.
Specifying this option multiple times further increases \*[qfcc]'s output.
Counteracts the effects of \fB-q\fP.
2003-05-15 18:53:45 +00:00
.TP
2003-05-16 00:08:20 +00:00
.B \-W, \-\-warn OPTION,...
2007-04-11 12:04:53 +00:00
Set warning options.
See \fBWARNING OPTIONS\fP for details.
2003-05-15 18:53:45 +00:00
.TP
.B \-z
2007-04-11 12:04:53 +00:00
Compress object files when writing them.
This is especially useful when creating libraries, especially if using the
object oriented features, but can be quite slow.
This has no effect when creating \fBprogs.dat\fP.
.SH "CODE GENERATION OPTIONS"
Code generation options are processed in the order of their appearance on the
2007-04-11 12:04:53 +00:00
command line.
Unsupported options are ignored.
The following options are supported by \*[qfcc]'s \fB\-\-code\fP argument:
.TP
.B cow
2007-04-11 12:04:53 +00:00
Allow assignment to initialized globals.
In Quake-C and Ruamoko, a global that has been initialized to a value is not
a variable, but a named constant.
However, \fBqcc\fP never really enforced this.
The \fBcow\fP option allows \*[qfcc] to gracefully cope with QuakeC source
2007-04-11 12:04:53 +00:00
that assigns values to initialized globals in this manner.
(also known as \*(lqcopy on write\*(rq\(emnever mind the bovine connotations)
.TP
.B cpp
Preprocess all input files with \*[cpp].
This includes the \*[progs.src] file when used.
.TP
.B debug
2007-04-11 12:04:53 +00:00
Generate debug code for QuakeForge engines.
The QuakeForge engine has the ability to load line number and other debugging
information for use in diagnosing progs crashes.
This option tells \*[qfcc] to generate this information.
2007-04-11 12:04:53 +00:00
It is written to a secondary file with the extension \*(lqsym\*(rq\(emif your
output file is \*(lqprogs.dat\*(rq, the symbol file will be
\*(lqprogs.sym\*(rq.
.TP
.B fast\-float
2007-04-11 12:04:53 +00:00
Use float values directly in \*(lqif\*(rq statements.
Defaults to on.
This option is always enabled when using version 6 progs (\fBv6only\fP is in
effect).
.TP
.B local-merging
Clump the local variables from all functions into one block of data the size
of the largest group of locals, resulting in large savings of global data
2007-04-11 12:04:53 +00:00
space.
When off, each function's local variable block is separate from the others,
preserving the behaviour of traditional \fBqcc\fP, but using much more global
data.
This can be a problem because instructions can access addresses up to 32767 in
older servers or 65535 in most modern servers.
2007-04-11 12:04:53 +00:00
Defaults to off for traditional mode, and on for advanced mode.
.TP
.B short\-circuit
2007-04-11 12:04:53 +00:00
Generate short circuit code for logical operators (\fB&&\fP and \fB||\fP).
For \fBA && B\fP, if \fBA\fP is false, the expression is known to be false and
the code for \fBB\fP will not be executed.
Similar for \fBA || B\fP, but if \fBA\fP is true, the expression is known to
be true and the code for \fBB\fP will not be executed.
Defaults to off for traditional mode, and on for advanced mode.
.TP
.B single-cpp
In \fBprogs.src\fP mode, when \*[cpp] is used, produce an intermediate file
2007-04-11 12:04:53 +00:00
that is a series of \fB#include\fP directives, one for each source file.
This file is then passed to \*[cpp] and the resulting output is compiled in
2007-04-11 12:04:53 +00:00
one go.
This results in preprocessor directives in early files affecting later files,
as would be expected in \fBprogs.src\fP mode.
Without this option, each source file is independent with respect to the
preprocessor.
Has no effect in separate compilation mode.
2007-04-11 12:04:53 +00:00
Defaults to on.
.TP
.B vector\-calls
When a function is passed a constant vector, this causes the vector to be
passed using three float copy instructions instead of one vector copy
instruction.
2007-04-11 12:04:53 +00:00
This can save a good number of pr_globals where those vectors contain many
duplicate coordinates but do not match entirely.
However, this will generate slower code for such calls.
.TP
.B v6only
Restrict the compiler to only version 6 progs (original Quake/QuakeWorld)
2007-04-11 12:04:53 +00:00
features.
This means that the compiled data file should be able to run on older servers,
as long as you have not used any QuakeForge-specific built-in functions.
Also disables compiler features (such as integers and string manipulation
support) that require extensions.
2007-04-11 12:04:53 +00:00
Defaults to on for traditional mode and off for advanced mode.
.SH "WARNING OPTIONS"
Warning options are processed in the order of their appearance on the command
2007-04-11 12:04:53 +00:00
line.
Unsupported options are ignored.
The following options are supported by \*[qfcc]'s \fB\-\-warn\fP argument:
.TP
.B cow
2007-04-11 12:04:53 +00:00
Emit a warning when the source assigns a value to a named constant.
See the description of the \fBcow\fP code generation option above for a
description of what this means.
.TP
.B error
Promote warnings to errors.
.TP
.B executable
Emit a warning when non-executable statements (eg, \fB==\fP used for
assignment) are encountered.
.TP
.B initializer
Emit a warning when too many structure/array initializer elements are given.
.TP
.B integer-divide
Emit a warning when both constants in a division operation are integers.
.TP
.B interface\-check
Emit a warning when a method is declared in an implementation but not in the
interface for a class.
.TP
.B precedence
Emit a warning when potentially ambiguous logic is used without parentheses.
.TP
.B traditional
Emit a warning when code that should be an error is allowed by traditional
2007-04-11 12:04:53 +00:00
\fBqcc\fP.
Has effect only in traditional mode.
.TP
2002-01-05 18:46:05 +00:00
.B undef\-function
Emit a warning when a function is called, but has not yet been defined.
.TP
.B unimplemented
Emit a warning when a class method has not been implemented.
.TP
.B unused
Emit a warning for unused local variables.
.TP
2002-01-05 18:46:05 +00:00
.B uninited\-var
Emit a warning when a variable is read from that has not been initialized to a
value.
.TP
2002-01-05 18:46:05 +00:00
.B vararg\-integer
Emit a warning when a function that takes a variable number of arguments is
passed a constant of an integer type.
.PP
2007-04-11 12:04:53 +00:00
Any of the above can be prefixed with \fBno\-\fP to negate its meaning.
There are also two special options:
.TP
.B all
Turns on all warning options except \fBerror\fP.
.TP
.B none
Turns off all warning options except \fBerror\fP.
2003-05-15 18:53:45 +00:00
.SH "NOTICE OPTIONS"
Notices are used to flag code constructs that may have changed semantics but
2007-04-11 12:04:53 +00:00
shouldn't be treated as warnings.
They are also used for internal debugging purposes, so if you see any cryptic
notices, please report them as a bug (normal notices should be fairly
self-explanatory).
2003-05-15 18:53:45 +00:00
.TP
.B none
Silences all notice messages.
.TP
.B warn
2007-04-11 12:04:53 +00:00
Promote notices to warnings.
If warnings are being treated as errors, so will notices.
Disabling warnings has no effect on this option.
2003-05-15 18:53:45 +00:00
.SH "CPP NAME"
When preprocessing source files, \*[qfcc] calls \*[cpp] (the C
2007-04-11 12:04:53 +00:00
preprocessor) with a configurable command line.
This is useful when you wish to use an alternative preprocessor (though it
must be command line compatible with \*[cpp]) or when \*[qfcc] has been
misconfigured to call \*[cpp] incorrectly for your operating system.
2007-04-11 12:04:53 +00:00
If the latter is the case, please report the details (operating system,
detection methods, correct execution specification).
The base default execution spec (on most Linux systems) is
\fBcpp %d -o %o %i\fP.
This spec is similar in concept to a \fBprintf\fP string.
The name of the program may be either absolute (eg \fB/lib/cpp\fP) or relative
as the \fBPATH\fP will be searched.
Available substitutions:
2003-05-15 18:53:45 +00:00
.TP
.B %d
2004-04-28 04:49:15 +00:00
Mainly for defines (\-D, \-U and \-I) but \fB%d\fP will be replaced by all
\*[cpp] options that \*[qfcc] passes to \*[cpp]
2003-05-15 18:53:45 +00:00
.TP
.B %o
2007-04-11 12:04:53 +00:00
This will be replaced by the output file path.
Could be either absolute or relative, depending on whether \*[qfcc] is
2007-04-11 12:04:53 +00:00
deleting temporary files or not.
2003-05-15 18:53:45 +00:00
.TP
.B %i
2007-04-11 12:04:53 +00:00
This will be replaced by the input file path.
Generally as given to \*[qfcc].
.SH "COMPILATION MODES"
\*[qfcc] has two, mutually exclusive, modes of operation: \fBprogs.src\fP
mode and \*(lqseparate compilation\*(rq mode.
.SS "progs.src mode"
This is the traditional method of compiling QuakeC programs.
It is selected when no file arguments are given to \*[qfcc].
Note that the \fB-lLIB\fP option is considered to be a file argument.
.P
In this mode, the file \[progs.src] is used to specify the output file name and
the input source files.
While it is customary to write each file name on a separate line, file names
are really just white-space separated strings (use double quotes around files
with spaces, though using files with spaces is a gibbing offence).
\fB//\fP is used to denote a comment.
The comment extends to the end of the current line.
The first file name in the file specified the output file name.
This may be overridden using the \fB-o\fP option.
All subsequent file names specify QuakeC source files.
.P
The source files are cumulatively compiled in the order they are listed in
\[progs.src].
Cumulatively compiled means that all symbols other than frame macros defined in
earlier source files are visible in later source files.
Once the all source files have been compiled, the finished program is written
to the output file as a normal \fIprogs.dat\fP file.
.P
If the \fB-c\fP option is given, instead of a \fIprogs.dat\fP file, an object
file is written. This object file can then be linked against other object files
to produce the \fIprogs.dat\fP file. This is useful when mod extensions are in
library form and converting the main mod from \fBprogs.src\fP style to
separate compilation is undesirable.
.P
\fBprogs.src\fP mode implies \fB--traditional\fP.
.P
When \[cpp] has not been disabled, \[progs.src] is first passed through \[cpp].
The result is then parsed as above, but unless the \fBno-single-cpp\fP code
option has been given, rather than compiling each source file, an intermediate
file is generated containing a series of frame macro reset and \fB#include\fP
directives, one for each file.
This intermediate file is then passed to \[cpp] and the resulting single file
containing all of the pre-processed source code is then compiled.
.SS "\*(lqseparate compilation\*(rq mode"
much like C. \fBFIXME\fP I'm tired, I'm going to bed.
2001-09-26 03:39:44 +00:00
.SH "FAQ"
.TP
2001-12-14 05:33:00 +00:00
.B Where did the name Ruamoko come from?
2002-01-05 18:46:05 +00:00
In Maori mythology, Ruamoko is the youngest child of Ranginui, the
2007-04-11 12:04:53 +00:00
Sky-father, and Papatuanuku, the Earth-mother.
Ruamoko is the god of volcanoes and earthquakes \fB(Quake, get it?)\fP.
For more information, see the Web site at <\fBhttp://maori.com/kmst1.htm\fP>.
2001-12-14 05:33:00 +00:00
.TP
.B qfcc hangs
This is almost always caused by qfcc incorrectly invoking \*[cpp].
2007-04-11 12:04:53 +00:00
Using the \fB--cpp\fP option (refer to the \fBCPP NAME\fP section above), the
correct method for invoking \*[cpp] can be specified.
Once you have found this, please send the correct \*[cpp] command line,
2007-04-11 12:04:53 +00:00
preferably along with the output of \fBconfig.guess\fP, to the team.
.TP
2001-09-26 03:39:44 +00:00
.B qfcc is singing a bad 80s rap song to me. What's going on?
2004-04-28 04:49:15 +00:00
\*(lqice ice baby\*(rq is QuakeForge-speak for \*(lqInternal Compiler
2007-04-11 12:04:53 +00:00
Error\*(rq.
It usually means there's a bug in \*[qfcc], so please report it to the team.
.TP
2001-09-26 03:39:44 +00:00
.B qfcc is mooing at me. What's wrong with you people?
2007-04-11 12:04:53 +00:00
The compiler doesn't like being treated like a slab of beef.
Seriously, the code you are trying to compile is using constants as if they
weren't.
2002-01-05 18:46:05 +00:00
Normally, qfcc would just stop and tell the code to sit in the corner for a
while, but you told it not to do that by passing the \fBcow\fP option to
2007-04-11 12:04:53 +00:00
\fB\-\-code\fP, so it has its revenge by mooing out a warning.
Or something like that.
To disable the warning, pass \fBno-cow\fP to \fB\-\-warn\fP.
.SH "FILES"
2007-04-11 12:04:53 +00:00
.I progs.src
.SH "SEE ALSO"
2007-04-11 12:04:53 +00:00
.BR quakeforge (1),
.BR pak (1)
.SH AUTHORS
2001-12-14 05:33:00 +00:00
The original \fBqcc\fP program, for compiling the QuakeC language, was written
2007-04-11 12:04:53 +00:00
by Id Software, Inc.
The members of the QuakeForge Project have modified it to work with a new,
but very similar language called \fBRuamoko\fP.