To recompile the RTL, so a new compiler can be built, at least the following units must be built, in the order specified:
The program stubs, that are the startup code for each pascal program. These files have the .as extension, because they are written in assembler. They must be assembled with the gnu as assembler. These stubs are in the OS-dependent directory, except for linux, where they are in a processor dependent subdirectory of the linux directory (i386 or m68k).
The system unit. This unit resides in the OS-dependent subdirectories of the RTL.
The strings unit. This unit resides in the inc subdirectory of the RTL.
The dos unit. It resides in the OS-dependent subdirectory of the RTL. Possibly other units will be compiled as a consequence of trying to compile this unit (e.g. on linux, the linux unit will be compiled, on go32, the go32 unit will be compiled).
The objects unit. It resides in the inc subdirectory of the RTL.
To compile these units on a i386, the following statements will do:
ppc386 -Tlinux -b- -Fi../inc -Fi../i386 -FE. -di386 -Us -Sg system.pp ppc386 -Tlinux -b- -Fi../inc -Fi../i386 -FE. -di386 ../inc/strings.pp ppc386 -Tlinux -b- -Fi../inc -Fi../i386 -FE. -di386 dos.pp ppc386 -Tlinux -b- -Fi../inc -Fi../i386 -FE. -di386 ../inc/objects.pp
These are the minimum command line options, needed to compile the RTL.
For another processor, the i386 should be changed into the appropriate processor. For another target OS, the target OS setting (-T) must be set accordingly.
Depending on the target OS there are other units that can be compiled, but which are not strictly needed to recompile the compiler. The following units are available for all platforms:
Needed for Delphi mode. Needs -Mobjfpc as an option. Resides in the objpas subdirectory.
Many utility functions, like in Delphi. Resides in the objpas directory, and needs -MObjfpc to compile.
Functions to access RTTI information, like Delphi. Resides in the objpas directory.
Math functions like in Delphi. Resides in the objpas directory.
Extensions for MMX class Intel processors. Resides in in the i386 directory.
A GNU compatible getopts unit. Resides in the inc directory.
To debug the heap. Resides in the inc directory.