Plataformas e modos
MSWin64, MSWin32 e Linux64; os modos Debug, Release e Fast; e os níveis de otimização.
Plataformas#
O alvo se escolhe com -P<plataforma> (ou Default Platform na configuração) e define símbolos que o fonte pode testar com {$ifdef}.
| Plataforma | Estado |
|---|---|
MSWin64 | A plataforma entregável e a padrão. É onde tudo funciona: a RTL, a WCL, o RAD e os aplicativos. |
MSWin32 | Gera um PE32 que roda, mas está incompleto: falta o alocador de 32 bits e a biblioteca de apoio do LLVM para x86, de modo que as operações de 128 bits ficam por fechar. |
Linux64 | O ligador gera ELF, e um programa simples (ola do Linux) compila, liga e roda no WSL. Depende de uma instalação externa de Linux (o crt1.o e a libc), apontada por MYCOMPILER_SYSROOT ou pelo rootfs do WSL: não há toolchain fechada. A WCL para Linux está em fase de planejamento, sobre controles do GTK. |
A RTL tem uma fachada POSIX (Sys*) com o mesmo contrato nas duas famílias; por exemplo, um evento é um futex no Linux.
Modos#
Um modo é só um nome, escolhido com -M<modo> ou Default Mode. A convenção é Debug e Release, e o RAD cria também Fast:
| Modo | Para quê | Típico |
|---|---|---|
Debug | depurar | -O0, informação de depuração e mapa ligados, símbolo DEBUG |
Release | entregar | -O2, nada de depuração |
Fast | iterar | -O0, sem depuração (o ciclo mais curto) |
Os ajustes de cada modo são as linhas Config, Define, UserVar e SysConst do .config, com escopo no modo (ou em All). Nada impede criar Homolog, Profile ou o que você precisar.
Otimização#
| Nível | Quando usar |
|---|---|
-O0 | o dia a dia: compila mais rápido e permite depurar |
-O1, -O2 | meio-termo |
-O3 | o padrão do fc: a entrega |
Subsistema do executável#
{$config AppType GUI|CONSOLE} no fonte, ou Config <escopo> AppType GUI na configuração, escolhe o subsistema do PE. O padrão é CONSOLE; GUI não abre uma janela de console. Numa aplicação de janelas, o RAD escreve Config All AppType GUI.
Saídas por plataforma e modo#
Com Config All OutputPath ($ProjectPath)\bin\($PlatformMode), cada combinação tem a sua pasta (bin\MSWin64Debug, bin\MSWin64Release). Sem isso, os modos gravariam os mesmos arquivos e quem compilasse por último apagaria o outro: um problema real, descoberto quando um Debug sobrescreveu um Release e só o carimbo de hora denunciou, porque os dois binários têm quase o mesmo tamanho.