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:
The target OS. Can be skipped when compiling for the same target as the compiler which is being used.
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).
A define with the processor for which the compiler is compiled for. Required.
-dGDB. Required.
-Sg is needed, some parts of the compiler use goto statements (to be specific: the scanner).
A directory with some units and include files for the processor you’re compiling for.
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).
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.