fpc(1)

NAME
fpc - Free Pascal Compiler (FPC) binary

SYNOPSIS
fpc [options] [sourcefile]

DESCRIPTION
This binary is the main binary of the Free Pascal Compiler (FPC) which is a Turbo Pascal and Delphi (2.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, OS/2 and Win32. The other targets (M68K compilers for Atari and Amiga) are based on older versions of the compiler.

This manpage is meant for quick-reference only. FPC comes with a great (600+ pages) manual, which is updated constantly, while this man page can be out of date.

Version number
Right now the compiler uses versionnumbers like 0.99.12 and 0.99.13. After the 1.0 release this will change to 1.0 and 1.1. Both version naming types have in common that if the last number is even (0.99.12, 1.0), it is stable, and the last number odd is a dialy changing development version.(0.99.13, 1.1) just like the kernel. Fixes to releases will be named 0.99.12-x with x a number (e.g. 0.99.12-1)

Version 0.99.5 however is a stable release. It was made before the even/odd version naming system was introduced.

Usage
The compilation proces 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, ppc386.cfg(5) the configuration file of the i386 compiler is read which contains the location of the RTL, other packages (API, FCL, FreeVision), and optionally default values for some switches. See the separate manpage of ppc386.cfg(5) for more information.

Options

General options

-h  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 enter key.

-i  This option tells the compiler to print the copyright information.
       You can give it an option, as -ixxx} where "xxx" can be one of the following:

    D   Returns the compiler date.

    V   Returns the compiler version.

    SO  Returns the compiler OS.

    SP  Returns the compiler processor.

    TO  Returns the target OS.

    TP  Returns the target Processor.

-l  This option tells the compiler to print the FPC logo on standard output. It also gives you the FPC version number.

-n  Tells the compiler not to read the configuration file ppc386.cfg(5)

Options for getting feedback

-vxxx
    Be verbose. "xxx" is a combination of the following:

    e   Tells the compiler to show only errors. This option is on by default.

    i   Tells the compiler to show some general information.

    w   Tells the compiler to issue warnings.

    n   Tells the compiler to issue notes.

    h   Tells the compiler to issue hints.

    l   Tells the compiler to show the line numbers as it processes a file. Numbers are shown per 100.

    u   Tells the compiler to print the names of the files it opens.

    t   Tells the compiler to print the names of the files it tries to open.

    p   Tells the compiler to print the names of procedures and functions as it is processing them.

    c   Tells the compiler to warn you when it processes a conditional.

    m   Tells the compiler to write which macros are defined.

    d   Tells the compiler to write other debugging info.

    a   Tells the compiler to write all possible info. (this is the same as specifying all options)

    0   Tells the compiler to write no messages. This is useful when you want to override the default setting in the configuration file.

    b   Tells the compiler to show all procedure declarations if an overloaded function error occurs.

    x   Tells the compiler to output some executable info (for Win32 platform only).

    r   Rhide/GCC compatibility mode: formats the error differently, so they are understood by RHIDE.

Options concerning files and directories

-exxx
    tells the compiler that xxx is the directory where it can find the executables as (the assembler) and ld (the linker).

-FD same as -e.

-Fexxx
    This option tells the compiler to write errors, etc. to the file xxx

-Fgxxx
    (linux only, obsolete) xxx
     specifies the path where the compiler can find the GNU C library. This is superseded by the -Fl option.

-Fixxx
    adds xxx to the path where the compiler searches for its include files.

-Flxxx
    Adds xxx to the library searching path, and is passe to the linker.

-FLxxx
    ( 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.

-Foxxx
    Adds xxx
     to the object file path. This path is used when looking for files that need to be linked in.

-Frxxx
    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).

-Fuxxx
    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 .

-FUxxx
    Tells the compiler to write units in directory xxx instead of the current directory.

-Ixxx
    Add xxx to the include file search path. This path is used when looking for include files.

-P  uses pipes instead of files when assembling. This may speed up the compiler on OS/2 and Linux. Only with assemblers (such as GNU AS ) that support piping.

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."

for more information on these options, see also the programmers manual.

-a  Tells the compiler not to delete the assembler file. This also counts for the (possibly) generated batch script.

-al Tells the compiler to include the sourcecode lines in the assembler file as comments. This feature is still experimental, and should be used with caution.

-Axxx
    specifies what kind of assembler should be generated . Here xxx is one of the following :

    AS  A unix .o (object) file, using GNU AS

    nasmcoff
        a coff file using the nasm assembler.

    nasmelf
        a ELF32 file (LINUX only) using the nasm assembler.

    nasmonj
        a obj file using the nasm assembler.

    masm
        An obj file using the Microsoft masm assembler.

    tasm
        An obj file using the Borland tasm assembler.

-CD Create dynamic library.

-Chxxx
    Reserves xxx bytes heap. xxx should be between 1024 and 67107840.

-Ci Generate Input/Output checking code.

-Cn Omit the linking stage.

-Co Generate Integer overflow checking code.

-Cr Generate Range checking code.

-Csxxx
    Set stack size to xxx bytes.

-CS Create static library.

-Ct generate stack checking code.

-Cx Use smartlinking when compiling and linking units.

-dxxx
    Define the symbol name xxx This can be used to conditionally compile parts of your code.

-E  Same as -Cn.

-g  Generate debugging information for debugging with GDB

-gg idem as -g.

-gd generate debugging info for dbx.

-gh use the heaptrc unit (see the units part of the FPC manual).

-Oxxx
    optimize the compiler's output; xxx can have one of the following 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).

    Pn  Specify processor : n can be one of

        1   optimize for 386/486

        2   optimize for Pentium/PentiumMMX (tm)

        3   optimizations for PentiumPro / P-II / Cyrix 6x86 / K6 (tm)
    The exact effect of these effects can be found in the programmers part of the manual.

-oxxx
    Tells the compiler to use xxx as the name of the output file (executable). Only with programs.

-pg Generate profiler code for gprof.

-s  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.

-Txxx
    Specifies the target operating system. xxx can be one of the following:

    GO32V1
        DOS and version 1 of the DJ DELORIE extender (no longer maintained).

    GO32V2
        DOS and version 2 of the DJ DELORIE extender.

    LINUX
        Linux.

    OS2 OS/2 (2.x) (this is still under development).

    WIN32
        Windows 32 bit.

-uxxx
    undefine the symbol xxx . This is the opposite of the -d option.

-uxxx
    Undefine symbol xxx .

-Xx Executable options. These tell the compiler what kind of executable should be generated. the parameter x can be one of the following:

    c   (Linux only, obsolete) Link with the C library. You should only use this when you start to port Free Pascal to another operating system.

    D   Link with dynamic libraries (defines the FPC_LINK_DYNAMIC symbol)

    s   Strip the symbols from the executable.

    S   Link with static libraries (defines th FPC_LINK_STATIC symbol)

Options concerning the sources (language options) for more information on these options, see also Programmers Manual

-Rxxx
    Specifies what assembler you use in your "asm" assembler code blocks. Here xxx is one of the following:

    att Asm blocks contain AT&T assembler.

    intel
        Asm blocks contain Intel assembler.

    direct
        Asm blocks should be copied as-is in the assembler file.

-S2 Switch on Delphi 2 extensions.

-Sc Support C-style operators, i.e. *=, +=, /= and -=.

-Sd tells the compiler to dispose asmlists. This uses less memory, but is slower.

-Se 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.

-Sg Support the label and goto commands.

-Si Support C++ style INLINE.

-Sm Support C-style macros.

-So Try to be Borland TP 7.0 compatible (no function overloading etc.).

-Sp Try to be GPC (GNU Pascal Compiler) compatible.

-Ss The name of constructors must be "init", and the name of destructors should be "done".

-St Allow the "static" keyword in objects.

-Un Do not check the unit name. Normally, the unit name is the same as the filename. This option allows both to be different.

-Us Compile a system unit. This option causes the compiler to define only some very basic types.

SEE ALSO
ppc386.cfg(5) ppdep(1) ppudump(1) ppumove(1) ptop(1) h2pas(1) ld(1) as(1)