LLVM-based compiler for Go
Go Shell R
Pull request Compare This branch is 4 commits behind go-llvm:master.
Latest commit 5397467 Nov 6, 2014 @pcc pcc Merge pull request #221 from pcc/san
Update the list of system libraries to link sanitizers against
Failed to load latest commit information.
cmd Update the list of system libraries to link sanitizers against Nov 5, 2014
debug Move to upstream LLVM bindings Oct 17, 2014
irgen Use mangleFunctionName to mangle anonymous function parents Nov 5, 2014
ssaopt Allocation stack lowering based on escape analysis Jun 26, 2014
.gitignore Add test output files to .gitignore Aug 29, 2014
LICENSE Use "The llgo Authors" in copyright Mar 2, 2013
Makefile Move to upstream LLVM bindings Oct 17, 2014
install.sh Overhaul bootstrap.sh script: Jul 30, 2014
llgo-go.sh Add scripts and Makefile for bootstrapping and installing llgo May 5, 2014
update_libgo.sh Roll gofrontend to 225a208260a6 Sep 23, 2014


Build Status


llgo is a Go frontend for LLVM, written in Go.

llgo is under active development. It compiles and passes most of the standard library test suite and a substantial portion of the gc test suite, but there are some corner cases that are known not to be handled correctly yet. Nevertheless it can compile modestly substantial programs (including itself; it is self hosting on x86-64 Linux).

Progress will be reported on the mailing list.


llgo requires:

Note that Ubuntu Precise is one Linux distribution which does not package a sufficiently new CMake or C++ toolchain.

If you built a newer GCC following the linked instructions above, you will need to set the following environment variables before proceeding:

export PATH=/path/to/gcc-inst/bin:$PATH
export LD_LIBRARY_PATH=/path/to/gcc-inst/lib64:$LD_LIBRARY_PATH
export CC=`which gcc`
export CXX=`which g++`
export LIBGO_CFLAGS=--gcc-toolchain=/path/to/gcc-inst

To build and install llgo:

# Ensure $GOPATH is set.
go get -d github.com/go-llvm/llgo/cmd/gllgo
$GOPATH/src/llvm.org/llvm/bindings/go/build.sh -DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD=host
cd $GOPATH/src/github.com/go-llvm/llgo
make install prefix=/path/to/prefix j=N  # where N is the number of cores on your machine.


We install two binaries to $prefix/bin: llgo and llgo-go.

llgo is the compiler binary. It has a command line interface that is intended to be compatible to a large extent with gccgo.

llgo-go is a command line wrapper for go. It works like the regular go command except that it uses llgo to build.