Sign in Join
Wiki copytemporary

Cross compiling/pt: what changed

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

OldNewLine
1-## Contents
2-
3- * 1 Introdução
4- * 1.1 Passos Básicos
5- * 2 De Linux
6- * 2.1 Para Linux
7- * 2.2 Para Windows
8- * 2.3 Para Darwin ou macOS
9- * 3 De Windows
10- * 3.1 Para Linux
11- * 3.1.1 Bibliotecas
12- * 4 De Darwin (macOS) i386
13- * 4.1 De i386 para PowerPC
14- * 5 FAQ de compilação cruzada
15- * 5.1 Por que compilação cruzada?
16- * 5.2 Por que Linux para Windows e não de outro modo?
17- * 5.3 Eu gostaria de mais informações sobre a construção do Free Pascal. Onde posso encontrar?
18-
191# Introdução
202
21-Esta é uma curta introdução para novatos. As seções seguintes descrevem como configurar um sistema para compilação cruzada, isto é, trabalhar no Linux and criar executáveis para Win32 (ou FreeBSD, Darwin, etc.). O Free Pascal é um compilador e basicamente converte código em binário (linguagem de máquina). Os binários também contêm informação sobre como o sistema operacional inicia o executável. Portanto os binários são específicos para cada plataforma. O Free Pascal em si mesmo não precisa de muita configuração. Ele pode criar binários para muitas plataformas. Somente lhe diga para fazer isso. Mas o compilador é somente uma parte. Existe também o montador e o vinculador, e essas ferramentas não são capazes de criar código cross-plataforma. É por isso que nós precisamos criar vinculadores especiais 'ld' e assembler 'as' para cada plataforma-alvo. Essas são as binutils. Depois de criar as ferramentas cross-plataforma, todas as unidades Pascal do FPC serão cross-compiladas. Por exemplo, existe um system.ppu para cada plataforma-alvo. Assim o seu arquivo de configuração do FPC será configurado de forma que a compilação cruzada se torne tão fácil que você pode esquecer todos os detalhes aborrecidos. O mesmo será feito para a LCL - a biblioteca de componentes do Lazarus. E depois disso você pode fazer compilação cruzada de seus programas Pascal para Win32. Ou iniciá-los no Wine ou copiá-los para uma máquina Windows e testá-los.
3+Esta é uma curta introdução para novatos. As seções seguintes descrevem como configurar um sistema para compilação cruzada, isto é, trabalhar no Linux and criar executáveis para Win32 (ou FreeBSD, Darwin, etc.). O Free Pascal é um compilador e basicamente converte código em binário (linguagem de máquina). Os binários também contêm informação sobre como o sistema operacional inicia o executável. Portanto os binários são específicos para cada plataforma. O Free Pascal em si mesmo não precisa de muita configuração. Ele pode criar binários para muitas plataformas. Somente lhe diga para fazer isso. Mas o compilador é somente uma parte. Existe também o montador e o vinculador, e essas ferramentas não são capazes de criar código cross-plataforma. É por isso que nós precisamos criar vinculadores especiais 'ld' e assembler 'as' para cada plataforma-alvo. Essas são as binutils. Depois de criar as ferramentas cross-plataforma, todas as unidades Pascal do FPC serão cross-compiladas. Por exemplo, existe um system.ppu para cada plataforma-alvo. Assim o seu arquivo de configuração do FPC será configurado de forma que a compilação cruzada se torne tão fácil que você pode esquecer todos os detalhes aborrecidos. O mesmo será feito para a LCL - a biblioteca de componentes do Lazarus. E depois disso você pode fazer compilação cruzada de seus programas Pascal para Win32. Ou iniciá-los no Wine ou copiá-los para uma máquina Windows e testá-los.
224
235## Passos Básicos
246
25-Existem uns poucos passos em comum implicados em compilação cruzada que você precisa cumprir em cada caso:
7+Existem uns poucos passos em comum implicados em compilação cruzada que você precisa cumprir em cada caso:
268
27- 1. Ter um compilador Free Pascal para a plataforma em que você quer compilar.
28- 2. Ter o código-fonte do Free Pascal.
29- 3. Ou construí-lo dos fontes ou obter os binários das cross-binutils que executem na plataforma em que você está e são desenhadas para construir programas para a plataforma-alvo desejada.
30- 4. Às vezes você vai precisar de alguns arquivos da plataforma para onde está compilando.
9+1. Ter um compilador Free Pascal para a plataforma em que você quer compilar.
10+2. Ter o código-fonte do Free Pascal.
11+3. Ou construí-lo dos fontes ou obter os binários das cross-binutils que executem na plataforma em que você está e são desenhadas para construir programas para a plataforma-alvo desejada.
12+4. Às vezes você vai precisar de alguns arquivos da plataforma para onde está compilando.
3113
3214# De Linux
3315
3416## Para Linux
3517
36-Fique claro que isso é para compilar de Linux(x86_64) para Linux(i386).
18+Fique claro que isso é para compilar de Linux(x86_64) para Linux(i386).
3719
38-Há chances de a sua distribuição Linux 64 bits já possibilitar a compilação de programas 32 bits mas devido à maneira como o processo de construção do FPC é desenhado existem algumas coisas que você vai precisar fazer:
20+Há chances de a sua distribuição Linux 64 bits já possibilitar a compilação de programas 32 bits mas devido à maneira como o processo de construção do FPC é desenhado existem algumas coisas que você vai precisar fazer:
3921
40- * Primeiro cheque se você já tem os arquivos i386-linux-ld e i386-linux-as:
22+- Primeiro cheque se você já tem os arquivos i386-linux-ld e i386-linux-as:
4123
42-```
43-bash $ which i386-linux-ld
44- bash $ which i386-linux-as
45-```
24+` bash $ which i386-linux-ld`\
25+` bash $ which i386-linux-as`
4626
47-Se você tem esses arquivos, pule para o título "Compilar o FPC". Se você não tem os arquivos, eu fiz alguns scripts:
48-```
49-#!/bin/bash
50- # name this file /usr/bin/i386-linux-ld
51- ld -A elf32-i386 $@
52-```
53-```
54-#!/bin/bash
55- # name this file /usr/bin/i386-linux-as
56- as --32 $@
57-```
27+Se você tem esses arquivos, pule para o título "Compilar o FPC". Se você não tem os arquivos, eu fiz alguns scripts:
5828
59- * Fazê-los um executável:
29+`#!/bin/bash`\
30+`# name this file /usr/bin/i386-linux-ld`\
31+`ld -A elf32-i386 $@`
6032
61-```
62-bash $ chmod +x /usr/bin/i386-linux-as
63- bash $ chmod +x /usr/bin/i386-linux-ld
64-```
33+`#!/bin/bash`\
34+`# name this file /usr/bin/i386-linux-as`\
35+`as --32 $@`
6536
66- * Compilar o FPC:
37+- Fazê-los um executável:
6738
68-```
69-bash $ make all CPU_TARGET=i386
70-```
39+`bash $ chmod +x /usr/bin/i386-linux-as`\
40+`bash $ chmod +x /usr/bin/i386-linux-ld`
7141
72-então:
73-```
74-bash $ su -c "make install CPU_TARGET=i386"
75-```
42+- Compilar o FPC:
7643
77-É isso. Edite seu arquivo /etc/fpc.cfg se necessário.
44+`bash $ make all CPU_TARGET=i386`
7845
46+então:
47+
48+`bash $ su -c "make install CPU_TARGET=i386"`
49+
50+É isso. Edite seu arquivo /etc/fpc.cfg se necessário.
51+
7952## Para Windows
8053
81-Manual oficial [[Cross compiling for Windows under Linux]]
54+Manual oficial [[Cross compiling for Windows under Linux]]\
8255Manual para Lazarus 0.9.22 e FPC 2.0.4 <http://fdavid.com.br/blog/?p=4>
8356
84-Se você está compilando a versão 2.1.1 ou superior do FPC, você pode apenas fazer:
85-```
86-bash $ make all OS_TARGET=win32 CPU_TARGET=i386
87-```
57+Se você está compilando a versão 2.1.1 ou superior do FPC, você pode apenas fazer:
8858
89-e então
90-```
91-bash $ su -c "make crossinstall OS_TARGET=win32 CPU_TARGET=i386"
92-```
59+`bash $ make all OS_TARGET=win32 CPU_TARGET=i386`
9360
94-Nota: para construir para Win64, o comando make é: make all OS TARGET=win64 CPU_TARGET=x86_64
61+e então
9562
96-A razão dessa simplicidade é o vinculador interno incluído nessa versão do FPC.
63+`bash $ su -c "make crossinstall OS_TARGET=win32 CPU_TARGET=i386"`
9764
65+Nota: para construir para Win64, o comando make é: make all OS TARGET=win64 CPU_TARGET=x86_64
66+
67+A razão dessa simplicidade é o vinculador interno incluído nessa versão do FPC.
68+
9869## Para Darwin ou macOS
9970
100- * Primeiro você precisa das binutils para a plataforma para a qual você quer compiilar. Baixe o odcctools deste site (use a versão CVS) e siga as instruções de instalação. <http://www.opendarwin.org/projects/odcctools/>
101- * Você precisa criar um falso diretório root, como: $HOME/darwinroot. Copie pelo menos os diretórios /System e/Frameworks e /usr (você deve ter que copiar mais do que isso) do seu computador Aple ou Darwin para $HOME/darwinroot.
102- * Agora que você tem esses arquivos, crie uma pasta em $HOME/darwinroot chamada cross. Em qualquer lugar que você tenha instalado o odcctools você precisa fazer links for the cross tools to be more fpc friendly. Existe um grupo de arquivos de ferramentas odcc chamado powerpc-apple-darwin-*. Você precisa fazer links (ou renomeá-los) de modo que o powerpc-apple-darwin-ld se torne powerpc-darwin-ld. Faça o mesmo com *-ar *-as.
103- * Agora você está pronto para cross-compilar o FPC. Basicamente você precisa ter o código-fonte do FPC e uma janela de terminal aberta.
71+- Primeiro você precisa das binutils para a plataforma para a qual você quer compiilar. Baixe o odcctools deste site (use a versão CVS) e siga as instruções de instalação. <http://www.opendarwin.org/projects/odcctools/>
72+- Você precisa criar um falso diretório root, como: \$HOME/darwinroot. Copie pelo menos os diretórios /System e/Frameworks e /usr (você deve ter que copiar mais do que isso) do seu computador Aple ou Darwin para \$HOME/darwinroot.
73+- Agora que você tem esses arquivos, crie uma pasta em \$HOME/darwinroot chamada cross. Em qualquer lugar que você tenha instalado o odcctools você precisa fazer links for the cross tools to be more fpc friendly. Existe um grupo de arquivos de ferramentas odcc chamado powerpc-apple-darwin-*. Você precisa fazer links (ou renomeá-los) de modo que o powerpc-apple-darwin-ld se torne powerpc-darwin-ld. Faça o mesmo com *-ar *-as.
74+- Agora você está pronto para cross-compilar o FPC. Basicamente você precisa ter o código-fonte do FPC e uma janela de terminal aberta.
10475
105-Escreva:
106-```
107-$PATH=$PATH:$HOME/darwinroot/cross (ou onde você fez os symlinks)
108-```
76+Escreva:
10977
110-Escreva (iirc):
111-```
112-make all TARGET_OS=darwin TARGET_CPU=powerpc OPT="-Xd -Fl/$HOME/darwinroot/usr/lib"
113-```
78+`$PATH=$PATH:$HOME/darwinroot/cross (ou onde você fez os symlinks)`
11479
115-Se isso der certo você pode instalá-lo em qualquer lugar que queira com:
116-```
117-make install TARGET_OS=darwin TARGET_CPU=powerpc PREFIX=/cross/fpc
118-```
80+Escreva (iirc):
11981
120-Agora copie o arquivo ./compiler/ppccross para onde você possa achá-lo, pois esse é o compilador que você vai precisar para construir programas para PowerPC.
82+`make all TARGET_OS=darwin TARGET_CPU=powerpc OPT="-Xd -Fl/$HOME/darwinroot/usr/lib"`
12183
122- * Configure o seu arquivo /etc/fpc.cfg.
84+Se isso der certo você pode instalá-lo em qualquer lugar que queira com:
12385
124-Adicionne uma seção como essa:
125-```
126-#IFDEF powerpc
127- -Fu/cross/fpc/lib/fpc/$fpcversion/units/$fpctarget/
128- -Fu/cross/fpc/lib/fpc/$fpcversion/units/$fpctarget/rtl
129- -Fu/cross/fpc/lib/fpc/$fpcversion/units/$fpctarget/*
130- -k-systemroot $HOME/darwin/cross
131- #ENDIF
132-```
86+`make install TARGET_OS=darwin TARGET_CPU=powerpc PREFIX=/cross/fpc`
13387
134-Sempre que você queira cross-compilar você precisa ter o ppccross e os symlinks para powerpc-darwin-* no seu Path. E você deve poder fazer o pcccross someprogie.pas e ele vai criar o executável Darwin.
88+Agora copie o arquivo ./compiler/ppccross para onde você possa achá-lo, pois esse é o compilador que você vai precisar para construir programas para PowerPC.
13589
90+- Configure o seu arquivo /etc/fpc.cfg.
91+
92+Adicionne uma seção como essa:
93+
94+`#IFDEF powerpc`\
95+`-Fu/cross/fpc/lib/fpc/$fpcversion/units/$fpctarget/`\
96+`-Fu/cross/fpc/lib/fpc/$fpcversion/units/$fpctarget/rtl`\
97+`-Fu/cross/fpc/lib/fpc/$fpcversion/units/$fpctarget/*`\
98+`-k-systemroot $HOME/darwin/cross`\
99+`#ENDIF`
100+
101+Sempre que você queira cross-compilar você precisa ter o ppccross e os symlinks para powerpc-darwin-* no seu Path. E você deve poder fazer o pcccross someprogie.pas e ele vai criar o executável Darwin.
102+
136103# De Windows
137104
138105## Para Linux
139106
140-(Marco vd Voort)
107+(Marco vd Voort)
141108
142-Para compilar para Linux do Windows: (o procedimento de FreeBSD não será muito diferente, copiar o cprt0 não é necessário para FreeBSD)
109+Para compilar para Linux do Windows: (o procedimento de FreeBSD não será muito diferente, copiar o cprt0 não é necessário para FreeBSD)
143110
144-Requisitos:
111+Requisitos:
145112
146-\- FPC 1.9.6 ou superior. 1.9.4 deve funcionar, mas não foi testado.
113+\- FPC 1.9.6 ou superior. 1.9.4 deve funcionar, mas não foi testado.
147114
148--<ftp://freepascal.stack.nl/pub/fpc/contrib/cross/mingw/binutils-2.15-win32-i386-linux.zip>
115+-ftp://freepascal.stack.nl/pub/fpc/contrib/cross/mingw/binutils-2.15-win32-i386-linux.zip
149116
150-\- O FPC do repositório CVS (qualquer um acima de 1.9.6).
117+\- O FPC do repositório CVS (qualquer um acima de 1.9.6).
151118
152-\- Um árvore do Lazarus (qualquer uma construível a partir do mesmo período).
119+\- Um árvore do Lazarus (qualquer uma construível a partir do mesmo período).
153120
154-\- Muitas bibliotecs do Linux alvo. Um dos servidores FPC é um SUSE, de onde eu obtive a lista abaixo:
121+\- Muitas bibliotecs do Linux alvo. Um dos servidores FPC é um SUSE, de onde eu obtive a lista abaixo:
155122
156-1) Baixar <ftp://freepascal.stack.nl/pub/fpc/contrib/cross/mingw/binutils-2.15-win32-i386-linux.zip>
123+1\) Baixar <ftp://freepascal.stack.nl/pub/fpc/contrib/cross/mingw/binutils-2.15-win32-i386-linux.zip>
157124
158-2) Extraia-o e mova os arquivos i386* para <fpcbindir>\bin\i386-win3 (por exemplo c:\pp\bin\i386\win32)
125+2\) Extraia-o e mova os arquivos i386* para \<fpcbindir\>\bin\i386-win3 (por exemplo c:\pp\bin\i386\win32)
159126
160-3) Vá parra o diretório dos fontes do FPC
127+3\) Vá parra o diretório dos fontes do FPC
161128
162-4) make clean
129+4\) make clean
163130
164-5) Faça o OS_TARGET = linux all
131+5\) Faça o OS_TARGET = linux all
165132
166-6) Faça o OS_TARGET = linux e instale INSTALL_PREFIX = <fpcbindir>
133+6\) Faça o OS_TARGET = linux e instale INSTALL_PREFIX = \<fpcbindir\>
167134
168-7) Prepare o diretório lib como nas intruções abaixo, eu usei d:\fpc\linuxlib para estocá-las.
135+7\) Prepare o diretório lib como nas intruções abaixo, eu usei d:\fpc\linuxlib para estocá-las.
169136
170-8) Vá para <fpcbindir>\units\i386-linux\rtl e copie o cprt21.o sobre o cprt0.o
137+8\) Vá para \<fpcbindir\>\units\i386-linux\rtl e copie o cprt21.o sobre o cprt0.o
171138
172-9) Vá para o diretório do Lazarus
139+9\) Vá para o diretório do Lazarus
173140
174-10) Edite o lazarus.pp e adicione {$linklib dl} e {$linklib gmodule} em algum lugar nos fontes.
141+10\) Edite o lazarus.pp e adicione {\$linklib dl} e {\$linklib gmodule} em algum lugar nos fontes.
175142
176-11) Faça o OS_TARGET = linux all OPT = "-gl -Fld:\fpc\linuxlib -Xr/usr/lib -FL/usr/lib/ld-linux.so.2"
143+11\) Faça o OS_TARGET = linux all OPT = "-gl -Fld:\fpc\linuxlib -Xr/usr/lib -FL/usr/lib/ld-linux.so.2"
177144
178-Se der algum erro do vinculador (mais especificamente linker can't find -l<something>) então
145+Se der algum erro do vinculador (mais especificamente linker can't find -l\<something\>) então
179146
180-12) Edite manualmente o link.res se necessário (veja abaixo para observações sobre gtk ) e adapte os nomes -l<x> no final dos arquivos. I had to add -1.2 to all gtk
181-```
182-libs, to keep them apart from gtk2
183-```
147+12\) Edite manualmente o link.res se necessário (veja abaixo para observações sobre gtk ) e adapte os nomes -l\<x\> no final dos arquivos. I had to add -1.2 to all gtk
184148
185-13) Execute o ppas.bat para reiniciar o vinculador
149+`   libs, to keep them apart from gtk2`
186150
151+13\) Execute o ppas.bat para reiniciar o vinculador
152+
187153### Bibliotecas
188154
189-Existem as bibliotecas que eu coletei para Lazarus e a IDE modo texto(o Lazarus não precisa da pthread).
155+Existem as bibliotecas que eu coletei para Lazarus e a IDE modo texto(o Lazarus não precisa da pthread).
190156
191-Eu as coletei do target system e renomeei todas de lib<name>.so.x.y to lib<name>.so.
157+Eu as coletei do target system e renomeei todas de lib\<name\>.so.x.y to lib\<name\>.so.
192158
193-libgcc.a e umas outras são mais fáceis de encontrar fazendo gcc -v e procurando uma linha como
159+libgcc.a e umas outras são mais fáceis de encontrar fazendo gcc -v e procurando uma linha como
194160
195-"Reading specs from /usr/lib/gcc-lib/i486-linux/3.3.5/specs"
161+"Reading specs from /usr/lib/gcc-lib/i486-linux/3.3.5/specs"
196162
197-então algumas das libs estão em /usr/lib/gcc-lib/i486-linux/3.3.5/ Uma boa outra localização é /lib /usr/lib /usr/local/lib /usr/x11R6/lib e /opt/gnome/lib
163+então algumas das libs estão em /usr/lib/gcc-lib/i486-linux/3.3.5/ Uma boa outra localização é /lib /usr/lib /usr/local/lib /usr/x11R6/lib e /opt/gnome/lib
198164
199-libpthread.so.0
165+libpthread.so.0
200166
201-libdl.so
167+libdl.so
202168
203-libc.so
169+libc.so
204170
205-ld-linux.so.2
171+ld-linux.so.2
206172
207-crtbegin.o
173+crtbegin.o
208174
209-crtbeginS.o
175+crtbeginS.o
210176
211-crtbeginT.o
177+crtbeginT.o
212178
213-crtend.o
179+crtend.o
214180
215-crtendS.o
181+crtendS.o
216182
217-crtn.o
183+crtn.o
218184
219-crti.o
185+crti.o
220186
221-libgcc.a
187+libgcc.a
222188
223-libX11.so
189+libX11.so
224190
225-libXi.so
191+libXi.so
226192
227-libglib-1.2.so
193+libglib-1.2.so
228194
229-libgmodule-1.2.so.0
195+libgmodule-1.2.so.0
230196
231-libgdk_pixbuf.so
197+libgdk_pixbuf.so
232198
233-libgdk-1.2.so
199+libgdk-1.2.so
234200
235-libgtk-1.2.so
201+libgtk-1.2.so
236202
237-libXext.so
203+libXext.so
238204
239-libm.so
205+libm.so
240206
241-libdl.so.2
207+libdl.so.2
242208
243-libgmodule-1.2.so
209+libgmodule-1.2.so
244210
245-Note que alguns diretórios estão duplicados, com ou sem sufixo. Elas são necessárias porque alguma outra lib tem dependência dela.
211+Note que alguns diretórios estão duplicados, com ou sem sufixo. Elas são necessárias porque alguma outra lib tem dependência dela.
246212
247-Nome exato (assim o form lib<name>.so.x) Não podemos symlink no windows, então eu simplesmente o copiei.
213+Nome exato (assim o form lib\<name\>.so.x) Não podemos symlink no windows, então eu simplesmente o copiei.
248214
249-Errar ao renomear não é tão ruim, haverá chances de consertar . Tenha certeza de que todos os crt* e o arquivo "libc.so" estão disponíveis, senão gerar o link.res vai dar errado.
215+Errar ao renomear não é tão ruim, haverá chances de consertar . Tenha certeza de que todos os crt* e o arquivo "libc.so" estão disponíveis, senão gerar o link.res vai dar errado.
250216
251-No meu caso compilação para o passo 11 vai dar certo mas o vinculador vai dizer que não pode encontrar o libgtk.so e as outras bibliootecas marcadas com -1.2. Isso é por causa do target system, libgtk é GTK 2.0 enquanto nós queremos o gtk1.2 para o Lazarus.
217+No meu caso compilação para o passo 11 vai dar certo mas o vinculador vai dizer que não pode encontrar o libgtk.so e as outras bibliootecas marcadas com -1.2. Isso é por causa do target system, libgtk é GTK 2.0 enquanto nós queremos o gtk1.2 para o Lazarus.
252218
253-Para consertar isso manualmente eu adicionei -1.2 às linhas -l correspondentes no final do arquivo link.res que foi gerado no Passo 11.
219+Para consertar isso manualmente eu adicionei -1.2 às linhas -l correspondentes no final do arquivo link.res que foi gerado no Passo 11.
254220
255-P.S.: Um bocado de edições do vinculador podem ser resolvidas com os beta linker control switches (-XLA and friends) em 2.0.4 e 2.1.1. Mas eles são beta, sem documentação e não necessariamente disponíveis em versões futuras. Sâo na maioria adicionados a um pacote de construtores (para Linux distros) e cross-compiladores uma chance de avaliar uma possível opção.
221+P.S.: Um bocado de edições do vinculador podem ser resolvidas com os beta linker control switches (-XLA and friends) em 2.0.4 e 2.1.1. Mas eles são beta, sem documentação e não necessariamente disponíveis em versões futuras. Sâo na maioria adicionados a um pacote de construtores (para Linux distros) e cross-compiladores uma chance de avaliar uma possível opção.
256222
257223# De Darwin (macOS) i386
258224
259225## De i386 para PowerPC
260226
261- * Cross Binutils
227+- Cross Binutils
262228
263-Primeiro verifique se você já tem os arquivos powerpc-darwin-ld e powerpc-darwin-as:
264-```
265-$ which powerpc-darwin-ld
266- $ which powerpc-darwin-as
267-```
229+Primeiro verifique se você já tem os arquivos powerpc-darwin-ld e powerpc-darwin-as:
268230
269-Se você tem esses arquivos, pule a criação dos symlinks e vá para o título "Compilar o FPC"
231+` $ which powerpc-darwin-ld`\
232+` $ which powerpc-darwin-as`
270233
271-Atualmente as binutils "normais" podem ser usadas, já que elas são universais. Portanto, symlinks simples são suficientes:
272-```
273-$ sudo ln -s /usr/bin/as /usr/bin/powerpc-darwin-as
274- $ sudo ln -s /usr/bin/ld /usr/bin/powerpc-darwin-ld
275-```
234+Se você tem esses arquivos, pule a criação dos symlinks e vá para o título "Compilar o FPC"
276235
277-Os symlinks podem ficar em qualquer outro diretório, desde que estejam no seu $PATH (por exemplo /sw/bin when installing through fink).
236+Atualmente as binutils "normais" podem ser usadas, já que elas são universais. Portanto, symlinks simples são suficientes:
278237
279- * Compilar o FPC:
238+` $ sudo ln -s /usr/bin/as /usr/bin/powerpc-darwin-as`\
239+` $ sudo ln -s /usr/bin/ld /usr/bin/powerpc-darwin-ld`
280240
281-```
282-$ cd fpc/compiler
283- $ make cycle CPU_TARGET=powerpc
284-```
241+Os symlinks podem ficar em qualquer outro diretório, desde que estejam no seu \$PATH (por exemplo /sw/bin when installing through fink).
285242
286-Isto cria o compilarod PowerPC (fpc/compiler/ppcppc) e as unidades da RTL.
243+- Compilar o FPC:
287244
288-Para criar os binários PowerPC nenhum cross-compilador ativo é necessário. O FPC para PowerPC e ppcppc executam bem em IntelMacs usando Rosetta.
245+` $ cd fpc/compiler`\
246+` $ make cycle CPU_TARGET=powerpc`
289247
290-Mais teste e documentação são necessários para instalação paralela e uso dos dois.
248+Isto cria o compilarod PowerPC (fpc/compiler/ppcppc) e as unidades da RTL.
291249
292-Se faltarem unidades, verifique seu arquivo de configuração, $HOME/.fpc.cfg or /etc/fpc.cfg or /sw/etc/fpc.cfg.
250+Para criar os binários PowerPC nenhum cross-compilador ativo é necessário. O FPC para PowerPC e ppcppc executam bem em IntelMacs usando Rosetta.
293251
294-Você pode ter que adicionar alguma coisa like or where ever as suas unidades estiverem localizadas.
295-```
296--Fu/usr/local/lib/fpc/lib/fpc/$fpcversion/units/$fpctarget/
297- -Fu/usr/local/lib/fpc/lib/fpc/$fpcversion/units/$fpctarget/rtl
298- -Fu/usr/local/lib/fpc/lib/fpc/$fpcversion/units/$fpctarget/*
299-```
252+Mais teste e documentação são necessários para instalação paralela e uso dos dois.
300253
301-Lembrete: Binários universais são criados dos binários individuais (i386 and powerpc) usando lipo.
254+Se faltarem unidades, verifique seu arquivo de configuração, \$HOME/.fpc.cfg or /etc/fpc.cfg or /sw/etc/fpc.cfg.
302255
303-Currently (fpc 3.0.4) gives:
304-```
256+Você pode ter que adicionar alguma coisa like or where ever as suas unidades estiverem localizadas.
257+
258+`-Fu/usr/local/lib/fpc/lib/fpc/$fpcversion/units/$fpctarget/`\
259+`-Fu/usr/local/lib/fpc/lib/fpc/$fpcversion/units/$fpctarget/rtl`\
260+`-Fu/usr/local/lib/fpc/lib/fpc/$fpcversion/units/$fpctarget/*`
261+
262+Lembrete: Binários universais são criados dos binários individuais (i386 and powerpc) usando lipo.
263+
264+Currently (fpc 3.0.4) gives:
265+
266+``` bash
305267fpc-cross-arm-gba
306- fpc-cross-arm-linux
307- fpc-cross-arm-nds
308- fpc-cross-arm-wince
309- fpc-cross-arm-armv4t-embedded
310- fpc-cross-arm-armv7m-embedded
311- fpc-cross-i386-darwin
312- fpc-cross-i386-freebsd
313- fpc-cross-i386-go32v2
314- fpc-cross-i386-linux
315- fpc-cross-i386-nativent
316- fpc-cross-i386-netbsd
317- fpc-cross-i386-solaris
318- fpc-cross-i386-win32
319- fpc-cross-i386-wince
320- fpc-cross-jvm-android
321- fpc-cross-jvm-java
322- fpc-cross-m68k-linux
323- fpc-cross-mipsel-linux
324- fpc-cross-powerpc-linux
325- fpc-cross-sparc-linux
326- fpc-cross-x86-64-dragonfly
327- fpc-cross-x86-64-freebsd
328- fpc-cross-x86-64-linux
329- fpc-cross-x86-64-win64
268+fpc-cross-arm-linux
269+fpc-cross-arm-nds
270+fpc-cross-arm-wince
271+fpc-cross-arm-armv4t-embedded
272+fpc-cross-arm-armv7m-embedded
273+fpc-cross-i386-darwin
274+fpc-cross-i386-freebsd
275+fpc-cross-i386-go32v2
276+fpc-cross-i386-linux
277+fpc-cross-i386-nativent
278+fpc-cross-i386-netbsd
279+fpc-cross-i386-solaris
280+fpc-cross-i386-win32
281+fpc-cross-i386-wince
282+fpc-cross-jvm-android
283+fpc-cross-jvm-java
284+fpc-cross-m68k-linux
285+fpc-cross-mipsel-linux
286+fpc-cross-powerpc-linux
287+fpc-cross-sparc-linux
288+fpc-cross-x86-64-dragonfly
289+fpc-cross-x86-64-freebsd
290+fpc-cross-x86-64-linux
291+fpc-cross-x86-64-win64
330292```
331293
332-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.
294+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.
333295
334296# FAQ de compilação cruzada
335297
336298## Por que compilação cruzada?
337299
338-Assim você pode desenvolver um programa para um OS/CPU e compilá-lo para outro OS/CPU sem reiniciar ou trocar de computador.
300+Assim você pode desenvolver um programa para um OS/CPU e compilá-lo para outro OS/CPU sem reiniciar ou trocar de computador.
339301
340302## Por que Linux para Windows e não de outro modo?
341303
342-A principal razão para isso é que gerar binários Unix em plataformas estranhas (outro Unix ou mesmo distribuições Linux) é mais complicado. Vinculação estática já é complicada, ainda mais compartilhada.
304+A principal razão para isso é que gerar binários Unix em plataformas estranhas (outro Unix ou mesmo distribuições Linux) é mais complicado. Vinculação estática já é complicada, ainda mais compartilhada.
343305
344-Você poderia precisar usar bibliotecas das plataformas-alvo (gtk, glib,libc etc) e muitas configurações adicionais para ld (bibliotecas, caminhos, dynlinker path, etc.).
306+Você poderia precisar usar bibliotecas das plataformas-alvo (gtk, glib,libc etc) e muitas configurações adicionais para ld (bibliotecas, caminhos, dynlinker path, etc.).
345307
346-Isso foi parcialmente feito (para a vinculação estática) mas é difícil pois precisa de uma pós-edição manual dos arquivos do vinculador de linha de comando e um entendimento profundo sobre o que faz os binários Unix tick (funcionar?).
308+Isso foi parcialmente feito (para a vinculação estática) mas é difícil pois precisa de uma pós-edição manual dos arquivos do vinculador de linha de comando e um entendimento profundo sobre o que faz os binários Unix tick (funcionar?).
347309
348310## Eu gostaria de mais informações sobre a construção do Free Pascal. Onde posso encontrar?
349311
350312Essa é uma FAQ genérica em formato pdf sobre como construir e configurar o FPC: <http://www.stack.nl/~marcov/buildfaq.pdf>.
351313
352314---
353-*From the Free Pascal wiki, page "Cross compiling/pt", as the Internet Archive kept it on 2022-12-30. 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).*
315+*From the Free Pascal wiki, page "Cross compiling/pt", as it stood on 2021-07-19 after a change by Dbannon, 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