Iota – 一个LLVM IR到Common Lisp编译器

Iota – 一个LLVM IR到Common Lisp编译器

C/C++ 编译器

访问GitHub主页

共221Star

详细介绍

Iota is an LLVM to CL transpiler, similar to emscripten. It converts LLVM bitcode
to safe, portable Common Lisp code.


Quick Start
-----

# You'll probably want to make this available as a quicklisp local project.

# Optional, for parallel builds
export MAKEFLAGS=-j2

# Clone the LLVM/Clang repos.
./fetch-llvm.sh

# Build LLVM, Clang, and the translator.
# This will take a long time unless you have a beefy machine.
./build-llvm.sh

# Build & translate libraries and programs.
./build.sh

# Load into Lisp.
lisp --load load.lisp

# prboom & sdlquake can now be run using (CL-USER::RUN-PRBOOM) and (CL-USER::RUN-SDLQUAKE).


Usage
-----

The build-llvm.sh and build.sh scripts build the translator and compiler,
installing them in the toolchain/ subdirectory.
C source code can be compiled to object files as normal using clang -c.
There is no ld-style linker, so object code and libraries must be linked
with llvm-link.
The linked bitcode file can then be translated with iota.


Example
-----

cat > example.c <<EOF
#include <stdio.h>
int main(int argc, char **argv) {
    printf("Hello, World!\n");
    return 0;
}
EOF
toolchain/bin/clang -c example.c
toolchain/bin/llvm-link -o=example.bc example.o toolchain/le32-iota/lib/libc.a
toolchain/bin/iota -package=":example" example.bc > example.lisp