fpc - Free Pascal Compiler (FPC) binary
fpc [options] [sourcefile]
This binary is the main binary of the Free Pascal Compiler (FPC)
a Turbo Pascal
and Delphi (7.0)
compatible standalone (non GCC
frontend) multitarget Pascal compiler.
The compiler uses LD
(1) and can use AS
(1) (see parameter -Aas),
but also has its own binary object writer.
The current main targets are Go32V2
(Dos DJGPP extender), Freebsd,
Linux, MacOS, MacOSX, MorphOS, Netware,
The other targets (M68K compilers for Atari and
Amiga) are either based on older versions of the compiler or are still in
This manpage is meant for quick-reference only. FPC comes with a great (2000+
pages) manual, which is updated constantly, while this man page can be out of
Starting with release 1.0, a new versioning system has been implemented. If the
last number is even (1.0, 1.0.2), it is stable, and if the last number is odd
it is a daily changing development version.(1.0.5, 1.1) just like the linux
Version 0.99.5 however is a stable release. It was made before the even/odd
version naming system was introduced.
The compilation process is started by typing fpc
followed by a sourcefile
name (normally with .pas or .pp extension). Before processing the actual
processing of the source file, fpc.cfg
(5) the configuration file of the
compiler is read which contains the location of the RTL, other packages (FCL,
FreeVision), and optionally default values for some switches. See the separate
manpage of fpc.cfg
(5) for more information.
- if you specify this option, the compiler outputs a list of
all options, and exits after that.
- idem as -h, but waiting after every screenfull for the
- This option tells the compiler to print the copyright
You can give it an option, as -ixxx where "xxx" can be one of the
- Returns the compiler date.
- Returns the compiler version.
- Returns the compiler OS.
- Returns the compiler processor.
- Returns the target OS.
- Returns the target Processor.
- This option tells the compiler to print the FPC logo
on standard output. It also gives you the FPC version number.
- Tells the compiler not to read the configuration file
Options for getting feedback
- Be verbose. "xxx" is a combination of the
- Tells the compiler to show only errors. This option is on
- Tells the compiler to show some general information.
- Tells the compiler to issue warnings.
- Tells the compiler to issue notes.
- Tells the compiler to issue hints.
- Tells the compiler to show the line numbers as it processes
a file. Numbers are shown per 100.
- Tells the compiler to print the names of the files it
- Tells the compiler to print the names of the files it tries
- Tells the compiler to print the names of procedures and
functions as it is processing them.
- Tells the compiler to warn you when it processes a
- Tells the compiler to write which macros are defined.
- Tells the compiler to write other debugging info.
- Tells the compiler to write all possible info. (this is the
same as specifying all options)
- Tells the compiler to write no messages. This is useful
when you want to override the default setting in the configuration
- Tells the compiler to show all procedure declarations if an
overloaded function error occurs.
- Tells the compiler to output some executable info (for
Win32 platform only).
- Rhide/GCC compatibility mode: formats the error
differently, so they are understood by RHIDE.
Options concerning files and directories
- tells the compiler that xxx is the directory where
it can find the executables as (the assembler) and ld (the linker).
- same as -e.
- This option tells the compiler to write errors, etc. to the
- set the executable/unit output path to xxx
- adds xxx to the path where the compiler searches for
its include files.
- Adds xxx to the library searching path, and is passe
to the linker.
- ( Linux only) Tells the compiler to use xxx as the
dynamic linker. Default this is /lib/ld-linux.so.2, or lib/ld-linux.so.1,
depending on which one is found.
- Adds xxx to the object file path. This path is used
when looking for files that need to be linked in.
- tells the compiler that xxx contains the compiler
messages. Default the compiler has built-in messages. Specifying this
option will override the default messages. (useful if you want to use a
language other than the default language).
- Adds xxx to the unit path. By default, the compiler
only searches for units in the current directory and the directory where
the compiler itself resides. This option tells the compiler also to look
in the directory xxx
- Tells the compiler to write units in directory xxx
instead of the current directory.
- Add xxx to the include file search path. This path
is used when looking for include files.
Options controlling the kind of output for more information on these options,
see also the programmers manual.
- Tells the compiler not to delete the assembler file. This
also counts for the (possibly) generated batch script.
- Tells the compiler to include the sourcecode lines in the
assembler file as comments.
- Tells the compiler to include node information in the
generated assembler file. This is mainly for use by the compiler
- Tells the compiler to use pipes to communicate with the
- Tells the compiler to include register
- Tells the compiler to include temporary register
- specifies what kind of assembler should be generated . Here
xxx is one of the following :
- A unix .o (object) file, using GNU AS
- coff object file (go32) using internal writer.
- Use the default writer for the current platform.
- elf object file (linux, 32-bit only) using internal
- a coff file using the nasm assembler.
- a ELF32 file (LINUX only) using the nasm
- a obj file using the nasm assembler.
- An obj file using the Microsoft masm assembler.
- pecoff object file (win32) using internal writer.
- An obj file using the Borland tasm assembler.
- An obj file using the Watcom assembler.
- set the default calling convention to XXX.
- Create dynamic library.
- Compile using emulated floating point instructions.
- Set the used floating point instruction set to xxx.
- Generate PIC code.
- Reserves xxx bytes heap. xxx should be
between 1024 and 67107840.
- Generate Input/Output checking code.
- Omit the linking stage.
- Generate Integer overflow checking code.
- Verify object call validity (method calls mustbe
- Generate Range checking code.
- Set stack size to xxx bytes.
- generate stack checking code.
- Create a smartlinked library.
- Define the symbol name xxx This can be used to
conditionally compile parts of your code.
- Same as -Cn.
- Generate debugging information for debugging with
- idem as -g.
- generate debugging info for dbx.
- use the heaptrc unit (see the units part of the FPC
- use the lineinfo unit for line information (see the units
part of the FPC manual).
- Generate information for debugging with valgrind.
- Generate DWARF debugging information.
- optimize the compiler's output; xxx can have one of
the following values :
- optimize for size, try to generate smaller code.
- optimize for time, try to generate faster code
- keep certain variables in registers (experimental, use with
- uncertain optimizations
- Level 1 optimizations (quick optimizations).
- Level 2 optimizations (-O1 plus some slower
- Level 3 optimizations (-O2 plus -Ou).
- Specify processor : n can be one of
- optimize for 386/486
- optimize for Pentium/PentiumMMX (tm)
- optimizations for PentiumPro / P-II / Cyrix 6x86 / K6
The exact effect of these effects can be found in the programmers part of the
- Tells the compiler to use xxx as the name of the
output file (executable). Only with programs.
- Generate profiler code for gprof.
- Tells the compiler not to 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.
- Tells the compiler to generate a script that can be used to
assemble and link on the host system, not on the target system. Use this
- Skip register allocation stage in compiler (use with
- Tells the compiler to generate a script that can be used to
assemble and link on the target system, not on the host system. Use this
- Specifies the target operating system. xxx can be
one of the following:
- OS/2 and DOS via the EMX extender.
- DOS and version 2 of the DJ DELORIE extender.
- Novell Netware module (clib)
- Novell Netware module (libc)
- OS/2 (native mode)
- Solaris SunOS
- WatCOM dos extender
- WDosX Dos extender
- Windows 32 bit.
- undefine the symbol xxx if it is defined. This is
the opposite of the -d option.
- Executable options. These tell the compiler what kind of
executable should be generated. the parameter x can be one of the
- (Linux only, obsolete) Link with the C library. You should
only use this when you start to port Free Pascal to another operating
- Link with dynamic libraries (defines the FPC_LINK_DYNAMIC
- Don't use the standard library path. Use this when
cross-compiling, to avoid linking with the host OS libraries.
- Prepend the names of binutils (as, ld) with xxx. For use
- Set the library search path to xxx.
- Strip the symbols from the executable.
- Link with static libraries (defines the FPC_LINK_STATIC
- Link statically (passes -static to the linker)
- Link smart. Using this option sets the FPC_LINK_SMART
Options concerning the sources (language options) for more information on these
options, see also in the Programmers Manual
- Specify the language mode. mode can be one of the
- Delphi-compatibility mode. This loads the objpas unit, and
switches on ansistring mode ( -Sh ).
- Default mode.
- GNU pascal mode (does nothing at the moment)
- Mac pascal mode. This loads the macpas unit and switches on
some Mac extensions (mainly macros)
- Object Pascal mode. This loads the objpas unit.
- Turbo Pascal mode.
- Specifies what assembler you use in your "asm"
assembler code blocks. Here xxx is one of the following:
- Asm blocks contain AT&T assembler.
- Asm blocks contain Intel assembler.
- Asm blocks should be copied as-is in the assembler
- Switch on Delphi 2 extensions.
- Generate code for assertions.
- Support C-style operators, i.e. *=, +=, /= and -=.
- Tries to be Delphi compatible
- The compiler stops after the first error. Normally, the
compiler tries to continue compiling after an error, until 50 errors are
reached, or a fatal error is reached, and then it stops. With this switch,
the compiler will stop after the first error.
- Support the label and goto commands.
- use ansistrings by default.
- Specify the kind of interfaces. xxx can be one of
- use COM interfaces. (all interfaces descend from
- use CORBA interfaces. (no inheritance is supposed)
- Support C++ style INLINE.
- Support C-style macros.
- Try to be Borland TP 7.0 compatible (no function
- Try to be GPC (GNU Pascal Compiler) compatible.
- The name of constructors must be "init", and the
name of destructors should be "done".
- Allow the "static" keyword in objects.
- Do not check the unit name. Normally, the unit name is the
same as the filename. This option allows both to be different.
- Create a release unit. This sets a special flag in the
unit, causing the compiler not to look for sources.
- Compile a system unit. This option causes the compiler to
define only some very basic types.