2024-05-12 13:05:15 +08:00
2024-05-11 05:04:02 +08:00
2024-05-11 06:55:57 +08:00
2024-04-25 07:37:04 +08:00
2024-05-11 05:43:27 +08:00
2024-05-12 13:05:15 +08:00
2024-04-27 06:41:24 +08:00
2024-05-12 13:05:15 +08:00
2024-05-12 12:14:26 +08:00
2024-05-11 05:27:38 +08:00
2024-05-11 05:27:38 +08:00
2024-05-07 19:57:39 +08:00
2023-12-10 10:43:28 +08:00
2024-05-12 13:05:15 +08:00

llgo - A Go compiler based on LLVM

Build Status Go Report Card GitHub release Coverage Status GoDoc Language

This is a Go compiler based on LLVM in order to better integrate Go with the C ecosystem including Python. It's a subproject of the Go+ project.

C standard libary support

package main

import "github.com/goplus/llgo/c"

func main() {
	c.Printf(c.Str("Hello world\n"))
}

This is a simple example of calling the C printf function to print Hello world. Here, c.Str is not a function for converting a Go string to a C string, but a built-in instruction supported by llgo for generating a C string constant.

See github.com/goplus/llgo/c for more detials.

Python support

TODO

Other frequently used libraries

TODO

How to install

Follow these steps to generate the llgo command (its usage is the same as the go command):

on macOS

brew update  # execute if needed
brew install llvm@17
go install -v ./...

on Linux

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 ./...

on Windows

TODO

Demo

The _demo directory contains our demos (it start with _ to prevent the go command from compiling it):

  • hello: call C printf to print Hello world
  • concat: call C fprintf with stderr, and Go variadic function
  • qsort: call C function with a callback (eg. qsort)
  • genints: various forms of closure usage (including C function, recv.method and anonymous function)
  • llama2-c: inference Llama 2 (It's the first llgo AI example)

And the py/_demo directory contains python related demos:

  • hellopy: link Python to Go and say Hello world
  • clpy: compile Python code and eval
  • callpy: call Python standard library function math.sqrt

How to run demos

To run the demos in directory _demo:

cd <demo-directory>  # eg. cd _demo/genints
llgo run .

To run the demos in directory py/_demo, you need to set the LLGO_LIB_PYTHON environment variable first. Assuming you use Python 3.12, and the libpython3.12.so (or libpython3.12.dylib or python3.12.lib) file is in the /foo/bar directory, then you need to set LLGO_LIB_PYTHON to:

export LLGO_LIB_PYTHON=/foo/bar/python3.12

For example, /opt/homebrew/Frameworks/Python.framework/Versions/3.12/libpython3.12.dylib is a typical python lib location under macOS. So we should set it like this:

export LLGO_LIB_PYTHON=/opt/homebrew/Frameworks/Python.framework/Versions/3.12/python3.12

Then you can run the demos in directory py/_demo:

cd <demo-directory>  # eg. cd py/_demo/hellopy
llgo run .
Description
A Go compiler based on LLVM in order to better integrate Go with the C ecosystem including Python and JavaScript
Readme Apache-2.0 63 MiB
Languages
LLVM 66.3%
Go 18.9%
Assembly 13.2%
C 1.2%
Python 0.1%
Other 0.1%