Forum: Compiler & IDEs Allgemeine Fragen zur NEWLIB


von Daniel Bauer (Gast)


Lesenswert?

Hi,

ich beschäftige mich seit kurzem mit der newlib.
Allerdings stellen sich mir noch einige Fragen:

1) kann ich die NEWLIB auch unter Windows (ohne CYGWIN o.ä.) mit Hilfe 
der ARM-ELF-GCC (z.B. YAGARTO) selbst compilieren?

2) wenn ich die *.a-Files gebaut bekommen habe, mit welchen Header-Files 
müsste ich diese in eine Compiler-Umgebung integrieren, damit mir nicht 
irgendwelche DEFINEs o.ä. fehlen (z.B. NEWLIB-Fehlercodes)?

3) enthält YAGARTO eine reentrante Variante der NEWLIB?
Falls ja, wo ist diese zu finden?

4) wie kann ich die SYSCALLS der NEWLIB in YAGARTO "überladen" 
("--allow-multiple-definition" und eigene SYSCALLS oder extrahieren der 
"lib_a-syscalls.o" aus LIBC.A und eigene SYSCALLS)?

5) hat jemand von Euch die NEWLIB schon mal in Verbindung mit CrossWorks 
verwendet? Falls ja, wie?

Ich hoffe ihr könnt mir helfen :o)
Daniel

von Gast (Gast)


Lesenswert?

Klar kann man unter Windows aalles selbst kopmilieren. Ich kann dir aber 
nicht sagen, ob cagwin zwingend ist. Unter OSX hab ich meinen gcc, der 
macht das für mich.

Warum willst du die Newlib mit Crossworks verwenden? Crossworks bringt 
seine eigene Library mit.

von Daniel Bauer (Gast)


Lesenswert?

Hi "Gast",

um die NEWLIB-Sourcen mit der GCC zu bauen benötige ich aber ein 
MAKEFILE.
Das ist aber nicht Bestandteil der NEWLIB-Sourcen, sondern muss per
automake, autoconf, ... zunächst erstellt werden. Und da sehe ich 
momentan ein Problem unter Windows, wenn ich CYGWIN beiseite lassen 
will.

Bzgl. CrossWorks hast du Recht. CrossWorks bringt eigene Libs mit. 
Allerdings sind keine STDLIB-Fileoperationen (fopen, fclose, ...) 
enthalten ... und genau um diese geht es mir.
Aus verschiedenen Gründen benötige ich sie auch genau aus der STDLIB, so 
dass eigene Implementierungen ausscheiden.
(Zugriff auf verschiedene Massenspeicher (SDC, CF, ...) per 
STDLIB-Funktionen um bestehenden Code verwenden zu können).
Ausserdem ergibt sich bei CrossWorks das Problem, dass sich bzgl. der 
enthaltenen StartUp-Files "Unzulänglichkeiten" einstellen, sobald die 
üblichen INCLUDE- und LIB-Pfade "entfernt" und hin zu 
benutzerspezifischen verstellt werden.

Weitere Tips und Vorschläge?

Thnx :o)
Daniel

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Daniel Bauer wrote:

> Das ist aber nicht Bestandteil der NEWLIB-Sourcen, sondern muss per
> automake, autoconf, ... zunächst erstellt werden.

Nein, diese Boliden musst du nur auffahren, wenn du ein generisches
Paket bauen willst, das sich auf möglichst vielen Zielplattformen
compilieren lässt.

Wenn du ganz allein für dich was compilieren willst, brauchst du
ein Makefile von vielleicht 10 oder 20 Zeilen Länge.  Ein solches
lässt man sich nicht von automake anfertigen, sondern erzeugt es
mit dem Texteditor seiner Wahl.

von Martin T. (mthomas) (Moderator) Benutzerseite


Lesenswert?

Daniel Bauer wrote:
> Hi,
>
> ich beschäftige mich seit kurzem mit der newlib.
> Allerdings stellen sich mir noch einige Fragen:
>
> 1) kann ich die NEWLIB auch unter Windows (ohne CYGWIN o.ä.) mit Hilfe
> der ARM-ELF-GCC (z.B. YAGARTO) selbst compilieren?
Kann nicht für YAGARTO sprechen. Es sollte aber im Prinzip mit einem 
vorhandenen Cross-Compiler funktionieren. Ich nutze für WinARM eine 
MinGW/msys-Umgebung in WinXP zum Bau aller Toolchain-Komponenten. Cygwin 
bisher gemieden, andere Cross-Toolchain Packager nutzen es aber.

> 2) wenn ich die *.a-Files gebaut bekommen habe, mit welchen Header-Files
> müsste ich diese in eine Compiler-Umgebung integrieren, damit mir nicht
> irgendwelche DEFINEs o.ä. fehlen (z.B. NEWLIB-Fehlercodes)?
Würde grundsätzlich davon absehen da irgenwas aus einer anderen 
"Umgebung" zu überschreiben. Lieber alles Konsistent lassen, evtl. in 
einer IDE eine andere toolchain-root eintragen bzw. System-Suchpfad 
anpassen. Grade bei den erwähnten Tools Crossworks und Yagarto düften 
die unterschiedlichen ABIs (EABI zu "old"-ABI) Verdrusspotential bergen.

> 3) enthält YAGARTO eine reentrante Variante der NEWLIB?
> Falls ja, wo ist diese zu finden?
Ältere Versionen auf jeden Fall nicht (war der Grund, warum ich nie auf 
Yagarto umgestiegen bin). Wollte der Yagarto-Packer jedoch umgestellen, 
bin aber nicht sicher, ob er das bereits bei der aktuellen Version 
gemacht wurde. Im Zweifel Michael Fischer per e-mail fragen oder im 
englischsprachigen Forum, dort antwortet Michael von Zeit zu Zeit.

> 4) wie kann ich die SYSCALLS der NEWLIB in YAGARTO "überladen"
> ("--allow-multiple-definition" und eigene SYSCALLS oder extrahieren der
> "lib_a-syscalls.o" aus LIBC.A und eigene SYSCALLS)?
k.A. da Yagarto hier nicht im Einsatz. Zumindest in DevkitARM und WinARM 
gibt es keine default syscalls in der libc, sollte bei Codesourcery 
inzwischen auch so sein aber nicht sicher. Mglw. reicht es aber auch die 
Linker-Reihenfolge anzupassen, um eigene syscalls aus einer ".a"-Datei 
"unterzuschieben", habe das jedoch nicht selbst ausprobiert.

> 5) hat jemand von Euch die NEWLIB schon mal in Verbindung mit CrossWorks
> verwendet? Falls ja, wie?
Hinter Crossworks steckt meines Wissens eine ARM-EABI Crosstoolchain, 
die auf Basis der von Codesourcery angepassten GNU Quellen 
zusammengebaut wurde. Allerdings ohne newlib, eigene libc von Rowley 
wurde ja bereits erwähnt. Statt viel zu basteln, ist es mglw. 
geschickter, CS G++ lite zu installieren und die IDE die darin 
enthaltenen tools (bintuils, compiler-frontend...) aufrufen zu lassen.

von Daniel Bauer (Gast)


Lesenswert?

Hallo,

vielen Dank für die (bisherigen :o) Antworten.
Dazu ein paar Kommentare/Anmerkungen:

>> 1) kann ich die NEWLIB auch unter Windows (ohne CYGWIN o.ä.) mit Hilfe
>> der ARM-ELF-GCC (z.B. YAGARTO) selbst compilieren?
>Kann nicht für YAGARTO sprechen. Es sollte aber im Prinzip mit einem
>vorhandenen Cross-Compiler funktionieren. Ich nutze für WinARM eine
>MinGW/msys-Umgebung in WinXP zum Bau aller Toolchain-Komponenten. Cygwin
>bisher gemieden, andere Cross-Toolchain Packager nutzen es aber.

... werd ich mir mal ansehen. Allerdings hielt ich bisher MSYS für eine 
Art CYGWIN light und wollte eigentlich auch dieses vermeiden. Einzig 
"echte" Windowsanwendungen, BAT-Files, o.ä. wollte ich verwenden.

>> 2) wenn ich die *.a-Files gebaut bekommen habe, mit welchen Header-Files
>> müsste ich diese in eine Compiler-Umgebung integrieren, damit mir nicht
>> irgendwelche DEFINEs o.ä. fehlen (z.B. NEWLIB-Fehlercodes)?
>Würde grundsätzlich davon absehen da irgenwas aus einer anderen
>"Umgebung" zu überschreiben. Lieber alles Konsistent lassen, evtl. in
>einer IDE eine andere toolchain-root eintragen bzw. System-Suchpfad
>anpassen. Grade bei den erwähnten Tools Crossworks und Yagarto düften
>die unterschiedlichen ABIs (EABI zu "old"-ABI) Verdrusspotential bergen.

Selbstverständlich. Überschreiben wollte ich auch nichts. Eher eine 
händische Mischung von Includes und Libs im Projekt herstellen. An die 
ABIs hatte ich dabei noch gar nicht gedacht.

>> 3) enthält YAGARTO eine reentrante Variante der NEWLIB?
>> Falls ja, wo ist diese zu finden?
>Ältere Versionen auf jeden Fall nicht (war der Grund, warum ich nie auf
>Yagarto umgestiegen bin). Wollte der Yagarto-Packer jedoch umgestellen,
>bin aber nicht sicher, ob er das bereits bei der aktuellen Version
>gemacht wurde. Im Zweifel Michael Fischer per e-mail fragen oder im
>englischsprachigen Forum, dort antwortet Michael von Zeit zu Zeit.

... dann werd ich versuchen MiFi eine Antwort abzuringen :o)

>> 4) wie kann ich die SYSCALLS der NEWLIB in YAGARTO "überladen"
>> ("--allow-multiple-definition" und eigene SYSCALLS oder extrahieren der
>> "lib_a-syscalls.o" aus LIBC.A und eigene SYSCALLS)?
>k.A. da Yagarto hier nicht im Einsatz. Zumindest in DevkitARM und WinARM
>gibt es keine default syscalls in der libc, sollte bei Codesourcery
>inzwischen auch so sein aber nicht sicher. Mglw. reicht es aber auch die
>Linker-Reihenfolge anzupassen, um eigene syscalls aus einer ".a"-Datei
>"unterzuschieben", habe das jedoch nicht selbst ausprobiert.

... "--allow-multiple-definition" hat in einem ersten Test funktioniert. 
Ob es Seiteneffekte gibt hab ich noch nicht herausfinden können.
Das Extrahieren von "lib-a_syscalls.o" aus der "libc.a" hab ich bereits 
getan; die neue "libc.a" allerdings noch nicht getestet.

>> 5) hat jemand von Euch die NEWLIB schon mal in Verbindung mit CrossWorks
>> verwendet? Falls ja, wie?
>Hinter Crossworks steckt meines Wissens eine ARM-EABI Crosstoolchain,
>die auf Basis der von Codesourcery angepassten GNU Quellen
>zusammengebaut wurde. Allerdings ohne newlib, eigene libc von Rowley
>wurde ja bereits erwähnt. Statt viel zu basteln, ist es mglw.
>geschickter, CS G++ lite zu installieren und die IDE die darin
>enthaltenen tools (bintuils, compiler-frontend...) aufrufen zu lassen.

Mmh. CrossWorks an sich ist nicht schlecht ;o) Die "Unzulänglichkeit" 
der eigenen LIBC wollte ich durch die NEWLIB ausgleichen ... daher meine 
Fragen. Die Features von CS G++ hatte ich mir vor einiger Zeit auch 
schonmal angesehen. Aus verschiedenen Gründen bin ich dann aber doch bei 
CrossWorks gelandet. Werde aber erneut prüfen, welche Toolchain besser 
geeignet ist.

Vielen Dank,
Danny

PS: weitere Tips und Informationen nehme ich gern zur Kenntnis

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Daniel Bauer wrote:

> ... werd ich mir mal ansehen. Allerdings hielt ich bisher MSYS für eine
> Art CYGWIN light und wollte eigentlich auch dieses vermeiden. Einzig
> "echte" Windowsanwendungen, BAT-Files, o.ä. wollte ich verwenden.

MinGW/Msys stellt ein paar Unix-Werkzeuge als Win32-Compilate bereit,
einschließlich eines Compilers.  Während aber Cygwin eine Adaptierung
des Posix-APIs auf Win32 ist, sodass man viele Posix-Applikationen 1:1
compilieren kann (die Emulation erfolgt dann unterhalb, ähnlich
wie Wine in der umgekehrten Richtung), arbeitet der GCC von MinGW
rein auf dem Win32-API.  Im Ergebnis entsteht daher eine reine
Win32-Anwendung.

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.