It is a good idea to periodically update gcc to the latest release, so that you get all the bug fixes and new features. 1. Save the old version of the compiler. The new version might be flaky, so you want to be able to back out to the previous version easily. The sources of the current distribution are kept in /sprite/src/cmds/gcc/dist. Move it to /sprite/src/cmds/gcc/dist-XXX where `XXX' is the version number. Create a new `dist' directory to put the new stuff. IMPORTANT --> Make sure you also save a copy of the binaries. This should include a copy of the frontends, and the backends for each machine. If you lose all working copies, then you cannot generate a new compiler! (However if this should accidently happen, you can restore them from a dump tape.) 2. Get the latest version of gcc. To do this type ftp prep.ai.mit.edu When you are prompted for an id Type `anonymous'. When it asks for a password, you can type anything because it will just ignore it. Once you are logged in, type ftp> cd /u2/emacs ftp> ls This will list the contents of the directory. Look for a file named something like `gcc-1.36.tar.Z'. Make sure you get the latest version. To download, type ftp> get gcc-1.36.tar.Z Since it is a big file, it will take a while to down load. This is a good opportunity to go eat lunch or something. One it is downloaded, type ftp> quit to disconnect. 3. Uncompress the tar file. To do this type uncompress gcc-1.36.tar.Z 4. Un-tar the files by typing: tar xvf gcc-1.36.tar 5. In the file /sprite/src/cmds/gcc/sprite there are a bunch of files that have special modifications for sprite. You need to run rlog to find out what has been changed in these files and then integrate those changes into the distribution. All changed files should be placed in gcc/sprite. gcc/dist should only contain the unadulturated distribution. See the end of this file for a list of special modifications of gcc for sprite. 6. Recompile the front end: cd /sprite/src/cmds/gcc make clean make mkmf make 7. Recompile the back ends for each machine type. You need to double check all the symbolic links. Most of them should point to /sprite/src/cmds/gcc/dist, but some of them will point to the files in /sprite/src/cmds/gcc/sprite. cd /sprite/src/cmds/cc1.68k make clean make mkmf make 8. Test the compiler to make sure it works. You can do this by using the -B option to specify a different search path to find the backends. For instance sun3.md/gcc -B/sprite/src/cmds/cc1.68k/sun3.md foo.c will cause the compiler to use the new back end, rather than the one in /sprite/lib/gcc/sun3.md. One very important test is to make sure the new compiler can regenerate itself from scratch. 9. Send mail to `sprite-users' so that everyone knows the compiler is about to change. 10. Install the new compiler. Run `make install' in /sprite/src/cmds/gcc and in /sprite/src/cmds/cc1.$MACHINE for each machine. 11. Make sure that everything still works. Try compiling several different commands. Run them to make sure that they still work. Try compiling, and booting a new kernel. ----------------------------------------------------------------------------- Here is a list of special compiler hacks to customize gcc for Sprite. This list is probably not up to date, so check in /sprite/src/gcc/sprite and look at the sources to be sure. Front end --------- The front end uses a file called `specs.h' that has specifications for multiple machine types. To specify a particular machine type, use the -m flag. The front end invokes the preprocessor with both `sprite' and `unix' predefined. Preprocessor ------------ The preprocessor has been modified to search for include files in machine dependent directories first. __STDC__ can be undefined, so that lint can use the gnu preprocessor. cc1 backend ------- cc1 has been modified to recognize any static variable named `rcsid'. If this variable is unused it will not complain. This is so we can use RCS without seeing zillions of warnings.