GCC 4.2.1 für AVR bauen schlägt fehl

OP Persönliche Seite #625633
Lesenswert?

Hallo,
ich habe versucht, mir mal den GCC 4.2.1 für AVRs zu bauen und dabei die 
Schritte, beschrieben auf
http://avrwiki.com/wiki/index.php/Building_AVR_GCC
befolgt. Auf das bauen neurere Binutils habe ich verzichtet.

Der Compiliervorgang bricht nach einer Weile jedoch mit der Meldung

/home/malte/unzip/gcc-4.2.1/avr-gcc/./gcc/xgcc 
-B/home/malte/unzip/gcc-4.2.1/avr-gcc/./gcc/ -B/usr/local/avr/bin/ 
-B/usr/local/avr/lib/ -isystem /usr/local/avr/include -isystem 
/usr/local/avr/sys-include -O2  -O2 -g -O2  -DIN_GCC -DCROSS_COMPILE 
-W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes 
-Wold-style-definition  -isystem ./include  -DDF=SF -Dinhibit_libc 
-mcall-prologues -Os -g  -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED 
-Dinhibit_libc -I. -I. -I../../gcc -I../../gcc/. -I../../gcc/../include 
-I../../gcc/../libcpp/include  -I../../gcc/../libdecnumber 
-I../libdecnumber -mmcu=avr25 -DL_mulsi3 -xassembler-with-cpp -c 
../../gcc/config/avr/libgcc.S -o libgcc/avr25/_mulsi3.o
../../gcc/config/avr/libgcc.S: Assembler messages:
../../gcc/config/avr/libgcc.S:280: Error: illegal opcode movw for mcu 
avr2
../../gcc/config/avr/libgcc.S:282: Error: illegal opcode movw for mcu 
avr2
make[3]: *** [libgcc/avr25/_mulsi3.o] Fehler 1

ab.
Hab ich was falsch gemacht oder ist hier der gcc fehlerhaft?
OP Persönliche Seite #626056
Lesenswert?

Jörg Wunsch wrote:
> Wenn du schon einen GCC baust, der die avr25- und avr35-Architektur
> kennt, dann brauchst du natürlich auch binutils, die das verstehen.

Also bei meinem System sind die Binutils 2.16.1cvs20060117-1 dabei. Ich 
habe jetzt 2.17 heruntergeladen und compiliert. Gibt es eine Möglichkeit 
diese zum Compilieren von gcc 4.2.1 zu verwenden, ohne die Binutils ins 
System zu installieren? Ich möchte an meinem System lieber soweit nichts 
verändern, sondern primär testen ob ein bestehendes Projekt (welches mit 
gcc 3.4.3 läuft, mit gcc 4.1.0 aber nicht) mit dem gcc 4.2.1 läuft und 
wie da die Codegröße aussieht.
Moderator Persönliche Seite #626150
Lesenswert?

> Gibt es eine Möglichkeit
> diese zum Compilieren von gcc 4.2.1 zu verwenden, ohne die Binutils ins
> System zu installieren?

Du kannst beim ./configure einen beliebigen --prefix= angeben, in
den du das am Ende installiert haben möchtest, also zum Beispiel
eine Hierarchie unterhalb /tmp damit anlegen.  --prefix muss nur
für alle drei Teile der toolchain (binutils, GCC, avr-libc) gleich
sein.  Außerdem bin ich mir nicht ganz sicher, ich denke, dass du
${PREFIX}/bin im ${PATH} haben musst, auch bereits zum Compilieren
des GCC.
Gast #626223
Lesenswert?

> Außerdem bin ich mir nicht ganz sicher, ich denke, dass du
> ${PREFIX}/bin im ${PATH} haben musst, auch bereits zum Compilieren
> des GCC.

Andernfalls kann configure die binutils nicht finden. Wichtig ist auch, 
daß $PREFIX/bin im PATH vor dem Verzeichnis steht, in dem die schon 
installierten Binutils liegen.
Gast #626328
Lesenswert?

> make clean

Probier mal "make distclean". Andernfalls löscht configure seinen Cache 
nicht, und falls die Pfade zu den Binutils da gespeichert sind, wird 
beim nächsten configure nicht nochmal gesucht.

Und was Jörg schrieb:

> --prefix muss nur für alle drei Teile der toolchain (binutils, GCC,
> avr-libc) gleich sein.

Ich bin mir nicht sicher, ob das wirklich stimmt, aber er wird schon 
wissen, was er schreibt ;-)
Moderator Persönliche Seite #626362
Lesenswert?

Da fällt mir noch ein:

./configure --target=avr --program-prefix="avr"

Den --program-prefix braucht man gar nicht, der ist Standard.

Aber: ./configure ist nicht unterstützt.  Du musst ein separates
Verzeichnis machen (z. B. build), in dieses wechseln, und configure
von dort aufrufen.

Außerdem ist die libssp nicht unterstützt, da sie Posix-API-Funktionen
braucht (und letztlich ein zu Grunde liegendes Betriebssystem mit
Dateifunktionalität).

Beispiel:

mkdir build
cd build
../configure --target=avr --disable-libssp [--prefix=...]
make

Hab's eben probiert, damit läuft bei mir ein GCC 4.2.1 durch.
OP Persönliche Seite #626374
Lesenswert?

Nach einem make distclean blieben immer noch irgendwelche Dateien 
zurück, die ich dann entsprechend manuell gelöscht hab. Die gute 
Nachricht ist, dass er jetzt weiter kommt, allerdings hänge ich jetzt 
bei der nächsten Fehlermeldung:
../../../libssp/ssp.c: In function '__guard_setup':
../../../libssp/ssp.c:70: warning: implicit declaration of function 
'open'
../../../libssp/ssp.c:70: error: 'O_RDONLY' undeclared (first use in 
this function)

Könnte es sein, dass irgendwelche Header Dateien nicht gefunden werden?

Edit:
Ok, ich vermute, mit dem letzten Post von Jörg, lässt sich das beheben 
:-)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren