2014-10-17 06:48:02 +08:00
|
|
|
This directory contains LLVM bindings for the Go programming language
|
|
|
|
(http://golang.org).
|
|
|
|
|
|
|
|
Prerequisites
|
|
|
|
-------------
|
|
|
|
|
|
|
|
* Go 1.2+.
|
|
|
|
* CMake (to build LLVM).
|
|
|
|
|
|
|
|
Using the bindings
|
|
|
|
------------------
|
|
|
|
|
|
|
|
The package path "llvm.org/llvm/bindings/go/llvm" can be used to
|
|
|
|
import the latest development version of LLVM from SVN. Paths such as
|
|
|
|
"llvm.org/llvm.v36/bindings/go/llvm" refer to released versions of LLVM.
|
|
|
|
|
|
|
|
It is recommended to use the "-d" flag with "go get" to download the
|
|
|
|
package or a dependency, as an additional step is required to build LLVM
|
|
|
|
(see "Building LLVM" below).
|
|
|
|
|
|
|
|
Building LLVM
|
|
|
|
-------------
|
|
|
|
|
|
|
|
The script "build.sh" in this directory can be used to build LLVM and prepare
|
|
|
|
it to be used by the bindings. If you receive an error message from "go build"
|
|
|
|
like this:
|
|
|
|
|
|
|
|
./analysis.go:4:84: fatal error: llvm-c/Analysis.h: No such file or directory
|
|
|
|
#include <llvm-c/Analysis.h> // If you are getting an error here read bindings/go/README.txt
|
|
|
|
|
|
|
|
or like this:
|
|
|
|
|
|
|
|
./llvm_dep.go:5: undefined: run_build_sh
|
|
|
|
|
|
|
|
it means that LLVM needs to be built or updated by running the script.
|
|
|
|
|
|
|
|
$ $GOPATH/src/llvm.org/llvm/bindings/go/build.sh
|
|
|
|
|
|
|
|
Any command line arguments supplied to the script are passed to LLVM's CMake
|
|
|
|
build system. A good set of arguments to use during development are:
|
|
|
|
|
|
|
|
$ $GOPATH/src/llvm.org/llvm/bindings/go/build.sh -DCMAKE_BUILD_TYPE=Debug -DLLVM_TARGETS_TO_BUILD=host -DBUILD_SHARED_LIBS=ON
|
|
|
|
|
|
|
|
Note that CMake keeps a cache of build settings so once you have built
|
|
|
|
LLVM there is no need to pass these arguments again after updating.
|
|
|
|
|
|
|
|
Alternatively, you can build LLVM yourself, but you must then set the
|
|
|
|
CGO_CPPFLAGS, CGO_CXXFLAGS and CGO_LDFLAGS environment variables:
|
|
|
|
|
|
|
|
$ export CGO_CPPFLAGS="`/path/to/llvm-build/bin/llvm-config --cppflags`"
|
2019-08-15 18:55:25 +08:00
|
|
|
$ export CGO_CXXFLAGS=-std=c++14
|
2014-10-17 06:48:02 +08:00
|
|
|
$ export CGO_LDFLAGS="`/path/to/llvm-build/bin/llvm-config --ldflags --libs --system-libs all`"
|
|
|
|
$ go build -tags byollvm
|
2018-02-24 04:12:24 +08:00
|
|
|
|
|
|
|
If you see a compilation error while compiling your code with Go 1.9.4 or later as follows,
|
|
|
|
|
|
|
|
go build llvm.org/llvm/bindings/go/llvm: invalid flag in #cgo LDFLAGS: -Wl,-headerpad_max_install_names
|
|
|
|
|
|
|
|
you need to setup $CGO_LDFLAGS_ALLOW to allow a compiler to specify some linker options:
|
|
|
|
|
|
|
|
$ export CGO_LDFLAGS_ALLOW='-Wl,(-search_paths_first|-headerpad_max_install_names)'
|