Difference between revisions of "WebAssembly/Compiler"
Line 24: | Line 24: | ||
make all OS_TARGET=wasi CPU_TARGET=wasm32 BINUTILSPREFIX= OPT="-O-" PP=fpc | make all OS_TARGET=wasi CPU_TARGET=wasm32 BINUTILSPREFIX= OPT="-O-" PP=fpc | ||
− | + | The following units have been ported for the WASI target: | |
− | |||
− | |||
− | |||
− | |||
− | |||
* system | * system |
Revision as of 17:50, 14 March 2021
Instructions
Prerequisites
The llvm-mc assembler and wasm-ld linker. These are the assembler and linker from the LLVM project.
Obtaining the compiler sources
Get the sources:
svn checkout https://svn.freepascal.org/svn/fpc/trunk fpc-wasm
enter the directory:
cd fpc-wasm
Supported targets
WASI - The WebAssembly System Interface
WASI is a modular system interface for WebAssembly. It allows creating portable and secure programs that can run in a sandboxed command-line environment. See the WASI website for more information.
To build the compiler for the WASI target:
make all OS_TARGET=wasi CPU_TARGET=wasm32 BINUTILSPREFIX= OPT="-O-" PP=fpc
The following units have been ported for the WASI target:
- system
- objpas
- ctypes
- strings
- wasiapi - interface for the WASI API
Embedded target
The Embedded target is primarily used for embedded systems, without an operating system. However, it also happens to be a perfect fit for creating WebAssembly modules that don't use any particular operating system-like API.
make all OS_TARGET=embedded CPU_TARGET=wasm32 BINUTILSPREFIX= OPT="-O-" PP=fpc
Using the compiler
Hint: If your fpc.cfg has
#IFDEF FPC_CROSSCOMPILING #IFDEF NEEDCROSSBINUTILS -XP$FPCTARGET- #ENDIF #ENDIF
Enclose it in #IFNDEF CPUWASM32 :
#IFDEF FPC_CROSSCOMPILING #IFDEF NEEDCROSSBINUTILS #ifndef cpuwasm32 -XP$FPCTARGET- #endif #ENDIF #ENDIF
Otherwise, you have to create symlinks wasm-wasm-wasmld to wasmld, and wasm-wasm-wasmtool to wasmtool.
wasm-demo
Wasm-demo is a Pascal WebAssembly demo project, ported Google's C WebAssembly example (https://codelabs.developers.google.com/codelabs/web-assembly-intro)
You follow these steps in order to get the demo project working:
1. Get the project sources: https://github.com/skalogryz/wasm-demo
Using in webassembly.studio
2. Run the wasm compiler against lyff.pas, but request the assembler file to be kept
pp -a lyff.pas
Webassembly.studio accepts the assembler file and would compile it on the server side.
3. open up https://webassembly.studio and select "Create empty Wat Project". The project will consist of:
- main.html
- main.js
- main.wat
All files of the project can be edited through the web interface.
4. Copy and paste the contents of the following files:
- (compiled) lyff.wat to main.wat.
- wasm-demo\webassembly.studio\main.html to main.html
- wasm-demo\webassembly.studio\main.js to main.js
Note: every time you copy and paste, don't forget to press "SAVE" button (on the right side of the web interface)
5. once all files are update, hit "Build and Run"