utzwinter.de - Cross Compiler Howto

| Home | Computer | Games | Haustiere | Photographie | Links | Gästebuch | Impressum |

Cygwin Cross-Compiler Howto

Absicht:

Im folgenden möchte ich beschreiben wie man unter cygwin eine cross compiler Toolchain, also compiler, runtime library, assembler, linker and debugger für eine ARM Umgebung erzeugt (z.B. iPAQ/GP32 oder ähnliches).Unter Win2000/XP sollte es keine Probleme geben, jedoch zeigen Erfahrungen, dass cygwin Probleme mit Win95/98 zu haben scheint. Einmal fertig funktioniert der cross-compiler meist tadellos. Sollte es während des kompilierens zu Problemen kommen, gilt das gute alte "restart and retry" und wenn garnix mehr geht hilft das Usenet.

Unter Abbildung 1 finden sie eine Liste der benötigten Programme und die Versionsnummern welche ich verwendet habe, bitte verwenden sie genau diese wenigstens beim ersten mal da es durch Änderungen im Quellcode zu Problemen und veränderten Installationsprozessen kommen kann. Um genau zu sein war genau das der Grund für mich die erste Howto zu tippen, da ich verschiedene Hürden zu nehmen hatte um den GCC 3.2.3 unter cygwin als cross-compiler einzusetzen, bei der neuen Version meiner cross-compiler Howto kommt der GCC 3.4.0 zum Einsatz. Für Fragen und Kritik bin ich nach wie vor jederzeit unter ich@utzwinter.de zu erreichen, desweiteren würde ich mich sehr über einen Gästebucheintrag freuen -> www.utzwinter.de -> Gästebuch oder eine E-Mail freuen.

binutils-2.10: http://sources.redhat.com/binutils
gcc-3.4.0.tar.gz: http://gcc.gnu.org
newlib-1.12.0: ftp://sources.redhat.com/pub/newlib/index.html
insight 6.1: http://sources.redhat.com/insight/
Abbildung 1: Benötigt wird

Erstellen der Verzeichnisstruktur:

Als erstes erstellen wir eine Verzeichnisstruktur, in der wir später den cross-compiler generieren, als Prefix(Installationsverzeichnis) verwende ich /usr/cross, als target (Zielarchitektur) arm-elf.

cd /usr
mkdir cross
cd /usr/cross
mkdir build-binutils
mkdir build-gcc
mkdir build-newlib
mkdir build-insight
export TARGET=arm-elf
export PREFIX=/usr/cross
export PATH=$PATH:$PREFIX/bin
Abbildung 2: Verzeichnisstruktur

Entpacken der Quellen:

Alle Quellen werden in /usr/cross entpackt, so das z.B. die Sources für den Compiler in /usr/cross/gcc-3.4.0/ zu finden sind.

tar xzvf binutils-2.10.tar.gz
tar xzvf gcc-3.4.0.tar.gz
tar xzvf newlib-1.12.0.tar.gz
tar xzvf insight-6.1.tar.gz
Abbildung 3: Entpacken

Anwenden der Patches:

In den oben verwendeten Versionen entfällt dieser Schritt, da ich keinerlei Probleme hatte die cross-compiler toolchain zu erstellen

Kompilierung der Binutils:

Die Befehle um den Assembler und Linker zu konfigurieren und Installieren sind unter Abbildung 4 zu finden, sie haben Folgende Aufgaben:

cd build-binutils
../binutils-2.10/configure --target=$TARGET --prefix=$PREFIX
make all install
Abbildung 4: Kompilieren der Binutils

Nach Beendigung des Kompiliervorgangs sind im /usr/cross/bin Verzeichnis folgende Programme zu finden:

Kompilierung eines Bootstrap Compilers

Nachdem wir einen Assembler und Linker haben können wir einen Bootstrap Compiler bauen um die Laufzeitumgebung und Header Dateien zu kompilieren. Nachdem dies geschehen ist können wir einen kompletten Compiler bauen.

cd build-gcc
../gcc-3.4.0/configure --target=$TARGET --prefix=$PREFIX --with-gnu-as --with-gnu-ld
--enable-languages=c,c++ --with-newlib --without-headers --disable-shared
make all-gcc install-gcc
Abbildung 5: Bootstrap Compiler kompilieren

Danach sollten sie im Verzeichnis /usr/cross/bin die gcc-arm-elf.exe zu finden sein mit der sich die Newlib Laufzeitumgebung kompilieren läßt.

Kompilierung der Newlib:

Same procedure as most of the time ;):

cd build-newlib
../newlib-1.12.0/configure --target=$TARGET --prefix=$PREFIX
make all install
Abbildung 6: Newlib kompilieren

Kompilierung des kompletten Compilers

Jetzt wo wir sowohl die ARM Header und die libraries haben können wir den kompletten Compiler erstellen.

cd build-gcc
../gcc-3.4.0/configure --target=$TARGET --prefix=$PREFIX --with-gnu-as --with-gnu-ld
make all install
Abbildung 7: Kompletten Compiler kompilieren

Kompilierung des Insight Debuggers

Der finale Schritt stellt das Erstellen eines Debuggers für ARM dar, mit dem sich Programme später auf Fehler untersuchen lassen, ich habe mich für den Insight Debugger in der Version 5.3 entschieden, der eine komfortabele graphische Benutzeroberfläche für den gdb zur Verfügung stellt.

cd build-insight
../insight-6.1/configure --target=$TARGET --prefix=$PREFIX
make all install
Abbildung 8: Insight kompilieren

Abschließend...

...möchte ich mich bei allen bedanken die mir bei der Erstellung dieser Howto geholfen haben, seien es mein Chef der mich gebeten hat einen Compiler mit dem gcc-3.2.3 unter cygwin für arm-elf zu basteln was zu Chaos führte, oder meinen lieben MitHiwi´s die meine Wutanfälle ertragen haben und mich bei stundenlangen Kompilierungsvorgängen unterhalten haben.

Darüberhinaus möchte ich mich bei allen entschuldigen die der Meinung sind ich hätte von ihnen Kopiert und sie sollten namentlich erwähnt werden.

Die cross-compiler toolchain die ich zuhause gebaut habe kann ich auf Anfrage evtl auch Online stellen, werde diese jedoch deshalb nicht permanent zum Download anbieten da ich den Traffic den meine Seite produziert überwachen möchte und keine Lust habe am Ende des Monats eine dicke Rechnung von Seiten meines Providers zu erhalten.

mfg Utz Winter