forked from ArrowOS-Devices/android_kernel_motorola_msm8952
-
Notifications
You must be signed in to change notification settings - Fork 0
/
build.sh
executable file
·145 lines (118 loc) · 3.55 KB
/
build.sh
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
132
133
134
135
136
137
138
139
140
141
142
143
144
#!/bin/bash
# script for building NetHunter kernels by jcadduono
################### For Calculating Time #############
res1=$(date +%s.%N)
######################################################
################### BEFORE STARTING ################
#
# download a working toolchain and extract it somewhere and configure this
# file to point to the toolchain's root directory.
# this file should be placed in your kernel source folder with
# the CONFIG section edited to work for your device.
#
# once you've set up the config section how you like it, you can simply run
# ./build.sh [DEVICE] [TARGET]
#
# make a copy of your device's original defconfig file.
# the new defconfig file should follow the format:
# arch/arm64/configs/nethunter_yourdevice_defconfig
#
###################### CONFIG ######################
# default device name (change this!)
DEFAULT_DEVICE=athene
# default target name
DEFAULT_TARGET=nethunter
# release version (increment this with new releases)
RELEASE_VERSION=3.0
# directory containing cross-compile arm64 toolchain (change this!)
TOOLCHAIN=/home/dhanush/build-tools-gcc/aarch64-linux-gnu
############## SCARY NO-TOUCHY STUFF ###############
# root directory of kernel source git repo (default is this script's location)
RDIR=$(pwd)
CPU_THREADS=$(grep -c "processor" /proc/cpuinfo)
# amount of cpu threads to use in kernel make process
THREADS=$((CPU_THREADS + 1))
ABORT() {
[ "$1" ] && echo "Error: $*"
exit 1
}
CONTINUE=false
export ARCH=arm64
export CROSS_COMPILE=$TOOLCHAIN/bin/aarch64-linux-gnu-
[ -x "${CROSS_COMPILE}gcc" ] ||
ABORT "Unable to find gcc cross-compiler at location: ${CROSS_COMPILE}gcc"
while [ $# != 0 ]; do
if [ "$1" = "--continue" ] || [ "$1" == "-c" ]; then
CONTINUE=true
elif [ ! "$TARGET" ]; then
TARGET=$1
elif [ ! "$DEVICE" ]; then
DEVICE=$1
else
echo "Too many arguments!"
echo "Usage: ./build.sh [--continue] [device] [target defconfig]"
ABORT
fi
shift
done
[ "$DEVICE" ] || DEVICE=$DEFAULT_DEVICE
[ "$TARGET" ] || TARGET=$DEFAULT_TARGET
DEFCONFIG=${TARGET}_${DEVICE}_defconfig
[ -f "$RDIR/arch/$ARCH/configs/${DEFCONFIG}" ] ||
ABORT "Config $DEFCONFIG not found in $ARCH configs!"
export LOCALVERSION=$TARGET-$DEVICE-$RELEASE_VERSION
CLEAN_BUILD() {
echo "Cleaning build..."
rm -rf build
}
SETUP_BUILD() {
echo "Creating kernel config for $LOCALVERSION..."
mkdir -p build
make -C "$RDIR" O=build "$DEFCONFIG" \
|| ABORT "Failed to set up build"
}
BUILD_KERNEL() {
echo "Starting build for $LOCALVERSION..."
while ! make -C "$RDIR" O=build -j"$THREADS"; do
read -rp "Build failed. Retry? " do_retry
case $do_retry in
Y|y) continue ;;
*) return 1 ;;
esac
done
}
INSTALL_MODULES() {
grep -q 'CONFIG_MODULES=y' build/.config || return 0
echo "Installing kernel modules to build/lib/modules..."
while ! make -C "$RDIR" O=build \
INSTALL_MOD_PATH="." \
INSTALL_MOD_STRIP=1 \
modules_install
do
read -rp "Build failed. Retry? " do_retry
case $do_retry in
Y|y) continue ;;
*) return 1 ;;
esac
done
rm build/lib/modules/*/build build/lib/modules/*/source
}
cd "$RDIR" || ABORT "Failed to enter $RDIR!"
if ! $CONTINUE; then
CLEAN_BUILD
SETUP_BUILD ||
ABORT "Failed to set up build!"
fi
BUILD_KERNEL &&
INSTALL_MODULES &&
echo "Finished building $LOCALVERSION!"
# For Calculating Build Time
res2=$(date +%s.%N)
dt=$(echo "$res2 - $res1" | bc)
dd=$(echo "$dt/86400" | bc)
dt2=$(echo "$dt-86400*$dd" | bc)
dh=$(echo "$dt2/3600" | bc)
dt3=$(echo "$dt2-3600*$dh" | bc)
dm=$(echo "$dt3/60" | bc)
ds=$(echo "$dt3-60*$dm" | bc)
printf "Total Build time: %d:%02d:%02d:%02.4f\n" $dd $dh $dm $ds