Cross compiling/de

From Lazarus wiki
Revision as of 23:15, 31 March 2007 by Mischi (talk | contribs) (actual translations of Mac OS X)

Deutsch (de) English (en) español (es) français (fr) magyar (hu) português (pt) русский (ru) 中文(中国大陆)‎ (zh_CN) 中文(台灣)‎ (zh_TW)

Vorwort

Dies ist eine kurze Einführung für Neulinge. Die folgenden Abschnitte beschreiben, wie man ein System für cross compile einrichtet, das bedeutet, arbeiten unter Linux und erzeugen von Win32 executables (oder freebsd oder darwin, oder ...). FreePascal ist ein Compiler und konvertiert hauptsächlich Quellcode in binaries (Maschinensprache). Diese binaries enthalten auch Informationen darüber, wie das Betriebssystem das executable startet. Daher sind diese binaries Plattform-spezifisch. FreePascal selbst benötigt nicht viel Installation. Es kann binaries für viele Plattformen erzeugen. Just tell it to do so. Aber der Compiler ist nur ein Teil. Es gibt auch noch den Assembler und den Linker. Und diese Werkzeuge sind nicht in der Lage, cross code zu erzeugen. Daher müssen wir spezielle Linker 'ld' und Assembler 'as' für jede Zielplattform erzeugen. Dies sind die binutils. Nach Erstellung der cross tools, werden alle FPC Pascal Units cross compiled. Zum Beispiel, dann gibt es eine system.ppu Datei für jede Zielplattform. Dann wird ihre FPC Konfigurationsdatei eingerichtet, so daß cross compilation so einfach wird, daß sie alle langweiligen Details vergessen können. Das selbe wird für die LCL getan - die Lazarus Component Library. Und danach können sie cross compile Pascal Programme für Win32. Entweder starten sie sie mit Wine oder sie kopieren sie auf einen Windows Computer und testen sie dort.

Grundsätzliche Schritte

Es gibt einige übliche Schritte, die beteiligt sind in crosscompiling, die sie in jedem Fall tun müssen:

  1. Bereits einen FreePascal Compiler haben für die Plattform, von der sie kompilieren wollen.
  2. Sie müssen den FreePascal Quellcode haben.
  3. You need to either build from source or obtain binaries of the cross-binutils that run on the platform you are on and are designed to build programs for your desired target platform.
  4. Manchmal werden sie einige Dateien benötigen von der Zielplattform, zu der sie kompilieren.

Von Linux

Zu Linux

Zur Klarstellung: Dies ist für die Kompilierung von Linux(x86_64) zu Linux(i386).

Chances are that your 64 bit linux distrubution is already capable of compiling 32 bit programs but due to the way the fpc build process is designed there are a couple of things you might have to do.

  • Zuerst prüfen sie, ob sie bereits die Dateien i386-linux-ld und i386-linux-as haben:
 bash $ which i386-linux-ld
 bash $ which i386-linux-as

Wenn sie diese Dateien haben springen sie zum "Kompilieren" Abschnitt.

Ich hatte diese Dateien nicht und so erstellte ich ein paar Skripte:

#!bin/bash
# name this file /usr/bin/i386-linux-ld
ld --32 $@
#!bin/bash
# name this file /usr/bin/i386-linux-as
as --32 $@
  • Machen sie sie ausführbar:
bash $ chmod +x /usr/bin/i386-linux-as
bash $ chmod +x /usr/bin/i386-linux-ld
  • Kompilieren sie FPC:
bash $ make all CPU_TARGET=i386

dann:

bash $ su -c "make install CPU_TARGET=i386"

Das ist alles. Bearbeiten sie ihre /etc/fpc.cfg Datei falls erforderlich.

Zu Windows

Cross_compiling_for_Win32_under_Linux

If you are compiling the 2.1.1 or greater branch of fpc you can just do:

bash $ make all OS_TARGET=win32 CPU_TARGET=i386

und dann

bash $ su -c "make crossinstall OS_TARGET=win32 CPU_TARGET=i386"

Anmerkung: Um für Win64 zu erstellen lautet das make Kommando: make all OS_TARGET=win64 CPU_TARGET=x86_64

Der Grund für diese Einfachheit ist der in dieser Version von FPC enthaltene interne Linker.

Zu Darwin oder Mac OS X

  • Zuerst benötigen sie die binutils für die Plattform, für die sie kompilieren wollen. Downloaden sie odcctools von dieser Seite (benutzen sie die CVS Version) und folgen ihren Instruktionen für die Installierung. http://www.opendarwin.org/projects/odcctools/
  • Sie müssen ein unechtes root Verzeichnis anlegen wie: $HOME/darwinroot , zumindest die /System und /Frameworks und /usr Verzeichnisse kopieren (möglicherweise müssen sie noch mehr kopieren) von ihrem Apple oder Darwin Computer zu $HOME/darwinroot
  • Nun da sie diese Dateien haben erstellen sie einen Ordner in $HOME/darwinroot genannt cross. Wo immer sie die odcctools installiert haben you need to make links for the cross tools to be more fpc friendly. there are a bunch of files from odcc tools called powerpc-apple-darwin-* you need to make links (or rename them) so powerpc-apple-darwin-ld becomes powerpc-darwin-ld, do the same for *-ar and *-as.
  • Jetzt sind sie bereit to crosscompile fpc. Im Wesentlichen müssen sie die FPC Quelle haben und ein geöffnetes Terminal dort.

tippen sie:

$PATH=$PATH:$HOME/darwinroot/cross (oder wo auch immer you made the symlinks)

tippen sie (iirc):

make all TARGET_OS=darwin TARGET_CPU=powerpc OPT="-Xd -Fl/$HOME/darwinroot/usr/lib"

wenn das gelungen ist, können sie es installieren wo auch immer sie wollen mit:

make install TARGET_OS=darwin TARGET_CPU=powerpc PREFIX=/cross/fpc

Jetzt kopieren sie die Datei ./compiler/ppccross irgendwohin, wo sie sie finden können as it's the compiler you'll need to build powerpc programs

  • Konfigurieren sie ihre /etc/fpc.cfg Datei,

und fügen einen Abschnitt wie diesen hinzu:

#IFDEF powerpc
-Fu/cross/fpc/lib/fpc/$fpcversion/units/$fpctarget/
-Fu/cross/fpc/lib/fpc/$fpcversion/units/$fpctarget/rtl
-Fu/cross/fpc/lib/fpc/$fpcversion/units/$fpctarget/*
-k-systemroot $HOME/darwin/cross
#ENDIF

whenever you want to crosscompile you have to have ppccross and the symlinks to powerpc-darwin-* in the PATH and you should be able to just do ppccross someprogie.pas and it will create a darwin executable.

Ich habe vielleicht einige Dinge unrichtig wiedergegeben (oder fast alles) da es eine Weile her ist since I did this.

Von Windows

Zu Linux

Marco vd Voort schrieb einige crossnotes. Wenn jemand Zeit hat, dann kann er sie diesem Wiki hinzufügen.

Von Darwin (Mac OS X) i386

Von i386 nach PowerPC

  • Cross binutils

Prüfen sie zuerst, ob sie bereits die Dateien powerpc-darwin-ld und powerpc-darwin-as haben:

 $ which powerpc-darwin-ld
 $ which powerpc-darwin-as

Wenn Sie die Dateien haben, überspringen sie Erzeugung der Symlinks und fahren Sie fort bei der Überschrift "FPC übersetzen".

Tatsächlich können Sie die "normalen" Binutils verwenden, weil sie universal Binaries sind. Aus diesem Grund reichen einfache Symlinksaus:

 $ sudo ln -s /usr/bin/as /usr/bin/powerpc-darwin-as
 $ sudo ln -s /usr/bin/ld /usr/bin/powerpc-darwin-ld

Die Symlinks lönnen auch in jedem anderen Ordner sein, so lange der Ordner in ihrem $PATH ist (z. B. /sw/bin wenn man mittels fink installiert).

  • FPC übersetzen:
 $ cd fpc/compiler
 $ make cycle CPU_TARGET=powerpc

Das erzeugt den powerpc Compiler (fpc/compiler/ppcppc) und die Units der rtl.

Um powerpc Binaries zu erzeugen, braucht man keinen Cross-compiler. Powerpc fpc und ppcppc laufen mittels Rosetta problemlos auf IntelMacs.

Benötigt werden weitere Test und Dokumentation für die parallele Installation beider Compiler und ihre Verwendung.

Fehlen Units, überprüfen Sie ihre config Datein, $HOME/.fpc.cfg oder /etc/fpc.cfg oder /sw/etc/fpc.cfg Je nachdem, wo ihre Units abgespeichert wind, kann es sein, dass Sie folgendes ergänzen müssen:

-Fu/usr/local/lib/fpc/lib/fpc/$fpcversion/units/$fpctarget/
-Fu/usr/local/lib/fpc/lib/fpc/$fpcversion/units/$fpctarget/rtl
-Fu/usr/local/lib/fpc/lib/fpc/$fpcversion/units/$fpctarget/*

Erinnerung: Universal Binaries erzeugt man mittels lipo aus den individuellen (i386 und powerpc) Binaries.

Cross compile FAQ

Warum cross compilieren?

Damit können sie ein Programm für ein anderes Betriebssystem/CPU entwickeln. Dieses kann per cross-compiling für ein anderes Betriebssystem oder eine andere CPU ohne Neustart oder Wechsel des Computers kompiliert werden.

Warum Linux zu Windows und nicht in der anderen Richtung?

Der Hauptgrund dafür ist, daß die Erzeugung von Unix binaries auf einer fremden Plattform (ein anderes Unix oder sogar Linux eingeschlossen) komplizierter ist. Statisches Linking ist bereits kompliziert, shared Linking noch um ein vielfaches schwieriger.

Sie würden die verwendeten Bibliotheken der Zielplattformen benötigen (gtk, glib,libc etc), und eine Menge zusätzlicher Konfiguration für ld. (library paths, dynlinker path, usw.)

Für statisches Linking wurde dies bereits teilweise erledigt. Es ist allerdings sehr kompliziert, da es die manuelle Nachbearbeitung der linker Dateien sowie der linker Befehlszeile erfordert. Ein tiefes Verständnis der Funktionsweise von Unix binaries ist dabei absolute Vorraussetzung.

Ich möchte mehr Informationen über die Erstellung von Freepascal. Wo kann ich diese finden?

Eine allgemeine FAQ (englischsprachig) im PDF-Format über die Erstellung und Konfiguration von FPC: http://www.stack.nl/~marcov/buildfaq.pdf.