2024-04-15 04:24:36 +08:00
llgo - A Go compiler based on LLVM
=====
[](https://github.com/goplus/llgo/actions/workflows/go.yml)
[](https://goreportcard.com/report/github.com/goplus/llgo)
2024-04-22 01:04:38 +08:00
[](https://github.com/goplus/llgo/releases)
2024-04-15 04:24:36 +08:00
[](https://codecov.io/gh/goplus/llgo)
2024-04-25 07:29:45 +08:00
[](https://pkg.go.dev/github.com/goplus/llgo)
[](https://github.com/goplus/gop)
This is a Go compiler based on LLVM in order to better integrate Go with the C ecosystem. It's a subproject of [the Go+ project ](https://github.com/goplus/gop ).
2024-05-06 12:31:55 +08:00
## How to install
Follow these steps to generate the `llgo` command (its usage is the same as the `go` command):
### on macOS
```sh
brew update # execute if needed
brew install llvm@17
go install -v ./...
```
### on Linux
```sh
echo 'deb http://apt.llvm.org/focal/ llvm-toolchain-focal-17 main' | sudo tee /etc/apt/sources.list.d/llvm.list
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
sudo apt-get update # execute if needed
sudo apt-get install --no-install-recommends llvm-17-dev
go install -v ./...
```
## Demo
2024-05-06 12:35:38 +08:00
The `_demo` directory contains our demos (it start with `_` to prevent the `go` command from compiling it):
2024-05-06 12:31:55 +08:00
2024-05-06 13:26:09 +08:00
* [qsort ](_demo/qsort ): call C function with callback
* [genints ](_demo/genints ): closure usage in llgo
2024-05-06 12:31:55 +08:00
### How to run demos
```sh
cd <demo-directory> # eg. cd _demo/genints
llgo run .
```