cross compiling

Hallo Leute,

hat jemand von Euch Erfahrung mit Cross Compiling?

Möchte jikes (letzte CVS Version) kompilieren und muss auch für Win32
ein Binary erstellen.

Ich möchte auf einem GNU/Linux Rechner "nightly builds" für die
verschiedenen Plattformen erstellen, sodass wir die letzten
Verbesserungen vom jikes testen können.

Da auch das jikes-Team selbst einen Cross Compiler unter GNU/Linux
verwendet um die w32-Binaries zu erstellen, bin ich noch voller Hoffnung
mein Ziel zu erreichen. :wink:

Leider ist ihr Dokument über Cross Compiling noch LEER und ich habe
keine Ahnung was ich dem ./configure anzugeben habe. Und auch nicht was
es alles braucht um w32-Binaries zu erstellen. Muss ich da was
nachinstallieren?

Mein aktueller Compiler- und Toolsstand:
gcc-2.96-98
gcc-c++-2.96-98
binutils-2.11.90.0.8-12
make-3.79.1-8
automake-1.4p5-2

Kann mir da jemand einen Tipp geben?

mfg.
Patrick

Nach langem Suchen im Netz und vor allem Dank der hilfreichen Anregungen
von Christian Mair, habe ich es endlich geschafft unter meiner GNU/Linux
box jikes für Windows zu kompilieren.

Wenn ich jetzt zurückblicke, wünschte ich hätte vom Anfang an einfach
probiert und nicht so viel im Netz herumgelesen. Über "cross
compiling" findet man nämlich sehr viele verwirrende Dokumente, da
dieses Thema auch eher fortgeschritten ist.

Zur Erinnerung mein Ziel war es den von IBM als Free Software
entwickelten Java Kompiler namens jikes unter GNU/Linux zu kompilieren.
Das resultierende Binary sollte aber nicht unter GNU/Linux sondern unter
Windows laufen. Jetzt weis ich, dass dies der einfachste Fall für "cross
compiling" ist.

Beim "cross compiling" haben folgende Variablen große Wichtigkeit:
HOST -> Rechner auf dem kompiliert wird
TARGET -> Rechner für den kompiliert wird

Die Werte dieser Variablen beinhalten jeweils die Prozessor-Architektur
und das Betriebssystem. Daher sind es eigentlich 4 Angaben!!

Hier möchte ich diese 3 Typen des "cross compilings" aufzählen:

1) Die Prozessor-Architekturen der beiden Systeme sind identisch (i386
in meinem Fall) nur die Betriebssysteme ändern sich.

     processor($HOST) == processor($TARGET)
     && os($HOST) != os($TARGET)

2) Die Prozessor-Architekturen der beiden Systeme sind verschieden.
Dafür müssen gcc und die benötigten Programm-Bibliotheken (binutils,
...) eigens durchkompiliert werden. Das Ergebnis ist dann ein spezieller
gcc welcher Binaries für die TARGET-Prozessor-Architektur generiert.

     processor($HOST) != processor($TARGET)
     && os($HOST) != os($TARGET) || os($HOST) == os($TARGET)

3) Von "cross canadian" spricht man, wenn man einen "cross compiler" vom
Typ 2 auf einem System kompiliert, dessen Prozessor-Architektur weder
dem $HOST noch dem $TARGET entspricht. Also ein "cross compiling" des
"cross compilers" :wink:

In meinem sehr einfachen Fall musste ich nicht gcc neu durchkompilieren.
Nachdem ich aber nur halbfertige FAQs und unbeantwortete Mails im
Internet gefunden hatte, welche auch noch nur über Typ 2 und 3
berichteten, war ich schon fast dabei die aktuellsten gcc Sourcen
runterzuladen.

Ein weiterer Punkt beim "cross compiling" sind die Programm-Bibliotheken
zu dem das Programm dann gelinkt werden soll. Dafür gibt es auch eine
große Auswahl. Die nennenswertesten sind die glibc, newlibs und mingw.
Soviel ich verstanden habe, sind newlibs nur für "embedded systems",
daher für mich nicht interessant. Der Port der glibc für Windows wurde
im Rahmen der cygwin Tools gemacht und braucht vermutlich die cygwin
dlls. Da ich niemanden zwingen wollte cygwin zu installieren und da auch
das jikes Team keine zusätzlichen dlls voraussetzt, habe ich mich für
mingw entschieden.

Nun wird ein oder der andere behaupten, dass mingw ein Port der gcc
build chain für Windows ist. Das stimmt, sie lassen sich aber auch unter
GNU/Linux kompilieren, sodass die w32-api unter GNU/Linux verfügbar wird.

Eine vorkompilierte Version und auch noch ein paar sehr selbsterklärende
Scripts findet man auf folgender Seite:
http://www.libsdl.org/extras/win32/cross/
(Der Autor bedankt sich bei allen, seinen Namen habe ich aber nirgendwo
gefunden)

Mit diesen Link gerüstet, kann man eigentlich nichts mehr falsch machen.
Das hätte mir google sofort sagen sollen! Nobody's perferct :wink:

Danke an alle die mir geholfen haben!
Patrick