• Stars
    star
    117
  • Rank 301,828 (Top 6 %)
  • Language
    C
  • License
    MIT License
  • Created almost 3 years ago
  • Updated over 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Turn WASI apps into native executables

SWUbanner

wasm2native

Turn WASI apps into native executables

How it works

The approach is similar to WasmBoxC or RLBox:

WASM file 🠖 WASM to C translator 🠖 platform C compiler + libuvwasi + libuv 🠖 native executable

Prerequisites

  • CMake
  • Native toolchain (GCC/Clang/MSVC). Optional: Zig

Usage examples

# Single step:
export CC="clang-12"
export LDFLAGS="-fuse-ld=lld"
./build.sh ./examples/coremark.wasm

# Cross-compile with Zig CC: x86_64-windows-gnu, x86_64-linux-gnu, x86_64-macos-gnu
CC="zig cc -target x86_64-linux-musl" ./build.sh ./examples/coremark.wasm

# Cross-compilation to other architectures
# For full targets list: zig targets | jq .libc
CC="zig cc -target aarch64-linux-musl" ./build.sh ./examples/hello.wasm
qemu-aarch64-static hello.elf
Hello from WebAssembly!

Note: this tool can be used for building WASI apps, not emscripten-generated wasm+js output.

Coremark 1.0 results

Intel(R) Core(TM) i5-10400 CPU @ 2.90GHz, single-thread:

  • Native: 32475
  • wasm2c: 27400 (84% of native)

TODO

  • Big-endian target support
  • Windows host support
  • Convert main script to zig
    • Allow setting CFLAGS, overriding optimization flags
  • CI via Github Actions
  • Get rid of mandatory CMake dependency (write build script for libuv and uvwasi for major platforms)

License

This project is released under The MIT License (MIT)

More Repositories

1

TinyGSM

A small Arduino library for GSM modules, that just works
C++
1,935
star
2

StandWithUkraine

#StandWithUkraine banner and related documents
JavaScript
1,394
star
3

awesome-wasm-tools

😎 A curated list of awesome, language-agnostic WebAssembly tools
453
star
4

miband-js

MiBand 2 JS library for Node.JS and HTML5 (WebBluetooth)
JavaScript
342
star
5

ViperIDE

An innovative MicroPython / CircuitPython IDE for Web and Mobile
Python
341
star
6

blynk-library-python

Blynk library for Python. Works with Python 2, Python 3, MicroPython.
Python
284
star
7

muon

µON - a compact and simple binary object notation
Python
244
star
8

blynk-library-js

Blynk library for JS. Works with Browsers, Node.js, Espruino.
JavaScript
215
star
9

node-inline-cpp

Inline C++ with Node.js
JavaScript
168
star
10

Preferences

Preferences library for Arduino, ESP8266, RP2040, Particle, Realtek Ameba
C
69
star
11

blynk-library-particle

Blynk library for Particle Core, Photon, Electon, P0, P1, RedBear Duo etc.
C++
46
star
12

wasm3_dino_rpi_pico

WebAssembly Dino game for PPi Pico
WebAssembly
45
star
13

interp

Interpreter experiment. Testing dispatch methods: Switching, Direct/Indirect Threaded Code, Tail-Calls and Inlining
C
43
star
14

Wasm3_RGB_Lamp

Animating an RGB lamp, using WebAssembly!
C++
42
star
15

blynk-library-lua

Blynk library for Lua. Works with Lua 5.1+, LuaJIT, NodeMCU.
Lua
41
star
16

w600tool

Firmware upload tool for Winner Micro W600 & W601 WiFi
Python
38
star
17

StreamDebugger

StreamDebugger allows easier debugging of Serial-based communication on Arduino, like AT command interface in ESP8266, SIM800, SIM900, and other GSM modules
C++
35
star
18

randomart

Generative WebGL Random Art renderer
JavaScript
31
star
19

ESP32_PPPoS

PPP over Serial for ESP32
C++
27
star
20

serial-server

Simple serial port server
JavaScript
26
star
21

GY80

Arduino/Processing sketch for GY80 9DOF AHRS
Arduino
22
star
22

UNO-R4-WiFi-freedom

UNO R4 WiFi set free!
C++
20
star
23

JIDL

Simple, flexible, JSON-based Interface Definition Language
Python
18
star
24

blynk-library-openwrt

OpenWRT packages for Blynk C++ library
Makefile
18
star
25

blynk-pc-remote

This app allows you to control your PC remotely using the Blynk App.
JavaScript
13
star
26

espruino-await

async/await example for Espruino
JavaScript
11
star
27

OpenWRT-Espruino-packages

Espruino package for OpenWRT
Makefile
10
star
28

blynk-tools

Tools for working with Blynk IoT Platform
JavaScript
8
star
29

blynk-library-ez-connect

Blynk example for Marvell® EZ-Connect™ MW302
C++
6
star
30

pypp

Python PreProcessor
Python
6
star
31

wasm2mpy

Running WebAssembly as a native MicroPython module
C
4
star
32

vshymanskyy

4
star
33

aiodns

A small async DNS client for MicroPython
Python
4
star
34

ESP_UNO_R4

C
4
star
35

TurtlOS

educational os project
C++
3
star
36

blynk-community-map

JavaScript
3
star
37

xplat

C++ cross-platform abstraction library
C++
1
star
38

vshymanskyy.github.io

1
star
39

bronyk

bronyk robot control system
C++
1
star
40

lbm-micropython

LoRa Basic Modem integration for MicroPython
C
1
star
41

kad

kademlia overlay network implementation
C++
1
star