forked from llvm-mirror/llvm
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This code is based on the existing LLVM Go bindings project hosted at: https://github.com/go-llvm/llvm Note that all contributors to the gollvm project have agreed to relicense their changes under the LLVM license and submit them to the LLVM project. Differential Revision: http://reviews.llvm.org/D5684 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@219976 91177308-0d34-0410-b5e6-96231b3b80d8
- Loading branch information
Showing
45 changed files
with
4,426 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
#!/bin/sh -xe | ||
|
||
llvm_components="\ | ||
all-targets \ | ||
analysis \ | ||
asmparser \ | ||
asmprinter \ | ||
bitreader \ | ||
bitwriter \ | ||
codegen \ | ||
core \ | ||
debuginfo \ | ||
executionengine \ | ||
instrumentation \ | ||
interpreter \ | ||
ipo \ | ||
irreader \ | ||
linker \ | ||
mc \ | ||
mcjit \ | ||
objcarcopts \ | ||
option \ | ||
profiledata \ | ||
scalaropts \ | ||
support \ | ||
target \ | ||
" | ||
|
||
if [ "$1" == "--print-components" ] ; then | ||
echo $llvm_components | ||
exit 0 | ||
fi | ||
|
||
gollvmdir=$(dirname "$0")/llvm | ||
|
||
workdir=$gollvmdir/workdir | ||
llvmdir=$gollvmdir/../../.. | ||
llvm_builddir=$workdir/llvm_build | ||
|
||
mkdir -p $llvm_builddir | ||
|
||
cmake_flags="../../../../.. $@" | ||
llvm_config="$llvm_builddir/bin/llvm-config" | ||
|
||
if test -n "`which ninja`" ; then | ||
# If Ninja is available, we can speed up the build by building only the | ||
# required subset of LLVM. | ||
(cd $llvm_builddir && cmake -G Ninja $cmake_flags) | ||
ninja -C $llvm_builddir llvm-config | ||
llvm_buildtargets="$($llvm_config --libs $llvm_components | sed -e 's/-l//g')" | ||
ninja -C $llvm_builddir $llvm_buildtargets FileCheck | ||
else | ||
(cd $llvm_builddir && cmake $cmake_flags) | ||
make -C $llvm_builddir -j4 | ||
fi | ||
|
||
llvm_version="$($llvm_config --version)" | ||
llvm_cflags="$($llvm_config --cppflags)" | ||
llvm_ldflags="$($llvm_config --ldflags) $($llvm_config --libs $llvm_components) $($llvm_config --system-libs)" | ||
if [ $(uname) != "Darwin" ]; then | ||
# OS X doesn't like -rpath with cgo. See: | ||
# https://code.google.com/p/go/issues/detail?id=7293 | ||
llvm_ldflags="-Wl,-rpath,$($llvm_config --libdir) $llvm_ldflags" | ||
fi | ||
sed -e "s#@LLVM_CFLAGS@#$llvm_cflags#g; s#@LLVM_LDFLAGS@#$llvm_ldflags#g" $gollvmdir/llvm_config.go.in > \ | ||
$gollvmdir/llvm_config.go | ||
printf "package llvm\n\nconst Version = \"%s\"\n" "$llvm_version" > $gollvmdir/version.go |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
package main | ||
|
||
import ( | ||
"go/build" | ||
"os" | ||
) | ||
|
||
// Tests that the Go compiler is at least version 1.2. | ||
func main() { | ||
for _, tag := range build.Default.ReleaseTags { | ||
if tag == "go1.2" { | ||
os.Exit(0) | ||
} | ||
} | ||
os.Exit(1) | ||
} |
Oops, something went wrong.