+#!/bin/bash
+# Script to build clang with patch to make executables
+# position-independent on Android by default.
+# Currently unused as the clang binary in the NDK is used
+# instead, wrapped with clang-pie-wrapper.
+
+set -e -u
+
+LLVM_VERSION=3.9.1
+
+rm -Rf $HOME/clang-build
+mkdir -p $HOME/clang-build
+cd $HOME/clang-build
+
+curl -L --fail --retry 2 -o llvm.tar.xz \
+ http://llvm.org/releases/${LLVM_VERSION}/llvm-${LLVM_VERSION}.src.tar.xz
+TERMUX_PKG_SHA256=1fd90354b9cf19232e8f168faf2220e79be555df3aa743242700879e8fd329ee
+curl -L --fail --retry 2 -o clang.tar.xz \
+ http://llvm.org/releases/${LLVM_VERSION}/cfe-${LLVM_VERSION}.src.tar.xz
+
+tar xf llvm.tar.xz
+tar xf clang.tar.xz
+
+mv llvm-3.9.1.src src
+mv cfe-$LLVM_VERSION.src src/tools/clang
+cd src
+
+patch -p1 <<EOF
+diff -u -r ../llvm-3.9.0.src/tools/clang/lib/Driver/Tools.cpp ./tools/clang/lib/Driver/Tools.cpp
+--- ../llvm-3.9.0.src/tools/clang/lib/Driver/Tools.cpp 2016-08-13 16:43:56.000000000 -0400
++++ ./tools/clang/lib/Driver/Tools.cpp 2016-09-04 06:15:59.703422745 -0400
+@@ -9357,9 +9357,12 @@
+ const llvm::Triple::ArchType Arch = ToolChain.getArch();
+ const bool isAndroid = ToolChain.getTriple().isAndroid();
+ const bool IsIAMCU = ToolChain.getTriple().isOSIAMCU();
++ // Termux modification: Enable pie by default for Android and support the
++ // nopie flag.
+ const bool IsPIE =
+ !Args.hasArg(options::OPT_shared) && !Args.hasArg(options::OPT_static) &&
+- (Args.hasArg(options::OPT_pie) || ToolChain.isPIEDefault());
++ (Args.hasArg(options::OPT_pie) || ToolChain.isPIEDefault() || isAndroid) &&
++ !Args.hasArg(options::OPT_nopie);
+ const bool HasCRTBeginEndFiles =
+ ToolChain.getTriple().hasEnvironment() ||
+ (ToolChain.getTriple().getVendor() != llvm::Triple::MipsTechnologies);
+EOF
+
+mkdir ../build
+cd ../build
+
+cmake ../src \
+ -DCMAKE_BUILD_TYPE=Release
+make clang