This text tries to explain the steps to port gcc 3.3.6 from original sources to a working MiNT port. Current gcc version for MiNT is 2.95.3, albeit working, a more recent version can be needed to compile recent software.
You need original gcc 3.3.6 archive. The archive decompress to a 185 MB of source directory. You will also need autoconf and automake to rebuild needed Makefile.in and configure scripts.
$ tar xvjf gcc-3.3.6.tar.bz2 $ mkdir gcc-3.3.6-mint
You also need a standard C library for the target, like mintlib for example (both standard and debugging versions), because gcc will need to build some stuff for the target (like libiberty and libgcc libraries). You can retrieve current mintlib development files from Sparemint website. They are in RPM format but you can convert them to tar.gz by using alien program. You need to unpack mintlib at the final place ($TARGETPATH/m68k-atari-mint). You should have headers in include subdir, and lib in another subdir.
You also need binutils to create MiNT binaries/libraries.
Note: TARGETPATH is a directory where gcc-mint will be installed. We modify the PATH variable so the build process will find the binutils needed to build MiNT binaries. We will configure gcc with C language support atm. Change the '/path/to/mintlib' to the absolute path to where you unpacked mintlib development files.
$ mkdir gcc-3.3.6-mint $ cd gcc-3.3.6-mint $ export PATH=${TARGETPATH}/bin:PATH $ ../gcc-3.3.6/configure --prefix=${TARGETPATH} --target=m68k-atari-mint --enable-languages=c --with-sysroot=${TARGETPATH}/m68k-atari-mint
First error:
*** Configuration m68k-atari-mint not supported Configure in /home/patrice/src/utils/gcc-3.3.6-mint/gcc failed, exiting.
This is done in three files.
Well, we just need to add our target:
m68k-atari-mint*) tm_file=m68k/mint.h tmake_file=m68k/t-mint ;;
Oh, yes we need those two files.
This file is very tricky, because it controls what gcc can do about code
generation and optimizations. An error there may cause gcc not ouputting working
code for our target. You should note in this subdir the file atari.h to support
Atari SVR4. This is also in this file where command line flags for the target
are defined, and which are the default defines, all of which will end in the
spec file.
mint.h (gcc 2.95.3 version).
This file has not changed much for gcc 3.3. Some stuff has been removed.
This is roughly the same as t-m68kbare. We just change the multilib stuff that will be build, i.e. only 68000 (no fpu), 68020 (no fpu) and 68020-60 (fpu). And each of these will be build with or without -mshort flag for people wanting to link gcc object files against Pure C (A 16 bits compiler for a 32 bits m68k cpu? too much ported from turbo C/dos). I think we should drop this flag.
OK, gcc is configured to build a cross-compiler for m68k-atari-mint target.
Note: you can build the 'bootstrap' target (if you are not cross-compiling),
which is a 3 pass compilation: (1)build gcc with current compiler (2) build gcc
with gcc compiled at stage 1 (3) build gcc with gcc compiled at stage 2, and compare
the two binaries. If they are not the same, gcc produced an incorrect program.
But as we are building a cross-compiler, we can't do that, so we just run make.
$ make
You will notice many warning messages, specially when building the floating point stuff.
$ make install
Apparently the build is ok, but we must be sure the code generated/linked by
all these tools is right. That's the hard part. Most of these tools have testsuite,
but maybe it requires writing MiNT tests as well.
Here is the final patch:
gcc-c-3.3.6.diff.gz