Skip site navigation (1)Skip section navigation (2)

  
 
  

home | help
fpc(1)			      Free Pascal Compiler			  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 (7.0) compatible standalone (non GCC frontend) mul-
     titarget 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, OS/2 and Win32.  The other targets (M68K
     compilers for Atari and Amiga) are either based on older  versions  of  the
     compiler or are still in development.

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

Version number
     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 num-
     ber is odd it is a daily changing	development  version.(1.0.5,  1.1)  just
     like the linux kernel.

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

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

Options
     General options

     -h     if	you  specify this option, the compiler outputs a list of all op-
	    tions, 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     At	the  top print a line stating which program this is and its ver-
	    sion.

     -n     Tells the compiler not to read the configuration file fpc.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 func-
		   tions as it is processing them.

	    c	   Tells the compiler to warn you when	it  processes  a  condi-
		   tional.

	    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

     -FExxx
	    set the executable/unit output path to xxx

     -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  lan-
	    guage 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  com-
	    piler 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.

     Options  controlling  the	kind of output for more information on these op-
     tions, 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.

     -an    Tells the compiler to include node information in the generated  as-
	    sembler file.  This is mainly for use by the compiler developers.

     -ap    Tells the compiler to use pipes to communicate with the assembler.

     -ar    Tells  the	compiler to include register allocation/deallocation in-
	    formation.

     -at    Tells the compiler to include temporary register  allocation/deallo-
	    cation information.

     -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

	    coff   coff object file (go32) using internal writer.

	    default
		   Use the default writer for the current platform.

	    elf    elf object file (linux, 32-bit only) using internal writer.

	    nasmcoff
		   a coff file using the nasm assembler.

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

	    nasmobj
		   a obj file using the nasm assembler.

	    masm   An obj file using the Microsoft masm assembler.

	    pecoff
		   pecoff object file (win32) using internal writer.

	    tasm   An obj file using the Borland tasm assembler.

	    wasm   An obj file using the Watcom assembler.

     -Ccxxx
	    set the default calling convention to XXX.

     -CD    Create dynamic library.

     -Ce    Compile using emulated floating point instructions.

     -Cfxxx
	    Set the used floating point instruction set to xxx.

     -Cg    Generate PIC code.

     -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    Verify object call validity (method calls mustbe valid).

     -Cr    Generate Range checking code.

     -Csxxx
	    Set stack size to xxx bytes.

     -Ct    generate stack checking code.

     -CX    Create a smartlinked library.

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

     -gl    use the lineinfo unit for line information (see the  units	part  of
	    the FPC manual).

     -gv    Generate information for debugging with valgrind.

     -gw    Generate DWARF debugging information.

     -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 (exe-
	    cutable). 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.

     -sh    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 when
	    cross-compiling.

     -sr    Skip register allocation stage in compiler (use with -ar)

     -st    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 when
	    cross-compiling.

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

	    EMX    OS/2 and DOS via the EMX extender.

	    FREEBSD
		   FreeBSD

	    GO32V2
		   DOS and version 2 of the DJ DELORIE extender.

	    LINUX  Linux.

	    NETBSD
		   Netbsd.

	    NETWARE
		   Novell Netware module (clib)

	    NETLIBC
		   Novell Netware module (libc)

	    OPENBSD
		   OpenBSD

	    OS2    OS/2 (native mode)

	    SunOS  Solaris SunOS

	    WATCOM
		   WatCOM dos extender

	    WDOSX  WDosX Dos extender

	    WIN32  Windows 32 bit.

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

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

	    d	   Don't use the standard library path. Use this when cross-com-
		   piling, to avoid linking with the host OS libraries.

	    Pxxx   Prepend the names of binutils (as, ld) with xxx. For use when
		   cross-compiling.

	    rxxx   Set the library search path to xxx.

	    s	   Strip the symbols from the executable.

	    S	   Link with static libraries (defines the FPC_LINK_STATIC  sym-
		   bol)

	    t	   Link statically (passes -static to the linker)

	    X	   Link smart. Using this option sets the FPC_LINK_SMART symbol.

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

     -Mmode
	    Specify the language mode.	mode can be one of the following:

	    delphi
		   Delphi-compatibility mode. This loads the  objpas  unit,  and
		   switches on ansistring mode ( -Sh ).

	    fpc    Default mode.

	    gpc    GNU pascal mode (does nothing at the moment)

	    macpas
		   Mac	pascal	mode. This loads the macpas unit and switches on
		   some Mac extensions (mainly macros)

	    objfpc
		   Object Pascal mode. This loads the objpas unit.

	    tp	   Turbo Pascal mode.

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

	    default
		   Use default assembler for the selected platform.

     -S2    Switch on Delphi 2 extensions.

     -Sa    Generate code for assertions.

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

     -Sd    Tries to be Delphi compatible

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

     -Sh    use ansistrings by default.

     -SIxxx
	    Specify the kind of interfaces.  xxx can be one of the following:

	    COM    use COM interfaces. (all interfaces descend from IUnknown)

	    CORBA  use CORBA interfaces. (no inheritance is supposed)

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

     -Ur    Create a release unit. This sets a special flag in the unit, causing
	    the compiler not to look for sources.

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

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

Free Pascal			   22 feb 2002				  fpc(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=fpc&sektion=1&manpath=FreeBSD+15.1-RELEASE+and+Ports>

home | help