Hallo alle miteinander,
ich versuche derzeit die aktuelle GCC-4.4.0 inkl. BINUTILS-2.19.51 und
NEWLIB-1.17.0 in Form eines Canadian Cross (Build=Linux; Host=MinGW;
Target=ARM) zu bauen. Unter Berücksichtigung verschiedener Beiträge im
Netz, z.B.
http://www.kegel.com/crosstool/current/doc/crossto...,
habe ich es bereits so weit gebracht, dass die ersten zwei Punkte eines
solchen Canadian Cross Builds
1. Compiler bauen/installieren der auf dem Build-System läuft und Code
für den Host erzeugt
2. Compiler bauen/installieren der auf dem Build-System läuft und Code
für das Target erzeugt
erledigt sind.
Beim dritten Teil - einen Compiler bauen der auf dem Host-System läuft
und Target-Code erzeugt - habe ich allerdings einige Schwierigkeiten.
Zunächst haperte es daran, das im Stage2-Build der GCC "limits.h"
angeblich nicht gefunden werden konnte, was ich aber mit
http://gcc.gnu.org/ml/gcc-patches/2009-01/msg01178.html beheben konnte.
Mit diesem Patch erhalte ich jetzt aber folgende Fehlermeldung:
Ich denke das ich mich nicht zu weit aus dem Fenster lehne wenn ich
einfach mal so annehme das die "types.h" der NEWLIB keine Syntax-Fehler
enthält.
Aber was ist dann los? Könnt ihr mir helfen?
Vielen Dank
Mott
PS: Könnte das verunglückte
"-I../../gcc-4.4.0/gcc//home/forseti/Development/gcc-4.4.0_build_win/arm-elf/libgcc"
die Ursache sein; ... siehe die 2., lange Zeile in der Fehlermeldung wo
die Textfarbe auf grau wechselt. Was/Wo könnte die Ursache dafür sein?
Ich erinnere mich da an Probleme in fixincludes, die den Fall eines
Canadian nicht korrekt behandelten:
http://gcc.gnu.org/ml/gcc-help/2009-04/msg00023.html
Du hast 4 Compiler im Spiel (host-harget):
1) linux->linux: erzeugt 2) und 3)
2) linux->arm: "normaler" x-compiler, brauchst du für die Target-Libs
von 4)
3) linux->mingw32: compiler für den x-build und libiberty (Host-Lib) von
4)
4) mingw32-arm: den willst du erstellen, zudem die Target-Libs (libgcc,
newlib, libgloss, ...)
Wie 2) erzeugt wird ist klar, für 3) gibt's build-Skripte bei MinGW. Als
erstes machst du 2) und 3), die sind unabhängig voneinander -- bis auf
die Tatsache, daß sie beide 1) zum Erzeugen brauchen.
Beim Build von 4) muss 3) im Pfad sein und CC darf nicht gesetzt sein,
ansonsten wird der falsche Compiler genommen. 2) muss im Pfas dein oder
per --build-time-tools erreichbar sein, dito binutils
Am einfachsten ist es, wenn du die Subpacks ins Toplevel-Direktory
reinlinkst undin-tree erzeugst, das ist einfacher als separate Builds
von newlib, GMP, MPFR. Für binutils geht das aber leider nicht wegen
Inkompatibilitäten in den libibertys von GCC bzw. binutils.
Wie ist der mingw32-arm denn configured?
Johann
Hi Johann,
vielen Dank. Werde versuchen diese neuen Infos gleich anzuwenden.
Vorher noch zu deinen Fragen bzw. weitere Infos meinerseits:
- Build = Linux Mint 6 (Felicia) bzw. i686-linux-gnu
Host = Windows/MSYS bzw. i586-mingw32msvc (v4.2.1-sjlj)
Target = arm-elf
- mingw32 ist per Packetverwaltung installiert
> um 1) und 3) brauchte ich mich also nicht weiter kümmern
- zum erstellen von 2) und 4) kopiere ich NEWLIB, GMP und MPFR bereits
jeweils ins GCC-Root-Verzeichnis
- zum Bau von 4) habe ich 2) zum Pfad hinzugefügt;
mit 3) (EXE-Files) könnte die Build-Umgebung doch nichts anfangen ?!?
- bis auf CFLAGS und CXXFLAGS setze ich keinerlei Umgebungsvariablen;
das sollte - soweit ich Verstanden habe - die Verwendung der
configure-Parameter --build, --host und --target automatisch regeln
> ich hab mal meine beiden Build-Scripts für Schritt 2) und 4) angehängt
Ich hoffe mit diesen neuen Auskünften könnt ihr vielleicht noch mehr
Tips geben.
Danke
Mott
Mott H. schrieb:
> Hi Johann,>> vielen Dank. Werde versuchen diese neuen Infos gleich anzuwenden.> Vorher noch zu deinen Fragen bzw. weitere Infos meinerseits:> - Build = Linux Mint 6 (Felicia) bzw. i686-linux-gnu> Host = Windows/MSYS bzw. i586-mingw32msvc (v4.2.1-sjlj)> Target = arm-elf> - mingw32 ist per Packetverwaltung installiert>> um 1) und 3) brauchte ich mich also nicht weiter kümmern> - zum erstellen von 2) und 4) kopiere ich NEWLIB, GMP und MPFR bereits> jeweils ins GCC-Root-Verzeichnis> - zum Bau von 4) habe ich 2) zum Pfad hinzugefügt;> mit 3) (EXE-Files) könnte die Build-Umgebung doch nichts anfangen ?!?
Natürlich, mit dem Compiler muss doch 4) erstellt werden. 3) erzeugt
.exe-Files (bzw. Bibliotheken für die Host-Plattform wie libiberty). Es
ist selber ein Cross-Compiler, der unter Linux läuft.
> - bis auf CFLAGS und CXXFLAGS setze ich keinerlei Umgebungsvariablen;> das sollte - soweit ich Verstanden habe - die Verwendung der> configure-Parameter --build, --host und --target automatisch regeln
Sicherheit bringt
echo $CC
>> ich hab mal meine beiden Build-Scripts für Schritt 2) und 4) angehängt
Interessiert hätte mich das configure für 4), wollte mich jetzt nicht
durch irgendwelche Skripte hangeln... Ich versteh auch nicht, wozu man
Build-Skripte braucht. Mit einem configure / make all install ist's doch
getan.
Johann
Hi Johann,
>> - zum Bau von 4) habe ich 2) zum Pfad hinzugefügt;>> mit 3) (EXE-Files) könnte die Build-Umgebung doch nichts anfangen ?!?> Natürlich, mit dem Compiler muss doch 4) erstellt werden. 3) erzeugt> .exe-Files (bzw. Bibliotheken für die Host-Plattform wie libiberty). Es> ist selber ein Cross-Compiler, der unter Linux läuft.
Sorry. Hab mich da in der Logik verheddert. Du hast natürlich Recht.
> Interessiert hätte mich das configure für 4)
> Ich versteh auch nicht, wozu man Build-Skripte braucht. Mit einem> configure / make all install ist's doch getan.
Die (sehr kurzen und einfachen) Build-Scripte enthalten jeweils die
configures und makes der BINUTILS, der GCC und der NEWLIB.
Mott
Mott H. schrieb:
> Hi Johann,>>>> - zum Bau von 4) habe ich 2) zum Pfad hinzugefügt;>>> mit 3) (EXE-Files) könnte die Build-Umgebung doch nichts anfangen ?!?>>> Natürlich, mit dem Compiler muss doch 4) erstellt werden. 3) erzeugt>> .exe-Files (bzw. Bibliotheken für die Host-Plattform wie libiberty). Es>> ist selber ein Cross-Compiler, der unter Linux läuft.>> Sorry. Hab mich da in der Logik verheddert. Du hast natürlich Recht.>>> Interessiert hätte mich das configure für 4)>>>
> Die (sehr kurzen und einfachen) Build-Scripte enthalten jeweils die> configures und makes der BINUTILS, der GCC und der NEWLIB.
--with-newlib --with-headers=
Ist überflüssig bzw. stören, wenn du wie gesagt einen in-tree build der
newlib machen willst. Dazu einfach nen Softlink auf die newlib-Quelle
(da stehen dann newlib, libgloss, ...) im GCC-Toplevel. GCC erkennt die
Subpacks automatisch, da musste ich noch nie was extra drehen. Den
Problemen einer von Hand erzeugten canadian-cross-newlib würde ich aus
dem Wege gehen.
newlib kommt doch mit deiner Target-Plattform zurecht, oder?
Zu
--disable-multilib --with-cpu=arm7tdmi
kann ich nix sagen, weil ich immer mit Multilibs erzeuge (nicht für ARM,
sondern was privates :-)).
Johann
Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
Groß- und Kleinschreibung verwenden
Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang