Compiling the compiler

[prev] [prev-tail] [tail] [up]

#### F.4.2 Compiling the compiler

Compiling the compiler can be done with one statement. It’s always best to remove all units from the compiler directory first, so something like

rm *.ppu *.o

on linux, and on dos

del *.ppu
del *.o

After this, the compiler can be compiled with the following command line:

ppc386 -Tlinux -Fusystems -Fii386/ -Fui386 \
-Fu../rtl/units/i386-linux -di386 -dGDB pp.pas

All the options must be given on a single line, the backslash is needed if you want to specify the options on multiple lines.

So, the minimum options are:

1. The target OS. Can be skipped when compiling for the same target as the compiler which is being used.
2. A path to an RTL. Can be skipped if a correct fpc.cfg configuration is on the system. If the compiler should be compiled with the RTL that was compiled first, this should be ../rtl/OS (replace the OS with the appropriate operating system subdirectory of the RTL).
3. A define with the processor for which the compiler is compiled for. Required.
4. -dGDB. Required.
5. -Sg is needed, some parts of the compiler use goto statements (to be specific: the scanner).
6. A directory with some units and include files for the processor you’re compiling for.
7. A directory with the system definitions.

So the absolute minimal command line is

ppc386 -Fusystems -Fii386 -Fui386 -di386 -dGDB -Sg pp.pas

Some other command line options can be used, but the above are the minimum. A list of recognized options can be found in table (F.1).

Table F.1: Possible defines when compiling FPC

Define | does what
GDB | Support of the GNU Debugger (required switch).
I386 | Generate a compiler for the Intel i386+ processor family.
M68K | Generate a compiler for the M680x0 processor family.
X86_64 | Generate a compiler for the AMD64 processor family.
POWERPC | Generate a compiler for the PowerPC processor family.
POWERPC64 | Generate a compiler for the 64-bit PowerPC processor family.
ARM | Generate a compiler for the Intel ARM processor family.
SPARC | Generate a compiler for the SPARC processor family.
EXTDEBUG | Some extra debug code is executed.
MEMDEBUG | Some memory usage information is displayed.
SUPPORT_MMX | only i386: enables the compiler switch MMX which
| allows the compiler to generate MMX instructions.
EXTERN_MSG | Don’t compile the msgfiles in the compiler, always use
| external messagefiles.
NOOPT | Do not include the optimizer in the compiler.
CMEM | Use the C memory manager.

This list may be subject to change, the source file pp.pas always contains an up-to-date list.

[prev] [prev-tail] [front] [up]