Sign in Join
Wiki copytemporary

Cross compiling/hu: what changed

Revision 3 to 4. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11# Előszó
22
33Ez 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á.
44
55## Gazda- és célrendszer ugyanolyan CPU-n
66
77Az 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.
88
99## Gazda és célrendszer eltérő CPU-n
1010
1111Ha 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.
1212
1313## Assembler és linker
1414
1515A 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/hu|binutils]]-nak.
1616
1717## Unit-ok a célrendszerhez
1818
1919Miutá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).
2020
2121## Konfiguráció
2222
2323Miutá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.).
2424
2525## Alap műveletek
2626
2727Van néhány általános művelet a keresztfordításban amit minden esetben el kell végezned:
2828
29291. Szükség van a FreePascal fordítóra ahhoz a rendszerhez amelyen a fordítást el akarod végezni.
30302. Szükség van a FreePascal forráskódjára (kivéve akkor ha valaki már elkészített mindent).
31313. 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.
32324. Néha szükség lesz fájlokra a célrendszerből amelyre fordítasz.
3333
3434# Linux rendszeren
3535
3636## Linux rendszerre
3737
3838A 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/hu|Keresztfordítás beállítása ARM rendszerhez]] részben találhatók. A különbség annyi, hogy a 64-bites rendszer képes lesz 32-bites programokat fordítani, de ehhez az FPC fordítási folyamata miatt jó néhány dolgot el kell még végezni.
3939
4040- Először ellenőrizni kell hogy rendelkezel-e az i386-linux-ld és i386-linux-as fájlokkal:
4141
42-` bash $ which i386-linux-ld`
42+```text
43+ bash $ which i386-linux-ld
44+```
4345
44-` bash $ which i386-linux-as`
46+```text
47+ bash $ which i386-linux-as
48+```
4549
4650Ha megvannak ezek a fájlok akkor "Az FPC fordítása" címsorral folytasd.
4751
4852Nekem nem voltak meg, ezért írtam néhány szkriptet:
4953
50-`#!/bin/bash`\
51-`# ez a fájl legyen a /usr/bin/i386-linux-ld`\
52-`ld -A elf32-i386 $@`
54+```text
55+#!/bin/bash
56+# ez a fájl legyen a /usr/bin/i386-linux-ld
57+ld -A elf32-i386 $@
58+```
5359
54-`#!/bin/bash`\
55-`# ez a fájl legyen a /usr/bin/i386-linux-as`\
56-`as --32 $@`
60+```text
61+#!/bin/bash
62+# ez a fájl legyen a /usr/bin/i386-linux-as
63+as --32 $@
64+```
5765
5866- Futtathatóvá kell őket tenni:
5967
60-`bash $ chmod +x /usr/bin/i386-linux-as`\
61-`bash $ chmod +x /usr/bin/i386-linux-ld`
68+```text
69+bash $ chmod +x /usr/bin/i386-linux-as
70+bash $ chmod +x /usr/bin/i386-linux-ld
71+```
6272
6373- Az FPC fordítása:
6474
65-`bash $ make all CPU_TARGET=i386`
75+```text
76+bash $ make all CPU_TARGET=i386
77+```
6678
6779ez után:
6880
69-`bash $ su -c "make install CPU_TARGET=i386"`
81+```text
82+bash $ su -c "make install CPU_TARGET=i386"
83+```
7084
7185Ennyi. Szerkeszd az /etc/fpc.cfg fájlt az igényeid szerint.
7286
7387## Windows rendszerre
7488
7589A Lazarus-szal történő keresztfordításról információkat a [[Cross compiling for Win32 under Linux/hu|Keresztfordítás Windows-ra Linux rendszeren]] című részben találsz.
7690
7791Ha a 2.1.1 vagy újabb változatú FPC-t hazsnálsz akkor csak kettő parancsot kell futtatni:
7892
79-`bash $ make all OS_TARGET=win32 CPU_TARGET=i386`\
80-`bash $ su -c "make crossinstall OS_TARGET=win32 CPU_TARGET=i386"`
93+```text
94+bash $ make all OS_TARGET=win32 CPU_TARGET=i386
95+bash $ su -c "make crossinstall OS_TARGET=win32 CPU_TARGET=i386"
96+```
8197
8298Figyelem: a win64 rendszerre fordításhoz az első parancs:
8399
84-`bash $ make all OS_TARGET=win64 CPU_TARGET=x86_64`
100+```text
101+bash $ make all OS_TARGET=win64 CPU_TARGET=x86_64
102+```
85103
86104Az egyszerűség oka, hogy a linker be van építve az FPC ezen változatába.
87105
88106## Darwin vagy macOS rendszerre
89107
90108- 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/>)
91109- 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).
92110- 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.
93111- 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.
94112
95113írd be:
96114
97-`$PATH=$PATH:$HOME/darwinroot/cross (vagy ahol a szimbolikus linkektalálhatók)`
115+```text
116+$PATH=$PATH:$HOME/darwinroot/cross (vagy ahol a szimbolikus linkektalálhatók)
117+```
98118
99119írd be (iirc):
100120
101-`make all TARGET_OS=darwin TARGET_CPU=powerpc OPT="-Xd -Fl/$HOME/darwinroot/usr/lib"`
121+```text
122+make all TARGET_OS=darwin TARGET_CPU=powerpc OPT="-Xd -Fl/$HOME/darwinroot/usr/lib"
123+```
102124
103125ha ez sikerült, telepítheted ahová akarod a következővel:
104126
105-`make install TARGET_OS=darwin TARGET_CPU=powerpc PREFIX=/cross/fpc`
127+```text
128+make install TARGET_OS=darwin TARGET_CPU=powerpc PREFIX=/cross/fpc
129+```
106130
107131most 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.
108132
109133- szerkeszd az /etc/fpc.cfg fájlt.
110134
111135írj bele egy ehhez hasonló részt:
112136
113-`#IFDEF powerpc`\
114-`-Fu/cross/fpc/lib/fpc/$fpcversion/units/$fpctarget/`\
115-`-Fu/cross/fpc/lib/fpc/$fpcversion/units/$fpctarget/rtl`\
116-`-Fu/cross/fpc/lib/fpc/$fpcversion/units/$fpctarget/*`\
117-`-k-systemroot $HOME/darwin/cross`\
118-`#ENDIF`
137+```text
138+#IFDEF powerpc
139+-Fu/cross/fpc/lib/fpc/$fpcversion/units/$fpctarget/
140+-Fu/cross/fpc/lib/fpc/$fpcversion/units/$fpctarget/rtl
141+-Fu/cross/fpc/lib/fpc/$fpcversion/units/$fpctarget/*
142+-k-systemroot $HOME/darwin/cross
143+#ENDIF
144+```
119145
120146amikor keresztfordítani akarsz a ppccross-nak és a linkeknek (symlinks) melyek a powerpc-darwin-* fájlokra mutatnak a PATH-ban felsorolt helyek egyikében kell lenniük ezután már egy egyszerű parancssal (ppccross someprogie.pas) létrehozható a darwin bináris fájl.
121147
122148Lehet, hogy rosszul írtam le valamit (vagy mindent) mert már régen csináltam ilyet.
123149
124150# Windows rendszeren
125151
126152## Linux rendszerre
127153
128154Információkat a [[buildfaq/hu|buildfaq]] részben találsz erről.
129155
130156## GO32v2 rendszerre
131157
132158A részletes információk megtalálhatók a [[Cross-compilation from Win32 to GO32v2/hu|Keresztfordítás Windows rendszeren GO32v2-re]] című részben.
133159
134160# Darwin (macOS) i386 rendszeren
135161
136162## i386-ról powerpc-re
137163
138164- binutils programok
139165
140166Először ellenőrizni kell, hogy megvannak-e a powerpc-darwin-ld és a powerpc-darwin-as fájlok:
141167
142-` $ which powerpc-darwin-ld`\
143-` $ which powerpc-darwin-as`
168+```text
169+ $ which powerpc-darwin-ld
170+ $ which powerpc-darwin-as
171+```
144172
145173Ha megvannak, hagyd ki a szimbolikus linkek (symlinks) létrehozását és folytasd "Az FPC fordítása" címsortól.
146174
147175Jelenleg a "normál" binutils programok használhatók, mivel ezek univerzálisak. Ezért egyszerű szimbolikus linkek (symlinks) elegendők:
148176
149-` $ sudo ln -s /usr/bin/as /usr/bin/powerpc-darwin-as`\
150-` $ sudo ln -s /usr/bin/ld /usr/bin/powerpc-darwin-ld`
177+```text
178+ $ sudo ln -s /usr/bin/as /usr/bin/powerpc-darwin-as
179+ $ sudo ln -s /usr/bin/ld /usr/bin/powerpc-darwin-ld
180+```
151181
152182A szimbolikus linkek bármelyik könyvtárban lehetnek, amíg a hely a \$PATH-ban fel van sorolva.
153183
154184- Az FPC fordítása:
155185
156-` $ cd fpc/compiler`\
157-` $ make cycle CPU_TARGET=powerpc`
186+```text
187+ $ cd fpc/compiler
188+ $ make cycle CPU_TARGET=powerpc
189+```
158190
159191Ez létrehozza a powerpc fordítót (fpc/compiler/ppcppc) és az RTL unit-okat.
160192
161193Az így létrehozott powerpc binárisok nem igényelnek egyéb keresztfordító eszközt. A powerpc fpc és a ppcppc tökéletesen fut Rosetta-t használó IntelMacs rendszeren.
162194
163195További tesztek és dokumentációk szükségesek párhuzamos telepítésről és használatról.
164196
165197Ha hiányoznak unit-ok, nézd át a konfigurációs fájlt (\$HOME/.fpc.cfg vagy /etc/fpc.cfg vagy /sw/etc/fpc.cfg) Lehet hogy hozzá kell adnot valami ehhez hasonlót (természetesen azokkal a könyvtárnevekkel ahol a te unit-jaid vannak).
166198
167-`-Fu/usr/local/lib/fpc/lib/fpc/$fpcversion/units/$fpctarget/`\
168-`-Fu/usr/local/lib/fpc/lib/fpc/$fpcversion/units/$fpctarget/rtl`\
169-`-Fu/usr/local/lib/fpc/lib/fpc/$fpcversion/units/$fpctarget/*`
199+```text
200+-Fu/usr/local/lib/fpc/lib/fpc/$fpcversion/units/$fpctarget/
201+-Fu/usr/local/lib/fpc/lib/fpc/$fpcversion/units/$fpctarget/rtl
202+-Fu/usr/local/lib/fpc/lib/fpc/$fpcversion/units/$fpctarget/*
203+```
170204
171205Megjegyzés: Az univerzális binárisok a különálló (i386 and powerpc) binárisokból készültek lipo használatával.
172206
173207## Windows és Linux rendszerre (32 bit)
174208
175209A [fink](http://finkproject.org/) csomagkezelő rendelkezik a keresztfordító csomagokkal Windows és Linux célrendszerekhez (32 bit) IntelMacs-on.
176210
177-`$ fink install fpc-win32`
211+```text
212+$ fink install fpc-win32
213+```
178214
179215és
180216
181-`$ fink install fpc-i386-linux`
217+```text
218+$ fink install fpc-i386-linux
219+```
182220
183221parancsokkal telepíthetők a keresztfordítók.
184222
185223A fordításhoz használd ezeket a parancsokat:
186224
187-` fpc -Tlinux FILENAME`\
188-` fpc -Twin32 FILENAME`
225+```text
226+ fpc -Tlinux FILENAME
227+ fpc -Twin32 FILENAME
228+```
189229
190230Currently (fpc 3.0.4), it gives:
191231
192232``` bash
193233fpc-cross-arm-gba
194234fpc-cross-arm-linux
195235fpc-cross-arm-nds
196236fpc-cross-arm-wince
197237fpc-cross-arm-armv4t-embedded
198238fpc-cross-arm-armv7m-embedded
199239fpc-cross-i386-darwin
200240fpc-cross-i386-freebsd
201241fpc-cross-i386-go32v2
202242fpc-cross-i386-linux
203243fpc-cross-i386-nativent
204244fpc-cross-i386-netbsd
205245fpc-cross-i386-solaris
206246fpc-cross-i386-win32
207247fpc-cross-i386-wince
208248fpc-cross-jvm-android
209249fpc-cross-jvm-java
210250fpc-cross-m68k-linux
211251fpc-cross-mipsel-linux
212252fpc-cross-powerpc-linux
213253fpc-cross-sparc-linux
214254fpc-cross-x86-64-dragonfly
215255fpc-cross-x86-64-freebsd
216256fpc-cross-x86-64-linux
217257fpc-cross-x86-64-win64
218258```
219259
220260For other platforms (processors and systems) you have to do the setup by yourself. It is basically the same scheme: First, you need the corresponding binutils (See [[Binutils]]) and second, the crosscompiler and the run time library. Some more details of the building procedure can be learned from the fink package description files of the crosscompilers from above.
221261
222262# Keresztfordítás GYIK (faq)
223263
224264## Mire jó a keresztfordítás?
225265
226266Í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.
227267
228268## Miért Unix-ról Windws-ra és nem a másik irányba?
229269
230270A 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.
231271
232272Az alapvető problémák:
233273
2342741. Szükséged van függvénytárakra (library-ik) a gazdarendszeren (amelyen a keresztfordítást el akarod végezni)
2352752. 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.
2362763. 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.
237277
238278Ha a figyelmeztetések ellenére mégis kitartasz, olvasd el a crossnotes című feljegyzést, amely fentebb van megemlítve vagy a [[buildfaq/hu|buildfaq]] fejezetet.
239279
240280## Több információt szeretnék a Free Pascal építéséről. Hol találok?
241281
242282Olvasd el a [[buildfaq/hu|buildfaq]] fejezetet.
243283
244284---
245285*From the Free Pascal wiki, page "Cross compiling/hu", as it stood on 2020-05-23 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history