Difference between revisions of "WebAssembly/Compiler"

From Free Pascal wiki
Jump to navigationJump to search
Line 21: Line 21:
  
 
=== Using the compiler ===
 
=== Using the compiler ===
 
You need a system.pas unit. It can be found here:
 
 
[https://github.com/skalogryz/wasm-demo wasm-demo]
 
 
You'll also need the wasm bin tools:
 
 
[https://github.com/WebAssembly/wabt/releases wasm bin tools]
 
 
Extract the binaries and put them somewhere in your PATH.
 
 
You'll also need the wasmtool:
 
 
[https://github.com/skalogryz/wasmbin wasmtool]
 
 
* Compile wasmtool.lpi
 
 
Put wasmtool somewhere in your PATH
 
 
And finally you need ''wasm-ld'' (don't confuse it with ''wasmld'').
 
* Download the [http://releases.llvm.org/download.html llvm-9 release], and put the '''bin/ldd''' as '''wasmld''' in your PATH.
 
  
 
Hint: If your fpc.cfg has
 
Hint: If your fpc.cfg has

Revision as of 06:08, 31 January 2021

Instructions

Prerequisites

The llvm-mc assembler and wasm-ld linker. These are the assembler and linker from the LLVM project.

Compiling the compiler

Get the sources:

svn checkout https://svn.freepascal.org/svn/fpc/branches/wasm/ fpc-wasm

enter the directory:

cd fpc-wasm

WASI target

make all OS_TARGET=wasi CPU_TARGET=wasm32 BINUTILSPREFIX= OPT="-O-" PP=fpc

Embedded target

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 CPUWASM :

#IFDEF FPC_CROSSCOMPILING
#IFDEF NEEDCROSSBINUTILS
#ifndef cpuwasm
  -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"

See Also