Cross compiling/pt: what changed
Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.
| Old | New | Line | |
|---|---|---|---|
| 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 | + | ||
| 1 | 19 | # Introdução | |
| 2 | 20 | ||
| 3 | - | ||
| 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. | |
| 4 | 22 | ||
| 5 | 23 | ## Passos Básicos | |
| 6 | 24 | ||
| 7 | - | ||
| 25 | + | Existem uns poucos passos em comum implicados em compilação cruzada que você precisa cumprir em cada caso: | |
| 8 | 26 | ||
| 9 | - | ||
| 10 | - | ||
| 11 | - | ||
| 12 | - | ||
| 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. | |
| 13 | 31 | ||
| 14 | 32 | # De Linux | |
| 15 | 33 | ||
| 16 | 34 | ## Para Linux | |
| 17 | 35 | ||
| 18 | - | ||
| 19 | - | ||
| 20 | - | ||
| 21 | - | ||
| 22 | - | ||
| 23 | - | ||
| 24 | - | ||
| 25 | - | ||
| 36 | + | Fique claro que isso é para compilar de Linux(x86_64) para Linux(i386). | |
| 26 | 37 | ||
| 27 | - | ||
| 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: | |
| 28 | 39 | ||
| 29 | - | ||
| 30 | - | ||
| 31 | - | ||
| 40 | + | * Primeiro cheque se você já tem os arquivos i386-linux-ld e i386-linux-as: | |
| 32 | 41 | ||
| 33 | - | ||
| 34 | - | ||
| 35 | - | ||
| 42 | + | ``` | |
| 43 | + | bash $ which i386-linux-ld | |
| 44 | + | bash $ which i386-linux-as | |
| 45 | + | ``` | |
| 36 | 46 | ||
| 37 | - | ||
| 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 | + | ``` | |
| 38 | 58 | ||
| 39 | - | ||
| 40 | - | ||
| 59 | + | * Fazê-los um executável: | |
| 41 | 60 | ||
| 42 | - | ||
| 61 | + | ``` | |
| 62 | + | bash $ chmod +x /usr/bin/i386-linux-as | |
| 63 | + | bash $ chmod +x /usr/bin/i386-linux-ld | |
| 64 | + | ``` | |
| 43 | 65 | ||
| 44 | - | ||
| 66 | + | * Compilar o FPC: | |
| 45 | 67 | ||
| 46 | - | ||
| 68 | + | ``` | |
| 69 | + | bash $ make all CPU_TARGET=i386 | |
| 70 | + | ``` | |
| 47 | 71 | ||
| 48 | - | ||
| 72 | + | então: | |
| 73 | + | ``` | |
| 74 | + | bash $ su -c "make install CPU_TARGET=i386" | |
| 75 | + | ``` | |
| 49 | 76 | ||
| 50 | - | ||
| 77 | + | É isso. Edite seu arquivo /etc/fpc.cfg se necessário. | |
| 51 | 78 | ||
| 52 | 79 | ## Para Windows | |
| 53 | 80 | ||
| 54 | - | ||
| 81 | + | Manual oficial [[Cross compiling for Windows under Linux]] | |
| 55 | 82 | Manual para Lazarus 0.9.22 e FPC 2.0.4 <http://fdavid.com.br/blog/?p=4> | |
| 56 | 83 | ||
| 57 | - | ||
| 58 | - | ||
| 59 | - | ||
| 60 | - | ||
| 61 | - | ||
| 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 | + | ``` | |
| 62 | 88 | ||
| 63 | - | ||
| 89 | + | e então | |
| 90 | + | ``` | |
| 91 | + | bash $ su -c "make crossinstall OS_TARGET=win32 CPU_TARGET=i386" | |
| 92 | + | ``` | |
| 64 | 93 | ||
| 65 | - | ||
| 94 | + | Nota: para construir para Win64, o comando make é: make all OS TARGET=win64 CPU_TARGET=x86_64 | |
| 66 | 95 | ||
| 67 | - | ||
| 96 | + | A razão dessa simplicidade é o vinculador interno incluído nessa versão do FPC. | |
| 68 | 97 | ||
| 69 | 98 | ## Para Darwin ou macOS | |
| 70 | 99 | ||
| 71 | - | ||
| 72 | - | ||
| 73 | - | ||
| 74 | - | ||
| 75 | - | ||
| 76 | - | ||
| 77 | - | ||
| 78 | - | ||
| 79 | - | ||
| 80 | - | ||
| 81 | - | ||
| 82 | - | ||
| 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. | |
| 83 | 104 | ||
| 84 | - | ||
| 105 | + | Escreva: | |
| 106 | + | ``` | |
| 107 | + | $PATH=$PATH:$HOME/darwinroot/cross (ou onde você fez os symlinks) | |
| 108 | + | ``` | |
| 85 | 109 | ||
| 86 | - | ||
| 110 | + | Escreva (iirc): | |
| 111 | + | ``` | |
| 112 | + | make all TARGET_OS=darwin TARGET_CPU=powerpc OPT="-Xd -Fl/$HOME/darwinroot/usr/lib" | |
| 113 | + | ``` | |
| 87 | 114 | ||
| 88 | - | ||
| 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 | + | ``` | |
| 89 | 119 | ||
| 90 | - | ||
| 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. | |
| 91 | 121 | ||
| 92 | - | ||
| 122 | + | * Configure o seu arquivo /etc/fpc.cfg. | |
| 93 | 123 | ||
| 94 | - | ||
| 95 | - | ||
| 96 | - | ||
| 97 | - | ||
| 98 | - | ||
| 99 | - | ||
| 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 | + | ``` | |
| 100 | 133 | ||
| 101 | - | ||
| 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. | |
| 102 | 135 | ||
| 103 | 136 | # De Windows | |
| 104 | 137 | ||
| 105 | 138 | ## Para Linux | |
| 106 | 139 | ||
| 107 | - | ||
| 108 | - | ||
| 109 | - | ||
| 140 | + | (Marco vd Voort) | |
| 110 | 141 | ||
| 111 | - | ||
| 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) | |
| 112 | 143 | ||
| 113 | - | ||
| 144 | + | Requisitos: | |
| 114 | 145 | ||
| 115 | - | ||
| 146 | + | \- FPC 1.9.6 ou superior. 1.9.4 deve funcionar, mas não foi testado. | |
| 116 | 147 | ||
| 117 | - | ||
| 148 | + | -<ftp://freepascal.stack.nl/pub/fpc/contrib/cross/mingw/binutils-2.15-win32-i386-linux.zip> | |
| 118 | 149 | ||
| 119 | - | ||
| 150 | + | \- O FPC do repositório CVS (qualquer um acima de 1.9.6). | |
| 120 | 151 | ||
| 121 | - | ||
| 152 | + | \- Um árvore do Lazarus (qualquer uma construível a partir do mesmo período). | |
| 122 | 153 | ||
| 123 | - | ||
| 154 | + | \- Muitas bibliotecs do Linux alvo. Um dos servidores FPC é um SUSE, de onde eu obtive a lista abaixo: | |
| 124 | 155 | ||
| 125 | - | ||
| 156 | + | 1) Baixar <ftp://freepascal.stack.nl/pub/fpc/contrib/cross/mingw/binutils-2.15-win32-i386-linux.zip> | |
| 126 | 157 | ||
| 127 | - | ||
| 158 | + | 2) Extraia-o e mova os arquivos i386* para <fpcbindir>\bin\i386-win3 (por exemplo c:\pp\bin\i386\win32) | |
| 128 | 159 | ||
| 129 | - | ||
| 160 | + | 3) Vá parra o diretório dos fontes do FPC | |
| 130 | 161 | ||
| 131 | - | ||
| 162 | + | 4) make clean | |
| 132 | 163 | ||
| 133 | - | ||
| 164 | + | 5) Faça o OS_TARGET = linux all | |
| 134 | 165 | ||
| 135 | - | ||
| 166 | + | 6) Faça o OS_TARGET = linux e instale INSTALL_PREFIX = <fpcbindir> | |
| 136 | 167 | ||
| 137 | - | ||
| 168 | + | 7) Prepare o diretório lib como nas intruções abaixo, eu usei d:\fpc\linuxlib para estocá-las. | |
| 138 | 169 | ||
| 139 | - | ||
| 170 | + | 8) Vá para <fpcbindir>\units\i386-linux\rtl e copie o cprt21.o sobre o cprt0.o | |
| 140 | 171 | ||
| 141 | - | ||
| 172 | + | 9) Vá para o diretório do Lazarus | |
| 142 | 173 | ||
| 143 | - | ||
| 174 | + | 10) Edite o lazarus.pp e adicione {$linklib dl} e {$linklib gmodule} em algum lugar nos fontes. | |
| 144 | 175 | ||
| 145 | - | ||
| 176 | + | 11) Faça o OS_TARGET = linux all OPT = "-gl -Fld:\fpc\linuxlib -Xr/usr/lib -FL/usr/lib/ld-linux.so.2" | |
| 146 | 177 | ||
| 147 | - | ||
| 178 | + | Se der algum erro do vinculador (mais especificamente linker can't find -l<something>) então | |
| 148 | 179 | ||
| 149 | - | ||
| 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 | + | ``` | |
| 150 | 184 | ||
| 151 | - | ||
| 185 | + | 13) Execute o ppas.bat para reiniciar o vinculador | |
| 152 | 186 | ||
| 153 | 187 | ### Bibliotecas | |
| 154 | 188 | ||
| 155 | - | ||
| 189 | + | Existem as bibliotecas que eu coletei para Lazarus e a IDE modo texto(o Lazarus não precisa da pthread). | |
| 156 | 190 | ||
| 157 | - | ||
| 191 | + | Eu as coletei do target system e renomeei todas de lib<name>.so.x.y to lib<name>.so. | |
| 158 | 192 | ||
| 159 | - | ||
| 193 | + | libgcc.a e umas outras são mais fáceis de encontrar fazendo gcc -v e procurando uma linha como | |
| 160 | 194 | ||
| 161 | - | ||
| 195 | + | "Reading specs from /usr/lib/gcc-lib/i486-linux/3.3.5/specs" | |
| 162 | 196 | ||
| 163 | - | ||
| 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 | |
| 164 | 198 | ||
| 165 | - | ||
| 199 | + | libpthread.so.0 | |
| 166 | 200 | ||
| 167 | - | ||
| 201 | + | libdl.so | |
| 168 | 202 | ||
| 169 | - | ||
| 203 | + | libc.so | |
| 170 | 204 | ||
| 171 | - | ||
| 205 | + | ld-linux.so.2 | |
| 172 | 206 | ||
| 173 | - | ||
| 207 | + | crtbegin.o | |
| 174 | 208 | ||
| 175 | - | ||
| 209 | + | crtbeginS.o | |
| 176 | 210 | ||
| 177 | - | ||
| 211 | + | crtbeginT.o | |
| 178 | 212 | ||
| 179 | - | ||
| 213 | + | crtend.o | |
| 180 | 214 | ||
| 181 | - | ||
| 215 | + | crtendS.o | |
| 182 | 216 | ||
| 183 | - | ||
| 217 | + | crtn.o | |
| 184 | 218 | ||
| 185 | - | ||
| 219 | + | crti.o | |
| 186 | 220 | ||
| 187 | - | ||
| 221 | + | libgcc.a | |
| 188 | 222 | ||
| 189 | - | ||
| 223 | + | libX11.so | |
| 190 | 224 | ||
| 191 | - | ||
| 225 | + | libXi.so | |
| 192 | 226 | ||
| 193 | - | ||
| 227 | + | libglib-1.2.so | |
| 194 | 228 | ||
| 195 | - | ||
| 229 | + | libgmodule-1.2.so.0 | |
| 196 | 230 | ||
| 197 | - | ||
| 231 | + | libgdk_pixbuf.so | |
| 198 | 232 | ||
| 199 | - | ||
| 233 | + | libgdk-1.2.so | |
| 200 | 234 | ||
| 201 | - | ||
| 235 | + | libgtk-1.2.so | |
| 202 | 236 | ||
| 203 | - | ||
| 237 | + | libXext.so | |
| 204 | 238 | ||
| 205 | - | ||
| 239 | + | libm.so | |
| 206 | 240 | ||
| 207 | - | ||
| 241 | + | libdl.so.2 | |
| 208 | 242 | ||
| 209 | - | ||
| 243 | + | libgmodule-1.2.so | |
| 210 | 244 | ||
| 211 | - | ||
| 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. | |
| 212 | 246 | ||
| 213 | - | ||
| 247 | + | Nome exato (assim o form lib<name>.so.x) Não podemos symlink no windows, então eu simplesmente o copiei. | |
| 214 | 248 | ||
| 215 | - | ||
| 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. | |
| 216 | 250 | ||
| 217 | - | ||
| 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. | |
| 218 | 252 | ||
| 219 | - | ||
| 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. | |
| 220 | 254 | ||
| 221 | - | ||
| 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. | |
| 222 | 256 | ||
| 223 | 257 | # De Darwin (macOS) i386 | |
| 224 | 258 | ||
| 225 | 259 | ## De i386 para PowerPC | |
| 226 | 260 | ||
| 227 | - | ||
| 228 | - | ||
| 229 | - | ||
| 230 | - | ||
| 231 | - | ||
| 232 | - | ||
| 233 | - | ||
| 234 | - | ||
| 235 | - | ||
| 236 | - | ||
| 261 | + | * Cross Binutils | |
| 237 | 262 | ||
| 238 | - | ||
| 239 | - | ||
| 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 | + | ``` | |
| 240 | 268 | ||
| 241 | - | ||
| 269 | + | Se você tem esses arquivos, pule a criação dos symlinks e vá para o título "Compilar o FPC" | |
| 242 | 270 | ||
| 243 | - | ||
| 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 | + | ``` | |
| 244 | 276 | ||
| 245 | - | ||
| 246 | - | ||
| 277 | + | Os symlinks podem ficar em qualquer outro diretório, desde que estejam no seu $PATH (por exemplo /sw/bin when installing through fink). | |
| 247 | 278 | ||
| 248 | - | ||
| 279 | + | * Compilar o FPC: | |
| 249 | 280 | ||
| 250 | - | ||
| 281 | + | ``` | |
| 282 | + | $ cd fpc/compiler | |
| 283 | + | $ make cycle CPU_TARGET=powerpc | |
| 284 | + | ``` | |
| 251 | 285 | ||
| 252 | - | ||
| 286 | + | Isto cria o compilarod PowerPC (fpc/compiler/ppcppc) e as unidades da RTL. | |
| 253 | 287 | ||
| 254 | - | ||
| 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. | |
| 255 | 289 | ||
| 256 | - | ||
| 290 | + | Mais teste e documentação são necessários para instalação paralela e uso dos dois. | |
| 257 | 291 | ||
| 258 | - | ||
| 259 | - | ||
| 260 | - | ||
| 292 | + | Se faltarem unidades, verifique seu arquivo de configuração, $HOME/.fpc.cfg or /etc/fpc.cfg or /sw/etc/fpc.cfg. | |
| 261 | 293 | ||
| 262 | - | ||
| 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 | + | ``` | |
| 263 | 300 | ||
| 264 | - | ||
| 301 | + | Lembrete: Binários universais são criados dos binários individuais (i386 and powerpc) usando lipo. | |
| 265 | 302 | ||
| 266 | - | ||
| 303 | + | Currently (fpc 3.0.4) gives: | |
| 304 | + | ``` | |
| 267 | 305 | fpc-cross-arm-gba | |
| 268 | - | ||
| 269 | - | ||
| 270 | - | ||
| 271 | - | ||
| 272 | - | ||
| 273 | - | ||
| 274 | - | ||
| 275 | - | ||
| 276 | - | ||
| 277 | - | ||
| 278 | - | ||
| 279 | - | ||
| 280 | - | ||
| 281 | - | ||
| 282 | - | ||
| 283 | - | ||
| 284 | - | ||
| 285 | - | ||
| 286 | - | ||
| 287 | - | ||
| 288 | - | ||
| 289 | - | ||
| 290 | - | ||
| 291 | - | ||
| 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 | |
| 292 | 330 | ``` | |
| 293 | 331 | ||
| 294 | - | ||
| 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. | |
| 295 | 333 | ||
| 296 | 334 | # FAQ de compilação cruzada | |
| 297 | 335 | ||
| 298 | 336 | ## Por que compilação cruzada? | |
| 299 | 337 | ||
| 300 | - | ||
| 338 | + | Assim você pode desenvolver um programa para um OS/CPU e compilá-lo para outro OS/CPU sem reiniciar ou trocar de computador. | |
| 301 | 339 | ||
| 302 | 340 | ## Por que Linux para Windows e não de outro modo? | |
| 303 | 341 | ||
| 304 | - | ||
| 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. | |
| 305 | 343 | ||
| 306 | - | ||
| 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.). | |
| 307 | 345 | ||
| 308 | - | ||
| 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?). | |
| 309 | 347 | ||
| 310 | 348 | ## Eu gostaria de mais informações sobre a construção do Free Pascal. Onde posso encontrar? | |
| 311 | 349 | ||
| 312 | 350 | Essa é uma FAQ genérica em formato pdf sobre como construir e configurar o FPC: <http://www.stack.nl/~marcov/buildfaq.pdf>. | |
| 313 | 351 | ||
| 314 | 352 | --- | |
| 315 | - | ||
| 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).* |
