Skip to content

Instantly share code, notes, and snippets.

@valstu
Last active October 14, 2021 07:40
Show Gist options
  • Save valstu/064515504642ba10284d2769fa192ce8 to your computer and use it in GitHub Desktop.
Save valstu/064515504642ba10284d2769fa192ce8 to your computer and use it in GitHub Desktop.
How webassembly.studio compiles C to WASM

How webassembly.studio compiles C code to WASM

https://webassembly.studio is an online IDE where you can develop Webassembly projects with C and compile them to wasm and run them.

Compile to wasm

They don't actually compile it on the browser, what they do is they take code from editor and send it to API endpoint with some options which in turn returns the compiled wasm. Below is the examples of the request:

HTTP POST to https://webassembly-studio-clang.herokuapp.com/build with following payload:

{
  "output": "wasm",
  "compress": true,
  "files": [
    {
      "type": "c",
      "name": "file.c",
      "options": "-g -O3",
      "src": "#include <stdio.h>\n#include <sys/uio.h>\n\n#define WASM_EXPORT __attribute__((visibility(\"default\")))\n\nWASM_EXPORT\nint main(void) {\n  printf(s\"Hello World\\n\") ;\n}\n\n/* External function that is implemented in JavaScript. */\nextern void putc_js(char c);\n\n/* Basic implementation of the writev sys call. */ \nWASM_EXPORT\nsize_t writev_c(int fd, const struct iovec *iov, int iovcnt) {\n  size_t cnt = 0;\n  for (int i = 0; i < iovcnt; i++) {\n    for (int j = 0; j < iov[i].iov_len; j++) {\n      putc_js(((char *)iov[i].iov_base)[j]);\n    }\n    cnt += iov[i].iov_len;\n  }\n  return cnt;\n}\n"
    }
  ]
}

As you can see the request payload is quite simple, most interesting part is inside files array where they define the language and some compiler options (optimization level), src property contains the C code from the editor. Server then compiles the code to wasm and outputs following response in case there was an error:

{
  "tasks": [
    {
      "name": "building file.c",
      "file": "file.c",
      "console": "/tmp/build_v39yl8gzto.$/file.c:8:10: error: use of undeclared identifier 's'\n   printf(s\"Hello World\\n\") ;\n          ^\n1 error generated.\n",
      "success": false
    }
  ],
  "success": false,
  "message": "Error during build of file.c"
}

if the compilation was successful the response is something like this:

# How webassembly.studio compiles C code to WASM

[webassembly.studio](https://webassembly.studio/) is an online IDE where you can develop Webassembly projects with C 
compile them to wasm and run them. 

## Compile to wasm
They don't actually compile it on the browser, what they do is they take code from editor and send it to API endpoint with some
options which in turn returns the compiled wasm. Below is the examples of the request:

HTTP POST to https://webassembly-studio-clang.herokuapp.com/build with following payload:
```json
{
  "output": "wasm",
  "compress": true,
  "files": [
    {
      "type": "c",
      "name": "file.c",
      "options": "-g -O3",
      "src": "#include <stdio.h>\n#include <sys/uio.h>\n\n#define WASM_EXPORT __attribute__((visibility(\"default\")))\n\nWASM_EXPORT\nint main(void) {\n  printf(s\"Hello World\\n\") ;\n}\n\n/* External function that is implemented in JavaScript. */\nextern void putc_js(char c);\n\n/* Basic implementation of the writev sys call. */ \nWASM_EXPORT\nsize_t writev_c(int fd, const struct iovec *iov, int iovcnt) {\n  size_t cnt = 0;\n  for (int i = 0; i < iovcnt; i++) {\n    for (int j = 0; j < iov[i].iov_len; j++) {\n      putc_js(((char *)iov[i].iov_base)[j]);\n    }\n    cnt += iov[i].iov_len;\n  }\n  return cnt;\n}\n"
    }
  ]
}

As you can see the request payload is quite simple, most interesting part is inside files array where they define the language and some compiler options (optimization level), src property contains the C code from the editor. Server then compiles the code to wasm and outputs following response in case there was an error:

{
  "tasks": [
    {
      "name": "building file.c",
      "file": "file.c",
      "console": "/tmp/build_v39yl8gzto.$/file.c:8:10: error: use of undeclared identifier 's'\n   printf(s\"Hello World\\n\") ;\n          ^\n1 error generated.\n",
      "success": false
    }
  ],
  "success": false,
  "message": "Error during build of file.c"
}

Error messages are then showed on the "console" of the editor. If the compilation was successful the response is something like this:

{
  "tasks": [
    {
      "name": "building file.c",
      "file": "file.c",
      "console": "",
      "success": true,
      "output": "eJx1VE1sG1UQnrdv33qf13biOM1PQWKTFkhKWadqhFIalZhSaBCFEyKVkLZre5Ouu941u+uQ9ECcoh6QciitIOqhAi5FApRTqZDKCZAQB7iUCwKBEAIhrggJiQsza5OkVLX8ZuZ9M29+3s48cOImAwD2VqfTAfUMsLUzbA0JX1tbS2VQbqcq7gbLfbbte4HrRHbTbYbRqgKM4FHb9oK6F7m1xF5sB7XECwM7caq+y1oAZKG22kncNc6gWLMbMXD+OjlWQMlurJNQhEqHkP6U7q2AscK0NWXOVCrsZB4qMMZxqXwOqUCYmbzCk8a4NqGoJ/JgahW1MZZBpc7nTATB1BsHAfrXyZ2pV1hjXDcziI+L+TwYhilMPKCiF9RwU3kGQVPtMzCwcZnOMIxp5E66vh+aL4WRXwf4gjLNWnW32l6y4ySq+U6wZC67UYw1mzPWlDVlTiRROzhnHp4+dOSxqUkoJ81Wudr2/Lo9faix4s/EM6vVFWt/edHzXat2Tz3UzjoRNB0vAC9I4NXIS9xluwZ+iBHbQewtBW7dJFXsnXftBLxwuYY7Wh5taNlVJ3ZTwXcD4m4NGrCIlXzV2VWJH9YGsQsO4FJg6h3o/f7DOBRhGyTg1P9B+IQuJt9z51SrkbvMiuzBQknwQv/wfYUie3EYnffBfAmP7gdeOGYYBoBqQZENaLzwuHHUeHh0vvTEKICw2N2gJqALkIfMNCjDO1vdSA8AyCEM0MUBsg+l0YwS4wXDQEwA5PLoZb5Emxk0yfel2V+6gNkbvey9YDHEbw9qqlJpPCAH+3qFHoedn/II3cPLSDSmKsiKuBwap8wtpILubwVXg6D+z8juZiqSVruait+SuLGNZsjvFdoWyV4nF68QTsIm4QNkpk8gmSd8EskNwku3uknxRQqtyq+RXaQkF3hMhqryHbLsj0iMLXKhhCx3jQywQpQhdx03FBQ3KuQBrnd2fdMIG92NqchSrzM2dt0EXCLbQs+26dTSS4Rf1nfdKz0dt+lGwaZ8GfunkCeWvj/4v+cglJ1WqxyvxlEYJmUvqPntuluueviiQG+G8Ljj+8lqy42ts0BJglCIjQieHRPsV6wR4wiF8uZ9TOzJHhNcS3hgCVPjpQtCaPqzvDkrHtD44EeiT0tEZlEc0FxUL4jhRIhZIbVTwmyJPQjwBe1JjZ+d5SOzXc/fU/kZrPCcFywx/eN0uPAmVZpfpgjrOXwsqI36KQF9e5j7GVcEVzSuZLgiuWKIN9OXJ29FYd1JHCs9iOVtph4jFyfVOv7CUyc4V6kzswqcVuHD9NnsKncmWtN0HFJd5UP6IPIR5JO4HuVH4F36LsU7DtAH0++XWgZkToAcEPvkkAS5V3wOclwHeVD8APphnLCj4mfQn+Ygnxd/gDwtbjJZF1eZDMUGk+c1kK+JK0x/g6HFZaYNyreZ2GT6e4wPyg+YNim3mLjB5KdM/AbySyYuMvkNE3+C/ImJLSZ/Z+Iak38xcZ3B+1RW6Y4su10oVZ0aWIWirmNlOf43wLXOXSVRwxmK7qNpB9P5F7j2XHk="
    },
    {
      "name": "linking wasm",
      "console": "",
      "success": true
    }
  ],
  "output": "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",
  "success": true,
  "message": "Success"
}

Output apparently contains the wasm file which you need to pass through decodeBinary function to get the actual wasm file.

All of the code of webassembly.studio is open source and here are the interesting bits:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment