Inhaltsverzeichnis
Pipeline di build
Descrizione del processo di build per WvdS FPC RAD Studio.
Panoramica
┌─────────────────────────────────────────────────────────────┐ │ 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 │ │ │ └─────────────────────────────────────────────────────────────┘
Pre-Build
Controllo policy
wvds-lint policy --path sources/
Verifica:
- P0: Nessun duplicato nelle estensioni
- P1: Nessun .ts o .js scritto a mano
- P2: Wrapper solo in common/
- P3: Output autocontenuto
Risoluzione dipendenze
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
Compile
Compilazione pas2js
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
Compilazione FPC
fpc \ -Mobjfpc \ # Modalita Object Pascal -Sh \ # Ansi Strings -O3 \ # Ottimizzazione livello 3 -Fu../../common \ # Percorsi unit -FE./bin \ # Directory output project.lpr # File progetto
Opzioni compilatore
| 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 |
Post-Build
Bundling asset
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
Source Map
Le source map permettono il debug del codice Pascal:
// extension_main.js.map
{
"version": 3,
"sources": ["../pas/extension_main.pas"],
"mappings": "..."
}
Package
Creazione VSIX
vsce package --out binaries/dist/
Genera: wvds-vscode-{name}-{version}.vsix
Stampa versione
La versione viene letta da package.json e incorporata nel build:
const VERSION = {$I version.inc}; // Generato da package.json
Modalita build
| Modalita | Utilizzo | Ottimizzazione | Simboli |
|---|---|---|---|
| debug | Sviluppo | Nessuna | Si |
| release | Produzione | Massima | No |
| profile | Analisi performance | Media | Si + profiling |
Build incrementale
Il build usa il caching per compilazione piu veloce:
binaries/cache/contiene le unit compilate (.ppu, .o)- Solo le unit modificate vengono ricompilate
wvds-build cleancancella la cache
CLI Toolchain
La toolchain di build consiste di due strumenti principali:
pxamlc (Compilatore PXAML)
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 |
wvds-build
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 |
Altri comandi
# 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
File di configurazione
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 } } }
Task VS Code
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"] } ] }
Non modificare manualmente i task - vengono generati da
wvds-build.
Integrazione CI/CD
# .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
Risoluzione problemi
"Unit not found"
- Verificare percorsi unit in build.cfg
- Verificare maiuscole/minuscole (Linux)
"JavaScript error"
- Usare source map per debugging
- Verificare warning nell'output pas2js
"VSIX invalid"
- Validare package.json
- README.md deve esistere
- Verificare percorso icona
Vedi anche
Zuletzt geändert: il 29/01/2026 alle 22:37