Fenner
Compilador

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

PlataformaEstado
MSWin64A plataforma entregável e a padrão. É onde tudo funciona: a RTL, a WCL, o RAD e os aplicativos.
MSWin32Gera 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.
Linux64O 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:

ModoPara quêTípico
Debugdepurar-O0, informação de depuração e mapa ligados, símbolo DEBUG
Releaseentregar-O2, nada de depuração
Fastiterar-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ívelQuando usar
-O0o dia a dia: compila mais rápido e permite depurar
-O1, -O2meio-termo
-O3o 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.