Tutorial
FreeBasic aus dem SVN Quellcode kompilieren
von St_W | Seite 1 von 1 |
Wichtiger Hinweis vorab!
Die Informationen in diesem Tutorial beziehen sich vor allem auf ältere Versionen von FreeBASIC. Geschrieben wurde dieser Artikel hier, als FreeBASIC noch im SVN-Repository verwaltet wurde. Sie finden hier ein neueres Tutorial, das den aktuellen Stand in Sachen FB und Git widerspiegelt.
(Altes) Tutorial
Ich möchte Euch in diesem Tutorial erklären, wie man den FreeBasic Compiler aus dem aktuellen SVN Quellcode für die Windows Plattform erstellt (Linux und DOS folgen möglicherweise später).
Einleitung
Normalerweise muss man den Compiler nicht selbst kompilieren, sondern verwendet die bereitgestellte stabile Version. Dennoch ist es für fortgeschrittene Programmierer interessant, einen Blick unter die Haube des Compilers zu werfen. Weiters sind in der SVN Version im Gegensatz zur stabilen Version oft neue Funktionen enthalten, die aber eventuell noch nicht immer richtig funktionieren müssen. Es wird auch hier und da vorkommen, dass die SVN Version fehlerhaft ist und sich gerade nicht kompilieren lässt - es handelt sich eben um den aktuellen Entwicklungsstand des Compilers.
Ich möchte mit einer "Zutatenliste" beginnen. Folgendes wird grundsätzlich benötigt:
- FreeBasic Quellcode
- FreeBasic Compiler (der Compiler ist in FreeBasic geschrieben; mithin wird die Vorgängerversion zum kompilieren benötigt)
- ein C Compiler (einige Teile von FreeBasic sind in C geschrieben, näheres weiter unten)
Ich setze Folgendes voraus:
- Microsoft Windows + Internetzugang
- Software zum Entpacken von ZIP-Archiven
- Fortgeschrittene PC-Kenntnisse und etwas Hausverstand ;-)
Ich arbeite unter einem neu installierten Microsoft Windows XP Media Center Edition mit Service Pack 3, es sollten aber auch andere Windows Versionen funktionieren (Windows 2000 und höher auf jeden Fall). Alle weiteren verwendeten Programme werden im folgenden erwähnt. Ich verwende Versionen, die möglicherweise bald schon wieder veraltet sind. Ihr sollt natürlich die jeweils aktuelle Version herunterladen und verwenden.
Ich habe alle in diesem Artikel besprochenen Vorgehensweisen selbst auf dem Testsystem mit Erfolg getestet, dennoch kann ich natürlich nicht garantieren dass diese Vorgehensweise auch in Zukunft immer klappt.
Wenn eventuelle Fragen nach dem Lesen des Artikels oder Fragen zur Anwendung des Beschriebenen auftreten, bin ich unter dem Kürzel "St_W" im offiziellen FreeBasic Forum, im deutschen FreeBasic Forum und in den beiden FreeBasic IRC Channels auf FreeNode auffindbar.
1. Einrichtung der benötigten Programme
1.1 Herunterladen der benötigten Dateien
Unter Windows wird der MinGW im Verbindgung mit MSYS eingesetzt.
Die Software gibt es unter folgender Adresse zum Herunterladen: http://sourceforge.net/projects/mingw/files/
MinGW und MSYS kann man durch viele kleine Pakete individuell zusammenstellen, welche man alle einzeln herunterladen könnte. Ich empfehle aber nur den aktuellen Installer von MingGW und MSYS herunterzuladen, welcher automatisch die gewünschten Pakete herunterlädt.
Von der obigen Seite benötigt ihr also aus dem Ordner "MSYS Base System" die aktuelle Version von MSYS (zu meinem Zeitpunkt im Unterordner "msys-1.0.11" die Datei "MSYS-1.0.11.exe") und aus dem Ordner "Automated MinGW Installer" die aktuelle Version des MinGW Installers (zu meinem Zeitpunkt im Unterordner "MinGW 5.1.6" die Datei "MinGW-5.1.6.exe").
1.2 Installation und Einrichtung vom Compiler MinGW
Zuerst muss der MinGW Compiler installiert werden. Während der Installation wird eine Internetverbindung benötigt, da die verwendeten Pakete während der Installation heruntergeladen werden (in den Ordner, in dem sich die Installationsdatei befindet). Bei der Installation von MinGW muss zusätzlich zu den "MinGW Base Tools" "MinGW Make" ausgewählt werden (siehe Abbildung 01). Weiters empfehle ich stark den Standard-Installationsordner "C:\MinGW" nicht zu ändern, da alle folgenden Erklärungen von einer Installation in diesem Ordner ausgehen.
Zum Kompilieren der gfxlib wird weiters ein MinGW Paket benötigt, dass nicht vom Installer unterstützt wird. Das ZIP-Archiv kann man unter folgender Adresse herunterladen: http://www.streetcds.co.uk/dx/dx80_mgw.zip
Das ZIP-Archiv muss nach dem Herunterladen in den Ordner "C:\MinGW" entpackt werden.
1.3 Installation und Einrichtung von MSYS
Als nächstes wird MSYS installiert und eingerichtet. Ich empfehle wiederum den Standard-Installationsordner "C:\msys\1.0" beizubehalten. Am Ende der Installation startet sich ein Konfigurationsprogramm, in welchem zweimal mit "y" bestätigt und dann den Pfad zu MinGW "C:/MinGW" (man beachte den normalen Schrägstrich) eingibt (siehe Abbildung 02)
1.4 Konfiguration des FreeBasic Compilers
Da der FreeBasic Compiler in der Programmiersprache FreeBasic geschrieben ist, wird die aktuellste Compilerversion zum erstellen der neuen Compilerversion benötigt. Dass sich ein Compiler sozusagen selbst kompiliert mag möglicherweise im ersten Augenblick etwas seltsam klingen, in der Praxis kommt es aber nicht selten vor, dass Compiler in ihrerer eigenen Programmiersprache geschrieben sind.
Wenn sich noch keine aktuelle Version des FreeBasic Compilers auf Eurem PC befindet, dann ladet eine herunter und installiert diese. Den aktuellen Compiler findet ihr auf folgender Seite im Unterordner "Binaries - Windows" zum Download: http://sourceforge.net/projects/fbc/files/
Die zu meinem Zeitpunkt aktuelle Version 0.20.0b kann direkt mit folgendem Link heruntergeladen werden: FreeBASIC-v0.20.0b-win32.exe
Damit MSYS den Compiler verwenden kann kopieren wir diesen in den MSYS Ordner und tragen den Pfad in die "PATH" Umgebungsvariable ein. Dazu geben wir in der MSYS Konsole (Auf dem Desktop oder im Startmenü sollte sich eine Verknüpfung zum Start von MSYS befinden) die folgenden Befehle ein:
mkdir /FBbin
cp -rvp "/c/Programme/FreeBASIC"/* /FBbin
Wenn ihr etwas Linux Grundwissen habt sollte euch die Bedeutung der Befehle klar sein, trotzdem erkläre ich kurz was dabei passiert. Mit dem ersten Befehl wird der Unterordner "FBbin" im MSYS Hauptordner erstellt (zu finden unter "C:\msys\1.0"). Der zweite Befehl kopiert alle Dateien von C:\Programme\FreeBasic rekursiv in den eben erstellten Ordner. Wenn ihr den FreeBasic Compiler in einem anderen Ordner installiert habt, müsst ihr den Pfad natürlich demensprechend ändern ("cp -rvp "/d/Programmierung/FreeBasic Compiler"/* /FBbin" würde es z.B. lauten, wenn der Compiler unter "D:\Programmierung\FreeBasic Compiler installiert ist). Anstatt FreeBasic mit dem Konsolenbefehl nach "C:\msys\1.0\FBbin" zu kopieren kann man ebenso den Explorer verwenden.
Wie bereits oben gesagt müssen wir noch den Compilerpfad zur Umgebungsvariable "PATH" hinzufügen. Diese enthält normalerweise mehrere (kann aber genausogut keinen oder einen) mit Doppelpunkt getrennte Pfadangaben, die angeben, in welchen Ordnern MSYS nach ausführbaren Dateien sucht. Folgender Befehl schreibt "export PATH="$PATH:/FBbin"" ans Ende der Datei "/etc/profile" (Ebenso kann man stattdessen diese Datei mit einem Texteditor öffnen und die Zeile hinzufügen):
echo 'export PATH="$PATH:/FBbin"' >> /etc/profile
Diese Datei wird bei jedem Start von MSYS abgearbeitet. Damit die Änderungen in Kraft treten muss man also MSYS neu starten.
2. Herunterladen des FreeBasic Quellcodes
Der Quellcode von FreeBasic ist für jeden frei (ohne Anmeldung, Kosten) verfügbar und wird mit dem Versionsverwaltungssystem SVN verwaltet.
Für alle, die sich unter SVN nichts vorstellen können eine kurze Erklärung: SVN ist wie schon oberhalb erwähnt ein Versionsverwaltungssystem und ermöglicht das zeitgleiche Bearbeiten des Quellcodes von mehreren Entwicklern. Wie der Name schon sagt, kann man damit verschiedene Softwareversionen verwalten. Jede Änderung wird mitprotokolliert und man kann diese jederzeit rückgängig machen. Die Ordnerstruktur, in welchen sich die unterschiedlichen Quellcodeversionen befinden, sind auf oberster Ebene in "trunk", "tags" und "branches" unterteilt. Im "trunk" befindet sich die aktuelle (Haupt-)Entwicklungsversion, im "tags" Ordner werden verschiedene Versionen festgehalten (üblicherweise befinden sich hier die Quellcodes der veröffentlichten stabilen Versionen) und im "branches" Ordner befinden sich Parallelentwicklungen, die noch nicht in den Quellcode der Software aufgenommen wurden.
Wir benötigen in unserem Fall nur den "trunk"-Ordner, denn darin befindet sich der aktuelle Quellcode.
Um den Quellcode vom SVN-System herunterzuladen benötigt man einen SVN-Client. Ich stelle im folgenden zwei Varianten vor - eine zum Download per Konsolenbefehl und die andere zum Download mit Grafischer Oberfläche. Auch wenn ihr nur eine der zwei Möglichkeiten zum Herunterladen verwendet, empfehle ich trotzdem beide Programme einzurichten.
2.1 Herunterladen mittels grafischer Oberfläche - TortoiseSVN
Ich empfehle für Windows den Client "Tortoise SVN", den man unter folgender Adresse herunterladen kann: http://tortoisesvn.net/downloads
Auf dieser Seite findet man sowohl eine 32-Bit als auch eine 64-Bit Version. Ich habe außerdem noch das Deutsche Sprachpaket heruntergeladen, dass etwas weiter unten auf der selben Seite zu finden ist.
Nach der Installation (mit Standardeinstellungen; der Installationsordner kann beliebig gewählt werden) von Tortoise SVN und optional dem Sprachpaket, die hoffentlich kein Problem darstellen sollte, können wir nun den Quellcode herunterladen. Um bei installiertem Sprachpaket die Sprache auf Deutsch umzustellen reicht ein Rechtsklick im Explorer um im neuen Menü "Tortoise SVN" die Einstellungen ("Settings") zu öffnen, dort als Sprache ("Language") Deutsch auszuwählen und zu bestätigen. Ich verwende im folgenden TortoiseSVN 1.5.8.15348 mit den deutschsprachigen Bezeichnungen.
Um den Quellcode herunterzuladen reicht wieder ein Rechtsklick im Explorer auf einen freien Bereich --> "SVN Auschecken...". Im erscheinenden Dialog als "URL des Projektarchivs" "https://fbc.svn.sourceforge.net/svnroot/fbc/trunk/FreeBASIC" und als "Zielordner" "C:\msys\1.0\home\[Benutzername]\fbcsvn\FreeBASIC" angeben, wobei "[Benutzername]" durch den Windows-Benutzernamen zu ersetzen ist (siehe Abbildung 3). Der Ordner mit dem Benutzernamen sollte aber ohnehin schon existieren, nur die beiden Unterordner "fbcsvn\FreeBASIC" sind neu. Die restlichen Einstellungen des Dialogs kann man bei den Standardeinstellungen belassen, um dann mit "OK" das Herunterladen zu beginnen.
2.2 Herunterladen mittels Konsolenbefehl
Die Kommandozeilenversion von Subversion (SVN) kann man unter folgender Adresse herunterladen: http://subversion.tigris.org
Benötigt wird nicht der Installer, sondern das aktuelle win32 ZIP-Paket (zu meinem Zeitpunkt "svn-win32-1.5.6.zip"), welches dann entpackt werden muss.
Ich empfehle den Ordner in "svn" umbennen und diesen nach "C:\msys\1.0" zu verschieben, sodass sich unter "C:\msys\1.0\svn\bin" die "svn.exe" befindet. Damit MSYS die Datei findet muss der Pfad wieder zur PATH Umgebungsvariable hinzugefügt werden. Dazu einfach folgendes in der MSYS Konsole eingeben:
echo. && echo 'export PATH="$PATH:/svn/bin"' >> /etc/profile
Wenn SVN bereits in einem anderen Ordner installiert wurde oder meine Empfehlung nicht gefällt, muss nur der Pfad "/svn/bin" entsprechend angepasst werden, sodass er auf "svn.exe" verweist.
Anschließend die folgenden Befehle eingeben, um den Ordner "fbcsvn" zu erstellen, in diesen zu wechseln und den Quellcode herunterzuladen:
mkdir ~/fbcsvn
cd ~/fbcsvn
svn co https://fbc.svn.sourceforge.net/svnroot/fbc/trunk/FreeBASIC FreeBASIC
Beim letzten Befehl sieht man normalerweise eine Zeit lang am Anfang kein Reaktionszeichen, außer dass der Ordner "FreeBASIC" unter "~/fbcsvn" (entspricht: "C:\msys\1.0\home\[Benutzername]\fbcsvn") erstellt wurde, später werden die heruntergeladenen Dateien aufgelistet. Dieser Vorgang kann je nach Internetverbindung eine Zeit lang dauern.
3. Kompilieren von FreeBASIC
Da sich nun alle benötigten Programme eingerichtet sind und sich der FreeBasic Quellcode unter "~/fbcsvn/FreeBASIC/src" (entspricht: "C:\msys\1.0\home\[Benutzername]\fbcsvn\FreeBASIC\src") finden lässt kann nun mit dem kompilieren begonnen werden.
Das Programmierpaket FreeBasic besteht eigentlich aus drei Komponenten:
- fbc: Der FreeBasic Compiler selbst
- rtlib: Die Laufzeitbibliothek für FreeBasic, die alle internen Funktionen (außer Grafikfunktionen) von FreeBasic enthält (z.B. PRINT, TRIM, ...)
- gfxlib: Die Grafikbibliothek von FreeBasic, die alle internen Grafikbefehle enthält (z.B. SCREEN, LINE, ...)
Nur der FreeBasic Compiler ist in FreeBasic geschrieben, die beiden Bibliotheken sind in C geschrieben. In der Reihenfolge wird zuerst die rtlib, dann die gfxlib und zum Schluss der Compiler kompiliert.
3.1 Kompilieren der rtlib
cd ~/fbcsvn/FreeBASIC/src/rtlib/obj/win32
../../configure
make CFLAGS=-O2 && make CFLAGS=-O2 MULTITHREADED=1
Die obigen Befehle sind (so wie die folgenden) im MSYS Terminal einzugeben. Zuerst wird dabei ins Verzeichnis der rtlib gewechselt, dort das configure Skript aufgerufen und anschließend zwei Versionen der rtlib kompiliert (Standard und Threadsafe). Auch auf neueren Computern dauert dies eine Zeit lang.
Tipp zur Eingabe: Mit der Tabulator-Taste wird die automatische Vervollständigung aufgerufen. Da bei der Eingabe von "cd ~/f" die gewünschte Eingabe schon voraussehbar ist (es gibt nur eine(n) Datei/Ordner mit Anfangsbuchstabe "f") wird z.B. beim Drücken der Tabulatortaste automatisch zu "cd ~/fbcsvn" vervollständigt.
3.2 Kompilieren der gfxlib
cd ~/fbcsvn/FreeBASIC/src/gfxlib2/obj/win32
../../configure
make CFLAGS=-O2
Anmerkung (2. Jänner 2010): Schon seit Revision 5096 (August 2008) gibt es ein Problem mit dem configure Skript der gfxlib, weshalb die oberhalb angegebene Vorgehensweise nicht funktioniert. Weiteres dazu und einen Lösungsweg findet man am Ende meines Artikels.
Ergänzung (4. Jänner 2010): Seit Revision 5275 (Jänner 2010) ist das Problem behoben und das oberhalb angegebene Verfahren funktioniert wieder.
3.3 Kompilieren des fbc
Vor dem Kompilieren ist es möglicherweise nötig die Header-Dateien zu aktualisieren. Dies ist mit folgendem Befehl schnell erledigt:
cp -prfv ~/fbcsvn/FreeBASIC/inc/* /FBbin/inc
Zum endgültigen Kompilieren nun folgende Befehlen eingeben:
cd ~/fbcsvn/FreeBASIC/src/compiler/obj/win32
../../configure --enable-standalone --enable-crosscomp-cygwin --enable-crosscomp-dos
make FB_BFD=1 BFD_VER=217
Wenn alles funktioniert hat sollte sich nun im Ordner "C:\msys\1.0\home\[Benutzername]\fbcsvn\FreeBASIC\src\compiler\obj\win32" die neue "fbc_new.exe" befinden.
4. Erneuern der FreeBasic Installation
Nachdem FreeBasic und alle erforderlichen Komponenten nun erfolgreich neu erstellt wurden müssen diese im Installationsordner von MSYS übernommen werden, damit auch folgende FreeBasic Versionen wieder mit dem neuesten Compiler kompiliert werden.
Um die alten FreeBasic Software und Bibliotheken mit den neu erstellte zu ersetzten folgende Befehle eingeben:
cp -pfv ~/fbcsvn/FreeBASIC/src/compiler/obj/win32/fbc_new.exe /FBbin/fbc.exe
cp -pfv ~/fbcsvn/FreeBASIC/src/rtlib/obj/win32/*.a /FBbin/lib/win32
cp -pfv ~/fbcsvn/FreeBASIC/src/rtlib/obj/win32/fbrt0.o /FBbin/lib/win32
cp -pfv ~/fbcsvn/FreeBASIC/src/gfxlib2/obj/win32/*.a /FBbin/lib/win32
Eventuell befinden sich in der SVN Version aktualisierte Importbibliotheken, die mit folgenden Befehlen aktualisiert werden können:
cp -pfv ~/fbcsvn/FreeBASIC/bin/win32/* /FBbin/bin/win32
cp -pfv ~/fbcsvn/FreeBASIC/lib/win32/* /FBbin/lib/win32
Wenn nicht bereits oberhalb beim Kompilieren des fbc getan, können mit folgendem Befehl die Header Dateien aktualisiert werden:
cp -prfv ~/fbcsvn/FreeBASIC/inc/* /FBbin/inc
Hinweis: Die SVN Version enthält normalerweise keine Importbibliotheken, diese müssten erst erstellt werden. Eine Anleitung dazu folgt möglicherweise später.
Anhang I - Anleitung zum Kompilieren der gfxlib ab Revision 5096 bis Revision 5275
Da wie bereits oben im Artikel erwähnt das configure Skript seit SVN Revision 5096 fehlerhaft ist, muss man derzeit eine alte Version von "config.h" verwenden, um die gfxlib zu kompilieren.
Dazu wechselt man im Explorer in den Ordner "C:\msys\1.0\home\[Benutzername]\fbcsvn\FreeBASIC\src\gfxlib2\obj\win32" und ersetzt dort die existierende "config.h" mit folgendem Inhalt: config.h
Anschließend mit "make CFLAGS=-O2" kompilieren.
Anhang II - Erstellen der Importbibliotheken
Alle vom FreeBasic Compiler benötigten GNU-Programme (Assembler, Linker) sind nicht in der SVN Version enthalten, deshalb müssen diese zuerst mit folgendem Befehl vom FreeBasic Installationsordner in den SVN Ordner kopiert werden:
cp -prfv /FBbin/bin/win32/* ~/fbcsvn/FreeBASIC/bin/win32
Nun muss gibt es ein eigenes FreeBasic Programm, dass uns die Importbibliotheken erstellt. Dieses muss zuerst mit den folgenden Befehlen kompiliert werden:
cd ~/fbcsvn/FreeBASIC/lib/win32/def/
fbc genimplibs.bas
Zum Erzeugen der Importbibliotheken genügt nun der Aufruf des eben kompilierten Programmes mit folgendem Befehl:
genimplibs.exe -p win32 -f -a
Dabei werden von allen Bibliotheken, auch von den Optionalen, Importbibliotheken erstellt. Wenn man dies nicht will muss man den Parameter "-a" im obigen Befehl weglassen.
Um die Importbibliotheken der FreeBasic Installation mit den eben erstellten zu aktualisieren ist der folgende, bereits oben im Abschnitt 4 ("Erneuern der FreeBasic Installation") genannte Befehl einzugeben:
cp -pfv ~/fbcsvn/FreeBASIC/lib/win32/* /FBbin/lib/win32
Anhang III - Automatisches Compile-Skript
Damit weitere Compile-Vorgänge nicht mehr ausschließlich manuell durchgeführt werden müssen, habe ich ein kleines Skript geschrieben, welches die in diesem Artikel besprochenen Verfahren der Reihe nach verwendet um die aktuelle SVN-Version herunterzuladen und zu kompilieren.
Dabei wird vorausgesetzt, dass die Konfiguration nach diesem Artikel bereits durchgeführt wurde und die Pfade nicht geändert wurden.
Um das Skript zu verwenden müsst ihr es zuerst herunterladen (FreeBasic Compile Skript) und z.B. als "fb_compile.sh" im MSYS-Home-Verzeichnis speichern ("C:\msys\1.0\home\[Benutzername]\"). Im folgenden gehe ich davon aus, dass die von mir gewählten Dateinamen und Pfade verwendet werden.
Der Aufruf des Skripts erfolgt mit nur einem Befehl (bzw. zwei Befehlen, wenn ein Verzeichniswechsel zuvor nötig ist):
cd ~
./fb_compile.sh all
Mit dem Parameter "all" werden alle Aktionen ausgeführt. Gebt keinen oder den Parameter "--?" an, um alle Möglichen Parameter und Funktionen anzeigen zu lassen.
Schlusswort
Nun kann ich nur noch viel Erfolg bei euren Versuchen wünschen, sodass möglicherweise nach einiger Zeit ein Compiler-Entwickler aus euch wird, denn an solchen mangelt es derzeit kräftig.
Ich hoffe ihr habt / hattet Freude beim Durcharbeiten des Artikels,
Stefan Wurzinger am 02. Jänner 2010
Zusätzliche Informationen und Funktionen | |||||||
---|---|---|---|---|---|---|---|
|