+compile_LLVM() {
+ # To be changed each time we make edits that would modify the compiled result!
+ llvm_magic=1
+
+ _src=$SRC/LLVM-$LLVM_VERSION
+ _inst=$INST/llvm-$LLVM_VERSION
+ _src_clang=$SRC/CLANG-$LLVM_VERSION
+
+ # Clean install if needed!
+ magic_compile_check llvm-$LLVM_VERSION $llvm_magic
+ if [ $? -eq 1 ]; then
+ rm -rf $_inst
+ rm -rf $_inst_clang
+ fi
+
+ if [ ! -d $_inst ]; then
+ INFO "Building LLVM-$LLVM_VERSION (CLANG included!)"
+
+ prepare_opt
+
+ if [ ! -d $_src -o true ]; then
+ wget -c $LLVM_SOURCE -O "$_src.tar.gz"
+ wget -c $LLVM_CLANG_SOURCE -O "$_src_clang.tar.gz"
+
+ INFO "Unpacking LLVM-$LLVM_VERSION"
+ tar -C $SRC --transform "s,([^/]*/?)llvm-[^/]*(.*),\1LLVM-$LLVM_VERSION\2,x" \
+ -xf $_src.tar.gz
+ INFO "Unpacking CLANG-$LLVM_VERSION to $_src/tools/clang"
+ tar -C $_src/tools \
+ --transform "s,([^/]*/?)clang-[^/]*(.*),\1clang\2,x" \
+ -xf $_src_clang.tar.gz
+
+ cd $_src
+
+ # XXX Ugly patching hack!
+ cat << EOF | patch -p1
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -13,7 +13,7 @@
+ set(LLVM_VERSION_MAJOR 3)
+ set(LLVM_VERSION_MINOR 1)
+
+-set(PACKAGE_VERSION "\${LLVM_VERSION_MAJOR}.\${LLVM_VERSION_MINOR}svn")
++set(PACKAGE_VERSION "\${LLVM_VERSION_MAJOR}.\${LLVM_VERSION_MINOR}")
+
+ set_property(GLOBAL PROPERTY USE_FOLDERS ON)
+
+EOF
+
+ cd $CWD
+
+ fi
+
+ cd $_src
+
+ # Always refresh the whole build!
+ if [ -d build ]; then
+ rm -rf build
+ fi
+ mkdir build
+ cd build
+
+ cmake_d="-D CMAKE_BUILD_TYPE=Release"
+ cmake_d="$cmake_d -D CMAKE_INSTALL_PREFIX=$_inst"
+ cmake_d="$cmake_d -D LLVM_ENABLE_FFI=ON"
+
+ cmake $cmake_d ..
+
+ make -j$THREADS && make install
+ make clean
+
+ if [ -d $_inst ]; then
+ rm -f $INST/llvm
+ ln -s llvm-$LLVM_VERSION $INST/llvm
+ else
+ ERROR "LLVM-$LLVM_VERSION failed to compile, exiting"
+ exit 1
+ fi
+
+ magic_compile_set llvm-$LLVM_VERSION $llvm_magic
+
+ cd $CWD
+ else
+ INFO "Own LLVM-$LLVM_VERSION (CLANG included) is up to date, nothing to do!"
+ INFO "If you want to force rebuild of this lib, delete the '$_src' and '$_inst' directories."
+ fi
+}
+