5.1.4 Options controlling the kind of output.

For more information on these options, see Programmer’s Guide.

-a
Do not delete the assembler files (not applicable when using the internal assembler). This also applies to the (possibly) generated batch script.
-al
Include the source code lines in the assembler file as comments.
-an
Write node information in the assember file (nodes are the way the compiler represents statements or parts thereof internally). This is primarily intended for debugging the code generated by the compiler.
-ap
Use pipes instead of creating temporary assembler files. This may speed up the compiler on os/2 and linux. Only with assemblers (such as gnu if the internal assembler is used.
-ar
List register allocation and release info in the assembler file. This is primarily intended for debugging the code generated by the compiler.
-at
List information about temporary allocations and deallocations in the assembler file.
-Axxx
specify what kind of assembler should be generated. Here xxx is one of the following :
default
Use the built-in default.
as
Assemble using gnu as.
nasmcoff
Coff (Go32v2) file using Nasm.
nasmelf
Elf32 (linux) file using Nasm.
nasmwin32
Windows 32-bit file using Nasm.
nasmwdosx
Windows 32-bit/DOSX file using Nasm.
nasmobj
Object file using Nasm.
masm
Object file using Masm (Microsoft).
tasm
Object file using Tasm (Borland).
elf
Elf32 (linux) using internal writer.
coff
Coff object file (Go32v2) using the internal binary object writer.
pecoff
PECoff object file (Win32) using the internal binary object writer.
-B
Re-compile all used units, even if the unit sources didn’t change since the last compilation.
-b
Generate browser info. This information can be used by an Integrated Development Environment (IDE) to provide information on classes, objects, procedures, types and variables in a unit.
-bl
The same as -b but also generates information about local variables, types and procedures.
-Caxxx
Set the ABI (Application Binary Interface) to xxx. The -i option gives the possible values for xxx.
-Cb
Generate big-endian code.
-Cc
Set the default calling convention used by the compiler.
-CD
Create a dynamic library. This is used to transform units into dynamically linkable libraries on linux.
-Ce
Emulate floating point operations.
-Cfxxx
Set the used floating point processor to xxx.
-CFNN
Set the minimal floating point precision to NN. Possible values are 32 and 64.
-Cg
Enable generation of PIC code. This should only be necessary when generating libraries on linux or other Unices.
-Chxxx
Reserves xxx bytes heap. xxx should be between 1024 and 67107840.
-Ci
Generate Input/Output checking code. In case some input/output code of your program returns an error status, the program will exit with a run-time error. Which error is generated depends on the I/O error.
-Cn
Omit the linking stage.
-Co
Generate Integer overflow checking code. In case of integer errors, a run-time error will be generated by your program.
-CO
Check for possible overflow of integer operations.
-CpXXX
Set the processor type to XXX.
-CPX=N
Set the packing for X to N. X can be PACKSET, PACKENUM or PACKRECORD, and N can be a value of 1,2,4,8 or one of the keywords DEFAULT or NORMAL.
-Cr
Generate Range checking code. If your program accesses an array element with an invalid index, or if it increases an enumerated type beyond its scope, a run-time error will be generated.
-CR
Generate checks when calling methods to verify if the virtual method table for that object is valid.
-Csxxx
Set stack size to xxx.
-Ct
Generate stack checking code. If your program performs a faulty stack operation, a run-rime error will be generated.
-CX
Create a smartlinked unit when writing a unit. Smartlinking will only link in the code parts that are actually needed by the program. All unused code is left out. This can lead to substantially smaller binaries.
-dxxx
Define the symbol name xxx. This can be used to conditionally compile parts of your code.
-D
Generate a DEF file (for OS/2).
-Dd
Set the description of the executable/library (Windows).
-Dv
Set the version of the executable/library (Windows).
-E
Same as -Cn.
-g
Generate debugging information for debugging with gdb.
-gc
Generate checks for pointers. This must be used with the -gh command line option. When this options is enabled, it will verify that all pointer accesses are within the heap.
-gg
Same as -g.
-gh
Use the heaptrc unit (see Unit Reference). (Produces a report about heap usage after the program exits)
-gl
Use the lineinfo unit (see Unit Reference). (Produces file name/line number information if the program exits due to an error.)
-goXXX
set debug information options. One of the options is dwarfsets: It enables dwarf set debug information (this does not work with gdb versions prior to 6.5.
-gp
Preserve case in stabs symbol names. Default is to uppercase all names.
-gs
Write stabs debug information.
-gt
Trash local variables. This writes a random value to local variables at procedure start. This can be used to detect uninitialized variables.
-gv
Emit info for valgrind.
-gw
Emit dwarf debugging info (version 2).
-gw2
Emit dwarf debugging info (version 2).
-gw3
Emit dwarf debugging info (version 3).
-kxxx
Pass xxx to the linker.
-Oxxx
Optimize the compiler’s output; xxx can have one of the following values :
aPARAM=VALUE
Specify alignment of structures and code. PARAM determines what should be aligned; VALUE specifies the alignment boundary. See the Programmer’s Guide for a description of the possible values.
g
Optimize for size, try to generate smaller code.
G
Optimize for time, try to generate faster code (default).
r
Keep certain variables in registers (experimental, use with caution).
u
Uncertain optimizations
1
Level 1 optimizations (quick optimizations).
2
Level 2 optimizations (-O1 plus some slower optimizations).
3
Level 3 optimizations (-O2 plus -Ou).
oxxx
Specify specific optimizations: n can be one of
REGVAR
Use register variables
STACKFRAME
Skip stack frames
LOOPUNROLL
unroll (small) loops
TAILREC
change tail recursion to non-recursive loop.
pxxx
select processor xxx to optimize for. fpc -i lists all available processor instruction sets.
Wxxx
Generate Whole-Program-Optimization information for feature xxx. fpc -i will generate a list of possible values.
wxxx
Perform Whole-Program-Optimization information for feature xxx. fpc -i will generate a list of possible values.
s
Optimize for size rather than speed.

The exact effect of some of these optimizations can be found in the Programmer’s Guide.

-oxxx
Use xxx as the name of the output file (executable). For use only with programs. The output filename can contain a path, and if it does, it will override any previous -FE setting. If the output filename does not contain a path, the -FE setting is observed.
-pg
Generate profiler code for gprof. This will define the symbol FPC_PROFILE, which can be used in conditional defines.
-s
Do not call the assembler and linker. Instead, the compiler writes a script, PPAS.BAT under dos, or ppas.sh under linux, which can then be executed to produce an executable. This can be used to speed up the compiling process or to debug the compiler’s output. This option can take an extra parameter, mainly used for cross-compilation. It can have one of the following values:
h
Generate script to link on host. The generated script can be run on the compilation platform (host platform).
t
Generate script to link on target platform. The generated script can be run on the target platform. (where the binary is intended to be run)
r
Skip register allocation phase (optimizations will be disabled).
-Txxx
Specify the target operating system. xxx can be one of the following:

The available list of targets depends on the actual compiler binary. Use fpc -i to get a list of targets supported by the compiler binary.

-uxxx
Undefine the symbol xxx. This is the opposite of the -d option.
-Ur
Generate release unit files. These files will not be recompiled, even when the sources are available. This is useful when making release distributions. This also overrides the -B option for release mode units.
-W
Set some Windows or os/2 attributes of the generated binary. It can be one or more of the following
Bhhh
Set preferred base address to hhh (a hexadecimal address)
C
Generate a console application (+) or a gui application (-).
D
Force use of Def file for exports.
F
Generate a FS application (+) or a console application (-).
G
Generate a GUI application (+) or a console application (-).
N
Do not generate a relocation section.
R
Generate a relocation section.
T
Generate a TOOL application (+) or a console application (-).
-Xx
Specify executable options. This tells the compiler what kind of executable should be generated. The parameter x can be one of the following: