Home

What is ELLCC?

ELLCC (pronounced “elk”) 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. There are two types of users that might be interested in ELLCC: tool developers and application developers.

Tool developers are interested in modifying and extending ELLCC. They might want to support a different target processor or target operating system. The entire source of ELLCC is available for modification and customization.

Application developers want to use ELLCC to create applications for embedded systems. They can use ELLCC in two ways:

  • As a cross development environment building ARM applications on an X86 Linux system, for example.
  • As hosted development tools directly on the target system. ELLCC is self hosting and can build itself for all of it’s supported target systems.

ELLCC has become fairly mature, It can compile and cross compile itself and can be used to cross compile other packages.

Goals

  • A functional C/C++ compiler based on clang (ecc). clang/LLVM sources are updated weekly to insure that ELLCC stays up to date.
  • Multi-target support: ARM, i386, Microblaze, Mips, Nios2[2], PowerPC, PowerPC64, Sparc[1] and X86_64.
  • Multi-OS support: Linux, Standalone, …
  • All libraries used to build ELLCC and executables produced by ecc are BSD/MIT/UIUC or similarly licensed. No GPL source is used in generated executables.
  • A complete test environment that allows automatic unit and integration testing of the run-time environment and complete executables.

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.
  • libc++, libc++ABI, and libunwind for C++ runtime support.
  • The expat, ncurses and zlib libraries are also included.
  • 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.