building cross-compiler for m68hc11/m68hc12

Kai Ruottu kai.ruottu@wippies.com
Tue Feb 28 18:07:00 GMT 2012


28.2.2012 17:38, Mihai Daniel OPREA kirjoitti:

> I am trying to build gcc-4.3.2 as a cross compiler for the
> Motorola m68hc11 target on a standard, clean installation
> of Ubuntu 11.10 32-bit. I also want to build binutils (2.19)
> so I included the binutils-2.19 directory (without stripping
> the version from the name) inside the gcc-4.3.2 directory.

The aim in the FSF binutils and GCC sources is them being
separate projects. Although having common subdirs like
libiberty these aren't in-sync during some time period...
So both should be built/bootstraped separately and later
built/updated separately during the life-span of the cross
toolchain. GDB is the third separately maintained component
in a cross toolchain...

Of course one however uses a common '--prefix=$prefix' value
with all three, binutils, GCC and GDB, when configuring and
building and installing...

> I have downloaded the source code for the MPFR, MPC and GMP
> libs from gcc/gnu/org/pub/gcc/infrastructure and
> included it in the gcc-4.3.2 directory in corresponding
> directories (stripping the version number) so they are
> built together with GCC and binutils.

This then is possible, excluding the binutils... With the
"embedded targets" (no "native tools" for them) using the
'newlib' as the target C library is common. (The "native
tools" use the "native C library" and crosstoolchains for
these "system targets" use the C library taken from the
target system.) So when also the target C library must be
produced - GCC neither binutils will provide it - its
sources can also be combined with the GCC sources and be
built and installed during the GCC build.

> ../gcc-4.3.2/configure --prefix=/home/mihai/licenta \
> --enable-languages=c --target=m68hc11

If you are going to produce also the target C library,
you will need the newlib-<something> sources and copy
or symlink the 'newlib' and 'libgloss' subdirs from
them into the main GCC directory (like 'gcc-4.3.2/'.
And need to add '--with-newlib' into your GCC configure.

> I am not sure if the configure parameters are enough,
> nor am I sure whether the name for the target is m68hc11
> or some other variation: m68hc11-elf, m68hc11-linux
> or m68hc1x.

If you search for 'm68hc11' in the 'gcc/config.gcc', you
will see that there is only one target template catering
'm68hc11-*-*'. So your bare 'm68hc11' would be ok just as
'm68hc11-elf'. But the 'm68hc11-linux' would sound really
absurd, do you really believe Linux some day being ported
for the 8-bit m68hc11 ?  Or at least for some 16-bit CPU :-)


> Building the compiler with make fails with the infamous error:
> "configure: error: cannot compute suffix of object files: cannot compile"
> while in directory hcs12x/m68hc11/libgcc

The 'libgcc' is the GCC-helper library which includes all
kind of conversion routines between integers and floats,
basic soft-float arithmetic functions etc. Compiling it
may use the target C headers if the '--with-newlib' isn't
used in GCC configure. Generally the target headers should
always be available during the GCC build, if not for any
other purpose then at least for the 'fixinc' phase - fixing
them to be suitable with the produced GCC...

> Here is a fragment of the respective config.log:
>
> configure:2376: /home/mihai/licenta/hcs12x/./gcc/xgcc \
> -B/home/mihai/licenta/hcs12x/./gcc/

This is for the target binutils in $prefix/$target/bin :
> -B/home/mihai/licenta/m68hc11/bin/

This is for the target libraries in $prefix/$target/lib :
> -B/home/mihai/licenta/m68hc11/lib/

These are for the target headers in $prefix/$target/*include :
> -isystem /home/mihai/licenta/m68hc11/include
> -isystem /home/mihai/licenta/m68hc11/sys-include

Please ask someone else why there are two! My answer would
be "because it is a 'feature' been always there!"  Ok, old
GCC docs will tell about "STANDARD_INCLUDE" and "SYSTEM_INCLUDE"
directories in a native GCC, these are their equivalents in
a cross GCC...

> Any help is greatly appreciated, both with the issue at hand
> (permission denied) as well as with potential omissions
> / mistakes I've surely made.

Please forget combining binutils and GCC sources but consider
combining newlib sources with the GCC sources! Your $target is
supported there :

[root@localhost src]# ls newlib-1.19.0/libgloss/m68hc11
aclocal.m4  configure.in  Makefile.in  sim-valid-m68hc11.ld  syscalls.c
configure   crt0.S        sci-inout.S  sim-valid-m68hc12.ld

And remember to add '--with-newlib' into your GCC configure
command...



More information about the Gcc-help mailing list