Building TI/RedHat's GCC from Source
This is really quite simple, though I will go though it just for fun. Remember I am using Gentoo and I don't have any bells or whistles installed.
First, download the sources from TI's site: http://www.ti.com/tool/msp430-gcc-opensource and extract.
- msp430-gcc-source.tar.bz2
- msp430-gcc-support-files.zip
$ tar -xf msp430-gcc-source.tar.bz2 $ cd source $ mkdir build $ cd build
Dependencies
Now you need two things that may not be installed on your system: expect (part of the TCL/TK thingy) and you will also need expat, and the static libraries!
# emerge -av dev-tcltk/expect
Change USE flags to include static-libs
for
dev-libs/expat
... or do it the lazy and naughty way:
# USE="static-libs" emerge -av expat $ ../tools/configure --prefix=/opt/msp430-elf --target=msp430-elf
Then make and maybe -j5
but if something goes wrong you
might not be able to see it so easily but rerunning make without -j5
will let you see that problem I think
Using the newly compiled toolchain
You will now need to install it or just put the executables in your path, you should know how to do this but just incase you forgot:
# make install $ export PATH=$PATH:/opt/msp430-elf/bin
Compiling a simple programme may not work because the required
support files cannot be located by the newly installed toolchain. There
are two ways to fix this: extract the msp430-gcc-support-files.zip into
any location you like and use the compiler and linker flags
-I
, -L
and -T
. Or you could
install the files somewhere the toolchain will look for them anyway.
There is a problem with the current release of the RedHat GCC, the
file tools/gcc/fortran/trans-expr.c
has an error on line
8726, function alloc_scalar_allocatable_for_assignment
.
Simply change:
else if (cm->ts.type == BT_CLASS)
to:
else if (expr1->ts.type == BT_CLASS)
and everything should work fine, we are not using fortran anyway so perhaps we should change our configure command line to not build it?
Extract the Support Files
The support files include msp430.h
and related files
(msp430g2553.h
etc.) along with the important .ld files
which tell the linker the specific locations of the Flash, Info, SFR and
RAM areas of the MCU. To avoid any special flags being passed to the
compiler every time (I am thinking of -I
and
-L
) we will put these support files where GCC will look for
them anyway.
# cd /opt/msp430-elf # unzip -x ~ben/Downloads/msp430-gcc-support-files.zip # mv GCC_RH/include/* include # rm -r GCC_RH
Now the support files are located in the
/opt/msp430-elf/include
directory, please make sure the
permissions on the files and directories allow everyone to read them or
you may have problems.
msp430-elf-gcc -mmcu=msp430g2553 -c main.c
That should have worked.
Finally to link the programme into a nice .elf
file.
The linker will find the location of the .ld
files
automatically but I have included the switch and argument in the below
examples for fun, you do not need to include the -L
.
msp430-elf-ld -L /opt/msp430-elf/include -T msp430g2553.ld main.o -o main.elf
Or you could do this:
msp430-elf-gcc -mmcu=msp430g2553 -L /opt/msp430-elf/include main.o -o main.elf
Simples!
Final Notes
All you need now is to programme the device, for this I recommend you look at mspdebug, the most fantastic programme for this, it is available in the main portage tree dev-embedded/mspdebug and from source: http://mspdebug.sourceforge.net/.
Difficulties with the newly compiled toolchain... it does not make a jump table from suitable case statements!
References
- http://ftp.gnu.org/old-gnu/Manuals/ld-2.9.1/html_mono/ld.html