blob: 8fc60cb4231e4ae6563d6a0502814ca37320b307 [file] [log] [blame]
Peter Collingbournead9841e2014-11-27 00:06:42 +00001llgo
2====
3
4llgo is a Go (http://golang.org) frontend for LLVM, written in Go.
5
6llgo is under active development. It compiles and passes most of the
7standard library test suite and a substantial portion of the gc test suite,
8but there are some corner cases that are known not to be handled correctly
9yet. Nevertheless it can compile modestly substantial programs (including
10itself; it is self hosting on x86-64 Linux).
11
12Mailing list: https://groups.google.com/d/forum/llgo-dev
13
14Supported platforms
15-------------------
16
17llgo is currently only supported on the x86-64 Linux platform. Contributions
18that add support for other platforms are welcome.
19
20There are two components which would need to be ported to new platforms: the
21compiler and the runtime library. The compiler has little platform-specific
22code; the most significant is in irgen/cabi.go. The main limiting factor
23for new platforms is the runtime library in third_party/gofrontend/libgo,
24which inherits some support for other platforms from the gc compiler's
25runtime library, but this support tends to be incomplete.
26
27Installation
28------------
29
30llgo requires:
31* Go 1.3 or later.
32* CMake 2.8.8 or later (to build LLVM).
33* A modern C++ toolchain (to build LLVM).
34 http://llvm.org/docs/GettingStarted.html#getting-a-modern-host-c-toolchain
35
36Note that Ubuntu Precise is one Linux distribution which does not package
37a sufficiently new CMake or C++ toolchain.
38
39To build and install llgo:
40
41 # Checkout LLVM:
42 svn co http://llvm.org/svn/llvm-project/llvm/trunk /path/to/llvm
43
44 # Checkout Clang:
45 cd /path/to/llvm/tools
46 svn co http://llvm.org/svn/llvm-project/cfe/trunk clang
47
48 # Checkout llgo:
49 svn co http://llvm.org/svn/llvm-project/llgo/trunk llgo
50
51 # Build LLVM, Clang and llgo: (see also http://llvm.org/docs/CMake.html)
52 mkdir /path/to/llvm-build
53 cd /path/to/llvm-build
54 cmake /path/to/llvm -DCMAKE_INSTALL_PREFIX=/path/to/llvm-inst
55 make install
56
57Running
58-------
59
Peter Collingbourne76beae32015-04-05 23:32:13 +000060llgo-go is llgo's version of the "go" command. It has the same command line
61interface as go, and works the same way, but it uses llgo to compile.
62
63llgoi is an interactive REPL for Go. It supports expressions, statements, most
64declarations and imports, including binary imports from the standard library
65and source imports from $GOPATH. See docs/llgoi.rst for more information.
66
Peter Collingbournead9841e2014-11-27 00:06:42 +000067llgo is the compiler binary. It has a command line interface that is intended
Peter Collingbourne76beae32015-04-05 23:32:13 +000068to be compatible to a large extent with gccgo.
Peter Collingbournead9841e2014-11-27 00:06:42 +000069
70Contributing
71------------
72
73Changes to code outside the third_party directory should be contributed in
Tanya Lattner449fa2f2015-08-05 04:03:05 +000074the normal way by sending patches to <llvm-commits@lists.llvm.org>.
Peter Collingbournead9841e2014-11-27 00:06:42 +000075
76Changes to code in the third_party directory must first be made in the
77respective upstream project, from which they will be mirrored into the llgo
78repository. See the script update_third_party.sh for the locations of the
79upstream projects and details of how the mirroring works.
Chandler Carruthce7d8762015-01-07 21:28:10 +000080