www.mikrocontroller.net

Forum: GCC Canadian Cross

Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Mott H. (Gast)
Datum: 03.07.2009 23:22

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:

make[3]: Betrete Verzeichnis '/home/forseti/Development/gcc-4.4.0_build_win/gcc'
arm-elf-cc -nostdinc -isystem /home/forseti/Development/gcc-4.4.0_build_win/./gcc/include -isystem /home/forseti/Development/gcc-4.4.0_build_win/./gcc/include-fixed -B/home/forseti/Development/gcc-4.4.0_build_win/arm-elf/newlib/ -isystem /home/forseti/Development/gcc-4.4.0_build_win/arm-elf/newlib/targ-include -isystem /home/forseti/Development/gcc-4.4.0/newlib/libc/include -O2 -g -O2 -pipe -DIN_GCC -DCROSS_DIRECTORY_STRUCTURE  -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -Wcast-qual -Wold-style-definition  -isystem ./include  -I. -I/home/forseti/Development/gcc-4.4.0_build_win/arm-elf/libgcc -I../../gcc-4.4.0/gcc -I../../gcc-4.4.0/gcc//home/forseti/Development/gcc-4.4.0_build_win/arm-elf/libgcc -I../../gcc-4.4.0/gcc/../include -I../../gcc-4.4.0/gcc/../libcpp/include -I/home/forseti/Development/gcc-4.4.0_build_win/./gmp -I/home/forseti/Development/gcc-4.4.0/gmp -I/home/forseti/Development/gcc-4.4.0_build_win/./mpfr -I/home/forseti/Development/gcc-4.4.0/mpfr  -I../../gcc-4.4.0/gcc/../libdecnumber -I../../gcc-4.4.0/gcc/../libdecnumber/dpd -I../libdecnumber   -g -O2 -pipe -g0 -finhibit-size-directive -fno-inline-functions -fno-exceptions -fno-zero-initialized-in-bss -fno-toplevel-reorder -fno-tree-vectorize   \
    -c ../../gcc-4.4.0/gcc/crtstuff.c -DCRT_BEGIN \
    -o /home/forseti/Development/gcc-4.4.0_build_win/arm-elf/libgcc/crtbegin.o
In file included from /home/forseti/Development/gcc-4.4.0/newlib/libc/include/stdio.h:46,
                 from ../../gcc-4.4.0/gcc/tsystem.h:87,
                 from ../../gcc-4.4.0/gcc/crtstuff.c:63:
/home/forseti/Development/gcc-4.4.0/newlib/libc/include/sys/types.h:126: error: expected identifier or '(' before 'char'
make[3]: *** [/home/forseti/Development/gcc-4.4.0_build_win/arm-elf/libgcc/crtbegin.o] Fehler 1
make[3]: Verlasse Verzeichnis '/home/forseti/Development/gcc-4.4.0_build_win/gcc'
make[2]: *** [gcc-extra-parts] Fehler 2
make[2]: Verlasse Verzeichnis '/home/forseti/Development/gcc-4.4.0_build_win/arm-elf/libgcc'
make[1]: *** [all-target-libgcc] Fehler 2
make[1]: Verlasse Verzeichnis '/home/forseti/Development/gcc-4.4.0_build_win'
make: *** [all] Fehler 2

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?
Autor: Johann L. (gjlayde) Benutzerseite
Datum: 04.07.2009 10:04

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
Autor: Mott H. (Gast)
Datum: 04.07.2009 10:54
Angehängte Dateien:

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
Autor: Johann L. (gjlayde) Benutzerseite
Datum: 04.07.2009 12:28

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
Autor: Mott H. (Gast)
Datum: 04.07.2009 12:47

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)

PATH=$linpre/bin:$PATH // linpre = compiler 2)
export PATH

cd $dirbld_gcc

../$dirsrc_gcc/configure --build=$build --host=$host --target=$target --prefix=$prefix  \
--disable-nls --disable-shared --disable-threads --disable-win32-registry             \
--with-newlib --with-headers=$dirbld_root/$dirsrc_newlib/newlib/libc/include        \
--with-dwarf2 --with-float=soft --disable-interwork --disable-multilib                \
--with-cpu=arm7tdmi --with-gcc --with-gnu-ld --with-gnu-as                              \
--disable-libssp --disable-libstdcxx-pch --disable-libmudflap --disable-libgomp       \
--enable-languages=c,c++                                                              \
-v                                                                                    \
> __01_make_cnfg_gcc.log 2>&1

> 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
Autor: Johann L. (gjlayde) Benutzerseite
Datum: 04.07.2009 13:44

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)
>
>
>
> PATH=$linpre/bin:$PATH // linpre = compiler 2)
> export PATH
> 
> cd $dirbld_gcc
> 
> ../$dirsrc_gcc/configure --build=$build --host=$host --target=$target
> --prefix=$prefix  \
> --disable-nls --disable-shared --disable-threads
> --disable-win32-registry             \
> --with-newlib
> --with-headers=$dirbld_root/$dirsrc_newlib/newlib/libc/include        \
> --with-dwarf2 --with-float=soft --disable-interwork --disable-multilib
> \
> --with-cpu=arm7tdmi --with-gcc --with-gnu-ld --with-gnu-as
> \
> --disable-libssp --disable-libstdcxx-pch --disable-libmudflap
> --disable-libgomp       \
> --enable-languages=c,c++
> \
> -v
> \
>> __01_make_cnfg_gcc.log 2>&1
> 
echo $build
echo $host
echo $target
echo $prefix
echo $dirbld_root
echo $dirsrc_newlib

> 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

Antwort schreiben

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

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate

Hinweis: der Originalbeitrag ist mehr als 6 Monate alt.
Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net