Commit | Line | Data |
---|---|---|
ef98cf1c FF |
1 | #!/bin/bash |
2 | # Script to build clang with patch to make executables | |
3 | # position-independent on Android by default. | |
4 | # Currently unused as the clang binary in the NDK is used | |
5 | # instead, wrapped with clang-pie-wrapper. | |
6 | ||
7 | set -e -u | |
8 | ||
9 | LLVM_VERSION=3.9.1 | |
10 | ||
11 | rm -Rf $HOME/clang-build | |
12 | mkdir -p $HOME/clang-build | |
13 | cd $HOME/clang-build | |
14 | ||
15 | curl -L --fail --retry 2 -o llvm.tar.xz \ | |
16 | http://llvm.org/releases/${LLVM_VERSION}/llvm-${LLVM_VERSION}.src.tar.xz | |
17 | TERMUX_PKG_SHA256=1fd90354b9cf19232e8f168faf2220e79be555df3aa743242700879e8fd329ee | |
18 | curl -L --fail --retry 2 -o clang.tar.xz \ | |
19 | http://llvm.org/releases/${LLVM_VERSION}/cfe-${LLVM_VERSION}.src.tar.xz | |
20 | ||
21 | tar xf llvm.tar.xz | |
22 | tar xf clang.tar.xz | |
23 | ||
24 | mv llvm-3.9.1.src src | |
25 | mv cfe-$LLVM_VERSION.src src/tools/clang | |
26 | cd src | |
27 | ||
28 | patch -p1 <<EOF | |
29 | diff -u -r ../llvm-3.9.0.src/tools/clang/lib/Driver/Tools.cpp ./tools/clang/lib/Driver/Tools.cpp | |
30 | --- ../llvm-3.9.0.src/tools/clang/lib/Driver/Tools.cpp 2016-08-13 16:43:56.000000000 -0400 | |
31 | +++ ./tools/clang/lib/Driver/Tools.cpp 2016-09-04 06:15:59.703422745 -0400 | |
32 | @@ -9357,9 +9357,12 @@ | |
33 | const llvm::Triple::ArchType Arch = ToolChain.getArch(); | |
34 | const bool isAndroid = ToolChain.getTriple().isAndroid(); | |
35 | const bool IsIAMCU = ToolChain.getTriple().isOSIAMCU(); | |
36 | + // Termux modification: Enable pie by default for Android and support the | |
37 | + // nopie flag. | |
38 | const bool IsPIE = | |
39 | !Args.hasArg(options::OPT_shared) && !Args.hasArg(options::OPT_static) && | |
40 | - (Args.hasArg(options::OPT_pie) || ToolChain.isPIEDefault()); | |
41 | + (Args.hasArg(options::OPT_pie) || ToolChain.isPIEDefault() || isAndroid) && | |
42 | + !Args.hasArg(options::OPT_nopie); | |
43 | const bool HasCRTBeginEndFiles = | |
44 | ToolChain.getTriple().hasEnvironment() || | |
45 | (ToolChain.getTriple().getVendor() != llvm::Triple::MipsTechnologies); | |
46 | EOF | |
47 | ||
48 | mkdir ../build | |
49 | cd ../build | |
50 | ||
51 | cmake ../src \ | |
52 | -DCMAKE_BUILD_TYPE=Release | |
53 | make clang |