5 <meta http-equiv="X-UA-Compatible" content="chrome=1">
8 <link rel="stylesheet" href="stylesheets/styles.css">
9 <link rel="stylesheet" href="stylesheets/pygment_trac.css">
10 <script src="javascripts/scale.fix.js"></script>
11 <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
13 <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
17 <a href="https://github.com/graphitemaster/gmqcc"><div class="fork"></div></a>
20 <h1 class="header">GMQCC</h1>
21 <p class="header">An Improved Quake C Compiler</p>
23 <li class="buttons"><a href=index.html>Index</a></li>
24 <li class="download"><a href="https://github.com/graphitemaster/gmqcc/archive/0.1.zip">Download v0.1</a></li>
25 <li class="buttons"><a href="https://github.com/graphitemaster/gmqcc/issues">Issues</a></li>
26 <li class="buttons"><a href="doc.html">Documentation</a></li>
27 <li class="buttons"><a href="https://github.com/graphitemaster/gmqcc">View On GitHub</a></li>
32 <li class="wiki"><a class="wiki" href="#cdoc">Compiler Documentation</a></li>
33 <li class="wiki"><a class="wiki" href="#bdoc">Building Documentation</a></li>
34 <li class="wiki"><a class="wiki" href="#tdoc">Testsuite Documentation</a></li>
35 <li class="wiki"><a class="wiki" href="#vdoc">Virtual Machine Documentation</a></li>
37 <h1><a name="cdoc">Compiler Documentation</a></h1>
38 <h3>Defaults Flag</h3>
40 The <i>-show-defaults</i> flag instructs the compiler to print out the defaults used related to
41 the standard, optimization, and code generation. When this flag is specified, the compiler
42 will just print the defaults and quit. No compilation is performed.
44 <pre>$ gmqcc -show-defaults</pre>
45 <h3>Compiling for an alternitive standard</h3>
46 To compile with a different dialect of the QuakeC programming language the <i>-std</i>
47 flag can be instructed to select one of the following options:
51 <td>default standard</td>
55 <td>fteqcc standard</td>
59 <td>vanila QuakeC standard</td>
62 <h2>Common compiler options</h2>
69 <td>-l<path></td>
70 <td>Adds <path> to the directories searched by the preprocessor for include file resolution.</td>
73 <td>-o <file></td>
74 <td>Generates the named executable (progs.src) file (when not specified default is progs.src).</td>
78 <td>-O<level></td>
79 <td>Specfies the optimization level: highest being 3, lowest being 0 (no optimization).</td>
83 <td>Instructs the compiler to only preprocess the input, writing the preprocessed output to stdout</td>
87 <td>Enables all compiled warnings for the selcted standard</td>
91 <td>Instruct the compiler to treat all warnings as errors</td>
94 <td>-std=<standard></td>
95 <td>Selects the standard dialect</td>
98 <h3>Predefined Macros</h3>
102 <td>What it represents</td>
106 <td>Specifies the current selected standard is gmqcc.</td>
110 <td>Specifies the current selected standard is fteqcc.</td>
114 <td>Specifies the current selected standard is qcc.</td>
118 <td>__STD_VERSION_MINOR__</td>
119 <td>Specifies the current selected stanadards minor version number.</td>
122 <td>__STD_VERSION_MAJOR__</td>
123 <td>Specifies the current selected stanadards major version number.</td>
126 <h3>Unsupported compatability options</h3>
128 GMQCC strives hard for compatability with standard dialects, but not all
129 features of those standards might be implemented. The unsupported features
137 <td>Inline Assembly</td>
141 <td>Macro expansion in strings</td>
146 <h2>Less common compiler options</h2>
147 <h3>Code generation options</h3>
151 <td>What it does</td>
154 <td>-foverlap-locals</td>
155 <td>Reduces codesize by overlapping locals where possible</td>
158 <td>-fdarkplaces-string-table-bug</td>
159 <td>Works around a bug in older Darkplaces engine builds where the stringtable size is computed wrong</td>
162 <td>-fadjust-vector-fields</td>
163 <td>corrects assignment of vector field pointers (STORE_V instead of STORE_FLD)</td>
167 <td>Enables FTEQ preprocessor</td>
170 <td>-frelaxted-switch</td>
171 <td>Relaxes switch statement semantics</td>
174 <td>-fshort-logic</td>
175 <td>Enables short circut evaluation/logic</td>
178 <td>-fperl-logic</td>
179 <td>Enables perl evalutaion/logic</td>
182 <h3>Warning options</h3>
186 <td>What it does</td>
189 <td>-Wunused-uninitialized</td>
190 <td>Enables warnings about unused or uninitialized variables</td>
193 <td>-Wunknwon-control-sequence</td>
194 <td>Enables warnings about unknown control sequences</td>
198 <td>Enables warnings about the use of (an) extension(s)</td>
201 <td>-Wfield-redeclared</td>
202 <td>Enables warnings about redeclared fields</td>
205 <td>-Wmissing-return-values</td>
206 <td>Enables warnings about missing return values</td>
209 <td>-Wtoo-few-paramaters</td>
210 <td>Enables warnings about missing paramaters for function calls</td>
213 <td>-Wlocal-shadows</td>
214 <td>Enables warnings about locals shadowing paramaters or other locals</td>
217 <td>-Wlocal-constants</td>
218 <td>Enables warnings about constants specified as locals</td>
221 <td>-Wvoid-variables</td>
222 <td>Enables warnings about variables declared as type void</td>
225 <td>-Wimplicit-function-pointer</td>
226 <td>Enables warnings about implicitly declared function pointers</td>
229 <td>-Wvariadic-function</td>
230 <td>Enables warnings for use of varadics for non-builtin functions</td>
233 <td>-Wframe-macros</td>
234 <td>Enables warnings about duplicated frame macros</td>
237 <td>-Weffectless-statement</td>
238 <td>Enables warnings about effectiveless statements</td>
241 <td>-Wend-sys-field</td>
242 <td>Enables warnings of end_sys_fields being declared a field</td>
245 <td>-Wassign-function-types</td>
246 <td>Enables warnings for incompatible function pointer signatures used in assignment</td>
249 <td>-Wpreprocessor</td>
250 <td>Enables warnings about redefined macros</td>
253 <td>-Wmultifile-if</td>
254 <td>Enables warnings about multifile if statements</td>
258 Individual warnings may be disabled with -Wno-<warning>
259 <pre>$ gmqcc -Wno-frame-macros # disables frame duplication warning</pre>
261 <h3>Miscellaneous options</h3>
265 <td>What it does</td>
268 <td>-force-crc=<num></td>
269 <td>Forces a specific checsum into the header</td>
273 <td>Turns on compiler debug messages</td>
277 <td>Turns on compiler memory leak checker</td>
280 <td>-Whelp or -W?</td>
281 <td>Lists all warning options</td>
284 <td>-fhelp or -f?</td>
285 <td>Lists all code generation options</td>
288 <td>-redirout=<file></td>
289 <td>Redirect stdout to any file.</td>
292 <td>-redirerr=<file></td>
293 <td>Redirect stderr to any file.</td>
297 <td>Turn off colored stdout/stderr.</td>
301 <h1><a name="bdoc">Building Documentation</a></h1>
302 <h2>Building on BSD/NIX</h2>
304 To compile GMQCC on BSD/NIX the following things are
310 <li>Any C90+ C compiler</li>
313 Once obtained you may checkout the development repository
314 with the following shell commands
316 <pre>$ git clone git://github.com/graphitemaster/gmqcc.git
320 The Makefile contains a few rules, depending on what you
321 want to compile, the following rules are:
326 <td>What it does</td>
330 <td>Builds the gmqcc compiler</td>
334 <td>Builds a standable QuakeC VM</td>
338 <td>Builds the testsuite for GMQCC</td>
342 <td>Builds gmqcc, qcvm, and testsuite</td>
346 <td>Installs gmqcc to /usr/local/</td>
350 <td>Runs the testsuite to verify correctness</td>
354 <h2>Building on Windows</h2>
356 To compile GMQCC on windows the following things are
360 <li><a href="http://msysgit.googlecode.com/files/Git-1.8.0-preview20121022.exe">msysGit</a></li>
361 <li><a href="http://www.microsoft.com/visualstudio/eng/downloads">Visual Studio</a></li>
364 Once obtained you may checkout the development repository
365 with the following msysGit commands from a msysGit shell.
366 <pre>$ git clone git://github.com/graphitemaster/gmqcc.git</pre>
367 Included is a VS project file.
370 <h1><a name="tdoc">Testsuite Documentation</a></h1>
371 <h2>Running The Testsuite</h2>
373 To run the testsuite you can either use
374 <pre>$ make check</pre>
375 Or if you're on windows or have already compiled the
376 testsuite from source:
377 <pre>$ ./testsuite </pre>
379 Optionally you may provide the testsuite with additional
385 <td>What it does</td>
388 <td>-redirout=<file></td>
389 <td>Redirect stdout to any file.</td>
392 <td>-redirerr=<file></td>
393 <td>Redirect stderr to any file.</td>
397 <td>Turn on testsuite debug messages.</td>
401 <td>Turn on testsuite memleak checker.</td>
405 <td>Turn off colored stdout/stderr.</td>
409 <h2>Writing Tests</h2>
411 GMQCC comes with a complete testsuite for verifying semantics
412 and syntatics. The testsuite executes files from the test/
413 directory, by reading task template files.
416 templates are rules for a specific test, used to create a "task" that
417 is executed with those set of rules (arguments, and what not). Tests
418 that don't have a template with them cannot become tasks, since without
419 the information for that test there is no way to properly "test" them.
420 Rules for these templates are described in a template file, using a
421 task template language.
424 The languge is composed entierly of "tags" which describe a string of
425 text for a task. Think of it much like a configuration file. Except
426 it's been designed to allow flexibility and future support for prodecual
430 The following "tags" are suported by the language:
435 <td>Description of what the tag does</td>
439 <td>Used to set a description of the current test, this must be
440 provided, this tag is NOT optional.</td>
444 <td>Used to set a failure message, this message will be displayed
445 if the test fails, this tag is optional.</td>
449 <td>Used to set a success message, this message will be displayed
450 if the test succeeds, this tag is optional.
455 <td>Used to set the procedure for the given task, there are two
459 This simply performs compilation only</li>
461 This will perform compilation and execution</li>
464 This tag must be provided, this tag is NOT optional.
469 <td>Used to set the compilation flags for the given task, this
470 must be provided, this tag is NOT optional.</td>
474 <td>Used to set the execution flags for the given task. This tag
475 must be provided if T == -execute, otherwise it's erroneous
476 as compilation only takes place.</td>
480 <td>Used to describe a string of text that should be matched from
481 the output of executing the task. If this doesn't match the
482 task fails. This tag must be provided at least once if
483 T == -execute, otherwise it's erroneous as compilation only
484 takes place. Multiple M tags are required for multi-line comparision
489 <td>Used to specify the INPUT source file to operate on, this must be
490 provided, this tag is NOT optional</td>
495 These tags (with exception to M) have one-time use, using them more
496 than once will result in template compilation errors,
499 Lines beginning with # or // in the template file are comments and
500 are ignored by the template parser.
501 Whitespace is optional, with exception to the colon ':' between the
502 tag and it's assignment value.
504 The template compiler will detect erronrous tags (optional tags
505 that need not be set), as well as missing tags, and error accordingly
506 which will result in that task failing.
508 <h1><a name="vdoc">Quake C Virtual Machine Documentation</a></h1>
510 Included with GMQCC is a minimal implementation of the QCVM used in many game
511 engines. It's primarly used for the testsuite, but you may also use it as a
512 standalone runtime, or even embed it with existing appliciations.
514 <h2>Running The Standalone VM</h2>
516 To run the standalone application you need to have a compiled progs.dat, with an
517 entry function named main The main function can have any amount of arguments
518 as the standalone executor allows main to be invoked with your choice of arguments.
519 An example of invoking the VM:
520 <pre>$ ./qcvm progs.dat -float 200 #execute passing in 200 as a float to main</pre>
521 If main doesn't require arguments:
522 <pre>$ ./qcvm progs.dat #call main with no arguments</pre>
524 The standalone executor supports the following arguments for passing arguments to main 
529 <td>What it does</td>
533 <td>Passes in a string to main</td>
537 <td>Passes in a float to main</td>
541 <td>Passes in a vector to main</td>
545 The order in which the arguments are expected for main, must be preserved, for
546 example if main 's signature is the following:
547 <pre>void main(float a, vector b)</pre>
549 Then to pass the arguments you'd use the same order:
550 <pre>$ ./qcvm -float 200 -vector '1 2 3'</pre>
552 <h3>Additional Arguments</h3>
553 The standalone virtual machine has the following optional command line arguments:
557 <td>What it does</td>
561 <td>Trace the execution call hierarchy.</td>
565 <td>Profile the bytecode to find hotspots.</td>
569 <td>Get info of the running bytecode.</td>
573 <td>Dissasemble the bytecode into assembly.</td>
577 <td>Prints all definitions for the bytecode running.</td>
580 <td>-printfields</td>
581 <td>Prints all fields for the bytecode running.</td>
586 The standalone virtual machine includes the following builtins.
592 <tr><td>print</td><td>1</td></tr>
593 <tr><td>ftos</td><td>2</td></tr>
594 <tr><td>spawn</td><td>3</td></tr>
595 <tr><td>kill</td><td>4</td></tr>
596 <tr><td>vtos</td><td>5</td></tr>
597 <tr><td>error</td><td>6</td></tr>
598 <tr><td>vlen</td><td>7</td></tr>
599 <tr><td>etos</td><td>8</td></tr>
602 <h3>Support or Contact</h3>
603 <p>Having trouble with GMQCC? Join our IRC channel at #kf-engine on irc.freenode.net or contact <a href="mailto:cube2killfild@gmail.com">Us</a>
606 <script type="text/javascript" src="http://www.ohloh.net/p/602517/widgets/project_partner_badge.js"></script>
609 <!--[if !IE]><script>fixScale(document);</script><![endif]-->