-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathbuild_llvm_android.sh
More file actions
126 lines (114 loc) · 4.21 KB
/
build_llvm_android.sh
File metadata and controls
126 lines (114 loc) · 4.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#!/bin/bash
AndroidSystemVersion="21"
AndroidSdkDir="$LOCALAPPDATA/Android/Sdk"
AndroidCmakeExe="$AndroidSdkDir/cmake/3.10.2.4988404/bin/cmake.exe"
AndroidNinjaExe="$AndroidSdkDir/cmake/3.10.2.4988404/bin/ninja.exe"
NdkBundle="$AndroidSdkDir/ndk-bundle/"
ToolchainFile="$NdkBundle/build/cmake/android.toolchain.cmake"
ArchTargets=( "armeabi-v7a" "arm64-v8a" "x86" "x86_64" )
ArchTriples=( "armv7a-linux-androideabi" "aarch64-linux-android" "i686-linux-android" "x86_64-linux-android" )
LlvmTargets=( "ARM" "AArch64" "X86" "X86" )
ProjectRootPath="android-project"
BuildRootPath="android-build"
SourceRootPath="llvm-src"
PatchableSourceFiles=( "$SourceRootPath/lib/Transforms/CMakeLists.txt" )
SourcePatchReplacePatterns=( "^add_subdirectory(Hello)$" )
SourcePatchReplaceValues=( "#add_subdirectory(Hello)" )
echo "Patching LLVM Source Files..."
PatchesLength=${#PatchableSourceFiles[*]}
for (( patchCounter=0; patchCounter < $PatchesLength; patchCounter++ ))
do
patchFile=${PatchableSourceFiles[$patchCounter]}
replacePattern=${SourcePatchReplacePatterns[$patchCounter]}
replaceValue=${SourcePatchReplaceValues[$patchCounter]}
echo "Patching Source File : $patchFile ..."
if [ ! -f "$patchFile.orig" ]
then
cp "$patchFile" "$patchFile.orig"
fi
echo "Replacing $replacePattern with $replaceValue ..."
sed -i "s/$replacePattern/$replaceValue/" "$patchFile"
echo "Successfully patched Source File : $patchFile !"
done
echo "Successfully patched LLVM Source Files!"
echo "Building LLVM for Android..."
ArchsLength=${#ArchTargets[*]}
for (( archCounter=0; archCounter < $ArchsLength; archCounter++ ))
do
archTarget=${ArchTargets[$archCounter]}
archTriple=${ArchTriples[$archCounter]}
llvmTarget=${LlvmTargets[$archCounter]}
projectDir="$ProjectRootPath/$archTarget"
buildDir="$BuildRootPath/$archTarget"
echo "Setting Up Build Environment for Architecture : $archTarget ..."
if [ -d $projectDir ]
then
echo "Removing existing Project directory : $projectDir ..."
rm -rf "$projectDir"
fi
if [ -d $buildDir ]
then
echo "Removing existing Build directory : $buildDir ..."
rm -rf "$buildDir"
fi
echo "Creating Project directory : $projectDir ..."
mkdir -p $projectDir
echo "Creating Build directory : $buildDir ..."
mkdir -p $buildDir
buildFullPath=$(realpath "./$buildDir")
echo "Generating Project Files for Architecture : $archTarget ..."
pushd $projectDir > /dev/null
$AndroidCmakeExe \
-DCMAKE_BUILD_TYPE="Release" \
-DCMAKE_INSTALL_PREFIX="$buildFullPath" \
-DCMAKE_TOOLCHAIN_FILE="$ToolchainFile" \
-DCMAKE_MAKE_PROGRAM="$AndroidNinjaExe" \
\
-DANDROID_ABI="$archTarget" \
-DANDROID_PLATFORM="$AndroidSystemVersion" \
\
-DLLVM_DEFAULT_TARGET_TRIPLE="$archTriple" \
-DLLVM_TARGETS_TO_BUILD="$llvmTarget" \
\
-DLLVM_TABLEGEN="../../host-build/bin/llvm-tblgen.exe" \
\
-DLLVM_INCLUDE_BENCHMARKS=OFF \
-DLLVM_INCLUDE_DOCS=OFF \
-DLLVM_INCLUDE_EXAMPLES=OFF \
-DLLVM_INCLUDE_RUNTIMES=OFF \
-DLLVM_INCLUDE_TESTS=OFF \
-DLLVM_INCLUDE_GO_TESTS=OFF \
-DLLVM_INCLUDE_TOOLS=OFF \
-DLLVM_INCLUDE_UTILS=OFF \
\
-DLLVM_BUILD_BENCHMARKS=OFF \
-DLLVM_BUILD_EXAMPLES=OFF \
-DLLVM_BUILD_RUNTIME=OFF \
-DLLVM_BUILD_RUNTIMES=OFF \
-DLLVM_BUILD_TESTS=OFF \
-DLLVM_BUILD_TOOLS=OFF \
-DLLVM_BUILD_UTILS=OFF \
\
-DLLVM_BUILD_LLVM_DYLIB=OFF \
\
-DLLVM_ENABLE_PIC=False \
\
-G "Ninja" \
\
"../../$SourceRootPath"
if [ $? -ne 0 ]; then
echo "Project Generation failed for Architecture : $archTarget !"
popd > /dev/null
exit 1
fi
echo "Building LLVM for Architecture : $archTarget ..."
$AndroidCmakeExe --build . --target install
if [ $? -ne 0 ]; then
echo "Compilation failed for Architecture : $archTarget !"
popd > /dev/null
exit 1
fi
popd > /dev/null
echo "Successfully built LLVM for Architecture : $archTarget !"
done
echo "Successfully built LLVM for Android!"