#!/bin/bash # ============================================================ # Pre-build checks for required toolchains and AnyKernel3 # ============================================================ # Paths CLANG_DIR=~/toolchains/clang GCC_DIR=~/toolchains/gcc-aarch64-linux-gnu-9.3 ANYKERNEL_DIR=~/AnyKernel3 # Check Clang if [ ! -d "$CLANG_DIR" ]; then echo -e "\n๐Ÿ” \033[1;33mClang toolchain not found. Cloning...\033[0m" git clone --depth=1 --branch lineage-20.0 \ https://github.com/LineageOS/android_prebuilts_clang_kernel_linux-x86_clang-r416183b.git "$CLANG_DIR" else echo -e "\nโœ… \033[1;32mClang toolchain already present.\033[0m" fi # Check GCC if [ ! -d "$GCC_DIR" ]; then echo -e "\n๐Ÿ” \033[1;33mGCC toolchain not found. Cloning...\033[0m" git clone --depth=1 --branch lineage-23.0 \ https://github.com/LineageOS/android_prebuilts_gcc_linux-x86_aarch64_aarch64-linux-gnu-9.3.git "$GCC_DIR" else echo -e "\nโœ… \033[1;32mGCC toolchain already present.\033[0m" fi # Check AnyKernel3 if [ ! -d "$ANYKERNEL_DIR" ]; then echo -e "\n๐Ÿ” \033[1;33mAnyKernel3 not found. Cloning...\033[0m" git clone --depth=1 https://github.com/theshaenix/AnyKernel3.git "$ANYKERNEL_DIR" else echo -e "\nโœ… \033[1;32mAnyKernel3 folder already present.\033[0m" fi # ============================================================ # Build Script # ============================================================ # Kernel build configuration KERNEL_NAME="Lightning-McQueen-" VERSION_NUMBER="v1.0.1" DATE=$(date +%Y%m%d) TIME=$(date +%H%M) BASE_ZIPNAME="${KERNEL_NAME}-${TIME}-${DATE}-${VERSION_NUMBER}" ZIPNAME="${BASE_ZIPNAME}.zip" # Paths export KERNEL_ROOT="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" export CLANG_PATH=$CLANG_DIR export GCC_PATH=$GCC_DIR export ANYKERNEL_DIR=$ANYKERNEL_DIR export OUT_DIR=out export PATH=$CLANG_PATH/bin:$GCC_PATH/bin:$PATH export ARCH=arm64 export CLANG_TRIPLE=aarch64-linux-gnu- export CROSS_COMPILE=aarch64-linux- # =====================[ START PROCESS ]===================== echo -e "\n๐Ÿ› ๏ธ \033[1;34mStarting Kernel Build: $BASE_ZIPNAME\033[0m" echo -e "\n๐Ÿงน \033[1;33mCleaning output and ccache...\033[0m" rm -rf $OUT_DIR/* rm -f "$ANYKERNEL_DIR/zImage" ccache -C > /dev/null 2>&1 echo -e "\n๐Ÿ”ง \033[1;36mCompiler Info:\033[0m" clang --version | head -n 1 aarch64-linux-gcc --version | head -n 1 # =====================[ DEFCONFIG ]===================== echo -e "\n๐Ÿ“„ \033[1;36mSetting up defconfig...\033[0m" make O=$OUT_DIR ARCH=arm64 atoll_defconfig if [ $? -ne 0 ]; then echo -e "\nโŒ \033[1;31mDefconfig failed. Exiting.\033[0m" exit 1 fi # =====================[ COMPILING ]===================== echo -e "\n๐Ÿš€ \033[1;35mStarting compilation...\033[0m" make -j$(nproc) O=$OUT_DIR \ ARCH=arm64 \ CC=clang \ LD=ld.lld \ AR=llvm-ar \ NM=llvm-nm \ OBJCOPY=llvm-objcopy \ OBJDUMP=llvm-objdump \ STRIP=llvm-strip \ CLANG_TRIPLE=$CLANG_TRIPLE \ CROSS_COMPILE=$CROSS_COMPILE \ 2>&1 | tee out/build.log | grep --line-buffered -E "warning:|error:" | sed \ -e 's/warning:/\x1b[1;33mwarning:\x1b[0m/g' \ -e 's/error:/\x1b[1;31merror:\x1b[0m/g' # =====================[ CHECK IMAGE ]===================== KERNEL_IMG=$OUT_DIR/arch/arm64/boot/Image.gz-dtb if [ ! -f "$KERNEL_IMG" ]; then echo -e "\nโŒ \033[1;31mBuild failed: Image.gz-dtb not found!\033[0m" exit 1 fi echo -e "\nโœ… \033[1;32mKernel image compiled successfully.\033[0m" # =====================[ PACKAGING ]===================== echo -e "\n๐Ÿ“ฆ \033[1;34mPacking kernel into flashable zip...\033[0m" cp "$KERNEL_IMG" "$ANYKERNEL_DIR/zImage" cd $ANYKERNEL_DIR || exit 1 zip -r9 "$ZIPNAME" * -x "*.zip" "*.git*" README.md > /dev/null if [ $? -eq 0 ]; then echo -e "\n๐ŸŽ‰ \033[1;32mFlashable zip created: $ANYKERNEL_DIR/$ZIPNAME\033[0m" else echo -e "\nโŒ \033[1;31mFailed to create zip.\033[0m" exit 1 fi