]> git.xonotic.org Git - xonotic/gmqcc.git/blob - doc.html
Document -dump{,fin}
[xonotic/gmqcc.git] / doc.html
1 <!doctype html>
2 <html>
3     <head>
4         <meta charset="utf-8">
5         <meta http-equiv="X-UA-Compatible" content="chrome=1">
6         <title>GMQCC</title>
7
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">
12         <!--[if lt IE 9]>
13         <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
14         <![endif]-->
15     </head>
16     <body>
17         <a href="https://github.com/graphitemaster/gmqcc"><div class="fork"></div></a>
18         <div class="wrapper">
19             <header>
20                 <h1 class="header">GMQCC</h1>
21                 <p class="header">An Improved Quake C Compiler</p>
22                 <ul>
23                     <li class="buttons"><a href=index.html>Index</a></li>
24                     <li class="download"><a href="https://github.com/graphitemaster/gmqcc/archive/0.2.2.zip">Download v0.2.2</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>
28                 </ul>
29             </header>
30             <section>
31                 <ul class="wiki">
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>
36                 </ul>
37                 <h1><a name="cdoc">Compiler Documentation</a></h1>
38                 <h3>Defaults Flag</h3>
39                 <p>
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.
43                 </p>
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:
48                 <table border="0">
49                     <tr>
50                         <td>gmqcc</td>
51                         <td>default standard</td>
52                     </tr>
53                     <tr>
54                         <td>fteqcc</td>
55                         <td>fteqcc standard</td>
56                     </tr>
57                     <tr>
58                         <td>qcc</td>
59                         <td>vanila QuakeC standard</td>
60                     </tr>
61                 </table>
62                 <h2>Common compiler options</h2>
63                 <table border="0">
64                     <tr>
65                         <td>Options</td>
66                         <td>What it does</td>
67                     </tr>
68                     <tr>
69                         <td>-l&lt;path&gt;</td>
70                         <td>Adds &lt;path&gt; to the directories searched by the preprocessor for include file resolution.</td>
71                     </tr>
72                     <tr>
73                         <td>-o &lt;file&gt;</td>
74                         <td>Generates the named executable (progs.src) file (when not specified default is progs.src).</td>
75                     </tr>
76                     
77                     <tr>
78                         <td>-O&lt;level&gt;</td>
79                         <td>Specfies the optimization level: highest being 3, lowest being 0 (no optimization).</td>
80                     </tr>
81                     <tr>
82                         <td>-g</td>
83                         <td>Enables generation of debug info for engine backtraces (turns on -flno)</td>
84                     </tr>
85                     <tr>
86                         <td>-E</td>
87                         <td>Instructs the compiler to only preprocess the input, writing the preprocessed output to stdout</td>
88                     </tr>
89                     <tr>
90                         <td>-D</td>
91                         <td>
92                             &quot;define&quot; a macro. Optionally you may supply
93                             a value to the macro with &quot;=&quot;. Implicitally turns on -fftepp
94                         </td>
95                     </tr>
96                     <tr>
97                         <td>-Wall</td>
98                         <td>Enables all compiled warnings for the selcted standard</td>
99                     </tr>
100                     <tr>
101                         <td>-Werror</td>
102                         <td>Instruct the compiler to treat all warnings as errors</td>
103                     </tr>
104                     <tr>
105                         <td>-std=&lt;standard&gt;</td>
106                         <td>Selects the standard dialect</td>
107                     </tr>
108                 </table>
109                 <h3>Predefined Macros</h3>
110                 <table border="0">
111                     <tr>
112                         <td>Macro</td>
113                         <td>What it represents</td>
114                     </tr>
115                     <tr>
116                         <td>__STD_GMQCC__</td>
117                         <td>Specifies the current selected standard is gmqcc.</td>
118                     </tr>
119                     <tr>
120                         <td>__STD_FTEQCC__</td>
121                         <td>Specifies the current selected standard is fteqcc.</td>
122                     </tr>
123                     <tr>
124                         <td>__STD_QCC__</td>
125                         <td>Specifies the current selected standard is qcc.</td>
126                     </tr>
127                     <tr>
128                         <td>GMQCC</td>
129                         <td>Defined always regardless of the selected standard</td>
130                     </tr>
131                     <tr>
132                         <td>__STD_VERSION_MINOR__</td>
133                         <td>Specifies the current selected stanadards minor version number.</td>
134                     </tr>
135                     <tr>
136                         <td>__STD_VERSION_MAJOR__</td>
137                         <td>Specifies the current selected stanadards major version number.</td>
138                     </tr>
139                     <tr>
140                         <td>__FILE__</td>
141                         <td>Expands to a const string literal of the current file (requires -fftepp-predef)</td>
142                     </tr>
143                     <tr>
144                         <td>__LINE__</td>
145                         <td>Expands to the current line number (requires -fftepp-predef)</td>
146                     </tr>
147                     <tr>
148                         <td>__RANDOM__</td>
149                         <td>Expands to a random number between [0, 256) (requires -fftepp-predef)</td>
150                     </tr>
151                     <tr>
152                         <td>__COUNTER__</td>
153                         <td>Expands to a unique number, each expansion causes it to increment (requires -fftepp-predef) </td>
154                     </tr>
155                     <tr>
156                         <td>__RANDOM_LAST__</td>
157                         <td>Expands to the last random number (requires -fftepp-predef)</td>
158                     </tr>
159                     <tr>
160                         <td>__COUNTER_LAST__</td>
161                         <td>Expands to the last counter number (requires -fftepp-predef)</td>
162                     </tr>
163                 </table>
164                 <h3>Unsupported compatability options</h3>
165                 <p>
166                     GMQCC strives hard for compatability with standard dialects, but not all
167                     features of those standards might be implemented. The unsupported features
168                     are presented below:
169                     <table border="0">
170                         <tr>
171                             <td>Feature</td>
172                             <td>Standard</td>
173                         </tr>
174                         <tr>
175                             <td>Inline Assembly</td>
176                             <td>FTEQCC</td>
177                         </tr>
178                         <tr>
179                             <td>Macro expansion in strings</td>
180                             <td>FTEQCC</td>
181                         </tr>
182                     </table>
183                 </p>
184                 <h2>Less common compiler options</h2>
185                 <h3>Code generation options</h3>
186                 <table border="0">
187                     <tr>
188                         <td>Option</td>
189                         <td>What it does</td>
190                     </tr>
191                     <tr>
192                         <td>-foverlap-locals</td>
193                         <td>Reduces codesize by overlapping locals where possible</td>
194                     </tr>
195                     <tr>
196                         <td>-fdarkplaces-string-table-bug</td>
197                         <td>Works around a bug in older Darkplaces engine builds where the stringtable size is computed wrong</td>
198                     </tr>
199                     <tr>
200                         <td>-fadjust-vector-fields</td>
201                         <td>corrects assignment of vector field pointers (STORE_V instead of STORE_FLD)</td>
202                     </tr>
203                     <tr>
204                         <td>-fftepp</td>
205                         <td>Enables FTEQ preprocessor</td>
206                     </tr>
207                     <tr>
208                         <td>-fftepp-predef</td>
209                         <td>Enables additional predefined macros for the FTEQ preprocessor</td>
210                     </tr>
211                     <tr>
212                         <td>-frelaxted-switch</td>
213                         <td>Relaxes switch statement semantics</td>
214                     </tr>
215                     <tr>
216                         <td>-fshort-logic</td>
217                         <td>Enables short circut evaluation/logic</td>
218                     </tr>
219                     <tr>
220                         <td>-fperl-logic</td>
221                         <td>Enables perl evalutaion/logic</td>
222                     </tr>
223                     <tr>
224                         <td>-ftranslatable-strings</td>
225                         <td>Enables translatable strings via .po file</td>
226                     </tr>
227                     <tr>
228                         <td>-finitialized-nonconstants</td>
229                         <td>Prevents initializations from becoming constant unless 'const' is specified as a qualifer</td>
230                     </tr>
231                     <tr>
232                         <td>-fassign-function-types</td>
233                         <td>Allows function types to be assignable even if their signature is invariant</td>
234                     </tr>
235                     <tr>
236                         <td>-flno</td>
237                         <td>Enables generation of progs.lno for engine VM backtraces (enabled with -g as well)</td>
238                     </tr>
239                     <tr>
240                         <td>-fcorrect-ternary</td>
241                         <td>Enabling this corrects the ternary percedecce bugs present in fteqcc</td>
242                     </tr>
243                     <tr>
244                         <td>-fsingle-vector-defs</td>
245                         <td>Prevents the creation of progdefs for vectors</td>
246                     </tr>
247                     <tr>
248                         <td>-fcorrect-logic</td>
249                         <td>Use cast vector to real booleans when used in logic expressions</td>
250                     </tr>
251                     <tr>
252                         <td>-ftrue-empty-strings</td>
253                         <td>Always treat empty strings as true</td>
254                     </tr>
255                     <tr>
256                         <td>-ffalse-empty-strings</td>
257                         <td>Opposite of above, empty strings always false</td>
258                     </tr>
259                     <tr>
260                         <td>-futf8</td>
261                         <td>Recognize utf-8 characters in character constants, and encode codepoint escape sequences in strings as utf-8</td>
262                     </tr>
263                     <tr>
264                         <td>-fbail-on-werror</td>
265                         <td>When a warning is printed and it is set to be treated as error via -Werror, compilation will be stopped.</td>
266                     </tr>
267                     <tr>
268                         <td>-floop-labels</td>
269                         <td>Allow loops and switches to be labeled and break and continue to take optional label to target it.</td>
270                     </tr>
271                     <tr>
272                         <td>-funtyped-nil</td>
273                         <td>Enable the 'nil' null constant, which has no type.  It can be used as the right hand of any assignment.</td>
274                     </tr>
275                     <tr>
276                         <td>-fpermissive</td>
277                         <td>Be "permissive", e.g with -funtyped-nil, this will allow local variables with the name 'nil'</td>
278                     </tr>
279                 </table>
280                 <h3>Warning options</h3>
281                 <table border="0">
282                     <tr>
283                         <td>Option</td>
284                         <td>What it does</td>
285                     </tr>
286                     <tr>
287                         <td>-Wunused-uninitialized</td>
288                         <td>Enables warnings about unused or uninitialized variables</td>
289                     </tr>
290                     <tr>
291                         <td>-Wunknwon-control-sequence</td>
292                         <td>Enables warnings about unknown control sequences</td>
293                     </tr>
294                     <tr>
295                         <td>-Wextension</td>
296                         <td>Enables warnings about the use of (an) extension(s)</td>
297                     </tr>
298                     <tr>
299                         <td>-Wfield-redeclared</td>
300                         <td>Enables warnings about redeclared fields</td>
301                     </tr>
302                     <tr>
303                         <td>-Wmissing-return-values</td>
304                         <td>Enables warnings about missing return values</td>
305                     </tr>
306                     <tr>
307                         <td>-Wtoo-few-paramaters</td>
308                         <td>Enables warnings about missing paramaters for function calls</td>
309                     </tr>
310                     <tr>
311                         <td>-Wlocal-shadows</td>
312                         <td>Enables warnings about locals shadowing paramaters or other locals</td>
313                     </tr>
314                     <tr>
315                         <td>-Wlocal-constants</td>
316                         <td>Enables warnings about constants specified as locals</td>
317                     </tr>
318                     <tr>
319                         <td>-Wvoid-variables</td>
320                         <td>Enables warnings about variables declared as type void</td>
321                     </tr>
322                     <tr>
323                         <td>-Wimplicit-function-pointer</td>
324                         <td>Enables warnings about implicitly declared function pointers</td>
325                     </tr>
326                     <tr>
327                         <td>-Wvariadic-function</td>
328                         <td>Enables warnings for use of varadics for non-builtin functions</td>
329                     </tr>
330                     <tr>
331                         <td>-Wframe-macros</td>
332                         <td>Enables warnings about duplicated frame macros</td>
333                     </tr>
334                     <tr>
335                         <td>-Weffectless-statement</td>
336                         <td>Enables warnings about effectiveless statements</td>
337                     </tr>
338                     <tr>
339                         <td>-Wend-sys-field</td>
340                         <td>Enables warnings of end_sys_fields being declared a field</td>
341                     </tr>
342                     <tr>
343                         <td>-Wassign-function-types</td>
344                         <td>Enables warnings for incompatible function pointer signatures used in assignment</td>
345                     </tr>
346                     <tr>
347                         <td>-Wpreprocessor</td>
348                         <td>Enables warnings about redefined macros</td>
349                     </tr>
350                     <tr>
351                         <td>-Wmultifile-if</td>
352                         <td>Enables warnings about multifile if statements</td>
353                     </tr>
354                     <tr>
355                         <td>-Wdouble-declaration</td>
356                         <td>Enables warnings about double declarations</td>
357                     </tr>
358                     <tr>
359                         <td>-Wconst-var</td>
360                         <td>Enables warnings about 'const var' and 'var const'</td>
361                     </tr>
362                     <tr>
363                         <td>-Wmultibyte-character</td>
364                         <td>Enables warnings about use of multibyte characters</td>
365                     </tr>
366                     <tr>
367                         <td>-Wternary-precedence</td>
368                         <td>Enables warnings about ternary expressions whos precedence may be not what expected</td>
369                     </tr>
370                     <tr>
371                         <td>-Wunknown-pragmas</td>
372                         <td>Enables warnings about unknown pragmas</td>
373                     </tr>
374                     <tr>
375                         <td>-Wunreachable-code</td>
376                         <td>Enables warnings about unreachable code</td>
377                     </tr>
378                     <tr>
379                         <td>-Wcpp</td>
380                         <td>Enables warnings about the preprocessor</td>
381                     </tr>
382                     <tr>
383                         <td>Wunknown-attribute</td>
384                         <td>Enables warnings for when an unknown attribute is encountered.</td>
385                     </tr>
386                     <tr>
387                         <td>-Wreserved-names</td>
388                         <td>Enables warnings for variables or fields that are named with a reserved name</td>
389                     </tr>
390                     <tr>
391                         <td>-Wuninitialized-constant</td>
392                         <td>Enables warnings about const global variables with no initializing value</td>
393                     </tr>
394                     <tr>
395                         <td>-Wuninitialized-global</td>
396                         <td>Enables warnings about non-const gloal variable with no initializing value</td>
397                     </tr>
398                 </table>
399                 <table border="0">
400                     <tr><td>Options</td><td>What it does</td></tr>
401                     <tr>
402                         <td>-Opeephole</td>
403                         <td>Enables peephole optimizations</td>
404                     </tr>
405                     <tr>
406                         <td>-Olocal-temps</td>
407                         <td>Enables local-temp omission optimizations</td>
408                     </tr>
409                     <tr>
410                         <td>-Oglobal-temps</td>
411                         <td>Enables global-temp omission optimizations</td>
412                     </tr>
413                     <tr>
414                         <td>-Otail-recursion</td>
415                         <td>Enables tail recursion optimization</td>
416                     </tr>
417                     <tr>
418                         <td>-Otail-calls</td>
419                         <td>Enables tail-call optimizations</td>
420                     </tr>
421                     <tr>
422                         <td>-Ooverlap-locals</td>
423                         <td>
424                             Every function where it's safe to do so will share its local
425                             section with others.  The critera being that the function must
426                             have any possibly uninitialized locals, or local arrays regardless
427                             of how they are initialized.
428                         </td>
429                     </tr>
430                     <tr>
431                         <td>-Ostrip-constant-names</td>
432                         <td>Strip the names of constants</td>
433                     </tr>
434                     <tr>
435                         <td>-Ooverlap-strings</td>
436                         <td>Agressivly reuse strings in the string-section.</td>
437                     </tr>
438                     <tr>
439                         <td>-Ocall-stores</td>
440                         <td>
441                             Have expressions which are used as function parameters evaluate directly
442                             into the parameter-globals if possible.  This avoids copying.
443                         </td>
444                     </tr>
445                     <tr>
446                         <td>-Ovoid-return</td>
447                         <td>Do not create a return instruction at the end of return-type void functions</td>
448                     </tr>
449                 </table>
450                 <p>
451                     Individual warnings may be disabled with &nbsp;-Wno-&lt;warning&gt;
452                     <pre>$ gmqcc -Wno-frame-macros # disables frame duplication warning</pre>
453                 </p>
454                 <h3>Miscellaneous options</h3>
455                 <table border="0">
456                     <tr>
457                         <td>Option</td>
458                         <td>What it does</td>
459                     </tr>
460                     <tr>
461                         <td>-force-crc=&lt;num&gt;</td>
462                         <td>Forces a specific checsum into the header</td>
463                     </tr>
464                     <tr>
465                         <td>-debug</td>
466                         <td>Turns on compiler debug messages</td>
467                     </tr>
468                     <tr>
469                         <td>-memchk</td>
470                         <td>Turns on compiler memory leak checker</td>
471                     </tr>
472                     <tr>
473                         <td>-dump</td>
474                         <td>Dump IR before optimizing and finalizing</td>
475                     </tr>
476                     <tr>
477                         <td>-dumpfin</td>
478                         <td>Dump IR after optimizing and finalizing</td>
479                     </tr>
480                     <tr>
481                         <td>-Whelp or -W?</td>
482                         <td>Lists all warning options</td>
483                     </tr>
484                     <tr>
485                         <td>-fhelp or -f?</td>
486                         <td>Lists all code generation options</td>
487                     </tr>
488                     <tr>
489                         <td>-redirout=&lt;file&gt;</td>
490                         <td>Redirect stdout to any file.</td>
491                     </tr>
492                     <tr>
493                         <td>-redirerr=&lt;file&gt;</td>
494                         <td>Redirect stderr to any file.</td>
495                     </tr>
496                     <tr>
497                         <td>-nocolor</td>
498                         <td>Turn off colored stdout/stderr.</td>
499                     </tr>
500                     <tr>
501                         <td>-config=&lt;file&gt;</td>
502                         <td>
503                             Supply a configuration file to set options.
504                             Note: If a file named <b>gmqcc.ini</b> or
505                             <b>gmqcc.cfg</b> is found it will be loaded
506                             implicitally.
507                         </td>
508                     </tr>
509                 </table>
510                 
511                 <h1><a name="bdoc">Building Documentation</a></h1>
512                 <h2>Building on BSD/NIX</h2>
513                 <p>
514                     To compile GMQCC on BSD/NIX the following things are
515                     required:
516                     
517                     <ul>
518                         <li>GIT</li>
519                         <li>Make</li>
520                         <li>Any C90+ C compiler</li>
521                     </ul>
522                     
523                     Once obtained you may checkout the development repository
524                     with the following shell commands
525                     
526 <pre>$ git clone git://github.com/graphitemaster/gmqcc.git
527 $ cd gmqcc
528 </pre>
529
530                     The Makefile contains a few rules, depending on what you
531                     want to compile, the following rules are:
532                     
533                     <table border="0">
534                         <tr>
535                             <td>Rule</td>
536                             <td>What it does</td>
537                         </tr>
538                         <tr>
539                             <td>gmqcc</td>
540                             <td>Builds the gmqcc compiler</td>
541                         </tr>
542                         <tr>
543                             <td>qcvm</td>
544                             <td>Builds a standable QuakeC VM</td>
545                         </tr>
546                         <tr>
547                             <td>testsuite</td>
548                             <td>Builds the testsuite for GMQCC</td>
549                         </tr>
550                         <tr>
551                             <td>all</td>
552                             <td>Builds gmqcc, qcvm, and testsuite</td>
553                         </tr>
554                         <tr>
555                             <td>install</td>
556                             <td>Installs gmqcc to /usr/local/</td>
557                         </tr>
558                         <tr>
559                             <td>check</td>
560                             <td>Runs the testsuite to verify correctness</td>
561                         </tr>
562                     </table>
563                 </p>
564                 <h2>Building on Windows</h2>
565                 <p>
566                     To compile GMQCC on windows the following things are
567                     required:
568                     
569                     <ul>
570                         <li><a href="http://msysgit.googlecode.com/files/Git-1.8.0-preview20121022.exe">msysGit</a></li>
571                         <li><a href="http://www.microsoft.com/visualstudio/eng/downloads">Visual Studio</a></li>
572                     </ul>
573                     
574                     Once obtained you may checkout the development repository
575                     with the following msysGit commands from a msysGit shell.
576                     <pre>$ git clone git://github.com/graphitemaster/gmqcc.git</pre>
577                     Included is a VS project file.
578                 </p>
579                 
580                 <h1><a name="tdoc">Testsuite Documentation</a></h1>
581                 <h2>Running The Testsuite</h2>
582                 <p>
583                     To run the testsuite you can either use
584                     <pre>$ make check</pre>
585                     Or if you're on windows or have already compiled the
586                     testsuite from source:
587                     <pre>$ ./testsuite </pre>
588                     
589                     Optionally you may provide the testsuite with additional
590                     arguments:
591                     
592                     <table border="0">
593                         <tr>
594                             <td>Argument</td>
595                             <td>What it does</td>
596                         </tr>
597                         <tr>
598                             <td>-redirout=&lt;file&gt;</td>
599                             <td>Redirect stdout to any file.</td>
600                         </tr>
601                         <tr>
602                             <td>-redirerr=&lt;file&gt;</td>
603                             <td>Redirect stderr to any file.</td>
604                         </tr>
605                         <tr>
606                             <td>-debug</td>
607                             <td>Turn on testsuite debug messages.</td>
608                         </tr>
609                         <tr>
610                             <td>-memchk</td>
611                             <td>Turn on testsuite memleak checker.</td>
612                         </tr>
613                         <tr>
614                             <td>-nocolor</td>
615                             <td>Turn off colored stdout/stderr.</td>
616                         </tr>
617                     </table>
618                 </p>
619                 <h2>Writing Tests</h2>
620                 <p>
621                     GMQCC comes with a complete testsuite for verifying semantics
622                     and syntatics.  The testsuite executes files from the test/
623                     directory, by reading task template files.
624                 </p>
625                 <p>
626                    templates are rules for a specific test, used to create a "task" that
627                    is executed with those set of rules (arguments, and what not). Tests
628                    that don't have a template with them cannot become tasks, since without
629                    the information for that test there is no way to properly "test" them.
630                    Rules for these templates are described in a template file, using a
631                    task template language.
632                 </p>
633                 <p>
634                    The languge is composed entierly of "tags" which describe a string of
635                    text for a task.  Think of it much like a configuration file.  Except
636                    it's been designed to allow flexibility and future support for prodecual
637                    semantics.
638                 <p>
639                 <p>
640                    The following "tags" are suported by the language:
641                 </p>
642                 <table border="0">
643                     <tr>
644                         <td>Tag</td>
645                         <td>Description of what the tag does</td>
646                     </tr>
647                     <tr>
648                        <td>D:</td>
649                          <td>Used to set a description of the current test, this must be
650                            provided, this tag is NOT optional.</td>
651                     </tr>
652                     <tr>
653                         <td>F:</td>
654                          <td>Used to set a failure message, this message will be displayed
655                            if the test fails, this tag is optional.</td>
656                     </tr>
657                     <tr>
658                         <td>S:</td>
659                             <td>Used to set a success message, this message will be displayed
660                            if the test succeeds, this tag is optional.
661                            </td>
662                     </tr>
663                     <tr>
664                        <td>T:</td>
665                             <td>Used to set the procedure for the given task, there are two
666                            options for this:
667                            <ul>
668                                <li>-compile&nbsp;
669                                    This simply performs compilation only</li>
670                                <li>-execute&nbsp;
671                                    This will perform compilation and execution</li>
672                                <li>-fail&nbsp;
673                                    This will perform compilation on the requirement it fails, otherwise
674                                    the test fails</li>
675                             </ul>
676                   
677                            This tag must be provided, this tag is NOT optional.
678                            </td>
679                     </tr>
680                     <tr>
681                        <td>C:</td>
682                         <td>Used to set the compilation flags for the given task, this
683                            must be provided, this tag is NOT optional.</td>
684                     </tr>
685                     <tr>
686                        <td>E:</td>
687                         <td>Used to set the execution flags for the given task. This tag
688                            must be provided if T == -execute, otherwise it's erroneous
689                            as compilation only takes place.</td>
690                     </tr>
691                     <tr>
692                        <td>M:</td>
693                         <td>Used to describe a string of text that should be matched from
694                            the output of executing the task.  If this doesn't match the
695                            task fails.  This tag must be provided at least once if
696                            T == -execute, otherwise it's erroneous as compilation only
697                            takes place. Multiple M tags are required for multi-line comparision
698                         </td>
699                     </tr>
700                     <tr>
701                        <td>I:</td>
702                        <td>Used to specify the INPUT source file to operate on, this must be
703                        provided, this tag is NOT optional</td>
704                     </tr>
705                  </table>
706                 <h3>Notes</h3>
707                 <p>
708                    These tags (with exception to M) have one-time use, using them more
709                    than once will result in template compilation errors,
710                 </p>
711                 <p>
712                    Lines beginning with # or // in the template file are comments and
713                    are ignored by the template parser.
714                    Whitespace is optional, with exception to the colon ':' between the
715                    tag and it's assignment value.
716                 </p>
717                    The template compiler will detect erronrous tags (optional tags
718                    that need not be set), as well as missing tags, and error accordingly
719                    which will result in that task failing.
720                 </p>
721                 <h1><a name="vdoc">Quake C Virtual Machine Documentation</a></h1>
722                 <p>
723                     Included with GMQCC is a minimal implementation of the QCVM used in many game
724                     engines.  It's primarly used for the testsuite, but you may also use it as a
725                     standalone runtime, or even embed it with existing appliciations.
726                 </p>
727                 <h2>Running The Standalone VM</h2>
728                 <p>
729                     To run the standalone application you need to have a compiled progs.dat, with an
730                     entry function named &nbsp;main&nbsp;  The main function can have any amount of arguments
731                     as the standalone executor allows main to be invoked with your choice of arguments.
732                     An example of invoking the VM:
733                     <pre>$ ./qcvm progs.dat -float 200 #execute passing in 200 as a float to main</pre>
734                     If &nbsp;main&nbsp; doesn't require arguments:
735                     <pre>$ ./qcvm progs.dat #call main with no arguments</pre>
736                     
737                     The standalone executor supports the following arguments for passing arguments to &nbsp;main&nbsp
738                     
739                     <table border="0">
740                         <tr>
741                             <td>Argument</td>
742                             <td>What it does</td>
743                         </tr>
744                         <tr>
745                             <td>-string</td>
746                             <td>Passes in a string to main</td>
747                         </tr>
748                         <tr>
749                             <td>-float</td>
750                             <td>Passes in a float to main</td>
751                         </tr>
752                         <tr>
753                             <td>-vector</td>
754                             <td>Passes in a vector to main</td>
755                         </tr>
756                     </table>
757                     
758                     The order in which the arguments are expected for main, must be preserved, for
759                     example if &nbsp;main&nbsp;'s signature is the following:
760                     <pre>void main(float a, vector b)</pre>
761                     
762                     Then to pass the arguments you'd use the same order:
763                     <pre>$ ./qcvm -float 200 -vector '1 2 3'</pre>
764                     
765                     <h3>Additional Arguments</h3>
766                     The standalone virtual machine has the following optional command line arguments:
767                     <table border="0">
768                         <tr>
769                             <td>Argument</td>
770                             <td>What it does</td>
771                         </tr>
772                         <tr>
773                             <td>-trace</td>
774                             <td>Trace the execution call hierarchy.</td>
775                         </tr>
776                         <tr>
777                             <td>-profile</td>
778                             <td>Profile the bytecode to find hotspots.</td>
779                         </tr>
780                         <tr>
781                             <td>-info</td>
782                             <td>Get info of the running bytecode.</td>
783                         </tr>
784                         <tr>
785                             <td>-disasm</td>
786                             <td>Dissasemble the bytecode into assembly.</td>
787                         </tr>
788                         <tr>
789                             <td>-printdefs</td>
790                             <td>Prints all definitions for the bytecode running.</td>
791                         </tr>
792                         <tr>
793                             <td>-printfields</td>
794                             <td>Prints all fields for the bytecode running.</td>
795                         </tr>
796                     </table>
797                     
798                     <h3>Builtins</h3>
799                     The standalone virtual machine includes the following builtins.
800                     <table border="0">
801                         <tr>
802                             <td>Builtin</td>
803                             <td>Number</td>
804                         </tr>
805                             <tr><td>print</td><td>1</td></tr>
806                             <tr><td>ftos</td><td>2</td></tr>
807                             <tr><td>spawn</td><td>3</td></tr>
808                             <tr><td>kill</td><td>4</td></tr>
809                             <tr><td>vtos</td><td>5</td></tr>
810                             <tr><td>error</td><td>6</td></tr>
811                             <tr><td>vlen</td><td>7</td></tr>
812                             <tr><td>etos</td><td>8</td></tr>
813                             <tr><td>stof</td><td>9</td></tr>
814                     </table>
815                 </p>
816                 <h3>Support or Contact</h3>
817                 <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> 
818             </section>
819             <footer>
820                 <script type="text/javascript" src="http://www.ohloh.net/p/602517/widgets/project_partner_badge.js"></script>
821             </footer>
822         </div>
823         <!--[if !IE]><script>fixScale(document);</script><![endif]-->
824     </body>
825 </html>