<p class="header">An Improved Quake C Compiler</p>
<ul>
<li class="buttons"><a href=index.html>Index</a></li>
- <li class="download"><a href="https://github.com/graphitemaster/gmqcc/archive/0.1.zip">Download v0.1</a></li>
<li class="buttons"><a href="https://github.com/graphitemaster/gmqcc/issues">Issues</a></li>
<li class="buttons"><a href="doc.html">Documentation</a></li>
<li class="buttons"><a href="https://github.com/graphitemaster/gmqcc">View On GitHub</a></li>
<td>__STD_VERSION_MAJOR__</td>
<td>Specifies the current selected stanadards major version number.</td>
</tr>
+ <tr>
+ <td>__FILE__</td>
+ <td>Expands to a const string literal of the current file (requires -fftepp-predef)</td>
+ </tr>
+ <tr>
+ <td>__LINE__</td>
+ <td>Expands to the current line number (requires -fftepp-predef)</td>
+ </tr>
+ <tr>
+ <td>__RANDOM__</td>
+ <td>Expands to a random number between [0, 256) (requires -fftepp-predef)</td>
+ </tr>
+ <tr>
+ <td>__COUNTER__</td>
+ <td>Expands to a unique number, each expansion causes it to increment (requires -fftepp-predef) </td>
+ </tr>
+ <tr>
+ <td>__RANDOM_LAST__</td>
+ <td>Expands to the last random number (requires -fftepp-predef)</td>
+ </tr>
+ <tr>
+ <td>__COUNTER_LAST__</td>
+ <td>Expands to the last counter number (requires -fftepp-predef)</td>
+ </tr>
</table>
<h3>Unsupported compatability options</h3>
<p>
<td>-fftepp</td>
<td>Enables FTEQ preprocessor</td>
</tr>
+ <tr>
+ <td>-fftepp-predef</td>
+ <td>Enables additional predefined macros for the FTEQ preprocessor</td>
+ </tr>
<tr>
<td>-frelaxted-switch</td>
<td>Relaxes switch statement semantics</td>
<td>-flno</td>
<td>Enables generation of progs.lno for engine VM backtraces (enabled with -g as well)</td>
</tr>
+ <tr>
+ <td>-fcorrect-ternary</td>
+ <td>Enabling this corrects the ternary percedecce bugs present in fteqcc</td>
+ </tr>
+ <tr>
+ <td>-fsingle-vector-defs</td>
+ <td>Prevents the creation of progdefs for vectors</td>
+ </tr>
+ <tr>
+ <td>-fcorrect-logic</td>
+ <td>Use cast vector to real booleans when used in logic expressions</td>
+ </tr>
+ <tr>
+ <td>-ftrue-empty-strings</td>
+ <td>Always treat empty strings as true</td>
+ </tr>
+ <tr>
+ <td>-ffalse-empty-strings</td>
+ <td>Opposite of above, empty strings always false</td>
+ </tr>
+ <tr>
+ <td>-futf8</td>
+ <td>Recognize utf-8 characters in character constants, and encode codepoint escape sequences in strings as utf-8</td>
+ </tr>
+ <tr>
+ <td>-fbail-on-werror</td>
+ <td>When a warning is printed and it is set to be treated as error via -Werror, compilation will be stopped.</td>
+ </tr>
+ <tr>
+ <td>-floop-labels</td>
+ <td>Allow loops and switches to be labeled and break and continue to take optional label to target it.</td>
+ </tr>
+ <tr>
+ <td>-funtyped-nil</td>
+ <td>Enable the 'nil' null constant, which has no type. It can be used as the right hand of any assignment.</td>
+ </tr>
+ <tr>
+ <td>-fpermissive</td>
+ <td>Be "permissive", e.g with -funtyped-nil, this will allow local variables with the name 'nil'</td>
+ </tr>
</table>
<h3>Warning options</h3>
<table border="0">
<td>-Wunknown-pragmas</td>
<td>Enables warnings about unknown pragmas</td>
</tr>
+ <tr>
+ <td>-Wunreachable-code</td>
+ <td>Enables warnings about unreachable code</td>
+ </tr>
+ <tr>
+ <td>-Wcpp</td>
+ <td>Enables warnings about the preprocessor</td>
+ </tr>
+ <tr>
+ <td>Wunknown-attribute</td>
+ <td>Enables warnings for when an unknown attribute is encountered.</td>
+ </tr>
+ <tr>
+ <td>-Wreserved-names</td>
+ <td>Enables warnings for variables or fields that are named with a reserved name</td>
+ </tr>
+ <tr>
+ <td>-Wuninitialized-constant</td>
+ <td>Enables warnings about const global variables with no initializing value</td>
+ </tr>
+ <tr>
+ <td>-Wuninitialized-global</td>
+ <td>Enables warnings about non-const gloal variable with no initializing value</td>
+ </tr>
+ <tr>
+ <td>-Wdeprecated</td>
+ <td>Enables warnings about calls to functions marked deprecated</td>
+ </tr>
</table>
<table border="0">
<tr><td>Options</td><td>What it does</td></tr>
+ <tr>
+ <td>-Opeephole</td>
+ <td>Enables peephole optimizations</td>
+ </tr>
+ <tr>
+ <td>-Olocal-temps</td>
+ <td>Enables local-temp omission optimizations</td>
+ </tr>
+ <tr>
+ <td>-Oglobal-temps</td>
+ <td>Enables global-temp omission optimizations</td>
+ </tr>
<tr>
<td>-Otail-recursion</td>
<td>Enables tail recursion optimization</td>
</tr>
+ <tr>
+ <td>-Otail-calls</td>
+ <td>Enables tail-call optimizations</td>
+ </tr>
+ <tr>
+ <td>-Ooverlap-locals</td>
+ <td>
+ Every function where it's safe to do so will share its local
+ section with others. The critera being that the function must
+ have any possibly uninitialized locals, or local arrays regardless
+ of how they are initialized.
+ </td>
+ </tr>
+ <tr>
+ <td>-Ostrip-constant-names</td>
+ <td>Strip the names of constants</td>
+ </tr>
+ <tr>
+ <td>-Ooverlap-strings</td>
+ <td>Agressivly reuse strings in the string-section.</td>
+ </tr>
+ <tr>
+ <td>-Ocall-stores</td>
+ <td>
+ Have expressions which are used as function parameters evaluate directly
+ into the parameter-globals if possible. This avoids copying.
+ </td>
+ </tr>
+ <tr>
+ <td>-Ovoid-return</td>
+ <td>Do not create a return instruction at the end of return-type void functions</td>
+ </tr>
</table>
<p>
Individual warnings may be disabled with -Wno-<warning>
<td>-memchk</td>
<td>Turns on compiler memory leak checker</td>
</tr>
+ <tr>
+ <td>-dump</td>
+ <td>Dump IR before optimizing and finalizing</td>
+ </tr>
+ <tr>
+ <td>-dumpfin</td>
+ <td>Dump IR after optimizing and finalizing</td>
+ </tr>
<tr>
<td>-Whelp or -W?</td>
<td>Lists all warning options</td>
<td>testsuite</td>
<td>Builds the testsuite for GMQCC</td>
</tr>
+ <tr>
+ <td>check, test</td>
+ <td>Build and executes the testsuite for GMQCC</td>
+ </tr>
+ <tr>
+ <td>pak</td>
+ <td>Builds the pak utility</td>
+ </tr>
+ <tr>
+ <td>splint</td>
+ <td>Runs splint (static analysis) on the source</td>
+ </tr>
+ <tr>
+ <td>gource</td>
+ <td>Runs gource visualization on the source</td>
+ </tr>
+ <tr>
+ <td>gource-record</td>
+ <td>Runs gource visualization and produces a rendered mp4</td>
+ </tr>
+ <tr>
+ <td>depend</td>
+ <td>Builds dependinces into the Makefile</td>
+ </tr>
<tr>
<td>all</td>
- <td>Builds gmqcc, qcvm, and testsuite</td>
+ <td>Builds gmqcc, qcvm, pak, and testsuite</td>
</tr>
<tr>
<td>install</td>
- <td>Installs gmqcc to /usr/local/</td>
+ <td>Installs gmqcc, qcvm, and documentaion</td>
+ </tr>
+ <tr>
+ <td>uninstall</td>
+ <td>Uninstalls gmqcc, qcvm, and documentation</td>
</tr>
<tr>
<td>check</td>
</tr>
<tr>
<td>F:</td>
- <td>Used to set a failure message, this message will be displayed
- if the test fails, this tag is optional.</td>
- </tr>
- <tr>
- <td>S:</td>
- <td>Used to set a success message, this message will be displayed
- if the test succeeds, this tag is optional.
- </td>
+ <td>Used to set test-suite specific flags, currently
+ the only supported flag is -no-defs which tells the
+ testsuite to exclude defs.qh.
+ </td>
</tr>
<tr>
<td>T:</td>
- <td>Used to set the procedure for the given task, there are two
+ <td>Used to set the procedure for the given task, there are four
options for this:
<ul>
<li>-compile
This simply performs compilation only</li>
<li>-execute
This will perform compilation and execution</li>
+ <li>-fail
+ This will perform compilation on the requirement it fails, otherwise
+ the test fails</li>
+ <li>-pp
+ This will perform preprocessing only</li>
</ul>
This tag must be provided, this tag is NOT optional.
<td>Used to describe a string of text that should be matched from
the output of executing the task. If this doesn't match the
task fails. This tag must be provided at least once if
- T == -execute, otherwise it's erroneous as compilation only
+ T == -execute or T == -pp, otherwise it's erroneous as compilation only
takes place. Multiple M tags are required for multi-line comparision
</td>
</tr>
<td>Argument</td>
<td>What it does</td>
</tr>
+ <tr>
+ <td>-h, --help</td>
+ <td>Print help message</td>
+ </tr>
<tr>
<td>-trace</td>
<td>Trace the execution call hierarchy.</td>
<td>-disasm</td>
<td>Dissasemble the bytecode into assembly.</td>
</tr>
+ <tr>
+ <td>-diasm-func</td>
+ <td>Dissasmble function</td>
+ </tr>
<tr>
<td>-printdefs</td>
<td>Prints all definitions for the bytecode running.</td>
<td>-printfields</td>
<td>Prints all fields for the bytecode running.</td>
</tr>
+ <tr>
+ <td>-printfuns</td>
+ <td>Prints all functions for the bytecode running.</td>
+ </tr>
+ <tr>
+ <td>-v</td>
+ <td>Be verbose</td>
+ </tr>
+ <tr>
+ <td>-v</td>
+ <td>Be even more verbose</td>
+ </tr>
+ <tr>
+ <td>-version, --version</td>
+ <td>Print version information</td>
+ </tr>
</table>
<h3>Builtins</h3>
<tr><td>vlen</td><td>7</td></tr>
<tr><td>etos</td><td>8</td></tr>
<tr><td>stof</td><td>9</td></tr>
+ <tr><td>strcat</td><td>10</td></tr>
+ <tr><td>strcmp</td><td>11</td></tr>
+ <tr><td>normalize</td><td>12</td></tr>
+ <tr><td>sqrt</td><td>13</td></tr>
+ <tr><td>floor</td><td>14</td></tr>
</table>
</p>
<h3>Support or Contact</h3>