Initial version of Go bindings.
[oota-llvm.git] / bindings / go / build.sh
diff --git a/bindings/go/build.sh b/bindings/go/build.sh
new file mode 100755 (executable)
index 0000000..df4855b
--- /dev/null
@@ -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