Wer ein 64-Bit-Betriebssystem entwickeln möchte, allerdings kein 64-Bit-Linux installiert hat, muss sich einen Cross-Compiler bauen, damit dieser 64-Bit-dateien erstellen kann. Im Folgenden wird erklärt, wie man einen Cross-Compiler für die x86-64-Plattform unter einem 32-Bit-Linux erstellt. == Vorbereitung == Es gibt zwei verschiedene Wege, einen Cross-Compiler für x86-64 zu erstellen, wir bedienen uns hier der einfachsten Variante: Wir bauen die Binutils und den GCC neu, sodass wir einen funktionierenden gcc haben, mit dessen Hilfe wir x86-64-ELF-dateien erstellen können. Als erstes müssen dazu die Binutils und der gcc heruntergeladen werden. Wir benutzen dazu die neueste (Stand: 28. August 2009) Version beider Toolchains, einmal die [http://ftp.gnu.org/gnu/binutils/binutils-2.19.tar.bz2 binutils 2.19.9] und das Core-Packe des [http://ftp.gnu.org/gnu/gcc/gcc-4.4.1/gcc-core-4.4.1.tar.bz2 gcc 4.4.1]. Wenn allerdings auch Support für mehr Sprachen als C gewünscht ist, müssen dementsprechend zusätzliche Pakete unter [http://ftp.gnu.org/gnu/gcc ftp.gnu.org/gnu/gcc] heruntergeladen werden. Diese werden nun in ein beliebiges Verzeichnis entpackt, wir verwenden hier die Verzeichnisse '''/usr/src/cross-gcc''' und '''/usr/src/cross-binutils'''. Desweiteren sollte auch ein Verzeichnis für die Cross-Tools angelegt werden, in unserem Beispiel landen die fertigen Tools unter '''/usr/cross'''. Falls man sich noch nicht auf der Shell befindet, sollte man '''jetzt''' zu selbiger wechseln. Nun werden ein paar Variablen gesetzt:
export PREFIX=/usr/cross export TARGET=x86_64-elfPREFIX kann mit dem Verzeichnis ersetzt werden, wo die Tools später landen sollen. Nun kann es schon losgehen! == binutils erstellen == Wir erstellen nun die binutils. Das ist einfacher als gedacht, handelt es sich doch auch hier um den typischen Dreisatz: configure make all make install Ins binutils-Verzeichnis gewechselt geben wir configure ein paar Parameter mit auf dem Weg:
$ ./configure --target=$TARGET --prefix=$PREFIXWie man sieht, konfigurieren wir die Binutils für unser Zielsystem. Nach erfolgreichem configure kann nun gebaut werden:
$ make all # make installDie binutils wurden nunerfolgreich gebaut. Jetzt geht's weiter zum gcc. == gcc bauen == === Halt, da fehlt noch was === Um den gcc zu bauen benötigt es zwei (sofern nicht bereits installiert) Bibliotheken: Die GMP und MPFR-Libraries. Diese müssen ebenfalls runtergeladen und per ./configure, make, make install gebaut und installiert werden. Hier allerdings '''erst''' GMP '''dann''' MPFR bauen und installieren. gcc wird beim configure schon meckern, wenn eines der Librarys fehlt. TODO: Links dazu einfügen, find' ich grad' nicht >.< === Jetzt aber === Nun bauen wir also den gcc. Dazu sind erst kurze Vorbereitungen nötig:
$ export PATH=$PATH:$PREFIX/binDamit wird der Ort der Cross-binutils zum PATH hinzugefügt. Nun wird gcc konfiguriert:
$ ./configure --target=$TARGET --prefix=$PREFIX --enable-languages=c --without-headersSollte einer der benötigten Tools oder Librarys (bison, flex, GMP, MPFR) fehlen, meckert configure entsprechend. Nach erfolgreichem configure kann nun der gcc per
make all-gcc make install-gccgebaut und installiert werden. Das bauen des gcc dauert unter umständen sehr lange (sind halt ein paar MB Sourcecode). == Fertig! == Gratulation, ein Cross-Compiler f+r die x86-64-Plattform wurde erstellt! Die Tools befinden sich nun unter /usr/cross/ (in diesem Beispiel) und haben x86_64-elf- als Prefix, Beispiel: x86_64-elf-gcc, x86_64-elf-ld usw. [[Kategorie:x86-64]]