| Zeile 1: | Zeile 1: | ||
| − | Ein Cross-Compiler ist ein Compiler, der Objektdateien für eine andere Plattform (Zielplattform oder target) als die Verwendete (host) erzeugt. Die Zielplattform kann sich dabei sowohl beim Betriebssystem, als auch beim verwendeten Prozessor unterscheiden. | + | Ein Cross-Compiler ist ein [[:Kategorie:Compiler | Compiler]], der Objektdateien für eine andere Plattform (Zielplattform oder target) als die Verwendete (host) erzeugt. Die Zielplattform kann sich dabei sowohl beim [[Betriebssystem]], als auch beim verwendeten Prozessor unterscheiden. |
== Anforderungen == | == Anforderungen == | ||
| − | Um einen Cross-Compiler zu bauen, werden die üblichen GNU-Tools benötigt. Dazu gehören binutils, gcc und make. | + | Um einen Cross-Compiler zu bauen, werden die üblichen GNU-Tools benötigt. Dazu gehören binutils, [[GNU Compiler Collection | gcc]] und [[make]]. |
| − | === Linux === | + | === [[Linux]] === |
| − | Auf vielen Linux-Distributionen sind diese Programme | + | Auf vielen Linux-Distributionen sind diese Programme standardmäßig dabei. Wer eine Binärdistribution, wie zum Beispiel Ubuntu oder andere Debianderivate, einsetzt und noch keine Programme kompiliert hat, muss unter Umständen noch Entwicklungspakete installieren (bei Ubuntu/Debian libc6-dev und texinfo). |
| − | === Windows === | + | === [[Windows]] === |
| − | Wer Windows einsetzt hat grundsätzlich zwei Möglichkeiten an diese Tools zu kommen. Entweder [http://www.cygwin.com/ | + | Wer Windows einsetzt, hat grundsätzlich zwei Möglichkeiten an diese Tools zu kommen. Entweder [http://www.cygwin.com/ Cygwin] ([http://www.cygwin.com/setup.exe Direktlink zum Installer]) oder [http://www.mingw.org/ mingw] |
==== Cygwin ==== | ==== Cygwin ==== | ||
| Zeile 18: | Zeile 18: | ||
* Web -> wget | * Web -> wget | ||
optional: | optional: | ||
| − | * Devel -> nasm | + | * Devel -> [[Netwide Assembler | nasm]] |
| − | Nach der | + | Nach der Installation müssen die Shellbefehle (siehe unten) in die Cygwin-[[Shell]] eingegeben werden. |
==== mingw ==== | ==== mingw ==== | ||
| Zeile 26: | Zeile 26: | ||
== binutils == | == binutils == | ||
| − | Die GNU-binutils beinhalten unter anderem den Linker ld, den Assembler as und viele weitere kleine Helfer wie ar, objdump oder objcopy. Da gcc auf diesen basiert, müssen diese vor dem gcc kompiliert werden. Diese sind streng genommen auch Bestandteil des Cross-Compilers, da sie auch für eine bestimmte Target- und Host-Plattform konfiguriert werden müssen. | + | Die GNU-binutils beinhalten unter anderem den [[Linker]] ld, den [[Assembler]] as und viele weitere kleine Helfer wie ar, objdump oder objcopy. Da gcc auf diesen basiert, müssen diese vor dem gcc kompiliert werden. Diese sind streng genommen auch Bestandteil des Cross-Compilers, da sie auch für eine bestimmte Target- und Host-Plattform konfiguriert werden müssen. |
Jetzt aber zur eigentlichen Arbeit. Um die binutils zu kompilieren, muss zuerst der Quellcode heruntergeladen werden. Dieser kann von http://ftp.gnu.org/gnu/binutils/ bezogen werden. In diesem Artikel wird von der Version 2.19.1 ausgegangen: | Jetzt aber zur eigentlichen Arbeit. Um die binutils zu kompilieren, muss zuerst der Quellcode heruntergeladen werden. Dieser kann von http://ftp.gnu.org/gnu/binutils/ bezogen werden. In diesem Artikel wird von der Version 2.19.1 ausgegangen: | ||
$ wget http://ftp.gnu.org/gnu/binutils/binutils-2.19.1.tar.bz2 | $ wget http://ftp.gnu.org/gnu/binutils/binutils-2.19.1.tar.bz2 | ||
| Zeile 33: | Zeile 33: | ||
=== Konfigurieren === | === Konfigurieren === | ||
| − | Der nächste Schritt ist das Konfigurieren. Die Dokumentation empfiehlt binutils | + | Der nächste Schritt ist das Konfigurieren. Die Dokumentation empfiehlt, binutils außerhalb des Quellverzeichnisses zu konfigurieren und zu kompilieren: |
$ mkdir binutils-build | $ mkdir binutils-build | ||
$ cd binutils-build | $ cd binutils-build | ||
| Zeile 55: | Zeile 55: | ||
Wichtig ist hier, dass der eigene Pfad vor den originalen Pfaden steht, damit sicher die vorhin kompilierten binutils benutzt werden. Der Pfad <nowiki>/usr/local/crosstools</nowiki> muss auch hier wieder angepasst werden, wenn für den Präfix bei Binutils ein anderer benutzt wurde. | Wichtig ist hier, dass der eigene Pfad vor den originalen Pfaden steht, damit sicher die vorhin kompilierten binutils benutzt werden. Der Pfad <nowiki>/usr/local/crosstools</nowiki> muss auch hier wieder angepasst werden, wenn für den Präfix bei Binutils ein anderer benutzt wurde. | ||
Als nächstes muss der Quellcode von gcc heruntergeladen werden. Dieser kann von http://ftp.gnu.org/gnu/gcc bezogen werden. Während dem Schreiben dieses Artikels wurde die Version 4.4.0 benutzt. Aber auch hier gilt wieder, dass das auf andere Versionen übertragen werden kann. | Als nächstes muss der Quellcode von gcc heruntergeladen werden. Dieser kann von http://ftp.gnu.org/gnu/gcc bezogen werden. Während dem Schreiben dieses Artikels wurde die Version 4.4.0 benutzt. Aber auch hier gilt wieder, dass das auf andere Versionen übertragen werden kann. | ||
| − | Das Archiv mit Namen gcc-core-<VERSION>.tar.bz2 muss auf jeden Fall heruntergeladen werden. Falls auch ein C++ Compiler gewünscht wird, ist auch gcc-g++-<VERSION>.tar.bz2 notwendig. Nach dem Download des einen oder der beiden Archive müssen diese wieder entpackt werden: | + | Das Archiv mit Namen gcc-core-<VERSION>.tar.bz2 muss auf jeden Fall heruntergeladen werden. Falls auch ein [[C++]] Compiler gewünscht wird, ist auch gcc-g++-<VERSION>.tar.bz2 notwendig. Nach dem Download des einen oder der beiden Archive müssen diese wieder entpackt werden: |
$ wget http://ftp.gnu.org/gnu/gcc/gcc-4.4.0/gcc-core-4.4.0.tar.bz2 | $ wget http://ftp.gnu.org/gnu/gcc/gcc-4.4.0/gcc-core-4.4.0.tar.bz2 | ||
$ wget http://ftp.gnu.org/gnu/gcc/gcc-4.4.0/gcc-g++-4.4.0.tar.bz2 | $ wget http://ftp.gnu.org/gnu/gcc/gcc-4.4.0/gcc-g++-4.4.0.tar.bz2 | ||
| Zeile 69: | Zeile 69: | ||
=== Kompilieren === | === Kompilieren === | ||
| − | Auch hier ist der nächste Schritt nach dem Konfigurieren wieder das Kompilieren. Dieser Prozess dauert je nach Prozessorleistung recht lange. Hier kann auch wie bei binutils die Option -j3 benutzt werden. Gestartet wird das Kompilieren | + | Auch hier ist der nächste Schritt nach dem Konfigurieren wieder das Kompilieren. Dieser Prozess dauert je nach Prozessorleistung recht lange. Hier kann auch wie bei binutils die Option -j3 benutzt werden. Gestartet wird das Kompilieren folgendermaßen: |
$ make all-gcc all-target-libgcc | $ make all-gcc all-target-libgcc | ||