ELLCC

ELLCC - The Embedded LLVM Compiler Collection

Home
Blog
News
Demo
Documentation
Download
Status
Installation
Target Support
Bug Database
Source Repository
Contact

The ELLCC project is supported by Pennington Software

ELLCC is a project to using Clang and the  LLVM compiler infrastructure. The primary emphasis of the ELLCC project is to create an easy to use multi-target cross compilation environment for embedded systems.

QEMU is used for cross-platform testing. Programs are built for the target as a Linux user space program and run under QEMU for testing purposes.

ELLCC is in a pre-release state. Some targets are farther along than others. Not for the unhardy!

Goals

  • A functional C/C++ compiler based on Clang  (ecc)
  • Multi-target support: ARM, i386, Microblaze, Mips, Nios2[2], PowerPC, PowerPC64, Sparc[1] and X86_64
  • Multi-OS support: Linux, Standalone, ...
  • A complete test environment (described in Target Support) that allows automatic unit and integration testing of the run-time environment and complete executables.
  • Support of a wide variety of target processors.

Components

  • ecc - The ELLCC C/C++ compiler. This is a single executable with gcc compatible options that can generate code for all the targets.
  • binutils - The GNU binutils package. This package provides assemblers for each of the targeted processors, a linker and other utilities (objcopy, nm, etc.).
  • libecc - The C standard library based on the musl standard C library and the LLVM project's compiler-rt. This package provides a complete run-time environment for Linux with all the source code with a BSD or BSD-like license.
  • The GDB debugger. The provided build scrips build a version of GDB that supports all the targets with a single executable.
  • The QEMU emulator provides a test execution environment that can run code for each of the targets. Linux user space programs and standalone or bare-metal programs for all targets can be run, tested, and debugged using the emulator.


[1] The standard C library does not compile.
[2] The code generator is unfinished.