Difference between revisions of "Cross compiling/hu"

From Lazarus wiki
Jump to navigationJump to search
(New page: {{Cross compiling}} =Foreword= This is a short introduction for newbies. The following sections describe how to setup a system to cross compile, that means creating binaries (executables)...)
 
 
(101 intermediate revisions by 4 users not shown)
Line 1: Line 1:
 
{{Cross compiling}}
 
{{Cross compiling}}
  
=Foreword=
+
=Előszó=
This is a short introduction for newbies. The following sections describe how to setup a system to cross compile, that means creating binaries (executables) for a different platform as the one used for compilation - e.g. working under Linux and creating Win32 executables (or those for FreeBSD or Darwin, etc.). In this case, the platform used for compilation is usually referred to as "host" (Linux in the example above) and the platform where you want to run your created binaries is your "target". FreePascal is a compiler and basically converts source into binaries (machine language). These binaries also contain information on how the operating system starts the executables. Moreover, the binaries refer to the APIs provided by the particular operating system, that's why different implementation of our Run-Time Library is necessary for different operating systems. Therefore these binaries are platform specific. FreePascal itself does not need much setup. It can create binaries for many platforms. Just tell it to do so.
+
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á.
  
==Host and target on the same CPU==
+
==Gazda- és célrendszer ugyanolyan CPU-n==
FPC is designed so that the distributed compiler can create machine code for a certain CPU (because different CPUs need different machine code) and it knows specific requirements for all supported platforms (operating systems) available on that particular CPU. This means that you can perform cross-compilation with the same compiler used for native compilation as long as you stick to the same CPU.
+
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.
  
==Host and target on different CPUs==
+
==Gazda és célrendszer eltérő CPU-n==
If you need to create binaries for a different CPU, you need a special cross-compiler, i.e. compiler running on the host platform, but able to create machine code for a different CPU (in the case of FPC, such a cross-compiler would be again able to target all supported platforms available on the _target_ CPU). This cross-compiler is then usually stored in the same directory as the native compiler. Such a cross-compiler may be either compiled by yourself, or you can use a ready made distributed cross-compiler provided for some platforms directly by the FPC team (usually platforms mostly used in portable devices like arm-linux or arm-wince, because these are usually not used as host platforms). Fpc binary can then select the right compiler (either the native compiler or the cross-compiler) for the target CPU selected using the -P parameter.
 
  
==Assembler and linker==
+
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.
The compiler is only one part. We also need the assembler and the linker. FPC provides internal assembler and/or linker for just some platforms, other platforms needs to use external tools for that. And these tools are usually not able to create binaries for different platforms. That's why we have to different special linker 'ld' and assembler 'as' for every target platform. These are the binutils.
 
  
==Units for target==
+
==Assembler és linker==
After creating (or having/installing) the cross tools, one needs FPC RTL and other units compiled for the chosen target platform. For example, every target platform needs a different file system.ppu (System unit), etc. These units may be either compiled using your compiler set up for compilation to the target platform, or you may potentially use officially distributed units compiled (and distributed) with exactly the same FPC version (if available in format useable under the particular host platform).
+
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/hu | binutils]]-nak.
  
==Configuration==
+
==Unit-ok a célrendszerhez==
Then your fpc config file will be setup, so that cross compilation becomes so easy, that you can forget all the boring details. The same will be done for the LCL - the lazarus component library (if using Lazarus). And after this you can cross compile pascal programs for the (different) target platform. The resulting binaries may then be copied to a machine running the target platform, or run under an emulator (e.g. Wine for Win32 binaries under Linux, etc.).
+
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).
  
==Basic Steps==
+
==Konfiguráció==
There are a few common steps involved in crosscompiling that you must do in every case:
+
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.).
# Have already a FreePascal compiler for the platform you wish to compile from.
 
# You need to have the FreePascal source code (except for the special case of having everything prepared by someone else).
 
# 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.
 
# Sometimes you will need some files from the target you are compiling to.
 
  
=From Linux=
+
==Alap műveletek==
==To Linux==
+
Van néhány általános művelet a keresztfordításban amit minden esetben el kell végezned:
To be clear, the text below is to compile from linux(x86_64) to linux(i386). Information about targetting Linux running on ARM (e.g. Zaurus) may be found in [[Setup Cross Compile For ARM]].
+
# Szükség van a FreePascal fordítóra ahhoz a rendszerhez amelyen a fordítást el akarod végezni.
 +
# Szükség van a FreePascal forráskódjára (kivéve akkor ha valaki már elkészített mindent).
 +
# 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.
 +
# Néha szükség lesz fájlokra a célrendszerből amelyre fordítasz.
  
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.
+
=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/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.
  
* First check if you already have the files i386-linux-ld and i386-linux-as:
+
* 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-ld
  
 
   bash $ which i386-linux-as
 
   bash $ which i386-linux-as
  
If you have these files skip to the "Compile FPC" heading.
+
Ha megvannak ezek a fájlok akkor "Az FPC fordítása" címsorral folytasd.
  
I did not have these files so I made a couple of scripts:
+
Nekem nem voltak meg, ezért írtam néhány szkriptet:
 
  #!/bin/bash
 
  #!/bin/bash
  # name this file /usr/bin/i386-linux-ld
+
  # ez a fájl legyen a /usr/bin/i386-linux-ld
 
  ld -A elf32-i386 $@
 
  ld -A elf32-i386 $@
  
 
  #!/bin/bash
 
  #!/bin/bash
  # name this file /usr/bin/i386-linux-as
+
  # ez a fájl legyen a /usr/bin/i386-linux-as
 
  as --32 $@
 
  as --32 $@
  
* Make them executable:
+
* Futtathatóvá kell őket tenni:
 
  bash $ chmod +x /usr/bin/i386-linux-as
 
  bash $ chmod +x /usr/bin/i386-linux-as
 
  bash $ chmod +x /usr/bin/i386-linux-ld
 
  bash $ chmod +x /usr/bin/i386-linux-ld
  
* Compile FPC:
+
* Az FPC fordítása:
 
  bash $ make all CPU_TARGET=i386
 
  bash $ make all CPU_TARGET=i386
then:
+
ez után:
 
  bash $ su -c "make install CPU_TARGET=i386"
 
  bash $ su -c "make install CPU_TARGET=i386"
That's it. Edit your /etc/fpc.cfg file if needed.
+
Ennyi. Szerkeszd az /etc/fpc.cfg fájlt az igényeid szerint.
  
==To Windows==
+
==Windows rendszerre==
Information on cross-compilation with Lazarus may be found in [[Cross_compiling_for_Win32_under_Linux]]
+
A 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.
 
 
If you are compiling the 2.1.1 or greater branch of fpc you can just do:
 
  
 +
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 $ make all OS_TARGET=win32 CPU_TARGET=i386
and then
 
 
  bash $ su -c "make crossinstall OS_TARGET=win32 CPU_TARGET=i386"
 
  bash $ su -c "make crossinstall OS_TARGET=win32 CPU_TARGET=i386"
  
Note: to build for win64 the make command is: make all OS_TARGET=win64 CPU_TARGET=x86_64
+
Figyelem: a win64 rendszerre fordításhoz az első parancs:
 +
bash $ make all OS_TARGET=win64 CPU_TARGET=x86_64
  
The reason for this simplicity is the internal linker included in this version of fpc.
+
Az egyszerűség oka, hogy a linker be van építve az FPC ezen változatába.
  
==To Darwin or Mac OS X==
+
==Darwin vagy macOS rendszerre==
* First you need the binutils for the platform you want to compile to. Download odcctools from this site (use the cvs version) and follow their instructions for installing. http://www.opendarwin.org/projects/odcctools/
+
* 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/)
* you need to create a fake root dir like: $HOME/darwinroot copy at least the /System and /Frameworks and /usr directories (you may have to copy more than this) from your Apple or Darwin computer to $HOME/darwinroot
+
* 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).
* now that you have these files make a folder in $HOME/darwinroot called cross. where ever you installed the odcctools 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.
+
* 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.
* now you are ready to crosscompile fpc. basically you need to have the fpc source and have a terminal open there.
+
* 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.
type:  
+
írd be:  
  $PATH=$PATH:$HOME/darwinroot/cross (or whereever you made the symlinks)
+
  $PATH=$PATH:$HOME/darwinroot/cross (vagy ahol a szimbolikus linkektalálhatók)
type (iirc):
+
írd be (iirc):
 
  make all TARGET_OS=darwin TARGET_CPU=powerpc OPT="-Xd -Fl/$HOME/darwinroot/usr/lib"
 
  make all TARGET_OS=darwin TARGET_CPU=powerpc OPT="-Xd -Fl/$HOME/darwinroot/usr/lib"
if that succeded you can install it to whereever you want with:  
+
ha ez sikerült, telepítheted ahová akarod a következővel:  
 
  make install TARGET_OS=darwin TARGET_CPU=powerpc PREFIX=/cross/fpc
 
  make install TARGET_OS=darwin TARGET_CPU=powerpc PREFIX=/cross/fpc
  
now copy the file ./compiler/ppccross somewhere you will be able to find it as it's the compiler you'll need to build powerpc programs
+
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.
  
* configure your /etc/fpc.cfg file.
+
* szerkeszd az /etc/fpc.cfg fájlt.
add a section like this:
+
írj bele egy ehhez hasonló részt:
 
  #IFDEF powerpc
 
  #IFDEF powerpc
 
  -Fu/cross/fpc/lib/fpc/$fpcversion/units/$fpctarget/
 
  -Fu/cross/fpc/lib/fpc/$fpcversion/units/$fpctarget/
Line 94: Line 92:
 
  #ENDIF
 
  #ENDIF
  
whenever you want to crosscompile you have to have ppccross and the symlinks to powerpc-darwin-* in the PATH
+
amikor 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
and you should be able to just do ppccross someprogie.pas and it will create a darwin executable.
+
ezután már egy egyszerű parancssal (ppccross someprogie.pas) létrehozható a darwin bináris fájl.
  
I may have missed some things (or most everything) as it's been a while since I did this.
+
Lehet, hogy rosszul írtam le valamit (vagy mindent) mert már régen csináltam ilyet.
  
 +
=Windows rendszeren=
 +
==Linux rendszerre==
 +
Információkat a [[buildfaq/hu|buildfaq]] részben találsz erről.
  
=From Windows=
+
==GO32v2 rendszerre==
==To Linux==
+
A 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.
Marco vd Voort wrote some [http://www.stack.nl/~marcov/crossnotes.txt crossnotes]. If somebody has time, he can add them to this wiki.
 
  
==To GO32v2==
+
=Darwin (macOS) i386 rendszeren=
Detailed information may be found in [[Cross-compilation from Win32 to GO32v2]].
 
  
=From Darwin (Mac OS X) i386=
+
==i386-ról powerpc-re==
==from i386 to powerpc==
 
  
* Cross binutils
+
* binutils programok
  
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
 
   $ make cycle CPU_TARGET=powerpc
 
   $ make cycle CPU_TARGET=powerpc
 +
Ez létrehozza a powerpc fordítót (fpc/compiler/ppcppc) és az RTL unit-okat.
  
This creates the powerpc compiler (fpc/compiler/ppcppc) and the units of the rtl.
+
Az í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.
  
In order to create powerpc binaries no actual crosscompiler is needed. The powerpc fpc and ppcppc run fine on IntelMacs using Rosetta.
+
További tesztek és dokumentációk szükségesek párhuzamos telepítésről és használatról.
  
More test and docs are needed for parallel installation of both and usage.
+
Ha 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).
If there are missing units, check your config file, $HOME/.fpc.cfg or /etc/fpc.cfg or /sw/etc/fpc.cfg
 
You may have to add something like or where ever your units are located.
 
  
 
  -Fu/usr/local/lib/fpc/lib/fpc/$fpcversion/units/$fpctarget/
 
  -Fu/usr/local/lib/fpc/lib/fpc/$fpcversion/units/$fpctarget/
Line 144: Line 141:
 
  -Fu/usr/local/lib/fpc/lib/fpc/$fpcversion/units/$fpctarget/*
 
  -Fu/usr/local/lib/fpc/lib/fpc/$fpcversion/units/$fpctarget/*
  
Reminder: Universal binaries are created from the individual (i386 and powerpc) binaries using lipo.
+
Megjegyzés: Az univerzális binárisok a különálló (i386 and powerpc) binárisokból készültek lipo használatával.
 +
 
 +
==Windows és Linux rendszerre (32 bit)==
 +
A [http://finkproject.org/ fink] csomagkezelő rendelkezik  a keresztfordító csomagokkal Windows és Linux célrendszerekhez (32 bit) IntelMacs-on.
 +
 
 +
$ fink install fpc-win32
 +
 
 +
és
 +
 
 +
$ fink install fpc-i386-linux
 +
 
 +
parancsokkal telepíthetők a keresztfordítók.
 +
 
 +
A fordításhoz használd ezeket a parancsokat:
 +
 
 +
  fpc -Tlinux FILENAME
 +
  fpc -Twin32 FILENAME
 +
 
 +
Currently (fpc 3.0.4), it gives:
 +
 
 +
<syntaxhighlight lang="bash">
 +
fpc-cross-arm-gba
 +
fpc-cross-arm-linux
 +
fpc-cross-arm-nds
 +
fpc-cross-arm-wince
 +
fpc-cross-arm-armv4t-embedded
 +
fpc-cross-arm-armv7m-embedded
 +
fpc-cross-i386-darwin
 +
fpc-cross-i386-freebsd
 +
fpc-cross-i386-go32v2
 +
fpc-cross-i386-linux
 +
fpc-cross-i386-nativent
 +
fpc-cross-i386-netbsd
 +
fpc-cross-i386-solaris
 +
fpc-cross-i386-win32
 +
fpc-cross-i386-wince
 +
fpc-cross-jvm-android
 +
fpc-cross-jvm-java
 +
fpc-cross-m68k-linux
 +
fpc-cross-mipsel-linux
 +
fpc-cross-powerpc-linux
 +
fpc-cross-sparc-linux
 +
fpc-cross-x86-64-dragonfly
 +
fpc-cross-x86-64-freebsd
 +
fpc-cross-x86-64-linux
 +
fpc-cross-x86-64-win64
 +
</syntaxhighlight>
 +
 
 +
For 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.
  
=Cross compile FAQ=
+
=Keresztfordítás GYIK (faq)=
==Why cross compile?==
+
==Mire jó a keresztfordítás?==
So you can develop a program for one OS/CPU and compile it for another OS/CPU without rebooting or switching computers.
+
Í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.
==Why Unix to Windows and not the other way around?==
+
==Miért Unix-ról Windws-ra és nem a másik irányba?==
The main reason for this is that generating unix binaries on a foreign platform (another unix or even Linux distro included) is more complicated.  
+
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.  
  
The main problems are:
+
Az alapvető problémák:
# You need libraries on the host computer (the computer you are crosscompiling from)
+
# Szükséged van függvénytárakra (library-ik) a gazdarendszeren (amelyen a keresztfordítást el akarod végezni)
# There is not one such set libraries as a result of more complex and dynamic Unix versioning
+
# 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.
# A lot more (linker) parameters and tweaking is required, which are hard to explain for a general case.
+
# 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.
  
If you still persist after this warning, please have a look at the crossnotes document mentioned further up, or the buildfaq.
+
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/hu|buildfaq]] fejezetet.
  
==I want more information on building Freepascal. Where is it?==
+
==Több információt szeretnék a Free Pascal építéséről. Hol találok?==
This is a general FAQ in pdf format about how to build and configure FPC: [http://www.stack.nl/~marcov/buildfaq.pdf pdf version] or [http://www.stack.nl/~marcov/buildfaq/buildfaq.html html version (lesser quality, less frequently updated)]
+
Olvasd el a [[buildfaq/hu|buildfaq]] fejezetet.

Latest revision as of 10:53, 23 May 2020

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 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.

  • 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 Keresztfordítás Windows-ra Linux rendszeren című részben találsz.

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 macOS 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 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.

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

Windows rendszeren

Linux rendszerre

Információkat a buildfaq részben találsz erről.

GO32v2 rendszerre

A részletes információk megtalálhatók a Keresztfordítás Windows rendszeren GO32v2-re című részben.

Darwin (macOS) i386 rendszeren

i386-ról powerpc-re

  • binutils programok

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-as

Ha megvannak, hagyd ki a szimbolikus linkek (symlinks) létrehozását és folytasd "Az FPC fordítása" címsortól.

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/ld /usr/bin/powerpc-darwin-ld

A szimbolikus linkek bármelyik könyvtárban lehetnek, amíg a hely a $PATH-ban fel van sorolva.

  • Az FPC fordítása:
 $ cd fpc/compiler
 $ make cycle CPU_TARGET=powerpc

Ez létrehozza a powerpc fordítót (fpc/compiler/ppcppc) és az RTL unit-okat.

Az í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.

További tesztek és dokumentációk szükségesek párhuzamos telepítésről és használatról.

Ha 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).

-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/*

Megjegyzés: Az univerzális binárisok a különálló (i386 and powerpc) binárisokból készültek lipo használatával.

Windows és Linux rendszerre (32 bit)

A fink csomagkezelő rendelkezik a keresztfordító csomagokkal Windows és Linux célrendszerekhez (32 bit) IntelMacs-on.

$ fink install fpc-win32

és

$ fink install fpc-i386-linux

parancsokkal telepíthetők a keresztfordítók.

A fordításhoz használd ezeket a parancsokat:

 fpc -Tlinux FILENAME
 fpc -Twin32 FILENAME

Currently (fpc 3.0.4), it gives:

fpc-cross-arm-gba
fpc-cross-arm-linux
fpc-cross-arm-nds
fpc-cross-arm-wince
fpc-cross-arm-armv4t-embedded
fpc-cross-arm-armv7m-embedded
fpc-cross-i386-darwin
fpc-cross-i386-freebsd
fpc-cross-i386-go32v2
fpc-cross-i386-linux
fpc-cross-i386-nativent
fpc-cross-i386-netbsd
fpc-cross-i386-solaris
fpc-cross-i386-win32
fpc-cross-i386-wince
fpc-cross-jvm-android
fpc-cross-jvm-java
fpc-cross-m68k-linux
fpc-cross-mipsel-linux
fpc-cross-powerpc-linux
fpc-cross-sparc-linux
fpc-cross-x86-64-dragonfly
fpc-cross-x86-64-freebsd
fpc-cross-x86-64-linux
fpc-cross-x86-64-win64

For 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.

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 Free Pascal építéséről. Hol találok?

Olvasd el a buildfaq fejezetet.