Booting CM3 5.1 with PM3 or SRC M3
The CM3 5.1 compiler may be compiled with the PM3 Modula-3
compiler or the older SRC version. As there have been changes in
the standard libraries (Text interface) and the language
(WIDECHARs), a bootstrapping process is necessary. This
bootstrapping contains the following steps:
-
Apply the m3-boot-diffs using the
popular patch program to the cm3/m3-sys directory.
-
Make sure that the compiler contains the necessary platform
support. Inspect the following files:
cm3/m3-sys/m3middle/src/Target.m3
cm3/m3-sys/cm3/src/config/${TARGET}
-
Create the file compat.quake at the root of the source tree
with this content:
% Determine whether we are using the PM3 release of Modula-3.
if not defined("PM3")
% The procedure "build_standalone" exists only in SRC Modula-3.
if not defined("build_standalone")
PM3 = "T"
end
end
if defined("PM3")
proc build_standalone() is
option("standalone", "T")
end
end
-
Compile and link the CM3 compiler using the libraries of the
PM3 system. You can do this with the the script
cm3/scripts/boot-cm3-with-m3.sh. Have a look at the
script to see what packages are needed if you prefer to do it
without shell's help.
-
Set up a CM3 directory skeleton (usually at
/usr/local/cm3). You can use the script
cm3/scripts/create-skel.sh.
-
Install the compiler frontend (cm3), backend (cm3g)(if
needed), and mklib (if needed) in the recently created cm3/bin
directory, along with the appropriate platform config file
(cm3/m3-sys/cm3/src/config/${TARGET} -->
/usr/local/cm3/bin/cm3.cfg).
-
Carefully check all the settings in your configuration file
cm3.cfg
-
Extend your PATH to contain the CM3 bin directory.
-
Reverse the applied patches or just unpack the original
cm3/m3-sys sources.
-
Compile the standard libraries m3core and
libm3 using the new compiler. Make sure that all the
platform support stuff in m3core (various ${TARGET}
subdirectories) and the Unix interfaces (if needed) are
up-to-date. Ship the standard libraries using the new
compiler. You can use the script
cm3/scripts/do-cm3-min.sh.
-
Recompile the CM3 compiler using the new CM3 compiler. Install
the resulting cm3 executable as before, but make sure not to
remove the first version just in case anything went wrong. You
can again use the cm3/scripts/boot-cm3-with-m3.sh
script.
-
Recompile the standard libraries again and ship them.
-
Recompile the CM3 compiler again and link it against the
latest standard libraries. Install the cm3 executable as
before. The booting process should now have reached a
fix-point.
If the platform for which you want to bring up the CM3 compiler
hasn't been tested yet (anything except NT386, FreeBSD3, SOLgnu,
and LINUXLIBC6), you may experience problems due to incompatible
system interfaces and two years old runtime support. If the
platform is contained in PM3, you may be able to compare all the
modules and borrow patches and things needed. Be aware that it
will probably not do to copy the complete PM3 runtime stuff, as
CM3 and PM3 have made different and sometimes incompatible
extensions to the SRC compiler. Feel free request help at m3-support{at}elego.de.
The above procedure has been successfully applied to boot the
CM3 5.1 source release on NT386, FreeBSD3, SOLgnu, and
LINUXLIBC6, so it is unlikely to be completely wrong. Your
mileage may wary though.
m3-support{at}elego.de