Compile C/C++ to Wasm WASI

Now that you have Wasienv installed, let's get our hands dirty!

Wasienv comes with C/C++ support preinstalled, so you just need to run one command to get things running 🙂

Compiling C files with `wasic`

If you want to compile a simple C example, you can just create the following:

#include <stdio.h>

int main(int argc, char **argv)
{
    if (argc < 2) {
        printf("Hello, WASI!\n");
    } else {
        printf("Hello, %s!\n", argv[1]);
    }
}

Now that you have this file created, you can execute wasicc

wasicc example.c -o example.wasm

Et voilÃĄ... you will have a new file example.wasm ready to be executed with your favorite WebAssembly runtime!

$ wasmer example.wasm
Hello, WASI!

Did you know?

You can also execute the example.wasm file in your browser or in Node.js using @wasmer/wasi. Check out the examples on how to do it!

Compiling C++ files with `wasic++`

Wasienv also allows you to compile C++ files to Wasm WASI, just run it with wasic++

Using Configure and Make

In some projects, there might be already ./configure files that will configure the system (creating a Makefile normally) to compile a certain project.

If you want to use Wasienv there, you just need to wrap your ./configure call with wasiconfigure!

wasiconfigure ./configure

Wasienv also has a wrapper for Makefiles

wasimake make

Here's an example of a C Project that was compiled to Wasm WASI with wasienv:

https://github.com/wapm-packages/jq/blob/master/build.sh

Using CMake

Similarly to configure and make, we also have another command that will automatically compile all your projects made with CMake

wasicmake cmake .
make

Here's an example project: quickjs that was compiled to WebAssembly WASI thanks to Wasienv!

And the build.sh file they used for generating the wasm file:

#!/bin/bash

# Install wasienv
curl https://raw.githubusercontent.com/wasienv/wasienv/master/install.sh | sh

mkdir -p build
cd build
wasimake cmake ..
cd ..
make -C build

Last updated