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-declaration
+
Enables warnings about double declarations
+
+
+
-Wconst-var
+
Enables warnings about 'const var' and 'var const'
+
+
+
-Wmultibyte-character
+
Enables warnings about use of multibyte characters
+
+
+
-Wternary-precedence
+
Enables warnings about ternary expressions whos precedence may be not what expected
+
+
+
-Wunknown-pragmas
+
Enables warnings about unknown pragmas
+
+
+
-Wunreachable-code
+
Enables warnings about unreachable code
+
+
+
-Wcpp
+
Enables warnings about the preprocessor
+
+
+
Wunknown-attribute
+
Enables warnings for when an unknown attribute is encountered.
+
+
+
-Wreserved-names
+
Enables warnings for variables or fields that are named with a reserved name
+
+
+
-Wuninitialized-constant
+
Enables warnings about const global variables with no initializing value
+
+
+
-Wuninitialized-global
+
Enables warnings about non-const gloal variable with no initializing value
+
+
+
-Wdeprecated
+
Enables warnings about calls to functions marked deprecated
+
+
+
+
Options
What it does
+
+
-Opeephole
+
Enables peephole optimizations
+
+
+
-Olocal-temps
+
Enables local-temp omission optimizations
+
+
+
-Oglobal-temps
+
Enables global-temp omission optimizations
+
+
+
-Otail-recursion
+
Enables tail recursion optimization
+
+
+
-Otail-calls
+
Enables 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-names
+
Strip the names of constants
+
+
+
-Ooverlap-strings
+
Agressivly 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-return
+
Do 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>
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:
-compile
This simply performs compilation only
-execute
This will perform compilation and execution
+
-fail
+ This will perform compilation on the requirement it fails, otherwise
+ the test fails
+
-pp
+ This will perform preprocessing only
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.
-
+
+ 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 
+
+
+
+
Argument
+
What it does
+
+
+
-string
+
Passes in a string to main
+
+
+
-float
+
Passes in a float to main
+
+
+
-vector
+
Passes 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:
+
+
+
Argument
+
What it does
+
+
+
-h, --help
+
Print help message
+
+
+
-trace
+
Trace the execution call hierarchy.
+
+
+
-profile
+
Profile the bytecode to find hotspots.
+
+
+
-info
+
Get info of the running bytecode.
+
+
+
-disasm
+
Dissasemble the bytecode into assembly.
+
+
+
-diasm-func
+
Dissasmble function
+
+
+
-printdefs
+
Prints all definitions for the bytecode running.
+
+
+
-printfields
+
Prints all fields for the bytecode running.
+
+
+
-printfuns
+
Prints all functions for the bytecode running.
+
+
+
-v
+
Be verbose
+
+
+
-v
+
Be even more verbose
+
+
+
-version, --version
+
Print version information
+
+
+
+
Builtins
+ The standalone virtual machine includes the following builtins.
+
+
+
Builtin
+
Number
+
+
print
1
+
ftos
2
+
spawn
3
+
kill
4
+
vtos
5
+
error
6
+
vlen
7
+
etos
8
+
stof
9
+
strcat
10
+
strcmp
11
+
normalize
12
+
sqrt
13
+
floor
14
+
+
Support or Contact
Having trouble with GMQCC? Join our IRC channel at #kf-engine on irc.freenode.net or contact Us