dotfiles/.local/bin/build-anykernel.sh

205 lines
4.1 KiB
Bash
Executable File

#!/bin/bash
#
# Build Script for RenderZenith!
# Based off AK's build script - Thanks!
#
# Bash Color
rm .version
green='\033[01;32m'
red='\033[01;31m'
blink_red='\033[05;31m'
restore='\033[0m'
clear
# Resources
THREAD="-j$(grep -c ^processor /proc/cpuinfo)"
KERNEL="Image.gz"
export DEFCONFIG="oneplus6_defconfig"
# Kernel Details
VER=RenderZenith
DEVICE=OP6
VARIANT="OP6-Q-UNIFIED"
# Kernel zip name
HASH=`git rev-parse --short=8 HEAD`
KERNEL_ZIP="RZ-$VARIANT-$(date +%y%m%d)-$HASH"
# Enable ccache per device
CCACHE=ccache
export CCACHE_DIR="$HOME/.ccache/kernel/$DEVICE"
# Vars
export LOCALVERSION=~`echo $VER`
export ARCH=arm64
export SUBARCH=arm64
export KBUILD_BUILD_USER=xstefen
export KBUILD_BUILD_HOST=leviathan
export LOCALVERSION=~`echo $KERNEL_ZIP`
# Extra make arguments
EXTRA_CONFIGS="CONFIG_DEBUG_SECTION_MISMATCH=y"
# Paths
KERNEL_DIR=`pwd`
KBUILD_OUTPUT="${KERNEL_DIR}/out"
REPACK_DIR="${HOME}/android/AnyKernel3"
PATCH_DIR="${HOME}/android/AnyKernel3/patch"
MODULES_DIR="${HOME}/android/AnyKernel3/modules"
ZIP_MOVE="${HOME}/android/zips"
ZIMAGE_DIR="$KBUILD_OUTPUT/arch/arm64/boot"
# Create output directory
mkdir -p $KBUILD_OUTPUT
# Functions
#function checkout_ak3_branches {
# cd $REPACK_DIR
# git checkout rz-op6-oos-q
# cd $KERNEL_DIR
#}
function clean_all {
rm -rf $REPACK_DIR/$MODULES_DIR/*
rm -f $REPACK_DIR/$KERNEL
rm -f $REPACK_DIR/zImage
rm -f $REPACK_DIR/dtb
echo
make O=$KBUILD_OUTPUT clean && make O=$KBUILD_OUTPUT mrproper
}
function make_clang_kernel {
export CROSS_COMPILE="${HOME}/android/toolchains/proton-clang/bin/aarch64-linux-gnu-"
REAL_CC="${HOME}/android/toolchains/proton-clang/bin/clang"
echo
make $DEFCONFIG O=$KBUILD_OUTPUT $EXTRA_CONFIGS
echo
echo "Building with Clang..."
echo
PATH="${HOME}/android/toolchains/proton-clang/bin:${PATH}" \
make $THREAD \
ARCH=$ARCH \
CC="$CCACHE $REAL_CC" \
CROSS_COMPILE="$CROSS_COMPILE" \
O=$KBUILD_OUTPUT \
$EXTRA_CONFIGS
}
function make_gcc_kernel {
export CROSS_COMPILE="${CCACHE} ${HOME}/android/toolchains/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-"
echo
echo "Building with GCC..."
echo
make O=${KBUILD_OUTPUT} $DEFCONFIG
make -s O=${KBUILD_OUTPUT} $THREAD $EXTRA_CONFIGS
}
function make_modules {
# Remove and re-create modules directory
rm -rf $MODULES_DIR
mkdir -p $MODULES_DIR
# Copy modules over
echo
find $KBUILD_OUTPUT -name '*.ko' -exec cp -v {} $MODULES_DIR \;
# Strip modules
${CROSS_COMPILE}strip --strip-unneeded $MODULES_DIR/*.ko
# Sign modules
if grep -Fxq "CONFIG_MODULE_SIG=y" $KBUILD_OUTPUT/.config
then
find $MODULES_DIR -name '*.ko' -exec $KBUILD_OUTPUT/scripts/sign-file sha512 $KBUILD_OUTPUT/certs/signing_key.pem $KBUILD_OUTPUT/certs/signing_key.x509 {} \;
fi
}
function make_zip {
cp -vr $ZIMAGE_DIR/$KERNEL $REPACK_DIR/$KERNEL
find $KBUILD_OUTPUT/arch/arm64/boot/dts -name '*.dtb' -exec cat {} + > $REPACK_DIR/dtb
cd $REPACK_DIR
zip -r9 $KERNEL_ZIP.zip *
mv $KERNEL_ZIP.zip $ZIP_MOVE
cd $KERNEL_DIR
}
DATE_START=$(date +"%s")
echo -e "${green}"
echo "RenderZenith creation script:"
echo -e "${restore}"
while read -p "Do you want to clean stuffs (y/n)? " cchoice
do
case "$cchoice" in
y|Y )
#checkout_ak3_branches
clean_all
echo
echo "All Cleaned now."
break
;;
n|N )
#checkout_ak3_branches
break
;;
* )
echo
echo "Invalid try again!"
echo
;;
esac
done
echo
echo "Pick which toolchain to build with:"
select choice in Clang GCC
do
case "$choice" in
"Clang")
make_clang_kernel
break;;
"GCC")
make_gcc_kernel
break;;
esac
done
while read -p "Do you want to ZIP kernel (y/n)? " dchoice
do
case "$dchoice" in
y|Y)
make_modules
make_zip
break
;;
n|N )
break
;;
* )
echo
echo "Invalid try again!"
echo
;;
esac
done
echo -e "${green}"
echo "-------------------"
echo "Build Completed in:"
echo "-------------------"
echo -e "${restore}"
DATE_END=$(date +"%s")
DIFF=$(($DATE_END - $DATE_START))
echo "Time: $(($DIFF / 60)) minute(s) and $(($DIFF % 60)) seconds."
echo