====== Target di build ======
WvdS FPC RAD Studio supporta diversi target di build per piattaforme differenti.
===== Panoramica =====
^ Target ^ Compilatore ^ Output ^ Ambiente runtime ^
| GUI | FPC | Binary nativo | Desktop (Windows/Linux/macOS) |
| TUI | FPC | Binary nativo | Terminale |
| Web | pas2js | JavaScript | Browser/Node.js |
| Extension | pas2js | JavaScript | VS Code Extension Host |
===== Target GUI =====
Applicazioni desktop native con interfaccia grafica.
==== Tecnologia ====
* **Compilatore:** Free Pascal Compiler (FPC)
* **UI Framework:** LCL (Lazarus Component Library)
* **Output:** .exe (Windows), Binary (Linux/macOS)
==== Rendering PXAML ====
PXAML → IR → GUI Renderer → Controlli LCL
**Controlli supportati:**
* Tutti i controlli standard LCL
* Controlli WvdS personalizzati
* Widget nativi per piattaforma
==== Configurazione build ====
[build]
target=gui
platform=windows-x64
[gui]
widgetset=win32 # oppure: gtk2, qt5, cocoa
===== Target TUI =====
Interfacce utente basate su terminale per server e CLI.
==== Tecnologia ====
* **Compilatore:** Free Pascal Compiler (FPC)
* **UI Framework:** WvdS TUI Framework
* **Output:** Binary nativo con output ANSI/VT100
==== Rendering PXAML ====
PXAML → IR → TUI Renderer → Sequenze escape ANSI
**Controlli supportati:**
* TextBlock, Label
* TextBox (input singola riga)
* Button (con navigazione tastiera)
* ListBox, Table
* ProgressBar
* Border, Panel
==== Configurazione build ====
[build]
target=tui
platform=linux-x64
[tui]
colors=256 # oppure: 16, truecolor
unicode=true
===== Target Web =====
Applicazioni browser tramite transpilazione pas2js.
==== Tecnologia ====
* **Compilatore:** pas2js
* **Output:** Bundle JavaScript
* **Runtime:** Browser, Electron, PWA
==== Rendering PXAML ====
PXAML → IR → Web Renderer → DOM/CSS
**Controlli supportati:**
* Tutti i controlli nativi HTML
* Styling basato su CSS
* Layout Flexbox/Grid
==== Configurazione build ====
[build]
target=web
platform=browser
[web]
minify=true
sourcemaps=true
===== Target Extension =====
Estensioni VS Code in Pascal.
==== Tecnologia ====
* **Compilatore:** pas2js
* **Output:** Modulo CommonJS
* **Runtime:** VS Code Extension Host (Node.js)
==== Particolarita ====
* Nessun accesso DOM
* API VS Code disponibile
* WebView per UI
==== Configurazione build ====
[build]
target=extension
platform=vscode
[extension]
minversion=1.85.0
===== Matrice piattaforme =====
^ Funzionalita ^ GUI ^ TUI ^ Web ^ Extension ^
| Finestre | Si | No | Si | WebView |
| Dialoghi | Si | Limitato | Si | Quick Input |
| Menu | Si | No | Si | Contributes |
| Accesso file | Si | Si | Limitato | Si |
| Rete | Si | Si | CORS | Si |
| Multi-threading | Si | Si | Web Workers | No |
===== Condivisione codice =====
Il codice comune per tutti i target si trova in ''sources/common/'':
sources/common/
├── core/ # Tipi base, utility
├── ui/
│ ├── controls/ # Astrazione controlli
│ ├── runtime/ # Runtime PXAML
│ └── targets/
│ ├── gui/ # Specifico GUI
│ ├── tui/ # Specifico TUI
│ └── web/ # Specifico Web
**Compilazione condizionale:**
{$IFDEF TARGET_GUI}
uses LCLType, Forms;
{$ENDIF}
{$IFDEF TARGET_WEB}
uses JS, Web;
{$ENDIF}
{$IFDEF TARGET_TUI}
uses WvdS.TUI.Console;
{$ENDIF}
===== Vedi anche =====
* [[.:architektur|Panoramica architettura]]
* [[.:build-pipeline|Pipeline di build]]
* [[.:pxaml-pipeline|Pipeline PXAML]]