Skip to content

Blog su Lazarus e il Pascal

Scrivi una volta e compila dove vuoi…

Free Pascal e WASM, a linea di comando

Posted on 19 Gennaio 202619 Gennaio 2026 By nomorelogic

Introduzione

Il WebAssembly (conosciuto anche come Wasm) è un formato di istruzioni binarie per una macchina virtuale basata su stack (stack-based virtual machine). Per chi volesse approfondire, l’homepage del progetto è a questo indirizzo: https://webassembly.org.

Questa VM è stata progettata per essere sicura, per poter essere eseguita in ambienti runtime multipli (da linea comando, da browser, in node.js, ecc..) e per poter essere target di compilazione per vari linguaggi di programmazione. Come convenzione, una applicazione compilata per WASM ha come suffisso .wasm.

In questo articolo, affrontando l’esecuzione di WASM a riga di comando, potremo sfruttare lo standard WASI (WebAssembly System Interface). Il WASI (opzionale a riga di comando e vietato nei browser) ci permette di avere un controllo maggiore sull’host in cui è in esecuzione la VM e cioè:

  • Accesso al filesystem (lettura/scrittura file)
  • Accesso alle variabili d’ambiente
  • Argomenti da riga di comando
  • Accesso all’orologio di sistema
  • I/O standard (stdin, stdout, stderr)

Il team di free pascal ha già iniziato a sperimentare la compilazione per WASM e, nonostante non sia ancora un ambiente pronto per la produzione, lo sviluppo è sicuramente ad uno stadio avanzato. Cosa infatti non da poco conto è che fpc compila se stesso in wasm e, questo, significa almeno 2 cose:

  • che il cross compiler per wasm, benché ancora nella trunk, è già molto affidabile
  • che fpc stesso può girare in un browser! (vedi: https://wiki.freepascal.org/WebAssembly)

Credo l’argomento sia già molto interessante quindi… iniziamo a vedere come funziona.

Prerequisiti

In questa occasione esploreremo la possibilità di generare binari WASM con WASI, per essere eseguiti a linea di comando. Per poter compilare il test di questo articolo, abbiamo bisogno:

  • del linker lld
  • del cross-compiler di fpc per wasm
  • del runtime per eseguire il classico hello world

Seguono quindi le indicazioni per impostare tutto il necessario.

Setup del linker lld

Iniziamo dal linker. Il compilatore WASM del Free Pascal utilizza il linker di LLVM e lo troviamo quindi (quasi) su tutte le piattaforme.
La homepage del progetto è: https://github.com/llvm/llvm-project/releases.
Nei sistemi Gnu/Linux e Mac lo si può installare tramite i repository ufficiali mentre, per windows, si può scaricare l’installer.

Una volta installato lld, possiamo testarne il funzionamento con i seguenti comandi:

  • lld --version
  • wasm-ld --version

In ambedue i casi, dovremmo ottenere un messaggio che conferma la corretta installazione.

Setup cross compiler wasm per fpc

Nel momento in cui sto scrivendo questo articolo, il necessario per poter usare il target WASM non è nella versione stabile del compilatore fpc: dobbiamo quindi installare la trunk.

Se non avete già un fpc versione trunk, ci sono diversi modi per ottenerlo. Sicuramente il più veloce è quello di utilizzare fpcupdeluxe.

Scaricate quindi l’ultima versione di fpcupdeluxe ed impostate l’installazione come segue:

  • compilatore fpc trunk
  • lazarus trunk

poi spostatevi nel tab “cross”, impostate:

  • wasm32
  • wasip1

Avviate l’installazione ed attendete qualche minuto.
Per provare il compilatore, creiamo un file che chiamiamo hw.pas e copiamoci dentro il seguente contenuto.

program helloworld;
begin
  Writeln(’Hello, world!’);
end.

Per compilare, ovviamente, dobbiamo usare il cross-compiler di fpc trunk.
Nell’esempio sotto, troviamo l’invocazione della compilazione da linea comando in ambiente linux.
Notare il parametro -Twasip1 che abilita l’utilizzo di WASI: usare il WASI in un “hello world” sembrerebbe superfluo ma bisogna ricordare che “hello world” viene scritto nello standard ouput.

$ /fullpath/LazTrunk/fpc/bin/x86_64-linux/fpc.sh -Twasip1 -Pwasm32 hw.pas
Free Pascal Compiler version 3.3.1-19236-gefcfa3ce1e-dirty [2026/01/16] for wasm32
Copyright (c) 1993-2026 by Florian Klaempfl and others
Target OS: The WebAssembly System Interface Preview 1 (WASI 0.1)
Compiling hw.pas
Linking hw.wasm
4 lines compiled, 0.1 sec, 443147 bytes code, 45260 bytes data

Se non ci sono stati errori di compilazione, vedrete che ora è presente il nuovo file hw.wasm.

Setup VM runtime per esecuzione .wasm

Ci sono molti runtime per WASM, in questo esempio andiamo ad usare wasmtime, nulla vieta di utilizzarne un altro qualsiasi.

Per scaricare wasmtime, possiamo usarne uno dei pre-compilati pronti all’uso.

https://github.com/bytecodealliance/wasmtime/releases

Una volta scaricato l’archivio che fa al caso vostro, decomprimetelo in una cartella: la VM è pronta all’uso!

Esecuzione del binario .wasm

Lanciamo quindi il nostro “hello world” indicandolo come parametro (hw.wasm).
L’invocazione è la seguente:

/fullpath-to/wasmtime-dev-x86_64-linux/wasmtime hw.wasm

In ambiente Windows il lancio si potrà fare con un comando tipo:

C:\fullpath-to\wasmtime-dev-x86_64-win\wasmtime.exe hw.wasm

Dovreste vedere comparire nel terminale l’output del comando aspettato.

Conclusioni

Abbiamo terminato questo primo approccio con fpc e WASM. Spero che questo articolo sia sufficiente ad introdurre l’argomento, a fare i primi passi e perché no, a stimolare un po’ la curiosità. Per eventuali domande o chiarimenti potete usufruire del nostro forum https://www.lazaruspascal.it/index.php

Riferimenti

https://www.freepascal.org/~michael/articles/fpcwasm1/fpcwasm1.pdf

https://wiki.freepascal.org/WebAssembly

https://wiki.freepascal.org/WebAssembly/Compiler

Installazione alternativa di Lazarus e Free Pascal Compiler (FPC), Installazioni, Lazarus ed il Web, Tutorial

Navigazione articoli

Previous Post: Il framework Brook – tutorial 2 – un server CRUD

Archivi

  • Gennaio 2026
  • Maggio 2025
  • Aprile 2025
  • Ottobre 2024
  • Maggio 2024
  • Marzo 2024
  • Dicembre 2023
  • Novembre 2023
  • Settembre 2023
  • Giugno 2023
  • Maggio 2023
  • Marzo 2023
  • Maggio 2022
  • Aprile 2022
  • Febbraio 2022
  • Gennaio 2022
  • Dicembre 2021

Categorie

  • Android
  • Funzioni avanzate
  • Installazione alternativa di Lazarus e Free Pascal Compiler (FPC)
  • Installazioni
  • Lazarus ed il Web
  • Lazarus, l'IDE ed i suoi strumenti
  • Sintassi e concetti base
  • Strutture dati
  • Tutorial
Vai al forum Italiano

Articoli recenti

  • Free Pascal e WASM, a linea di comando
  • Il framework Brook – tutorial 2 – un server CRUD
  • Il framework Brook – tutorial 1 – primi passi
  • Installazione di Lazarus in Linux – Risoluzione problemi
  • Autenticazione 2FA

Commenti recenti

  1. DragoRosso su Installazione di Lazarus e Free Pascal – su Linux – tramite package manager a linea di comando

Copyright © 2026 Blog su Lazarus e il Pascal.

Powered by PressBook WordPress theme

Utilizziamo i cookie per essere sicuri che tu possa avere la migliore esperienza sul nostro sito. Se continui ad utilizzare questo sito noi assumiamo che tu ne sia felice.