Forum: Compiler & IDEs msp430-gcc 4.6.3, as: unrecognized option '-mcpu=430'


von Jan S. (db8jo)


Lesenswert?

Hallo,

ich habe heute auf einem Linux System die aktuelle msp-gcc Version aus 
sourcen erstellt - gemäß dieser Anleitung:
http://sourceforge.net/apps/mediawiki/mspg/index.php?title=Install:fromsource

Bei dem Versuch c Dateien damit zu kompilieren, kommt die Fehlermeldung:
as: unrecognized option '-mcpu=430'

Der aufgerufene assembler as kann also mit der Option -mcpu=430 nichts 
anfangen.
Hätte der richtige assembler mit dem gcc mit installiert werden sollen? 
Bei der älteren Version von mspgcc (aus rpm installiert) gab es das 
Problem nicht.
Oder sollte eigentlich msp430-as statt as aufegrufen werden (Was mich 
nur bedingt weiter bringen würde, da msp430-as auf meinem System auch 
nicht vorhanden ist)?

Gruß, Jan

von tux_persönlich (Gast)


Lesenswert?

Hi,

Der link scheint defekt. Kannst du vielleicht dein Makefile bzw Compiler 
Aufruf anhängen?

von hp-freund (Gast)


Lesenswert?

frag ihn doch was er gern hätte: msp-gcc --target-help

von hp-freund (Gast)


Lesenswert?


von Jan S. (db8jo)


Lesenswert?

tux_persönlich schrieb:
> Der link scheint defekt.

Ich hoffe jetzt gehts:
http://sourceforge.net/apps/mediawiki/mspgcc/index.php?title=Install:fromsource

Ich benutze eclipse, der Compileraufruf wenn ich die mmcu angebe ist:
msp430-gcc -O0 -g3 -Wall -c -fmessage-length=0 -mmcu=msp430fg2452 -MMD 
-MP -MF"main.d" -MT"main.d" -o "main.o" "../main.c"

Und ohne mmcu, nur zum test:
msp430-gcc -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"main.d" 
-MT"main.d" -o "main.o" "../main.c"

Gibt jedes mal den Fehler:
as: unrecognized option '-mcpu=430'

Selbst wenn ich mspgcc über die Kommanozeile mit minimale Optionen 
aufrufe, gibt es den gleichen Fehler:
$msp430-gcc -o main main.c
as: unrecognized option '-mcpu=430'


>frag ihn doch was er gern hätte: msp-gcc --target-help
Ansich scheint mir -mmcu=msp430fg2452 schon richtig zu sein, steht ja im 
Endefekt auch in dem verlinkte makefile.

Die Fehlermeldung bezieht sich auf as (also auf den aufgerufenen 
Assembler und nicht gcc selbst) und auf -mcpu

Danke, Jan

von Jim M. (turboj)


Lesenswert?

> as: unrecognized option '-mcpu=430'

Sollte das nicht eigentlich "msp430-as" heissen? Wenn der GCC die 
binutils vom Host (i386/x86_64) benutzt, würde das diesen Fehler 
erklären. Pack mal ein "-v" zu den Compiler Optionen dazu, dann zeigt er 
an was er für Kommandos ausführt - auch welchen Assembler.

von Jan S. (db8jo)


Lesenswert?

Jim Meba schrieb:
Pack mal ein "-v" zu den Compiler Optionen dazu, dann zeigt er
> an was er für Kommandos ausführt - auch welchen Assembler.

Danke für den Tipp, folgendes ruft der msp430-gcc auf:
COLLECT_GCC_OPTIONS='-v' '-o' 'main' '-mcpu=430' '-mmpy=none' 
'-mivcnt=16'
 as -mcpu=430 -o /tmp/ccvcidfT.o /tmp/cccSpNQD.s

Allerdings kann ich msp430-as auch auf dem System nicht finden. Dann ist 
wohl das installieren der binutils schief gelaufen, oder woher sollte 
msp430-as kommen?

Gruß, Jan

von Jan S. (db8jo)


Lesenswert?

Etliche Versuche später gibt es neue Erkenntnisse und auch Fragen, aber 
leider kein Lösung:

-Scheinbar ist das installieren der msp430-binutils gemäß oben erwähnter 
Anweisung schief gelaufen - und as gehört zu den binutils (sowohl make 
als auch make install lieferten Fehler zurück)
-Ich konnte über yum die msp430-binutils installieren, allerdings nur in 
Version 2.19. Damit ist msp430-as installiert, aber in Version 2.19 
werden wieder manche msp Typen nicht unterstüzt (und das war der Anlass 
für die ganze Aktion.)

Nun zu den Fragen, vielleicht hat ja jemand eine ähnliche Konfiguration:
-Sollte msp430-gcc-4.6.3 den msp430-as aufrufen, oder as -mcpu=430
-Und wo lässt sich das beeinflussen, da muß es doch irgendwelche config 
files für den gcc geben, oder?

Gruß, Jan

von Cannabis_engineer (Gast)


Lesenswert?

Hi,

unabhängig der bisherigen Diskussion eine Anmerkung:

Falls du Ubuntu benutzt kannst du ganz bequem die Toolchain
via http://wiki.ubuntuusers.de/MSP430-Toolchain installieren.
Damit läuft alles in 5min, Idiotensicher! ;)

glgl hf

von Jan S. (db8jo)


Lesenswert?

Cannabis_engineer schrieb:
> Falls du Ubuntu benutzt kannst du ganz bequem die Toolchain
> via http://wiki.ubuntuusers.de/MSP430-Toolchain installieren.

schade, ich verwende Fedora 16. Und dafür gibt es in den normalen 
repositories nur msp430-gcc 3.x. Auch für das aktuelle Fedora 17 scheint 
das ähnlich zu sein! Außerdem ist alle halbe Jahr auf die neuere OS 
Version zu wechseln ja auch doof - bringt immer nur andere Probleme mit 
sich.

Interessant wäre nochmal, wo definiert ist welchen assembler msp430-gcc 
mit welchen Optionen aufruft. Dann kriege ich das eventuell auch zu Fuß 
gelöst.

von hp-freund (Gast)


Lesenswert?

Ich habe eben mal zum Spass die neue binutils-2.23.1 compiliert. 
Natürlich ohne Patch. Da ist alles wie es sein soll mit msp430-ar, 
msp430-as usw.
Ohne jetzt den Patch der in deinem link angegeben ist zu analysieren 
vermute ich darin das Problem.
also:
1
tar xvf binutils-2.23.1.tar.bz2
2
mkdir binutils-2.23.1-msp430
3
cd binutils-2.23.1-msp430
4
../binutils-2.23.1/configure --prefix=/usr/local/msp430/ \
5
--target=msp430 --program-prefix=msp430-

von Hans Ulli K. (Gast)


Lesenswert?

Hallo,

der
msp430-gcc ruft normalerweise dein msp430-as und auch alle anderen 
Programme mit diesem Prefix auf, also auch msp430-ld.

Als Fallback werden dann eben die Tools ohne den Prefix "msp430-" 
benutzt.

Also as, was bei bei einem x86 System leider nur den i386 usw. 
unterstützt.
Ein "as -mcpu=430" bei einem x86 Host gibt es nicht.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Jan S. schrieb:

> Interessant wäre nochmal, wo definiert ist welchen assembler msp430-gcc
> mit welchen Optionen aufruft. Dann kriege ich das eventuell auch zu Fuß
> gelöst.

msp430-gcc -dumpspecs

Interessant sind für dich:
 *asm
 *asm_debug
 *asm_final
 *asm_options

und vor allem:
 *invoke_as

Beachte aber, daß gcc den as aufruft und diesen im richtigen Verzeichnis 
erwartet, etwa in $install/$target/bin

Wenn er dort nicht ist, liegt das i.d.R an einer fehlkonfigurierten 
Toolchain, oder daß beim Konfigurieren ein as bzw. eine Setup verwendet 
wurde, wie es in der Installation nicht mehr vorgefunden wird.

Eine Möglichkeit, solchen Problemchen aus dem Weg zu gehen, ist GCC und 
Binutils mit gleichem --prefix zu konfigurieren und beides zusammen zu 
liefern.

Den Systempfad kannst du mit -B erweitern, aber es sollte auch ohne 
gehen.

Wie gcc den as aufruft siehst du mit -v.  Ergebnis hängt davon ab, wo 
der "nächste" as gefunden wird.

von Jan S. (db8jo)


Lesenswert?

Vielen Dank für die vielen Tipps.
Also msp430-as ist jetzt vorhanden, da es funktioniert hat ein 
msp430-binutils Paket einer späteren fedora Version zu installieren.

msp430-as -v ergibt folgendes:
GNU assembler version 2.21.1 (msp430) using BFD version (GNU Binutils) 
2.21.1 (mspgcc LTS 20120406 unpatched)

Dürfte also ok sein.

msp430-gcc -dumpspecs hat ergeben, daß unter der Direktive *invoke-as 
eben  "as" steht und nicht "msp430-as".
Habe den gesamten dump in eine Datei umgeleitet, as in msp430-as 
geändert und gcc diese Datei mittels -specs= verwenden lassen. Und siehe 
da, der Fehler hat sich verändert:

/usr/bin/msp430-ld: cannot find crt0ivtbl16.o: No such file or directory
/usr/bin/msp430-ld: cannot find -lgcc
/usr/bin/msp430-ld: cannot find -lc
/usr/bin/msp430-ld: cannot find -lgcc
/usr/bin/msp430-ld: cannot find -lcrt0

Damit werde ich mich dann wohl morgen weiter befassen müssen, es reicht 
mir für heute.

Danke für die bisherigen Antworten, Jan

von Hans Ulli K. (Gast)


Lesenswert?

So habe mal bintutils und gcc gebaut.
Ging Problemlos ...

Folgender Patch fehlt in der Downloadliste
http://sourceforge.net/projects/mspgcc/files/Patches/gcc-4.6.3/msp430-gcc-4.6.3-20120406.patch
wird aber im "Build" angewendet.

Output gcc -v
1
/tmp/msp430/bin/gcc -v
2
Es werden eingebaute Spezifikationen verwendet.
3
Spezifikationsdatei msp430mcu.spec konnte nicht gefunden werden
4
COLLECT_GCC=/tmp/msp430/bin/gcc
5
Ziel: msp430
6
Konfiguriert mit: ../gcc-4.6.3/configure --target=msp430 --enable-languages=c --program-prefix=msp430- --prefix=/tmp
7
Thread-Modell: single
8
gcc-Version 4.6.3 20120301 (mspgcc LTS 20120406 unpatched) (GCC)

Den
--prefix=/tmp
habe ich genommen, damit auf meiner Ramdisk/tmpfs gebaut wird.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Das Ding ist in

/tmp/bin/msp430-gcc

> eingebaute Spezifikationen

Das versteht kein Schwanz...

Nimm --disable-nls

von Fotos und Scans (Gast)


Lesenswert?

>Den
>--prefix=/tmp
>habe ich genommen, damit auf meiner Ramdisk/tmpfs gebaut wird.

.... und die Tools mit einem Shutdown rückstandsfrei entsorgt werden?

von Hans Ulli K. (Gast)


Lesenswert?

@ Johann L.

Ich wollte damit Jan S. nur sagen das die Anleitung funktioniert.
--prefix kann auch mit anderen Werten benutzt werden.

und wegen --disable-nls du kannst ja auch
1
LANG="en_US.UTF8" /tmp/msp430/bin/gcc -v
benutzen ;-)


@ Fotos und Scans
Ja war auch so gedacht !

Aktuell benutze ich keinen MSP430 sondern nur ARM und MIPS (Linux)
Und ich möchte nicht das ich Tools außerhalb meiner Distro (Gentoo) 
installieren.
Unter Gentoo mit kann man mit
1
crossdev --stage1 --target msp430
die Bintuils und den Crosscompiler bauen.

von Jan S. (db8jo)


Lesenswert?

Hans Ulli Kroll schrieb:

> Folgender Patch fehlt in der Downloadliste
> http://sourceforge.net/projects/mspgcc/files/Patch...
> wird aber im "Build" angewendet.
>

Also wenn ich das richtig sehe, ist der patch in dem Archiv 
mspgcc-20120406.tar.bz2 enthalten. den patch daraus habe ich zumindest 
angewendet.

Ich habe msp430-gcc nochmal neu installiert, nachdem die binutils und 
damit msp430-as ja nun vorhanden sind. Trotzdem wird noch as statt 
masp430-as aufgerufen. Das läßt sich aber ja über die externe specfile 
beheben.
Nun bleiben die Linkerprobleme, konkret:
1
Linking test.elf
2
/usr/bin/msp430-ld: cannot find -lc
3
collect2: ld gab 1 als Ende-Status zurück
4
make: *** [test.elf] Fehler 1

-lc kam in den specs vor, habe es spaßeshalber mal entfernt, der Fehler 
bleibt aber.

Was soll -lc den überhaupt sein? Eine Option für msp430-ld?

Gruß, Jan

von Fotos und Scans (Gast)


Lesenswert?

>Was soll -lc den überhaupt sein? Eine Option für msp430-ld?

Was hältst Du davon, die GCC/Biinutils-Manuals zu lesen?
-lc ist die Anweisung an den Linker, die Library
libc.a zu linken.

Generell:  -l<libname> heisst
eine Library mit dem Namen lib<libname>.a zu linken (etwas
abgedreht, ich weiss, stammt halt aus der Unix-Historie).
Mit -L<lib-dir> kannst Du ein Directory festlegen, in dem Libs
gesucht werden.

Eine (oder mehrere solcher) sollten eigentlich beim
Build des Compilers entstehen....

Bei mir gibt´s u.a. eine
./msp430/lib/libc.a oder eine
./msp430/lib/mcpu-430x/libc.a

Hast Du das Readme beim mpsp430 GCC beachtet? Sollte
eigentlich alles ohne krude Hacks funktionieren.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Fotos und Scans schrieb:

> Sollte eigentlich alles ohne krude Hacks funktionieren.

ACK. Insbesondere ist es nicht notwendig, die Specs zu hacken.  Falls 
doch, liegt ein grundlegendes Problem vor: Tools sind falsch 
konfiguriert und / oder falsch installiert, etc.

von Jan S. (db8jo)


Lesenswert?

Fotos und Scans schrieb:
> Was hältst Du davon, die GCC/Biinutils-Manuals zu lesen?
> -lc ist die Anweisung an den Linker, die Library
> libc.a zu linken

Ich hab in das man von ld geschaut, aber hab blöderweise nach -lc statt 
nach -l gesucht. Eigentlich dämlich, aber ich hab mich von den 
mehrbuchstabigen gcc Option die nur mit einem - beginnen irritieren 
lassen...

Johann L. schrieb:
>> Sollte eigentlich alles ohne krude Hacks funktionieren.
>
> ACK. Insbesondere ist es nicht notwendig, die Specs zu hacken.  Falls
> doch, liegt ein grundlegendes Problem vor: Tools sind falsch
> konfiguriert und / oder falsch installiert, etc.

Gut, dann sollte ich wohl nochmal von vorn anfangen. Mist, eigentlich 
wollte ich doch nur mal schnell ...

Danke bis hier hin für die Geduld!

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Bei configure macht GCC zentnerweise Ausgaben, die u.a. auch verraten, 
welche binutils er nimmt.  Steht darin fast ganz oben.

Schau also mal die configure-Ausgaben and bzw. das entsprechende 
config.log.

Bei der installierten Tools kommt es auch darauf an, was in PATH 
gefunden wird.  Werden gcc und binutils zusammen erzeugt, wird jedoch 
zuerst nach as gesucht, zB in ./$target/bin/as

von Hans Ulli K. (Gast)


Lesenswert?

@ Jan S.

von WO jast du den Compiler installiert ??
Du kannst diesen nicht aus dem Repo von Debian/Suse usw. nehmen ...

Du must den Compiler mit den dir selber gebauten binutils bauen.

von Hans Ulli K. (Gast)


Lesenswert?

Hier mal die wichtigen Ausgaben von "make binutils" (mit meinem 
--prefix=/tmp
Der Vorteil von der richtigen Anwendung des --prefix du brauchst nicht 
root zu sein um funktionierende toolchain zu haben
1
../binutils-2.21.1/configure --target=msp430 --program-prefix="msp430-" --prefix=/tmp
2
checking build system type... x86_64-unknown-linux-gnu
3
checking host system type... x86_64-unknown-linux-gnu
4
checking target system type... msp430-unknown-none
5
.
6
.
7
checking for msp430-cc... no
8
checking for msp430-gcc... no
9
checking for msp430-c++... no
10
checking for msp430-g++... no
11
checking for msp430-cxx... no
12
checking for msp430-gxx... no
13
checking for msp430-gcc... no
14
checking for msp430-gcj... no
15
checking for msp430-gfortran... no
16
checking for msp430-ar... no
17
checking for msp430-as... no
18
checking for msp430-dlltool... no
19
checking for msp430-ld... no
20
checking for msp430-lipo... no
21
checking for msp430-nm... no
22
checking for msp430-objdump... no
23
checking for msp430-ranlib... no
24
checking for msp430-strip... no
25
checking for msp430-windres... no
26
checking for msp430-windmc... no
27
checking where to find the target ar... just compiled
28
checking where to find the target as... just compiled
29
checking where to find the target cc... pre-installed
30
checking where to find the target c++... pre-installed
31
checking where to find the target c++ for libstdc++... pre-installed
32
checking where to find the target dlltool... just compiled
33
checking where to find the target gcc... pre-installed
34
checking where to find the target gcj... pre-installed
35
checking where to find the target gfortran... pre-installed
36
checking where to find the target ld... just compiled
37
checking where to find the target lipo... pre-installed
38
checking where to find the target nm... just compiled
39
checking where to find the target objdump... just compiled
40
checking where to find the target ranlib... just compiled
41
checking where to find the target strip... just compiled
42
checking where to find the target windres... just compiled
43
checking where to find the target windmc... just compiled
44
checking whether to enable maintainer-specific portions of Makefiles... no
45
checking whether -fkeep-inline-functions is supported... yes
46
configure: creating ./config.status
47
config.status: creating Makefile
Wie du siehst es darf kein Compiler erkannt werden
Jetzt noch
1
make && make install

von Hans Ulli K. (Gast)


Lesenswert?

So nun das gleiche mit gcc
1
../gcc-4.6.3/configure --target=msp430 --enable-languages=c --program-prefix="msp430-" --prefix=/tmp
2
checking build system type... x86_64-unknown-linux-gnu
3
checking host system type... x86_64-unknown-linux-gnu
4
checking target system type... msp430-unknown-none
5
.
6
.
7
checking where to find the target ar... pre-installed in /tmp/msp430/bin
8
checking where to find the target as... pre-installed in /tmp/msp430/bin
9
checking where to find the target cc... just compiled
10
checking where to find the target c++... pre-installed
11
checking where to find the target c++ for libstdc++... pre-installed
12
checking where to find the target dlltool... pre-installed
13
checking where to find the target gcc... just compiled
14
checking where to find the target gcj... pre-installed
15
checking where to find the target gfortran... pre-installed
16
checking where to find the target gccgo... pre-installed
17
checking where to find the target ld... pre-installed in /tmp/msp430/bin
18
checking where to find the target lipo... pre-installed
19
checking where to find the target nm... pre-installed in /tmp/msp430/bin
20
checking where to find the target objdump... pre-installed in /tmp/msp430/bin
21
checking where to find the target ranlib... pre-installed in /tmp/msp430/bin
22
checking where to find the target strip... pre-installed in /tmp/msp430/bin
23
checking where to find the target windres... pre-installed
24
checking where to find the target windmc... pre-installed
25
checking whether to enable maintainer-specific portions of Makefiles... no
26
checking whether -fkeep-inline-functions is supported... yes
27
configure: creating ./config.status
28
config.status: creating Makefile
Beachte hier die Ausgabe von den gefundenen binutils, da ich ja meine 
mit mit dem Prefix /tmp gebaut habe.

Normalerweise wird eine Toolchain mit dem entsprechenden "Tupel" gebaut.
Im msp30 Fall ist es wie du siehst msp430-unknown-none.

Der Standard Ausruf von ./configure, wenn diese aks root instaliert 
werden sollen, ist :
1
../binutils-2.21.1/configure --target=msp430-unknown-none --prefix=/usr
und
1
../gcc-4.6.3/configure --target=msp430-unknown-none --enable-languages=c  --prefix=/tmp

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Hans Ulli Kroll schrieb:
> Hier mal die wichtigen Ausgaben von "make binutils"
> [...]
> Wie du siehst es darf kein Compiler erkannt werden

Huh? Wieso das?

Sollte doch nicht stören das, aber configure brabbelt eben viel...

Hans Ulli Kroll schrieb:

> Der Standard Ausruf von ./configure, wenn diese
> als root instaliert

Nicht, wenn man nicht root ist ;-)

Zudem wird ./configure in GCC nicht unterstützt, d.h. configure 
innerhalb des Quellbaums.  Falls man es doch gemacht hat, dann 1) Doku 
lesen 2) Quellen entsorgen 3) Quellen neu ziehen 4) Anwenden, was in 1) 
steht, also insbesondere kein configure im Quellverzeichnis.

von Jan S. (db8jo)


Lesenswert?

Kaum macht man es richtig, schon geht es!
Asche über mein Haupt, es haben schlicht und einfach Abhängigkeiten 
gefehlt.
Eine Hilfreiche Liste dazu in dieser Anleitung:
http://www.dconstructing.com/2012/02/22/compiling-for-msp430g2553-in-fedora

Dadurch wurden die binutils nicht und der gcc falsch installiert. Mit 
den msp430-binutils als rpm hatte es ja auch nicht geklappt, ob dies an 
einer inkompatibilität zwischen dem binutils Paket und dem aus sourcen 
installiertem gcc lag, oder aber auch an nicht aufgelösten 
Abhängigkeiten habe ich icht mehr nachgeforscht. Jetzt ist auf jeden 
Fall alles manuell installiert (bis auf mspdebug) und funktioniert (gdb 
habe ich noch nicht getestet).

Vielen Dank nochmal für Eure Hilfe, ich hab viel über gcc, die binutils 
und cross compiling gelernt.

Übrigens steht in den specs von msp430-gcc interessanter weise immer 
noch nur as statt msp430-as bei *invoke_as.

Jan

von Hans Ulli K. (Gast)


Lesenswert?

Noch ein Link zu LFS, Linux from Scratch
http://www.linuxfromscratch.org/lfs/

Dort wird das mit den bintuils und gcc nochmal erklärt. Sowie wie man es 
schafft eine Toolchain vom Hostsystem zu "lösen". Dazu ist auch dieses 
spec-File da. Die Suchpfade für die libs sind mit in dem Programmen 
compiliert.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.