# This is an example INI file that can be used to set compiler options # without the rquirement for supplying them as arguments on the command # line, this can be coupled with progs.src. To utilize this file there # are two options availble, if it's named "gmqcc.ini" or "gmqcc.cfg" and # the file exists in the directory that GMQCC is invoked from, the compiler # will implicitally find and execute regardless. For more freedom you may # use -config= from the command line to specify a more explicit # directory/name.ext for the configuration file. # These are common compiler flags usually represented via the -f prefix # from the command line. [flags] # Enabling this can potentially reduces code size by overlapping # locals where possible. OVERLAP_LOCALS = false # in some older versions of the Darkplaces engine the string table # size is computed wrong causing compiled progs.dat to fail to load # Enabling this works around the bug by writing a few additional # null bytes to the end of the string table to compensate. DARKPLACES_STRING_TABLE_BUG = false # Enabling this corrects the assignment of vector field pointers via # subsituting STORE_FLD with STORE_V. ADJUST_VECTOR_FIELDS = true # Enabling this allows the use of the FTEQ preprocessor, as well as # additional preprocessing directives such as #error and #warning. FTEPP = true # Enabling this relaxes switch statement semantics RELAXED_SWITCH = false # Enabling this allows short-circut evaluation and logic, opposed # to full evaluation. SHORT_LOGIC = false # Enabling this allows perl-like evaluation/logic. PERL_LOGIC = true # Enabling this allows the use of the "translatable strings" extension # assisted by .po files. TRANSLATABLE_STRINGS = false # Enabling this prevents initializations from becoming constant unless # 'const' is specified as a type qualifier. INITIALIZED_NONCONSTANTS = false # Enabling this allows function types to be assignable even if their # signatures are invariant of each other. ASSIGN_FUNCTION_TYPES = false # Enabling this will allow the generation of .lno files for engine # virtual machine backtraces (this is enabled with -g as well). LNO = false # Enabling this corrects ternary percedence bugs present in fteqcc. CORRECT_TERNARY = true # Prevent the creation of _x, _y and _z progdefs for vectors SINGLE_VECTOR_DEFS = false # Cast vectors to real booleans when used in logic expressions. # This is achieved by using NOT_V. CORRECT_LOGIC = false # Always treat empty strings as true. Usuall !"" yields true, because # the string-NOT instruction considers empty strings to be false, while # an empty string as condition for 'if' will be considered true, since # only the numerical value of the global is looked at. TRUE_EMPTY_STRINGS = false # Opposite of the above, empty strings are always false. Similar to # CORRECT_LOGIC this will always use NOT_S to cast a string to a real # boolean value. FALSE_EMPTY_STRINGS = false # Recognize utf-8 characters in character constants, and encode # codepoint escape sequences in strings as utf-8. This essentially allows # \{1234} escape sequences to be higher than 255. UTF8 # When a warning is printed and it is set to be treated as error via # a -Werror switch, compilation will be stopped, unless this is false. # When this is false, the rest of the code will be compiled, and at the end # the file and line of the first warning will be shown. BAIL_ON_WERROR = true # Allow loops and switches to be labeled and break and continue to take an # optional label to target a specific loop/switch. LOOP_LABELS = false # Enable the 'nil' null constant, which has no type. It can be used as the # right hand of any assignment regardless of the required type. UNTYPED_NIL = false # Be "permissive". For instance, when -funtyped-nil is used, this allows local # variables with the name 'nil' to be declared. PREMISSIVE = false # Allow vararg access from within QC of the form: ...(argnumber, type) VARIADIC_ARGS = true # Most Quake VMs, including the one from FTEQW or up till recently # Darkplaces, do not cope well with vector instructions with overlapping # input and output. This option will avoid producing such code. LEGACY_VECTOR_MATHS = true # Builtin-numbers are usually just immediate constants. # The following allows whole expressions to be used, as long as they # are compile-time constant. EXPRESSIONS_FOR_BUILTINS = false # These are all the warnings, usually present via the -W prefix from # the command line. [warnings] # ?? Used for debugging ?? DEBUG = false # Enables warnings about unused variables. UNUSED_VARIABLE = true # Enables warnings about uninitialized variables. USED_UNINITIALIZED = true # Enables warnings about the unknown control sequences in the source # stream. UNKNOWN_CONTROL_SEQUENCE = true # Enables warnings about the use of (an) extension(s). EXTENSIONS = true # Enables warnings about redeclared fields. FIELD_REDECLARED = true # Enables warnings about missing return values. MISSING_RETURN_VALUES = true # Enables warnings about missing parameters for function calls. INVALID_PARAMETER_COUNT = true # Enables warnings about locals shadowing parameters or other locals. LOCAL_SHADOWS = true # Enables warnings about constants specified as locals. LOCAL_CONSTANTS = true # Enables warnings about variables declared as type void. VOID_VARIABLES = true # Enables warnings about implicitally declared function pointers. IMPLICIT_FUNCTION_POINTER = true # Enables warnings for use of varadics for non-builtin functions. VARIADIC_FUNCTION = true # Enables warnings about duplicated frame macros. FRAME_MACROS = true # Enables warnings about effectivless statements. EFFECTLESS_STATEMENT = true # Enables warnings of "end_sys_fields" beiing declared a field. END_SYS_FIELDS = true # Enables warnings for infompatible function pointer signatures used # in assignment. ASSIGN_FUNCTION_TYPES = true # Enables warnings about redefined macros in the preprocessor PREPROCESSOR = true # Enables warnings about multi-file if statements MULTIFILE_IF = true # Enables warnings about double declarations DOUBLE_DECLARATION = true # Enables warnings about type qualifiers containing both 'var' and # 'const' CONST_VAR = true # Enables warnings about the use of multibytes characters / constants MULTIBYTE_CHARACTER = true # Enables warnings about ternary expressions whos precedence may be # not what was initially expected. TERNARY_PRECEDENCE = true # Enables warnings about unknown pragmas. UNKNOWN_PRAGMAS = true # Enables warnings about unreachable code. UNREACHABLE_CODE = true # Enables preprocessor "#warnings" CPP = true # With the [[attribute]] syntax enabled, warn when an unknown # attribute is encountered. Its first token will be included in the # message. UNKNOWN_ATTRIBUTE = true # Warn when declaring variables or fields with a reserved name like 'nil' RESERVED_NAMES = true # Warn about 'const'-qualified global variables with no initializing value. UNINITIALIZED_CONSTANT = true # Warn about non-constant global variables with no initializing value. UNINITIALIZED_GLOBAL = true # Redeclaring a 'const' as 'var' or the other way round. DIFFERENT_QUALIFIERS = true # Redeclaring a function with different attributes such as # [[noreturn]] DIFFERENT_ATTRIBUTES = true # Warn when a function is marked with the attribute # "[[deprecated]]". This flag enables a warning on calls to functions # marked as such. DEPRECATED = true # Warn about possible problems from missing parenthesis, like an # assignment used as truth value without additional parens around. PARENTHESIS = true # Finally these are all the optimizations, usually present via the -O # prefix from the command line. [optimizations] # Enables peephole optimizations. PEEPHOLE = true # Enables localtemp omission optimizations. LOCALTEMPS = true # Enables tail recrusion optimizationd. TAIL_RECURSION = true # Enables tail-call optimizations. (Not implemented) TAIL_CALLS = true # Every function where it is safe to do so will share its local data section # with the others. The criteria are currently that the function must not have # any possibly uninitialized locals, or local arrays regardless of how they # are initialized. OVERLAP_LOCALS = false # Strip out the names of constants to save some space in the progs.dat STRIP_CONSTANT_NAMES = true # Aggressivly reuse strings in the string-section OVERLAP_STRINGS = true # Have expressions which are used as function parameters evaluate directly # into the parameter-globals if possible. # This avoids a whole lot of copying. CALL_STORES = true # Do not create a RETURN instruction at the end functions of return-type void. VOID_RETURN = true # Turn extraction-multiplications such as (a_vector * '0 1 0') # into direct component accesses VECTOR_COMPONENTS = true