C compiler running on Linux or MacOS.
- Supporting architecture: x86-64, aarch64 (arm64), riscv64, wasm
- Binary format: ELF64
- Linux (or MacOS)
- C compiler (gcc or clang)
- make
$ makeGenerated files:
- xcc: Compiler entry
- cpp: Preprocessor
- cc1: C compiler
- as: Assembler
- ld: Linker
$ ./xcc -o hello examples/hello.c
$ ./hello
Hello, world!- -o <filename>: Set output filename (default:- a.out)
- -I <path>: Add include path
- -D <label>(=value): Define macro
- -S: Output assembly code
- -E: Preprocess only
- -c: Output object file
- -nodefaultlibs: Ignore libc
- -nostdlib: Ignore libc and crt0
- Optimization
- Archiver
Compile C to WebAssembly/WASI binary.
- node.js, npm
- llvm-ar
$ npm ci$ make wccGenerated files:
- wcc: C compiler (including preprocessor, and output .wasm directly)
Compile:
$ ./wcc -o hello.wasm examples/hello.cCommand line options:
- -o <filename>: Set output filename (default:- a.wasm)
- -I <path>: Add include path
- -D <label>(=value): Define macro
- -E: Preprocess only
- -c: Output object file
- --entry-point=func_name: Specify entry point (default:- _start)
- -e func_name,...: Export function names (comma separated)
- --stack-size=<size>: Set stack size (default: 8192)
- -nodefaultlibs: Ignore libc
- -nostdlib: Ignore libc and crt0
- --verbose: Output debug information
- -Wl,...: Linker option- --allow-undefined: Handles unresolved function symbols as imported on runtime
- --export-all: Export all non-static functions
 
$ ./tool/runwasi hello.wasm
Hello, world!You can also use WASM/WASI runtime (Wasmtime, Wasmer, etc.), too.
- gotostatement