diff options
Diffstat (limited to 'gnu/usr.bin/cc25/README')
| -rw-r--r-- | gnu/usr.bin/cc25/README | 209 |
1 files changed, 209 insertions, 0 deletions
diff --git a/gnu/usr.bin/cc25/README b/gnu/usr.bin/cc25/README new file mode 100644 index 000000000000..566908f2c026 --- /dev/null +++ b/gnu/usr.bin/cc25/README @@ -0,0 +1,209 @@ + ---------------------------------------------------------------------------- + "THE BEER-WARE LICENSE" (Revision 42): + <phk@login.dkuug.dk> wrote this file. As long as you retain this notice you + can do whatever you want with this stuff. If we meet some day, and you think + this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp + ---------------------------------------------------------------------------- + + $Id: README,v 1.2 1994/02/27 21:42:34 phk Exp $ + +"If you're looking for trouble, + you've come to the right place !" + The King. + +(I have taken the time to rewrite the README. It had become a proper mess, +just like any other workspace of mine.) + +What is this ? +-------------- +My intention is that this will be the link between the GNU-release of GCC, +and the FreeBSD integrated version of GCC. The problem^H^H^H^H^H^Hchallenge +is that FreeBSD uses BSD style Makefiles, whereas GNU uses their own scheme. +Thus, everytime GNU adds a file, changes a flag and so on, we have to find +out what consequences this should have for the FreeBSD Makefiles. This +stuff, should make that process easier, and reproducible. + +The next challenge^H^H^H^H^H^H^H^H^Hproblem is that we need some modifications +to the GNU source. For instance: we use gcc to compile FORTRAN via f2c, so +we need to add the rules for that to gcc.c. + +In case you have ever wondered about what "dark runes" was, this is that. + +Overview: +--------- +When a new release of GCC is to be brought into FreeBSD, this is what must +be done: + + - modify gnu2bsd.tcl as needed, until the resulting FreeBSD-tree + is compilable. It may not yet be correct, but it must be compilable. + - patch the GNU-tree as needed until the compiler generated from + the BSD-tree is correct. + +I think this will be the simplest way to do the second part: + + - Run a virgin GNU-gcc-(N) through gnu2bsd.tcl. + - Create a patch from this to the patched FreeBSD-gcc-(N). + - Run a virgin GNU-gcc-(N+a) through gnu2bsd.tcl + - Apply as much of the above patch as makes sense. + - Twiddle until it works. + - Submit the needed patches to the GNU people, to avoid + needless diversion from their base. + +It is of course clear from the above, that unless you feel that you are +sure why you need to do this, you shouldn't do it. There is some very +interesting ways this can hose your system. Don't tell me I didn't +warn you. + +Installation: +------------- + + 0. Needed ingredients: + ====================== + bison and tcl. + + 1. Create a emergency ready copy of your old gcc. + ================================================= + Move the old compiler to a safe place + mv /usr/src/gnu/usr.bin/cc /usr/src/gnu/usr.bin/cc.old + for instance. + + cd into the directory of the old compiler, and do: + find . -name 'obj' -exec rm -f {} \; + make clean all + + It is necessary to remove the 'obj' sym-links, as a make world + is likely to remove the stuff they point at. Doing it this way + you can, in case you hose the installed c-compiler, go down here + and do a + make install + and things should work for you again. + + 2. Create the foundations for a new gcc. + ======================================== + Create a new directory /usr/src/gnu/usr.bin/cc The name can + be anything you like actually, but some Makefiles "know" this place. + This directory is $BSDDIR in the rest of this instruction. + + Copy the usr.bin.cpp and usr.bin.f77 with contents to $BSDDIR from + somewhere, either they came with this stuff, or you can take it + from the old cc on your system. + + Copy Makefile and gnu2bsd.tcl also, and if any gcc???-freebsd.patch + files are there, you should copy those along too. This file (README) + will be nice to have too. + + 3. Install a GNU-release of GCC somewhere. + ========================================== + This can be anywhere you have the necesary disk-space. ($GNUDIR) + + Apply patches to the GNU-dist. If any of the gcc???-freebsd.patch + has the same version as the GCC you're installing, use that, if you + are installing a newer version of gcc, you're a bit on your own. Try + the most recent of the gcc???-freebsd.patch files, and prepare for + some work. + + 4. Create the BSD-tree from the GNU-tree + ======================================== + Edit gnu2bsd.tcl so that the various "TWEAKS" are right. If this is + a new version of GCC, all bets are off, and you might need to modify + in the main-part of the script too. + + And now, the great moment: + cd $GNUDIR + configure + make realclean + configure + cd $BSDDIR + tclsh gnu2bsd.tcl + + 5. Bootstrap the new compiler + ============================= + + cd $BSDDIR + make clean obj clean depend + make -k ; make -k install + # The first make might fail on libgcc for instance, + # install the bits which was OK. + make clean all install + # this should succeed. + make clean all install + # Now things should be A1-OK. + +History: +-------- + +199402272230 + Received blessed patch for the ((packed)) problem from GNU. + +199402211500 (v5): + + Got more patches from Richard to expmed.c, not quite right yet. + + Tried to make a patch from 245 to 258 (FreeBSD-style directories), + uncompressed size: 4.4 Mb (the whole 258 is 10Mb). This actually + resolves my doubts about the renaming of 'lib' to 'gcc_int' &c &c. + We save nothing really by trying to make a patch. + + I think that we should move from src/gnu/usr.bin/cc to + src/gnu/usr.bin/cc25 (and so on) to facilitate testing. + + People tell me that usr.bin.cpp usr.bin.f77 should stay as + subdirs of gcc. OK, I don't really care... + + Added %{Z} to gcc.c as per patch to -current. + + README rewritten. + +revision: 199402140030 (v4) + + Added the same patch to expmed.c for reading bit-fields. + + The patch in v3 to gcc was wrong, sorry. + +revision: 199402132300 (v3) + + Please notice that the both the patchfiles have changed. + + Please use -O2 as much as possible, we must try to stress this + bugger to the limit. If you want to change the global defaults + you should change CFLAGS in /usr/src/share/mk/sys.mk and do a + make (or directly in /usr/share/mk/sys.mk but make world will + loose that change then). I suggest -O2, and -m486 in case you + have one. Sideeffect is faster machine, you can insert wait- + states or disable cache-memory if this is a problem for you :-) + + cc1, abort(3)'s on this bit of code, modelled on + init386() in sys/i386/i386/machdep.c: + + extern union descriptor gdt[40]; + struct region_descriptor { + unsigned rd_limit:16; + unsigned rd_base:32 __attribute__ ((packed)); + }; + void foo() { + struct region_descriptor r_gdt; + r_gdt.rd_base = (unsigned) gdt; + } + + I got a new expmed.c from Richard, and had to fix a problem + in it. This is all in the gcc258-freebsd.patch.3 file. + + It seems that groff/grops chokes, but this could be libg++ which + should be updated. Nothing done about it for now. + + Richard Kenner said that there will probably never be a 2.5.9 and that + 2.6.0 should hit the ground between late March and May. I think that + if 1.2 is at 1st June, then we need to go ahead with 2.5.8, and + if 2.6.0 comes early, consider defecting to it. Comments invited. + +revision: 199402121100 (v2) + .size was -1 in /usr/src/lib/libc/errlst.o, this choked ld(1), which + went into a spin. Fixed by pulling in stuff from osfrose.h. As a + consequence the patch against the gnu-dist changed. + I have made the linked compier static for now, this is a temporary + measure to curtail havoc when things break. It works just as fine + when linked dynamic. + +revision: 199402111700 (v1) + First released version. + |
