Descrizione del processo di build per WvdS FPC RAD Studio.
┌─────────────────────────────────────────────────────────────┐ │ BUILD PIPELINE │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 1. PRE-BUILD │ │ ├── Controllo policy (wvds-lint) │ │ ├── Risoluzione dipendenze │ │ └── Preparazione asset │ │ │ │ 2. COMPILE │ │ ├── Invocazione pas2js / FPC │ │ ├── Risoluzione unit │ │ └── Generazione codice │ │ │ │ 3. POST-BUILD │ │ ├── Bundling asset │ │ ├── Generazione source map │ │ └── Copia in dist/ │ │ │ │ 4. PACKAGE (opzionale) │ │ ├── Creazione VSIX │ │ └── Stampa versione │ │ │ └─────────────────────────────────────────────────────────────┘
wvds-lint policy --path sources/
Verifica:
Le dipendenze vengono risolte da build.cfg e package.json:
# build.cfg [build] compiler=pas2js entry=extension_main.pas [dependencies] core=../../common/core vscode=../../common/web/vscode
pas2js \ -Jc \ # Output compatto -Jirtl.js \ # RTL come modulo esterno -Jm \ # Genera source map -Tbrowser \ # Target: browser -Fu../../common \ # Percorsi unit -FE./dist \ # Directory output pas/extension_main.pas # Entry point
fpc \ -Mobjfpc \ # Modalita Object Pascal -Sh \ # Ansi Strings -O3 \ # Ottimizzazione livello 3 -Fu../../common \ # Percorsi unit -FE./bin \ # Directory output project.lpr # File progetto
| Opzione | pas2js | FPC | Descrizione |
|---|---|---|---|
| Debug | -Jc -Jm | -g -O0 | Simboli debug, nessuna ottimizzazione |
| Release | -Jc -O3 | -O3 -Xs | Ottimizzato, nessun simbolo |
| Profile | -Jc -Jm | -g -O2 -pg | Instrumentazione profiling |
Le risorse vengono copiate in dist/:
dist/
├── extension_main.js # Codice compilato
├── extension_main.js.map # Source map
└── assets/ # Risorse copiate
├── templates/*.html
└── images/*.png
Le source map permettono il debug del codice Pascal:
// extension_main.js.map
{
"version": 3,
"sources": ["../pas/extension_main.pas"],
"mappings": "..."
}
vsce package --out binaries/dist/
Genera: wvds-vscode-{name}-{version}.vsix
La versione viene letta da package.json e incorporata nel build:
const VERSION = {$I version.inc}; // Generato da package.json
| Modalita | Utilizzo | Ottimizzazione | Simboli |
|---|---|---|---|
| debug | Sviluppo | Nessuna | Si |
| release | Produzione | Massima | No |
| profile | Analisi performance | Media | Si + profiling |
Il build usa il caching per compilazione piu veloce:
binaries/cache/ contiene le unit compilate (.ppu, .o)wvds-build clean cancella la cacheLa toolchain di build consiste di due strumenti principali:
Compila file PXAML per un target specifico:
pxamlc compile \ --target <tui|desktop|web> \ --pxaml <file.pxaml> \ --packs ~/packs \ --out ~/binaries/out/<app>/<target>
| Opzione | Descrizione |
|---|---|
--target | Piattaforma target: tui, desktop, web |
--pxaml | File PXAML di input |
--packs | Percorso alla registry pack |
--out | Directory output |
Orchestrazione dell'intero processo di build:
wvds-build build <tui|desktop|web> \ --app ~/sources/applications/<app> \ --config ~/.wvds/wvds-build.json \ --out ~/binaries/out
| Opzione | Descrizione |
|---|---|
--app | Directory applicazione |
--config | File di configurazione |
--out | Directory output |
# Eliminare tutti gli artefatti build wvds-build clean # Installare pack wvds-build pack install --from <packdir> --to ~/vendor-packs --enable tui,web # Disinstallare pack wvds-build pack uninstall --vendor <vendor> --pack <pack> # Elencare pack installati wvds-build pack list
Percorso: ~/.wvds/wvds-build.json
{ "compilers": { "fpc": "%LAZARUS%/fpc/3.3.1/bin/fpc.exe", "pas2js": "%LAZARUS%/fpc/3.3.1/bin/pas2js.exe" }, "paths": { "packs": "~/packs", "common": "~/sources/common", "output": "~/binaries/out" }, "defaults": { "target": "web", "mode": "debug" }, "targets": { "tui": { "compiler": "fpc", "enabled": true }, "desktop": { "compiler": "fpc", "enabled": true }, "web": { "compiler": "pas2js", "enabled": true } } }
I task vengono generati automaticamente:
// .vscode/tasks.json (generato) { "version": "2.0.0", "tasks": [ { "label": "WVDS: Build TUI", "type": "shell", "command": "${workspaceFolder}/.wvds/bin/wvds-build", "args": ["build", "tui"] }, { "label": "WVDS: Build Desktop", "type": "shell", "command": "${workspaceFolder}/.wvds/bin/wvds-build", "args": ["build", "desktop"] }, { "label": "WVDS: Build Web", "type": "shell", "command": "${workspaceFolder}/.wvds/bin/wvds-build", "args": ["build", "web"] } ] }
wvds-build.
# .github/workflows/build.yml build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install FPC run: sudo apt-get install fpc - name: Install pas2js run: sudo apt-get install pas2js - name: Build run: wvds-build --mode release - name: Package run: wvds-build package