mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 03:33:20 +01:00
5d4eef4d9b
https://github.com/golang/go/issues/23672 By this change, building a Go code with LLVM Go bindings causes a compilation error as follows. go build llvm.org/llvm/bindings/go/llvm: invalid flag in #cgo LDFLAGS: -Wl,-headerpad_max_install_names llvm-go tool generates cgo LDFLAGS directive from `llvm-config --ldflags` and it contains -Wl,option options. But -Wl,option is banned by default. To avoid this problem, we need to set $CGO_LDFLAGS_ALLOW environment variable to notify a compiler that the flags should be allowed. $ export CGO_LDFLAGS_ALLOW='-Wl,(-search_paths_first|-headerpad_max_install_names)' By default for go 1.10 and go 1.9.5 these options should appear in the accepted set of options, however, if you're running into the error it's useful to have this documented. Patch by Ryuichi Hayashida llvm-svn: 325946
62 lines
2.3 KiB
Plaintext
62 lines
2.3 KiB
Plaintext
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`"
|
|
$ export CGO_CXXFLAGS=-std=c++11
|
|
$ export CGO_LDFLAGS="`/path/to/llvm-build/bin/llvm-config --ldflags --libs --system-libs all`"
|
|
$ go build -tags byollvm
|
|
|
|
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)'
|