Difference between revisions of "Cross compiling/hu"

From Free Pascal wiki
Jump to navigationJump to search
Line 111: Line 111:
 
...<!--* Cross binutils
 
...<!--* Cross binutils
  
First check if you already have the files powerpc-darwin-ld and powerpc-darwin-as:
+
Először ellenőrizni kell, hogy megvannak-e a powerpc-darwin-ld és a powerpc-darwin-as fájlok:
  
 
   $ which powerpc-darwin-ld
 
   $ which powerpc-darwin-ld
 
   $ which powerpc-darwin-as
 
   $ which powerpc-darwin-as
  
If you have these files skip the creation of the symlinks and go to the "Compile FPC" heading.
+
Ha megvannak, hagyd ki a szimbolikus linkek (symlinks) létrehozását és folytasd "Az FPC fordítása" címsortól.
  
Actually, the "normal" binutils can be used, since they are universal. Therefore, simple symlinks are enough:
+
Jelenleg a "normál" binutils programok használhatók, mivel ezek univerzálisak. Ezért egyszerű szimbolikus linkek (symlinks) elegendők:
  
 
   $ sudo ln -s /usr/bin/as /usr/bin/powerpc-darwin-as
 
   $ sudo ln -s /usr/bin/as /usr/bin/powerpc-darwin-as
 
   $ sudo ln -s /usr/bin/ld /usr/bin/powerpc-darwin-ld
 
   $ sudo ln -s /usr/bin/ld /usr/bin/powerpc-darwin-ld
  
The symlinks can be in any other directory, as long as it is in your $PATH (for example /sw/bin when installing through fink).
+
A szimbolikus linkek bármelyik könyvtárban lehetnek, amíg a hely a $PATH-ban fel van sorolva.
  
* Compile FPC:
+
* Az FPC fordítása:
  
 
   $ cd fpc/compiler
 
   $ cd fpc/compiler

Revision as of 14:00, 5 June 2009

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

Előszó

Ez egy rövid bevezető kezdőknek. A következőkben leírjuk hogyan állítsd be a rendszert keresztfordításhoz, ami azt jelenti, hogy futtatható állományokat hozhatsz létre más rendszerekhez mint amin a fordítást végzed - pl. Linux rendszeren dolgozva készíthetsz Win32 alkalmazásokat (és ugyanígy FreeBSD, Darwin, stb.). A rendszert melyen a fordítást végzed általában "gazdarendszer"-nek (fentebb ez a Linux) és azt a rendszert melyen a létrehozott binárist futtatni akarod majd "célrendszer"-nek nevezzük. A FreePascal egy fordító és forráskódból gépi kódodú bináris állományokat készít. Ez a bináris tartalmaz információkat arról is hogy az operációs rendszer milyen módon kezelje az állományt. Ezen kívül a binárisban hivatkozások vannak az operációs rendszeren alkalmazható műveletekre (API), ezért van különbség a Run-Time Library különböző operációs rendszerekhez szükséges változatai között. Mindezek miatt a készített bináris állományok rendszerfüggők. Maga a FreePascal nem igényel sok beállítást. Képes binárisokat készíteni sok rendszerhez, csak kérd meg rá.

Gazda- és célrendszer ugyanolyan CPU-n

Az FPC úgy lett kialakítva hogy a fordító képes gépi kódot előállítani bizonyos CPU-khoz (a különböző CPU-k különböző gépi kódot igényelnek) és ismeri az adott CPU-n támogatott operációs rendszerek egyedi követelményeit. Ez azt jelenti, hogy keresztfordítást végezhetsz ugyanazzal a fordítóval (egyszerű kódfordításra használva) amíg kitartasz ugyanazon CPU mellett.

Gazda és célrendszer eltérő CPU-n

Ha más típusú CPU számára kell binárist készíteni, akkor speciális keresztfordítóra van szükség, olyanra amely a gazdarendszeren fut, de képes a más típusú CPU gépi kódját létrehozni (az FPC esetében egy ilyen keresztfordítónak ismételten tudnia kell megcélozni az összes támogatott rendszert a cél CPU-n). Ez a keresztfordító általában ugyanabban a könyvtárban tárolható ahol az eredeti fordító is van. Ilyen keresztfordítót készíthetsz magad is, vagy használhatod a néhány rendszerhez előre elkészített és az FPC csapat által közvetlenül terjesztett változatokat is (általában hordozható eszközökön futó rendszerek ezek melyek többnyire nincsenek gazdarendszerként használva). Az FPC ezután képes kiválasztani a megfelelő fordítót (az eredetit vagy a keresztfordítót) a -P paraméterrel megadott cél CPU-hoz.

Assembler és linker

A fordító csak egy rész. Szükségünk van még assemblerre és a linkerre is. Az FPC rendelkezik beépített assemblerrel és/vagy linkerrel néhány rendszerhez, más rendszereken külső eszközökre van szüksége. Ezek az eszközök általában nem képesek binárisokat létrehozni eltérő rendszerek számára. Ezért van, hogy speciális linkert 'ld' és assemblert 'as' használunk minden célrendszeren. Ezeket nevezzük binutils-nak.

Unit-ok a célrendszerhez

Miután létrehoztuk (vagy megszereztük/telepítettük) a keresztfordító eszközöket, szükség lesz még az FPC RTL és további unitokra a választott célrendszerre lefordítva. Például minden célrendszerhez eltérő system.ppu (System unit) fájlra van szükség, stb. Ezek a unitok létrehozhatók akár a célrendszerre fordításhoz beállított fordítóval, vagy esetleg használhatod a hivatalosan terjesztett unitokat, amelyek pontosan megegyező FPC változattal készültek illetve lettek kiadva (ha elérhető a gazdarendszeren használható formátumban).

Konfiguráció

Miután az fpc config fájl beállítása megtörtént, a keresztfordítás könnyűvé válik, elfeledkezhetsz az unalmas részletekről. Ugyanezt kell tenni az LCL (lazarus component lybrary) esetén is (ha Lazarus-t használsz). Ezután már fordíthatod is a pascal programokat az eltérő célrendszerre. Az elkészült binárisok átmásolhatok egy olyan gépre amin a célrendszer fut vagy futtathatók emulátorban (pld.: Wine - Win32 binárisok futtatására Linux rendszeren, stb.).

Alap műveletek

Van néhány általános művelet a keresztfordításban amit minden esetben el kell végezned:

  1. Szükség van a FreePascal fordítóra ahhoz a rendszerhez amelyen a fordítást el akarod végezni.
  2. Szükség van a FreePascal forráskódjára (kivéve akkor ha valaki már elkészített mindent).
  3. Szükség van olyan binutils programokra, melyek a gazdarendszeren futtathatók és a célrendszeren futtatható binárist hoznak létre. Ezeket vagy lefordítod forráskódból vagy megszerzed.
  4. Néha szükség lesz fájlokra a célrendszerből amelyre fordítasz.

Linux rendszeren

Linux rendszerre

A következő szöveg a linux(x86_64) rendszerről linux(i386) rendszerre történő keresztfordítást írja le. Információk az ARM processzoron futó linux-okra (pl. Zaurus) fordításról a Setup Cross Compile For ARM részben találhatók. ...

  • Először ellenőrizni kell hogy rendelkezel-e az i386-linux-ld és i386-linux-as fájlokkal:
 bash $ which i386-linux-ld
 bash $ which i386-linux-as

Ha megvannak ezek a fájlok akkor "Az FPC fordítása" címsorral folytasd.

Nekem nem voltak meg, ezért írtam néhány szkriptet:

#!/bin/bash
# ez a fájl legyen a /usr/bin/i386-linux-ld
ld -A elf32-i386 $@
#!/bin/bash
# ez a fájl legyen a /usr/bin/i386-linux-as
as --32 $@
  • Futtathatóvá kell őket tenni:
bash $ chmod +x /usr/bin/i386-linux-as
bash $ chmod +x /usr/bin/i386-linux-ld
  • Az FPC fordítása:
bash $ make all CPU_TARGET=i386

ez után:

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

Ennyi. Szerkeszd az /etc/fpc.cfg fájlt az igényeid szerint.

Windows rendszerre

A Lazarus-szal történő keresztfordításról információkat a következő helyen találsz: Cross_compiling_for_Win32_under_Linux

Ha a 2.1.1 vagy újabb változatú FPC-t hazsnálsz akkor csak kettő parancsot kell futtatni:

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

Figyelem: a win64 rendszerre fordításhoz az első parancs:

bash $ make all OS_TARGET=win64 CPU_TARGET=x86_64

Az egyszerűség oka, hogy a linker be van építve az FPC ezen változatába.

Darwin vagy Mac OS X rendszerre

  • Először szükséged van a binutils programokra amelyek bináris kódot tudnak készíteni a rendszerhez amelyre fordítani akarsz. Töltsd le az odcctools csomagot (használd a cvs változatot) és kövesd a telepítési utasításokat: http://www.opendarwin.org/projects/odcctools/ (tükör: http://www.opendarwin.info/opendarwin.org/en/projects/odcctools/)
  • Létre kell hoznod egy (hamis) gyökérkönyvtárat $HOME/darwinroot néven. Másold át a következő könyvtárakat az Apple vagy Darwin rendszerről a $HOME/darwinroot könyvtárba: /System /Frameworks /usr (továbbiakat is átmásolhatsz).
  • A $HOME/darwinroot könyvtárban hozz létre egy alkönyvtárat cross néven. A könyvtárban ahová az odcctools programokat telepítetted hivatkozásokat kell készítened, az FPC-vel való jobb együttműködésért. Van néhány program a odcctools csomagban powerpc-apple-darwin-* néven amelyekhez linkeket kell készítened (vagy átnevezned őket) a következőképpen: powerpc-apple-darwin-ld legyen powerpc-darwin-ld, ugyanígy a *-ar és *-as esetében is.
  • most készen állsz az FPC keresztfordítására. Természetesen szükséged van az FPC forráskódjára és a terminálnak nyitva kell lennie ott.

írd be:

$PATH=$PATH:$HOME/darwinroot/cross (vagy ahol a szimbolikus linkektalálhatók)

írd be (iirc):

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

ha ez sikerült, telepítheted ahová akarod a következővel:

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

most másold a ./compiler/ppccross fájlt valahová ahol biztosan megtalálod majd, ez a fordító amire szükséged lesz powerpc programok fordításához.

  • szerkeszd az /etc/fpc.cfg fájlt.

írj bele egy ehhez hasonló részt:

#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

amikor keresztfordítani akarsz a ppccross-nak és a linkeknek (symlinks) melyek a powerpc-darwin-* fájlokra mutatnak a PATH-ban kell lenniük ezután már egy egyszerű parancssal (ppccross someprogie.pas) létrehozható a darwin bináris fájl.

Lehet, hogy rosszul írtam le valamit (vagy mindent) mert már régen csináltam ilyet.

Windows rendszeren

Linux rendszerre

Marco vd Voort írt a témáról crossnotes címmel feljegyzést (angolul). Ha valakinek van ideje hozzáadhatja a wiki oldalhoz.

GO32v2 rendszerre

A részletes információk megtalálhatók a Cross-compilation from Win32 to GO32v2 részben.

Darwin (Mac OS X) i386 rendszeren

i386-ról powerpc-re

...

Keresztfordítás GYIK (faq)

Mire jó a keresztfordítás?

Így fejleszthetsz programokat egy OS/CPU-n és lefordíthatod egy másik OS/CPU-ra a számítógép újraindítása vagy másik számítógép használata nélkül.

Miért Unix-ról Windws-ra és nem a másik irányba?

A legfőbb ok az, hogy Unix binárisok létrehozása más rendszereken (másik Unix vagy akár Linux is) jóval bonyolultabb.

Az alapvető problémák:

  1. Szükséged van függvénytárakra (library-ik) a gazdarendszeren (amelyen a keresztfordítást el akarod végezni)
  2. Nincs ilyen egységes gyűjtemény függvénytárakból (library) a nagyon összetett és dinamikus Unix verziókezelés eredményeként.
  3. Rengeteg (linker) paraméterezés és finomhangolás elvégzésére van szükség, amiket a legtöbb esetben nagyon nehéz elmagyarázni.

Ha a figyelmeztetések ellenére mégis kitartasz, olvasd el a crossnotes című feljegyzést, amely fentebb van megemlítve vagy a buildfaq fejezetet.

Több információt szeretnék a FreePascal építéséről. Hol találok?

GYIK (faq) az FPC építéséről és beállításáról: pdf változat (angol nyelvű) vagy html változat (gyengébb minőség, ritkábban frissítve, angol nyelvű).