Sign in Join
Wiki copytemporary

Cross compiling/pt: what changed

Revision 1 to 2. 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+
119# Introdução
220
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.
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.
422
523## Passos Básicos
624
7-Existem uns poucos passos em comum implicados em compilação cruzada que você precisa cumprir em cada caso:
25+Existem uns poucos passos em comum implicados em compilação cruzada que você precisa cumprir em cada caso:
826
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.
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.
1331
1432# De Linux
1533
1634## Para Linux
1735
18-Fique claro que isso é para compilar de Linux(x86_64) para Linux(i386).
19-
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:
21-
22-- Primeiro cheque se você já tem os arquivos i386-linux-ld e i386-linux-as:
23-
24-` bash $ which i386-linux-ld`\
25-` bash $ which i386-linux-as`
36+Fique claro que isso é para compilar de Linux(x86_64) para Linux(i386).
2637
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:
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:
2839
29-`#!/bin/bash`\
30-`# name this file /usr/bin/i386-linux-ld`\
31-`ld -A elf32-i386 $@`
40+ * Primeiro cheque se você já tem os arquivos i386-linux-ld e i386-linux-as:
3241
33-`#!/bin/bash`\
34-`# name this file /usr/bin/i386-linux-as`\
35-`as --32 $@`
42+```
43+bash $ which i386-linux-ld
44+ bash $ which i386-linux-as
45+```
3646
37-- Fazê-los um executável:
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+```
3858
39-`bash $ chmod +x /usr/bin/i386-linux-as`\
40-`bash $ chmod +x /usr/bin/i386-linux-ld`
59+ * Fazê-los um executável:
4160
42-- Compilar o FPC:
61+```
62+bash $ chmod +x /usr/bin/i386-linux-as
63+ bash $ chmod +x /usr/bin/i386-linux-ld
64+```
4365
44-`bash $ make all CPU_TARGET=i386`
66+ * Compilar o FPC:
4567
46-então:
68+```
69+bash $ make all CPU_TARGET=i386
70+```
4771
48-`bash $ su -c "make install CPU_TARGET=i386"`
72+então:
73+```
74+bash $ su -c "make install CPU_TARGET=i386"
75+```
4976
50-É isso. Edite seu arquivo /etc/fpc.cfg se necessário.
77+É isso. Edite seu arquivo /etc/fpc.cfg se necessário.
5178
5279## Para Windows
5380
54-Manual oficial [[Cross compiling for Windows under Linux]]\
81+Manual oficial [[Cross compiling for Windows under Linux]]
5582Manual para Lazarus 0.9.22 e FPC 2.0.4 <http://fdavid.com.br/blog/?p=4>
5683
57-Se você está compilando a versão 2.1.1 ou superior do FPC, você pode apenas fazer:
58-
59-`bash $ make all OS_TARGET=win32 CPU_TARGET=i386`
60-
61-e então
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+```
6288
63-`bash $ su -c "make crossinstall OS_TARGET=win32 CPU_TARGET=i386"`
89+e então
90+```
91+bash $ su -c "make crossinstall OS_TARGET=win32 CPU_TARGET=i386"
92+```
6493
65-Nota: para construir para Win64, o comando make é: make all OS TARGET=win64 CPU_TARGET=x86_64
94+Nota: para construir para Win64, o comando make é: make all OS TARGET=win64 CPU_TARGET=x86_64
6695
67-A razão dessa simplicidade é o vinculador interno incluído nessa versão do FPC.
96+A razão dessa simplicidade é o vinculador interno incluído nessa versão do FPC.
6897
6998## Para Darwin ou macOS
7099
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.
75-
76-Escreva:
77-
78-`$PATH=$PATH:$HOME/darwinroot/cross (ou onde você fez os symlinks)`
79-
80-Escreva (iirc):
81-
82-`make all TARGET_OS=darwin TARGET_CPU=powerpc OPT="-Xd -Fl/$HOME/darwinroot/usr/lib"`
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.
83104
84-Se isso der certo você pode instalá-lo em qualquer lugar que queira com:
105+Escreva:
106+```
107+$PATH=$PATH:$HOME/darwinroot/cross (ou onde você fez os symlinks)
108+```
85109
86-`make install TARGET_OS=darwin TARGET_CPU=powerpc PREFIX=/cross/fpc`
110+Escreva (iirc):
111+```
112+make all TARGET_OS=darwin TARGET_CPU=powerpc OPT="-Xd -Fl/$HOME/darwinroot/usr/lib"
113+```
87114
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.
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+```
89119
90-- Configure o seu arquivo /etc/fpc.cfg.
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.
91121
92-Adicionne uma seção como essa:
122+ * Configure o seu arquivo /etc/fpc.cfg.
93123
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`
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+```
100133
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.
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.
102135
103136# De Windows
104137
105138## Para Linux
106139
107-(Marco vd Voort)
108-
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)
140+(Marco vd Voort)
110141
111-Requisitos:
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)
112143
113-\- FPC 1.9.6 ou superior. 1.9.4 deve funcionar, mas não foi testado.
144+Requisitos:
114145
115--ftp://freepascal.stack.nl/pub/fpc/contrib/cross/mingw/binutils-2.15-win32-i386-linux.zip
146+\- FPC 1.9.6 ou superior. 1.9.4 deve funcionar, mas não foi testado.
116147
117-\- O FPC do repositório CVS (qualquer um acima de 1.9.6).
148+-<ftp://freepascal.stack.nl/pub/fpc/contrib/cross/mingw/binutils-2.15-win32-i386-linux.zip>
118149
119-\- Um árvore do Lazarus (qualquer uma construível a partir do mesmo período).
150+\- O FPC do repositório CVS (qualquer um acima de 1.9.6).
120151
121-\- Muitas bibliotecs do Linux alvo. Um dos servidores FPC é um SUSE, de onde eu obtive a lista abaixo:
152+\- Um árvore do Lazarus (qualquer uma construível a partir do mesmo período).
122153
123-1\) Baixar <ftp://freepascal.stack.nl/pub/fpc/contrib/cross/mingw/binutils-2.15-win32-i386-linux.zip>
154+\- Muitas bibliotecs do Linux alvo. Um dos servidores FPC é um SUSE, de onde eu obtive a lista abaixo:
124155
125-2\) Extraia-o e mova os arquivos i386* para \<fpcbindir\>\bin\i386-win3 (por exemplo c:\pp\bin\i386\win32)
156+1) Baixar <ftp://freepascal.stack.nl/pub/fpc/contrib/cross/mingw/binutils-2.15-win32-i386-linux.zip>
126157
127-3\) Vá parra o diretório dos fontes do FPC
158+2) Extraia-o e mova os arquivos i386* para <fpcbindir>\bin\i386-win3 (por exemplo c:\pp\bin\i386\win32)
128159
129-4\) make clean
160+3) Vá parra o diretório dos fontes do FPC
130161
131-5\) Faça o OS_TARGET = linux all
162+4) make clean
132163
133-6\) Faça o OS_TARGET = linux e instale INSTALL_PREFIX = \<fpcbindir\>
164+5) Faça o OS_TARGET = linux all
134165
135-7\) Prepare o diretório lib como nas intruções abaixo, eu usei d:\fpc\linuxlib para estocá-las.
166+6) Faça o OS_TARGET = linux e instale INSTALL_PREFIX = <fpcbindir>
136167
137-8\) Vá para \<fpcbindir\>\units\i386-linux\rtl e copie o cprt21.o sobre o cprt0.o
168+7) Prepare o diretório lib como nas intruções abaixo, eu usei d:\fpc\linuxlib para estocá-las.
138169
139-9\) Vá para o diretório do Lazarus
170+8) Vá para <fpcbindir>\units\i386-linux\rtl e copie o cprt21.o sobre o cprt0.o
140171
141-10\) Edite o lazarus.pp e adicione {\$linklib dl} e {\$linklib gmodule} em algum lugar nos fontes.
172+9) Vá para o diretório do Lazarus
142173
143-11\) Faça o OS_TARGET = linux all OPT = "-gl -Fld:\fpc\linuxlib -Xr/usr/lib -FL/usr/lib/ld-linux.so.2"
174+10) Edite o lazarus.pp e adicione {$linklib dl} e {$linklib gmodule} em algum lugar nos fontes.
144175
145-Se der algum erro do vinculador (mais especificamente linker can't find -l\<something\>) então
176+11) Faça o OS_TARGET = linux all OPT = "-gl -Fld:\fpc\linuxlib -Xr/usr/lib -FL/usr/lib/ld-linux.so.2"
146177
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
178+Se der algum erro do vinculador (mais especificamente linker can't find -l<something>) então
148179
149-`   libs, to keep them apart from gtk2`
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+```
150184
151-13\) Execute o ppas.bat para reiniciar o vinculador
185+13) Execute o ppas.bat para reiniciar o vinculador
152186
153187### Bibliotecas
154188
155-Existem as bibliotecas que eu coletei para Lazarus e a IDE modo texto(o Lazarus não precisa da pthread).
189+Existem as bibliotecas que eu coletei para Lazarus e a IDE modo texto(o Lazarus não precisa da pthread).
156190
157-Eu as coletei do target system e renomeei todas de lib\<name\>.so.x.y to lib\<name\>.so.
191+Eu as coletei do target system e renomeei todas de lib<name>.so.x.y to lib<name>.so.
158192
159-libgcc.a e umas outras são mais fáceis de encontrar fazendo gcc -v e procurando uma linha como
193+libgcc.a e umas outras são mais fáceis de encontrar fazendo gcc -v e procurando uma linha como
160194
161-"Reading specs from /usr/lib/gcc-lib/i486-linux/3.3.5/specs"
195+"Reading specs from /usr/lib/gcc-lib/i486-linux/3.3.5/specs"
162196
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
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
164198
165-libpthread.so.0
199+libpthread.so.0
166200
167-libdl.so
201+libdl.so
168202
169-libc.so
203+libc.so
170204
171-ld-linux.so.2
205+ld-linux.so.2
172206
173-crtbegin.o
207+crtbegin.o
174208
175-crtbeginS.o
209+crtbeginS.o
176210
177-crtbeginT.o
211+crtbeginT.o
178212
179-crtend.o
213+crtend.o
180214
181-crtendS.o
215+crtendS.o
182216
183-crtn.o
217+crtn.o
184218
185-crti.o
219+crti.o
186220
187-libgcc.a
221+libgcc.a
188222
189-libX11.so
223+libX11.so
190224
191-libXi.so
225+libXi.so
192226
193-libglib-1.2.so
227+libglib-1.2.so
194228
195-libgmodule-1.2.so.0
229+libgmodule-1.2.so.0
196230
197-libgdk_pixbuf.so
231+libgdk_pixbuf.so
198232
199-libgdk-1.2.so
233+libgdk-1.2.so
200234
201-libgtk-1.2.so
235+libgtk-1.2.so
202236
203-libXext.so
237+libXext.so
204238
205-libm.so
239+libm.so
206240
207-libdl.so.2
241+libdl.so.2
208242
209-libgmodule-1.2.so
243+libgmodule-1.2.so
210244
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.
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.
212246
213-Nome exato (assim o form lib\<name\>.so.x) Não podemos symlink no windows, então eu simplesmente o copiei.
247+Nome exato (assim o form lib<name>.so.x) Não podemos symlink no windows, então eu simplesmente o copiei.
214248
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.
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.
216250
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.
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.
218252
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.
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.
220254
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.
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.
222256
223257# De Darwin (macOS) i386
224258
225259## De i386 para PowerPC
226260
227-- Cross Binutils
228-
229-Primeiro verifique se você já tem os arquivos powerpc-darwin-ld e powerpc-darwin-as:
230-
231-` $ which powerpc-darwin-ld`\
232-` $ which powerpc-darwin-as`
233-
234-Se você tem esses arquivos, pule a criação dos symlinks e vá para o título "Compilar o FPC"
235-
236-Atualmente as binutils "normais" podem ser usadas, já que elas são universais. Portanto, symlinks simples são suficientes:
261+ * Cross Binutils
237262
238-` $ sudo ln -s /usr/bin/as /usr/bin/powerpc-darwin-as`\
239-` $ sudo ln -s /usr/bin/ld /usr/bin/powerpc-darwin-ld`
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+```
240268
241-Os symlinks podem ficar em qualquer outro diretório, desde que estejam no seu \$PATH (por exemplo /sw/bin when installing through fink).
269+Se você tem esses arquivos, pule a criação dos symlinks e vá para o título "Compilar o FPC"
242270
243-- Compilar o FPC:
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+```
244276
245-` $ cd fpc/compiler`\
246-` $ make cycle CPU_TARGET=powerpc`
277+Os symlinks podem ficar em qualquer outro diretório, desde que estejam no seu $PATH (por exemplo /sw/bin when installing through fink).
247278
248-Isto cria o compilarod PowerPC (fpc/compiler/ppcppc) e as unidades da RTL.
279+ * Compilar o FPC:
249280
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.
281+```
282+$ cd fpc/compiler
283+ $ make cycle CPU_TARGET=powerpc
284+```
251285
252-Mais teste e documentação são necessários para instalação paralela e uso dos dois.
286+Isto cria o compilarod PowerPC (fpc/compiler/ppcppc) e as unidades da RTL.
253287
254-Se faltarem unidades, verifique seu arquivo de configuração, \$HOME/.fpc.cfg or /etc/fpc.cfg or /sw/etc/fpc.cfg.
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.
255289
256-Você pode ter que adicionar alguma coisa like or where ever as suas unidades estiverem localizadas.
290+Mais teste e documentação são necessários para instalação paralela e uso dos dois.
257291
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/*`
292+Se faltarem unidades, verifique seu arquivo de configuração, $HOME/.fpc.cfg or /etc/fpc.cfg or /sw/etc/fpc.cfg.
261293
262-Lembrete: Binários universais são criados dos binários individuais (i386 and powerpc) usando lipo.
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+```
263300
264-Currently (fpc 3.0.4) gives:
301+Lembrete: Binários universais são criados dos binários individuais (i386 and powerpc) usando lipo.
265302
266-``` bash
303+Currently (fpc 3.0.4) gives:
304+```
267305fpc-cross-arm-gba
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
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
292330```
293331
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.
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.
295333
296334# FAQ de compilação cruzada
297335
298336## Por que compilação cruzada?
299337
300-Assim você pode desenvolver um programa para um OS/CPU e compilá-lo para outro OS/CPU sem reiniciar ou trocar de computador.
338+Assim você pode desenvolver um programa para um OS/CPU e compilá-lo para outro OS/CPU sem reiniciar ou trocar de computador.
301339
302340## Por que Linux para Windows e não de outro modo?
303341
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.
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.
305343
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.).
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.).
307345
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?).
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?).
309347
310348## Eu gostaria de mais informações sobre a construção do Free Pascal. Onde posso encontrar?
311349
312350Essa é uma FAQ genérica em formato pdf sobre como construir e configurar o FPC: <http://www.stack.nl/~marcov/buildfaq.pdf>.
313351
314352---
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).*
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).*

Back to history