2024-05-12 11:28:04 +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-04-27 06:41:24 +08:00
2024-05-12 00:24:56 +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

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. It's a subproject of the Go+ project.

C standard libary support

See github.com/goplus/llgo/c.

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%