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
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.
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
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.
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.
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
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.