llgo

module
v0.8.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 12, 2024 License: Apache-2.0

README

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

You can import a Python library in llgo! For example:

package main

import (
	"github.com/goplus/llgo/c"
	"github.com/goplus/llgo/py"
	"github.com/goplus/llgo/py/math"
)

func main() {
	x := math.Sqrt(py.Float(2))
	c.Printf(c.Str("sqrt(2) = %f\n"), x.Float64())
}

Here, We call py.Float(2) to create a Python floating point number 2, and pass it to Python’s math.sqrt to get x. Then use x.Float64() to convert the Python object to Go's float64 type, and finally we print the value through C printf.

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 _pydemo directory contains python related demos:

  • 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 _pydemo, 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 _pydemo:

cd <demo-directory>  # eg. cd _pydemo/callpy
llgo run .

Directories

Path Synopsis
_demo module
concat command
genints command
hello command
llama2-c command
qsort command
sqlite command
c module
embed module
go module
py module
_pydemo module
callpy command
_xtool module
c
chore
ardump command
clangast command
clangpp command
gentests command
llgen command
nmdump command
nmindex command
ssadump command
ssadump: a tool for displaying and interpreting the SSA form of Go programs.
ssadump: a tool for displaying and interpreting the SSA form of Go programs.
cl
_testdata/print command
_testdata/uint command
_testdata/vargs command
_testlibc/argv command
_testpy/callpy command
_testrt/alloca command
_testrt/any command
_testrt/builtin command
_testrt/cast command
_testrt/closure command
_testrt/concat command
_testrt/cstr command
_testrt/cvar command
_testrt/fprintf command
_testrt/gotypes command
_testrt/hello command
_testrt/index command
_testrt/intgen command
_testrt/map command
_testrt/named command
_testrt/panic command
_testrt/qsort command
_testrt/result command
_testrt/strlen command
_testrt/struct command
_testrt/sum command
cmd
internal/base
Package base defines shared basic pieces of the llgo command, in particular logging and the Command structure.
Package base defines shared basic pieces of the llgo command, in particular logging and the Command structure.
internal/build
Package build implements the "llgo build" command.
Package build implements the "llgo build" command.
internal/clean
Package clean implements the "llgo clean" command.
Package clean implements the "llgo clean" command.
internal/help
Package help implements the “llgo help” command.
Package help implements the “llgo help” command.
internal/install
Package install implements the "llgo install" command.
Package install implements the "llgo install" command.
internal/run
Package run implements the "llgo run" command.
Package run implements the "llgo run" command.
llgo command
compiler module
doc
_readme module
internal
abi
ar
mod
typeutil
Package typeutil defines various utilities for types, such as Map, a mapping from types.Type to interface{} values.
Package typeutil defines various utilities for types, such as Map, a mapping from types.Type to interface{} values.
py
_demo/callpy command
_demo/clpy command
_demo/hellopy command
os
runtime module
x
xtool
ar
nm

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL