X-Git-Url: https://git.xonotic.org/?p=xonotic%2Fgmqcc.git;a=blobdiff_plain;f=doc.html;h=352171fa4e43a037fd5d6ce97b522dd197f0eae5;hp=f75eb9465153257832499261278a4f7688029215;hb=refs%2Fheads%2Fgraphitemaster%2Fgh-pages;hpb=9693010c0bc8eabcb37d5251d1a149158134b837 diff --git a/doc.html b/doc.html index f75eb94..352171f 100644 --- a/doc.html +++ b/doc.html @@ -3,7 +3,7 @@ - GMQCC by graphitemaster + GMQCC @@ -20,9 +20,7 @@

GMQCC

An Improved Quake C Compiler

Compiler Documentation

Defaults Flag

@@ -78,10 +77,21 @@ -O<level> Specfies the optimization level: highest being 3, lowest being 0 (no optimization). + + -g + Enables generation of debug info for engine backtraces (turns on -flno) + -E Instructs the compiler to only preprocess the input, writing the preprocessed output to stdout + + -D + + "define" a macro. Optionally you may supply + a value to the macro with "=". Implicitally turns on -fftepp + + -Wall Enables all compiled warnings for the selcted standard @@ -102,18 +112,21 @@ What it represents - GMQCC + __STD_GMQCC__ Specifies the current selected standard is gmqcc. - FTEQCC + __STD_FTEQCC__ Specifies the current selected standard is fteqcc. - QCC + __STD_QCC__ Specifies the current selected standard is qcc. - + + GMQCC + Defined always regardless of the selected standard + __STD_VERSION_MINOR__ Specifies the current selected stanadards minor version number. @@ -122,6 +135,30 @@ __STD_VERSION_MAJOR__ Specifies the current selected stanadards major version number. + + __FILE__ + Expands to a const string literal of the current file (requires -fftepp-predef) + + + __LINE__ + Expands to the current line number (requires -fftepp-predef) + + + __RANDOM__ + Expands to a random number between [0, 256) (requires -fftepp-predef) + + + __COUNTER__ + Expands to a unique number, each expansion causes it to increment (requires -fftepp-predef) + + + __RANDOM_LAST__ + Expands to the last random number (requires -fftepp-predef) + + + __COUNTER_LAST__ + Expands to the last counter number (requires -fftepp-predef) +

Unsupported compatability options

@@ -166,6 +203,10 @@ -fftepp Enables FTEQ preprocessor + + -fftepp-predef + Enables additional predefined macros for the FTEQ preprocessor + -frelaxted-switch Relaxes switch statement semantics @@ -178,6 +219,62 @@ -fperl-logic Enables perl evalutaion/logic + + -ftranslatable-strings + Enables translatable strings via .po file + + + -finitialized-nonconstants + Prevents initializations from becoming constant unless 'const' is specified as a qualifer + + + -fassign-function-types + Allows function types to be assignable even if their signature is invariant + + + -flno + Enables generation of progs.lno for engine VM backtraces (enabled with -g as well) + + + -fcorrect-ternary + Enabling this corrects the ternary percedecce bugs present in fteqcc + + + -fsingle-vector-defs + Prevents the creation of progdefs for vectors + + + -fcorrect-logic + Use cast vector to real booleans when used in logic expressions + + + -ftrue-empty-strings + Always treat empty strings as true + + + -ffalse-empty-strings + Opposite of above, empty strings always false + + + -futf8 + Recognize utf-8 characters in character constants, and encode codepoint escape sequences in strings as utf-8 + + + -fbail-on-werror + When a warning is printed and it is set to be treated as error via -Werror, compilation will be stopped. + + + -floop-labels + Allow loops and switches to be labeled and break and continue to take optional label to target it. + + + -funtyped-nil + Enable the 'nil' null constant, which has no type. It can be used as the right hand of any assignment. + + + -fpermissive + Be "permissive", e.g with -funtyped-nil, this will allow local variables with the name 'nil' +

Warning options

@@ -253,9 +350,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
-Wmultifile-if Enables warnings about multifile if statements
-Wdouble-declarationEnables warnings about double declarations
-Wconst-varEnables warnings about 'const var' and 'var const'
-Wmultibyte-characterEnables warnings about use of multibyte characters
-Wternary-precedenceEnables warnings about ternary expressions whos precedence may be not what expected
-Wunknown-pragmasEnables warnings about unknown pragmas
-Wunreachable-codeEnables warnings about unreachable code
-WcppEnables warnings about the preprocessor
Wunknown-attributeEnables warnings for when an unknown attribute is encountered.
-Wreserved-namesEnables warnings for variables or fields that are named with a reserved name
-Wuninitialized-constantEnables warnings about const global variables with no initializing value
-Wuninitialized-globalEnables warnings about non-const gloal variable with no initializing value
-WdeprecatedEnables warnings about calls to functions marked deprecated
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OptionsWhat it does
-OpeepholeEnables peephole optimizations
-Olocal-tempsEnables local-temp omission optimizations
-Oglobal-tempsEnables global-temp omission optimizations
-Otail-recursionEnables tail recursion optimization
-Otail-callsEnables tail-call optimizations
-Ooverlap-locals + 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. +
-Ostrip-constant-namesStrip the names of constants
-Ooverlap-stringsAgressivly reuse strings in the string-section.
-Ocall-stores + Have expressions which are used as function parameters evaluate directly + into the parameter-globals if possible. This avoids copying. +
-Ovoid-returnDo not create a return instruction at the end of return-type void functions

- Individual warnings may be disabled with  -Wno<warning> + Individual warnings may be disabled with  -Wno-<warning>

$ gmqcc -Wno-frame-macros # disables frame duplication warning

Miscellaneous options

@@ -276,16 +472,43 @@ -memchk Turns on compiler memory leak checker - + + -dump + Dump IR before optimizing and finalizing + + + -dumpfin + Dump IR after optimizing and finalizing + -Whelp or -W? Lists all warning options - -fhelp or -f? Lists all code generation options + + -redirout=<file> + Redirect stdout to any file. + + + -redirerr=<file> + Redirect stderr to any file. + + + -nocolor + Turn off colored stdout/stderr. + + + -config=<file> + + Supply a configuration file to set options. + Note: If a file named gmqcc.ini or + gmqcc.cfg is found it will be loaded + implicitally. + +

Building Documentation

@@ -327,13 +550,41 @@ $ cd gmqcc testsuite Builds the testsuite for GMQCC + + check, test + Build and executes the testsuite for GMQCC + + + pak + Builds the pak utility + + + splint + Runs splint (static analysis) on the source + + + gource + Runs gource visualization on the source + + + gource-record + Runs gource visualization and produces a rendered mp4 + + + depend + Builds dependinces into the Makefile + all - Builds gmqcc, qcvm, and testsuite + Builds gmqcc, qcvm, pak, and testsuite install - Installs gmqcc to /usr/local/ + Installs gmqcc, qcvm, and documentaion + + + uninstall + Uninstalls gmqcc, qcvm, and documentation check @@ -431,24 +682,25 @@ $ cd gmqcc F: - Used to set a failure message, this message will be displayed - if the test fails, this tag is optional. - - - S: - Used to set a success message, this message will be displayed - if the test succeeds, this tag is optional. - + Used to set test-suite specific flags, currently + the only supported flag is -no-defs which tells the + testsuite to exclude defs.qh. + T: - Used to set the procedure for the given task, there are two + Used to set the procedure for the given task, there are four options for this: This tag must be provided, this tag is NOT optional. @@ -470,7 +722,7 @@ $ cd gmqcc 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 @@ -495,7 +747,130 @@ $ cd gmqcc that need not be set), as well as missing tags, and error accordingly which will result in that task failing.

- +

Quake C Virtual Machine Documentation

+

+ Included with GMQCC is a minimal implementation of the QCVM used in many game + engines. It's primarly used for the testsuite, but you may also use it as a + standalone runtime, or even embed it with existing appliciations. +

+

Running The Standalone VM

+

+ To run the standalone application you need to have a compiled progs.dat, with an + entry function named  main  The main function can have any amount of arguments + as the standalone executor allows main to be invoked with your choice of arguments. + An example of invoking the VM: +

$ ./qcvm progs.dat -float 200 #execute passing in 200 as a float to main
+ If  main  doesn't require arguments: +
$ ./qcvm progs.dat #call main with no arguments
+ + The standalone executor supports the following arguments for passing arguments to  main  + + + + + + + + + + + + + + + + + + +
ArgumentWhat it does
-stringPasses in a string to main
-floatPasses in a float to main
-vectorPasses in a vector to main
+ + The order in which the arguments are expected for main, must be preserved, for + example if  main 's signature is the following: +
void main(float a, vector b)
+ + Then to pass the arguments you'd use the same order: +
$ ./qcvm -float 200 -vector '1 2 3'
+ +

Additional Arguments

+ The standalone virtual machine has the following optional command line arguments: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ArgumentWhat it does
-h, --helpPrint help message
-traceTrace the execution call hierarchy.
-profileProfile the bytecode to find hotspots.
-infoGet info of the running bytecode.
-disasmDissasemble the bytecode into assembly.
-diasm-funcDissasmble function
-printdefsPrints all definitions for the bytecode running.
-printfieldsPrints all fields for the bytecode running.
-printfunsPrints all functions for the bytecode running.
-vBe verbose
-vBe even more verbose
-version, --versionPrint version information
+ +

Builtins

+ The standalone virtual machine includes the following builtins. + + + + + + + + + + + + + + + + + + + +
BuiltinNumber
print1
ftos2
spawn3
kill4
vtos5
error6
vlen7
etos8
stof9
strcat10
strcmp11
normalize12
sqrt13
floor14
+

Support or Contact

Having trouble with GMQCC? Join our IRC channel at #kf-engine on irc.freenode.net or contact Us