forked from nowsecure/fsmon
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathndk-gcc
executable file
·131 lines (115 loc) · 2.73 KB
/
ndk-gcc
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
127
128
129
130
131
#!/bin/sh
# android gcc wrapper
if [ -z "${NDK}" ]; then
NDK=~/Downloads/android-ndk-r10e
if [ ! -d "${NDK}" ]; then
echo "Invalid path in NDK environment"
exit 1
fi
fi
if [ -n "${NDK_ARCH}" ]; then
ARCH=${NDK_ARCH}
else
ARCH=mips
ARCH=x86
ARCH=arm
fi
ANDROID_API_LEVEL=$1
shift
case "${ANDROID_API_LEVEL}" in
kk|kitkat)
ANDROID_API_LEVEL=19
;;
ll|lollipop)
ANDROID_API_LEVEL=21
;;
*)
ANDROID_API_LEVEL=19
;;
esac
echo "Using NDK ${NDK}"
echo "Using NDK_ARCH ${NDK_ARCH} -> ${ARCH}"
echo "Using ANDROID_API_LEVEL ${ANDROID_API_LEVEL}"
#------------------------------------------#
PROGDIR="$(dirname "$0")"
PROGDIR="$(cd "$PROGDIR" && pwd)"
# shellcheck disable=SC2019
# shellcheck disable=SC2018
OS="$(uname | tr 'A-Z' 'a-z')"
[ "${OS}" = macos ] && OS=darwin
ARCH2=${ARCH}
case "${ARCH}" in
aarch64)
NDKPFX=${ARCH}-linux-android
ARCH2=arm64
;;
arm)
NDKPFX=${ARCH}-linux-androideabi
;;
mips)
NDKPFX=mipsel-linux-android
${NDKPFX}-gcc 2>/dev/null
if [ $? -gt 1 ]; then
NDKPFX=mipsel-linux-android
fi
;;
mips64)
NDKPFX=mips64el-linux-android
${NDKPFX}-gcc 2>/dev/null
if [ $? -gt 1 ]; then
NDKPFX=mips64el-linux-android
fi
;;
x86)
NDKPFX=i686-android-linux
${NDKPFX}-gcc 2>/dev/null
if [ $? -gt 1 ]; then
NDKPFX=i686-linux-android
fi
;;
esac
if [ -d "${PROGDIR}/platforms/android-L/arch-${ARCH}" ]; then
ANDROID_API_LEVEL=L
fi
PROGDIR=${NDK}
PLATFORM=android-${ANDROID_API_LEVEL}
PLATFORM_ROOT=${PROGDIR}/platforms/${PLATFORM}/arch-${ARCH2}
PLATFORM_PATH=${PLATFORM_ROOT}/usr
# shellcheck disable=SC2010
NDK_BINS=$(ls "${PROGDIR}"/toolchains/*/prebuilt/"${OS}"*/bin |grep prebuilt | grep "/${ARCH}-" |sort |tail -n 1)
# shellcheck disable=SC2010
[ -z "${NDK_BINS}" ] && \
NDK_BINS=$(ls "${PROGDIR}"/toolchains/*/prebuilt/"${OS}"*/bin |grep prebuilt | grep "/${ARCH}" |sort |tail -n 1)
#echo "ls ${PROGDIR}/toolchains/*/prebuilt/linux*/bin |grep prebuilt | grep "/${ARCH}-" |sort |tail -n 1"
#echo NDKBINS=${NDK_BINS}
if [ -z "${NDK_BINS}" ]; then
echo "Cant find NDK_BINS"
exit 1
fi
CFLAGS="${CFLAGS} --sysroot=${PLATFORM_ROOT}"
CFLAGS="${CFLAGS} -I${PLATFORM_PATH}/include"
CFLAGS="${CFLAGS} -fPIC -fPIE"
case "${ARCH}" in
mips64)
LDFLAGS=-L${PLATFORM_PATH}/lib64
;;
*)
LDFLAGS=-L${PLATFORM_PATH}/lib
;;
esac
#LDFLAGS="${LDFLAGS} -nostdlib"
#LDFLAGS="${LDFLAGS} -lc -ldl"
#LDFLAGS="${LDFLAGS} -Wl,-dynamic-linker=/system/bin/linker"
LDFLAGS="${LDFLAGS} --sysroot=${PLATFORM_ROOT}"
#if [ -z "`echo $*" | grep shared`" ]; then
#LDFLAGS="${LDFLAGS} ${PLATFORM_PATH}/lib/crtbegin_dynamic.o"
#fi
CC="${NDKPFX}-gcc"
AR="${NDKPFX}-ar"
EXT_SO=so
export PATH="${NDK_BINS}:$PATH"
export EXT_SO AR CC CFLAGS LDFLAGS PATH
#shellcheck disable=SC2048
#shellcheck disable=SC2086
echo ${CC} ${LDFLAGS} ${CFLAGS} $*
${CC} ${LDFLAGS} ${CFLAGS} $*