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

285 lines
11 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
.\"
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
\fBqfcc\fP compiles Ruamoko source into a form that the QuakeForge engine can
understand.
.SH OPTIONS
\fBqfcc\fP takes the following arguments:
.TP
.B \-\-traditional
2004-04-28 04:49:15 +00:00
Use traditional QuakeC syntax, semantics and \*(lqbugs\*(rq. Also implies the
\fBv6only\fP code generation option. This is the default when using progs.src.
.TP
.B \-\-advanced
Use advanced Raumoko features. This is the default when using separate
compilation.
.TP
2003-05-16 00:08:20 +00:00
.B \-C, \-\-code OPTION,...
Set code generation options. See \fBCODE GENERATION OPTIONS\fP for details.
.TP
2003-05-16 00:08:20 +00:00
.B \-c
Compile only, do not link. Can be used in either progs.src or separate
compilation modes.
.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 \-F, \-\-files
Generate files.dat. This list is created by checking the parameters to the
precache_* functions.
.TP
2003-05-15 18:53:45 +00:00
.B \-g
Generate debugging info. Synonym for \fB\-\-code debug\fP.
.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 -l.
.TP
.B \-l LIB
Add libLIB.a to the list of libraries to be used for resolving undefined
symbols. \fBqfcc\fP's libraries are really \fBpak\fP files of \fBqfcc\fP
object files built using the \fBpak\fP utility.
.TP
.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.
2003-05-15 18:53:45 +00:00
.TP
.B \-P, \-\-progs\-src FILE
File to use instead of progs.src
.TP
.B \-p, \-\-strip\-path NUM
Strip NUM leading path elements from file names. eg. -p 3 will strip the
../../.. from ../../../src/foo.r when embedding the source file name in the
output code.
.TP
2003-05-16 00:08:20 +00:00
.B \-q, \-\-quiet
2004-04-28 04:49:15 +00:00
Inhibit some of \fBqfcc\fP's normal output.
.TP
2003-05-16 00:08:20 +00:00
.B \-r
Incremental linking. Generate a larger object file from other object files
and libraries.
.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 DIR instead of the current directory.
.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
2004-04-28 04:49:15 +00:00
Show the version of \fBqfcc\fP.
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.
2003-05-15 18:53:45 +00:00
.TP
2003-05-16 00:08:20 +00:00
.B \-W, \-\-warn OPTION,...
Set warning options. See \fBWARNING OPTIONS\fP for details.
2003-05-15 18:53:45 +00:00
.TP
.B \-z
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.
2003-05-16 00:08:20 +00:00
.TP
.B \-\-cpp CPPSPEC
\fBcpp\fP execution command line. See \fBCPP NAME\fP for details.
.SH "CODE GENERATION OPTIONS"
Code generation options are processed in the order of their appearance on the
command line. Unsupported options are ignored. The following options are
supported by \fBqfcc\fP's \fB\-\-code\fP argument:
.TP
.B cow
2002-01-05 18:46:05 +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.
2001-12-14 05:33:00 +00:00
However, \fBqcc\fP never really enforced this. The \fBcow\fP option allows
\fBqfcc\fP to gracefully cope with QuakeC source that assigns values to
2004-04-28 04:49:15 +00:00
initialized globals in this manner. (also known as \*(lqcopy on
write\*(rq\(emnever mind the bovine connotations)
.TP
.B debug
Generate debug code for QuakeForge engines. The QuakeForge engine has the
2004-04-28 04:49:15 +00:00
ability to load line number and other debugging information for use in
diagnosing progs crashes. This option tells \fBqfcc\fP to generate this
2004-04-28 04:49:15 +00:00
information. 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 short\-circuit
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
2004-04-28 04:49:15 +00:00
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 fast\-float
2004-04-28 04:49:15 +00:00
Use float values directly in \*(lqif\*(rq statements. Defaults to on. This
option is always enabled when using version 6 progs.
.TP
.B vector\-calls
Where a function is called with just a vector, this causes the function call to
store three floats instead of one vector. This can save a good number of
pr_globals where those vectors contain many duplicate coordinates but do not
match entirly. However, this will generate slower code for such calls.
.TP
.B v6only
Restrict the compiler to only version 6 progs (original Quake/QuakeWorld)
2002-01-05 18:46:05 +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 some of the compiler's features (like integers and
string manipulation support).
.SH "WARNING OPTIONS"
Warning options are processed in the order of their appearance on the command
line. Unsupported options are ignored. The following options are supported by
\fBqfcc\fP's \fB\-\-warn\fP argument:
.TP
.B cow
Emit a warning when the source assigns a value to a named constant. See the
2002-01-05 18:46:05 +00:00
description of the \fBcow\fP code option above for a description of what this
means.
.TP
.B interface\-check
Emit a warning when a method is declared in an implementation but not in the
interface for a class.
.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
2002-01-05 18:46:05 +00:00
.B uninited\-var
Emit a warning when a variable is read from that has not been initalized 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.
.TP
.B error
Promote warnings to errors.
.PP
2002-01-05 18:46:05 +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
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
2004-04-28 04:49:15 +00:00
(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
Promote notices to warnings. If warnings are being treated as errors, so will
notices.
.SH "CPP NAME"
When preprocessing source files, \fBqfcc\fP calls \fBcpp\fP (the C
2004-04-28 04:49:15 +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
2004-04-28 04:49:15 +00:00
with \fBcpp\fP) or when \fBqfcc\fP has been misconfigured to call \fBcpp\fP
incorrectly for your operating system. 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
2004-04-28 04:49:15 +00:00
\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
\fBcpp\fP options that \fBqfcc\fP will be passing.
2003-05-15 18:53:45 +00:00
.TP
.B %o
This will be replaced by the output file path. Could be either absolute or
relative, depending on whether \fBqfcc\fP is deleting temporary files or not.
.TP
.B %i
This will be replaced by the input file path. Generally as given to \fBqfcc\fP.
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
2004-04-28 04:49:15 +00:00
Sky-father, and Papatuanuku, the Earth-mother. Ruamoko is the god of
2002-01-05 18:46:05 +00:00
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 \fBcpp\fP. 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 \fBcpp\fP command line, 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
Error\*(rq. It usually means there's a bug in \fBqfcc\fP, 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?
2002-01-05 18:46:05 +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.
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
\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"
progs.src
.SH "SEE ALSO"
2003-05-15 18:53:45 +00:00
.BR quakeforge (1), pak (1)
.SH AUTHORS
2001-12-14 05:33:00 +00:00
The original \fBqcc\fP program, for compiling the QuakeC language, was written
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.