Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings
Open more actions menu

Repository files navigation

XCC

Action Status Open in GitHub Codespaces

C compiler running on Linux or MacOS.

  • Supporting architecture: x86-64, aarch64 (arm64), riscv64, wasm
  • Binary format: ELF64

Requirements

  • Linux (or MacOS)
  • C compiler (gcc or clang)
  • make

Build

$ make

Generated files:

  • xcc: Compiler entry
  • cpp: Preprocessor
  • cc1: C compiler
  • as: Assembler
  • ld: Linker

Usage

$ ./xcc -o hello examples/hello.c
$ ./hello
Hello, world!

Command line options

  • -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

TODO

  • Optimization
  • Archiver

Reference


WebAssembly

Compile C to WebAssembly/WASI binary.

Online demo

Requirements

  • node.js, npm
  • llvm-ar

Set up

$ npm ci

Build

$ make wcc

Generated files:

  • wcc: C compiler (including preprocessor, and output .wasm directly)

Usage

Compile:

$ ./wcc -o hello.wasm examples/hello.c

Command 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

Run

$ ./tool/runwasi hello.wasm
Hello, world!

You can also use WASM/WASI runtime (Wasmtime, Wasmer, etc.), too.

Limitation

  • goto: Can jump ancestor and latter line only.

Releases

Packages

Used by

Contributors

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.