Crosscompiler für Windows
Aus Lowlevel
Im Folgenden werde ich (Jidder) erklären wie man LOST unter Windows kompiliert.
Inhaltsverzeichnis |
Benötigte Werkzeuge
Die Anforderungen von LOST sind relativ gering und auf allen unterstützten Plattformen gleich:
- Eine POSIX-Umgebung (wir brauchen unter anderem Bash, sed und make)
- NASM
- GCC
MinGW-basierte Umgebung
MinGW ist ein Port des GCC nach Windows. Der mitgelieferte Compiler von MinGW kann keine ELF-Dateien erzeugen und ist deswegen nicht geeignet, um LOST zu kompilieren. Darum muss ein Cross-Compiler benutzt werden.
Einen Cross-Compiler, den ich selbst aus den ungeänderten Sourcen für mein eigenes Frickel-OS namens IncOS kompiliert habe, gibt es unter [1]. Darin enthalten ist der GCC 4.2.0 mit dem Target ELF und die Binutils 2.17. Außerdem benötigen wir die POSIX-Umgebung für MinGW MSYS (aktuelle Version: MSYS-1.0.10.exe) und NASM (aktuelle Version: nasm-0.98.39-win32.zip).
Wenn ihr die drei Dateien runtergeladen habt, erstellt ein Verzeichnis namens C:\lostdev. (Wer seine Werkzeuge wo anders platzieren möchte, kann das natürlich auch tun. Im folgenden werde ich dennoch von diesem Pfad ausgehen.) Startet den Setup von MSYS und klickt euch bis zur Angabe des Pfads durch. Gebt da C:\lostdev\msys an. Dann weiter bis zum Ende durchklicken. Wenn eine Eingabeaufforderung auftaucht, die etwas von "This is a post install process" erzählt, brecht das durch die Eingabe von "n" ab.
Entpacke danach NASM in das Verzeichnis C:\lostdev\nasm. Achte dabei darauf, dass die Datei nasmw.exe direkt in dem Verzeichnis C:\lostdev\nasm liegt und nicht in irgendwelchen Unterverzeichnissen. Benenne außerdem die Datei nasmw.exe in nasm.exe um, damit NASM von dem build-Skript erkannt wird.
Entpacke dann die Datei incoscc-with-cpp-and-with-without-i18n.rar in dem lostdev Verzeichnis, so dass z.B. in c:\lostdev\bin die Datei i586-elf-addr2line.exe liegt.
Damit der Compiler und der Assembler auch gefunden werden, muss die PATH-Variable entsprechend geändert werden. Ich bevorzuge für jede Compilerumgebung auf meinem Computer eine Batch-Datei, die die Umgebung einrichtet. Für LOST sieht sie so aus:
set path=C:\lostdev\msys\bin;C:\lostdev\lostcc\i586-elf\bin;C:\lostdev\nasm;%path% cmd /k cls
Diese Datei kopiere ich mir in das Wurzelverzeichnis des Quelltextbaums von LOST und starte sie. Durch die Eingabe von make sollte dann LOST vollständig kompilieren.
Wer lieber den Compiler tiefer in das System verankern will, kann die Pfade in die globale PATH-Variable schreiben. Diese Pfade sind dann überall verfügbar und können unter Umständen Konflikte mit anderen Compilern und Umgebungen verursachen. Unter Windows geht das in der Systemsteuerung (klassische Ansicht) -> System -> Erweitert -> Umgebungsvariablen und dort eine PATH-Variable editieren.
Cygwin
(todo)
Erstellung eines eigenen Cross Compilers
Wer nicht meinen Cross Compiler nutzen möchte, kann sich selbst einen bauen. Weil das zur Zeit den Rahmen dieses Artikels sprengen würde, verweise ich auf die Anleitung im OS-FAQ Wiki auf Mega-Tokyo. Mein Cross Compiler ist auch in etwa nach dieser Anleitung entstanden.
Probleme
gcc.exe: _spawnvp: No such file or directory und CreateProcess: No such file or directory
Die genaue Ursache kenne ich auch nicht, aber es könnte helfen, die Datei libexec\gcc\i586-elf\4.2.0\cc1.exe nach i586-elf\bin zu kopieren.
