diff --git a/.github/workflows/build-kernel-MeteoricSU.yml b/.github/workflows/build-kernel-MeteoricSU.yml new file mode 100644 index 0000000000..307612db45 --- /dev/null +++ b/.github/workflows/build-kernel-MeteoricSU.yml @@ -0,0 +1,237 @@ +name: Build Kernel MeteoricSU +on: + workflow_dispatch: + schedule: + - cron: '0 21 * * 2,6' + +jobs: + build: + name: Build Kernel by ${{ github.actor }} + runs-on: ubuntu-latest + if: github.event.repository.owner.id == github.event.sender.id + env: + CCACHE_COMPILERCHECK: "%compiler% -dumpmachine; %compiler% -dumpversion" + CCACHE_NOHASHDIR: "true" + CCACHE_HARDLINK: "true" + steps: + - uses: actions/checkout@v3 + - name: Prepare Configuration + run: | + echo "KERNEL_SOURCE=$(cat config_MeteoricSU.env | grep -w "KERNEL_SOURCE" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "KERNEL_SOURCE_BRANCH=$(cat config_MeteoricSU.env | grep -w "KERNEL_SOURCE_BRANCH" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "KERNEL_CONFIG=$(cat config_MeteoricSU.env | grep -w "KERNEL_CONFIG" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "KERNEL_IMAGE_NAME=$(cat config_MeteoricSU.env | grep -w "KERNEL_IMAGE_NAME" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "ARCH=$(cat config_MeteoricSU.env | grep -w "ARCH" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "EXTRA_CMDS=$(cat config_MeteoricSU.env | grep -w "EXTRA_CMDS" | head -n 1 | cut -d ":" -f 2)" >> $GITHUB_ENV + echo "USE_CUSTOM_CLANG=$(cat config_MeteoricSU.env | grep -w "USE_CUSTOM_CLANG" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "CUSTOM_CLANG_SOURCE=$(cat config_MeteoricSU.env | grep -w "CUSTOM_CLANG_SOURCE" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "CUSTOM_CLANG_BRANCH=$(cat config_MeteoricSU.env | grep -w "CUSTOM_CLANG_BRANCH" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "CUSTOM_CMDS=$(cat config_MeteoricSU.env | grep -w "CUSTOM_CMDS" | head -n 1 | cut -d ":" -f 2)" >> $GITHUB_ENV + echo "CLANG_BRANCH=$(cat config_MeteoricSU.env | grep -w "CLANG_BRANCH" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "CLANG_VERSION=$(cat config_MeteoricSU.env | grep -w "CLANG_VERSION" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "ENABLE_GCC_ARM64=$(cat config_MeteoricSU.env | grep -w "ENABLE_GCC_ARM64" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "ENABLE_GCC_ARM32=$(cat config_MeteoricSU.env | grep -w "ENABLE_GCC_ARM32" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "ENABLE_KERNELSU=$(cat config_MeteoricSU.env | grep -w "ENABLE_KERNELSU" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "KERNELSU_TAG=$(cat config_MeteoricSU.env | grep -w "KERNELSU_TAG" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "ADD_KPROBES_CONFIG=$(cat config_MeteoricSU.env | grep -w "ADD_KPROBES_CONFIG" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "DISABLE-LTO=$(cat config_MeteoricSU.env | grep -w "DISABLE-LTO" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "ADD_OVERLAYFS_CONFIG=$(cat config_MeteoricSU.env | grep -w "ADD_OVERLAYFS_CONFIG" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "DISABLE_CC_WERROR=$(cat config_MeteoricSU.env | grep -w "DISABLE_CC_WERROR" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "ENABLE_CCACHE=$(cat config_MeteoricSU.env | grep -w "ENABLE_CCACHE" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "NEED_DTBO=$(cat config_MeteoricSU.env | grep -w "NEED_DTBO" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "BUILD_BOOT_IMG=$(cat config_MeteoricSU.env | grep -w "BUILD_BOOT_IMG" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "SOURCE_BOOT_IMAGE=$(cat config_MeteoricSU.env | grep -w "SOURCE_BOOT_IMAGE" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + + - name: Setup build kernel environment + run: | + echo "BUILD_TIME=$(TZ=Asia/Shanghai date "+%Y%m%d%H%M")" >> $GITHUB_ENV + echo "DEVICE=$(echo ${{ env.KERNEL_CONFIG }} | sed 's!vendor/!!;s/_defconfig//;s/_user//;s/-perf//')" >> $GITHUB_ENV + sudo apt-get update + sudo apt-get install git ccache automake flex lzop bison gperf build-essential zip curl zlib1g-dev g++-multilib libxml2-utils bzip2 libbz2-dev libbz2-1.0 libghc-bzlib-dev squashfs-tools pngcrush schedtool dpkg-dev liblz4-tool make optipng maven libssl-dev pwgen libswitch-perl policycoreutils minicom libxml-sax-base-perl libxml-simple-perl bc libc6-dev-i386 lib32ncurses5-dev libx11-dev lib32z-dev libgl1-mesa-dev xsltproc unzip device-tree-compiler python2 python3 + mkdir -p $GITHUB_WORKSPACE/kernel_workspace + + - name: Download Clang-aosp + if: env.USE_CUSTOM_CLANG == 'false' + run: | + cd $GITHUB_WORKSPACE/kernel_workspace + mkdir clang-aosp + wget https://android.googlesource.com/platform/prebuilts/clang/host/linux-x86/+archive/refs/heads/${{ env.CLANG_BRANCH }}/clang-${{ env.CLANG_VERSION }}.tar.gz + tar -C clang-aosp/ -zxvf clang-${{ env.CLANG_VERSION }}.tar.gz + + - name: Download Custom-Clang + if: env.USE_CUSTOM_CLANG == 'true' + run: | + cd $GITHUB_WORKSPACE/kernel_workspace + if [[ ${{ env.CUSTOM_CLANG_SOURCE }} =~ git ]]; then + if [[ ${{ env.CUSTOM_CLANG_SOURCE }} == *'.tar.gz' ]]; then + wget -O clang.tar.gz ${{ env.CUSTOM_CLANG_SOURCE }} + mkdir clang-aosp + tar -C clang-aosp/ -zxvf clang.tar.gz + else + git clone ${{ env.CUSTOM_CLANG_SOURCE }} -b ${{ env.CUSTOM_CLANG_BRANCH }} clang-aosp --depth=1 + fi + else + wget -O clang.zip ${{ env.CUSTOM_CLANG_SOURCE }} + mkdir clang-aosp + unzip clang.zip -d clang-aosp/ + fi + + - name: Download Gcc-aosp + run: | + cd $GITHUB_WORKSPACE/kernel_workspace + if [ ${{ env.ENABLE_GCC_ARM64 }} = true ]; then + mkdir gcc-64 + wget -O gcc-aarch64.tar.gz https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/+archive/refs/tags/android-12.1.0_r27.tar.gz + tar -C gcc-64/ -zxvf gcc-aarch64.tar.gz + echo "GCC_64=CROSS_COMPILE=$GITHUB_WORKSPACE/kernel_workspace/gcc-64/bin/aarch64-linux-android-" >> $GITHUB_ENV + fi + + if [ ${{ env.ENABLE_GCC_ARM32 }} = true ]; then + mkdir gcc-32 + wget -O gcc-arm.tar.gz https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/+archive/refs/tags/android-12.1.0_r27.tar.gz + tar -C gcc-32/ -zxvf gcc-arm.tar.gz + echo "GCC_32=CROSS_COMPILE_ARM32=$GITHUB_WORKSPACE/kernel_workspace/gcc-32/bin/arm-linux-androideabi-" >> $GITHUB_ENV + fi + + - name: Download mkbootimg tools + if: env.BUILD_BOOT_IMG == 'true' + run: | + cd $GITHUB_WORKSPACE/kernel_workspace + git clone https://android.googlesource.com/platform/system/tools/mkbootimg tools -b master-kernel-build-2022 --depth=1 + + - name: Download kernel source + run: | + cd $GITHUB_WORKSPACE/kernel_workspace + git clone ${{ env.KERNEL_SOURCE }} -b ${{ env.KERNEL_SOURCE_BRANCH }} android-kernel --depth=1 + + - name: Download source boot image + if: env.BUILD_BOOT_IMG == 'true' + run: | + cd $GITHUB_WORKSPACE/kernel_workspace + wget -O boot-source.img ${{ env.SOURCE_BOOT_IMAGE }} + if [ -f boot-source.img ]; then + echo "FORMAT_MKBOOTING=$(echo `tools/unpack_bootimg.py --boot_img=boot-source.img --format mkbootimg`)" >> $GITHUB_ENV + echo "HAVE_SOURCE_BOOT_IMAGE=true" >> $GITHUB_ENV + fi + + - name: Setup KernelSU + if: env.ENABLE_KERNELSU == 'true' + run: | + cd $GITHUB_WORKSPACE/kernel_workspace/android-kernel + curl -LSs "https://raw.githubusercontent.com/tiann/KernelSU/main/kernel/setup.sh" | bash - + + - name: Setup Configuration for Kernel + run: | + cd $GITHUB_WORKSPACE/kernel_workspace/android-kernel + if [ ${{ env.ADD_KPROBES_CONFIG }} = true ]; then + echo "CONFIG_MODULES=y" >> arch/${{ env.ARCH }}/configs/${{ env.KERNEL_CONFIG }} + echo "CONFIG_KPROBES=y" >> arch/${{ env.ARCH }}/configs/${{ env.KERNEL_CONFIG }} + echo "CONFIG_HAVE_KPROBES=y" >> arch/${{ env.ARCH }}/configs/${{ env.KERNEL_CONFIG }} + echo "CONFIG_KPROBE_EVENTS=y" >> arch/${{ env.ARCH }}/configs/${{ env.KERNEL_CONFIG }} + fi + if [ ${{ env.ADD_OVERLAYFS_CONFIG }} = true ]; then + echo "CONFIG_OVERLAY_FS=y" >> arch/${{ env.ARCH }}/configs/${{ env.KERNEL_CONFIG }} + fi + if [ ${{ env.DISABLE-LTO }} = true ]; then + sed -i 's/CONFIG_LTO=y/CONFIG_LTO=n/' arch/${{ env.ARCH }}/configs/${{ env.KERNEL_CONFIG }} + sed -i 's/CONFIG_LTO_CLANG=y/CONFIG_LTO_CLANG=n/' arch/${{ env.ARCH }}/configs/${{ env.KERNEL_CONFIG }} + sed -i 's/CONFIG_THINLTO=y/CONFIG_THINLTO=n/' arch/${{ env.ARCH }}/configs/${{ env.KERNEL_CONFIG }} + echo "CONFIG_LTO_NONE=y" >> arch/${{ env.ARCH }}/configs/${{ env.KERNEL_CONFIG }} + fi + if [ ${{ env.DISABLE_CC_WERROR }} = true ]; then + echo "CONFIG_CC_WERROR=n" >> arch/${{ env.ARCH }}/configs/${{ env.KERNEL_CONFIG }} + fi + + - name: Setup ccache + if: env.ENABLE_CCACHE == 'true' + uses: hendrikmuhs/ccache-action@v1.2 + with: + key: build-kernel-${{ env.DEVICE }}${{ env.UPLOADNAME }} + max-size: 2G + + - name: Build kernel + run: | + cd $GITHUB_WORKSPACE/kernel_workspace/android-kernel + export PATH=$GITHUB_WORKSPACE/kernel_workspace/clang-aosp/bin:$PATH + export KBUILD_BUILD_HOST=Github-Action + export KBUILD_BUILD_USER=$(echo ${{ github.actor }} | tr A-Z a-z) + make -j$(nproc --all) CC=clang O=out ARCH=${{ env.ARCH }} ${{ env.CUSTOM_CMDS }} ${{ env.EXTRA_CMDS }} ${{ env.GCC_64 }} ${{ env.GCC_32 }} ${{ env.KERNEL_CONFIG }} + if [ ${{ env.ENABLE_CCACHE }} = true ]; then + make -j$(nproc --all) CC="ccache clang" O=out ARCH=${{ env.ARCH }} ${{ env.CUSTOM_CMDS }} ${{ env.EXTRA_CMDS }} ${{ env.GCC_64 }} ${{ env.GCC_32 }} + else + make -j$(nproc --all) CC=clang O=out ARCH=${{ env.ARCH }} ${{ env.CUSTOM_CMDS }} ${{ env.EXTRA_CMDS }} ${{ env.GCC_64 }} ${{ env.GCC_32 }} + fi + + - name: Check a kernel output files + run: | + cd $GITHUB_WORKSPACE/kernel_workspace + if [ -f android-kernel/out/arch/${{ env.ARCH }}/boot/${{ env.KERNEL_IMAGE_NAME }} ]; then + echo "CHECK_FILE_IS_OK=true" >> $GITHUB_ENV + else + echo "Kernel output file is empty" + exit 1 + fi + if [ ${{ env.NEED_DTBO }} = true ]; then + if [ -f android-kernel/out/arch/${{ env.ARCH }}/boot/dtbo.img ]; then + echo "CHECK_DTBO_IS_OK=true" >> $GITHUB_ENV + else + echo "DTBO image is empty" + exit 1 + fi + fi + + - name: Make Anykernel3 + if: env.CHECK_FILE_IS_OK == 'true' + run: | + cd $GITHUB_WORKSPACE/kernel_workspace + git clone https://github.com/osm0sis/AnyKernel3 + sed -i 's/do.devicecheck=1/do.devicecheck=0/g' AnyKernel3/anykernel.sh + sed -i 's!block=/dev/block/platform/omap/omap_hsmmc.0/by-name/boot;!block=auto;!g' AnyKernel3/anykernel.sh + sed -i 's/is_slot_device=0;/is_slot_device=auto;/g' AnyKernel3/anykernel.sh + cp android-kernel/out/arch/${{ env.ARCH }}/boot/${{ env.KERNEL_IMAGE_NAME }} AnyKernel3/ + if [ ${{ env.CHECK_DTBO_IS_OK }} = true ]; then + cp android-kernel/out/arch/${{ env.ARCH }}/boot/dtbo.img AnyKernel3/ + fi + rm -rf AnyKernel3/.git* AnyKernel3/README.md + + - name: Make boot image + if: env.HAVE_SOURCE_BOOT_IMAGE == 'true' && env.CHECK_FILE_IS_OK == 'true' + run: | + cd $GITHUB_WORKSPACE/kernel_workspace + tools/unpack_bootimg.py --boot_img boot-source.img + cp android-kernel/out/arch/${{ env.ARCH }}/boot/${{ env.KERNEL_IMAGE_NAME }} out/kernel + tools/mkbootimg.py ${{ env.FORMAT_MKBOOTING }} -o boot.img + if [ -f boot.img ]; then + echo "MAKE_BOOT_IMAGE_IS_OK=true" >> $GITHUB_ENV + else + echo "Boot image is empty" + exit 1 + fi + + - name: Upload ${{ env.KERNEL_IMAGE_NAME }} + if: env.CHECK_FILE_IS_OK == 'true' + uses: actions/upload-artifact@v3 + with: + name: ${{ env.KERNEL_IMAGE_NAME }}${{ env.UPLOADNAME }}-${{ env.DEVICE }}-${{ env.BUILD_TIME }} + path: kernel_workspace/android-kernel/out/arch/${{ env.ARCH }}/boot/${{ env.KERNEL_IMAGE_NAME }} + + - name: Upload AnyKernel3 + if: env.CHECK_FILE_IS_OK == 'true' + uses: actions/upload-artifact@v3 + with: + name: MeteoricSU${{ env.UPLOADNAME }}-${{ env.BUILD_TIME }} + path: kernel_workspace/AnyKernel3/* + + - name: Upload DTBO image + if: env.CHECK_DTBO_IS_OK == 'true' + uses: actions/upload-artifact@v3 + with: + name: dtbo-${{ env.DEVICE }}-${{ env.BUILD_TIME }} + path: kernel_workspace/android-kernel/out/arch/${{ env.ARCH }}/boot/dtbo.img + + - name: Upload boot image + if: env.MAKE_BOOT_IMAGE_IS_OK == 'true' + uses: actions/upload-artifact@v3 + with: + name: boot${{ env.UPLOADNAME }}-${{ env.DEVICE }}-${{ env.BUILD_TIME }} + path: kernel_workspace/boot.img diff --git a/.github/workflows/build-kernel-Nameless.yml b/.github/workflows/build-kernel-Nameless.yml new file mode 100644 index 0000000000..053f2f47f3 --- /dev/null +++ b/.github/workflows/build-kernel-Nameless.yml @@ -0,0 +1,236 @@ +name: Build Kernel Nameless-Kernel +on: + workflow_dispatch: + +jobs: + build: + name: Build Kernel by ${{ github.actor }} + runs-on: ubuntu-latest + if: github.event.repository.owner.id == github.event.sender.id + env: + CCACHE_COMPILERCHECK: "%compiler% -dumpmachine; %compiler% -dumpversion" + CCACHE_NOHASHDIR: "true" + CCACHE_HARDLINK: "true" + steps: + - uses: actions/checkout@v3 + - name: Prepare Configuration + run: | + echo "KERNEL_SOURCE=$(cat config_Nameless.env | grep -w "KERNEL_SOURCE" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "KERNEL_SOURCE_BRANCH=$(cat config_Nameless.env | grep -w "KERNEL_SOURCE_BRANCH" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "KERNEL_CONFIG=$(cat config_Nameless.env | grep -w "KERNEL_CONFIG" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "KERNEL_IMAGE_NAME=$(cat config_Nameless.env | grep -w "KERNEL_IMAGE_NAME" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "ARCH=$(cat config_Nameless.env | grep -w "ARCH" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "EXTRA_CMDS=$(cat config_Nameless.env | grep -w "EXTRA_CMDS" | head -n 1 | cut -d ":" -f 2)" >> $GITHUB_ENV + echo "USE_CUSTOM_CLANG=$(cat config_Nameless.env | grep -w "USE_CUSTOM_CLANG" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "CUSTOM_CLANG_SOURCE=$(cat config_Nameless.env | grep -w "CUSTOM_CLANG_SOURCE" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "CUSTOM_CLANG_BRANCH=$(cat config_Nameless.env | grep -w "CUSTOM_CLANG_BRANCH" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "CUSTOM_CMDS=$(cat config_Nameless.env | grep -w "CUSTOM_CMDS" | head -n 1 | cut -d ":" -f 2)" >> $GITHUB_ENV + echo "CLANG_BRANCH=$(cat config_Nameless.env | grep -w "CLANG_BRANCH" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "CLANG_VERSION=$(cat config_Nameless.env | grep -w "CLANG_VERSION" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "ENABLE_GCC_ARM64=$(cat config_Nameless.env | grep -w "ENABLE_GCC_ARM64" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "ENABLE_GCC_ARM32=$(cat config_Nameless.env | grep -w "ENABLE_GCC_ARM32" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "ENABLE_KERNELSU=$(cat config_Nameless.env | grep -w "ENABLE_KERNELSU" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "KERNELSU_TAG=$(cat config_Nameless.env | grep -w "KERNELSU_TAG" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "ADD_KPROBES_CONFIG=$(cat config_Nameless.env | grep -w "ADD_KPROBES_CONFIG" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "DISABLE-LTO=$(cat config_Nameless.env | grep -w "DISABLE-LTO" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "ADD_OVERLAYFS_CONFIG=$(cat config_Nameless.env | grep -w "ADD_OVERLAYFS_CONFIG" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "DISABLE_CC_WERROR=$(cat config_Nameless.env | grep -w "DISABLE_CC_WERROR" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "ENABLE_CCACHE=$(cat config_Nameless.env | grep -w "ENABLE_CCACHE" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "NEED_DTBO=$(cat config_Nameless.env | grep -w "NEED_DTBO" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "BUILD_BOOT_IMG=$(cat config_Nameless.env | grep -w "BUILD_BOOT_IMG" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "SOURCE_BOOT_IMAGE=$(cat config_Nameless.env | grep -w "SOURCE_BOOT_IMAGE" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + + - name: Setup build kernel environment + run: | + echo "BUILD_TIME=$(TZ=Asia/Shanghai date "+%Y%m%d%H%M")" >> $GITHUB_ENV + echo "DEVICE=$(echo ${{ env.KERNEL_CONFIG }} | sed 's!vendor/!!;s/_defconfig//;s/_user//;s/-perf//')" >> $GITHUB_ENV + sudo apt-get update + sudo apt-get install git ccache automake flex lzop bison gperf build-essential zip curl zlib1g-dev g++-multilib libxml2-utils bzip2 libbz2-dev libbz2-1.0 libghc-bzlib-dev squashfs-tools pngcrush schedtool dpkg-dev liblz4-tool make optipng maven libssl-dev pwgen libswitch-perl policycoreutils minicom libxml-sax-base-perl libxml-simple-perl bc libc6-dev-i386 lib32ncurses5-dev libx11-dev lib32z-dev libgl1-mesa-dev xsltproc unzip device-tree-compiler python2 python3 + mkdir -p $GITHUB_WORKSPACE/kernel_workspace + + - name: Download Clang-aosp + if: env.USE_CUSTOM_CLANG == 'false' + run: | + cd $GITHUB_WORKSPACE/kernel_workspace + mkdir clang-aosp + wget https://android.googlesource.com/platform/prebuilts/clang/host/linux-x86/+archive/refs/heads/${{ env.CLANG_BRANCH }}/clang-${{ env.CLANG_VERSION }}.tar.gz + tar -C clang-aosp/ -zxvf clang-${{ env.CLANG_VERSION }}.tar.gz + + - name: Download Custom-Clang + if: env.USE_CUSTOM_CLANG == 'true' + run: | + cd $GITHUB_WORKSPACE/kernel_workspace + if [[ ${{ env.CUSTOM_CLANG_SOURCE }} =~ git ]]; then + if [[ ${{ env.CUSTOM_CLANG_SOURCE }} == *'.tar.gz' ]]; then + wget -O clang.tar.gz ${{ env.CUSTOM_CLANG_SOURCE }} + mkdir clang-aosp + tar -C clang-aosp/ -zxvf clang.tar.gz + else + git clone ${{ env.CUSTOM_CLANG_SOURCE }} -b ${{ env.CUSTOM_CLANG_BRANCH }} clang-aosp --depth=1 + fi + else + wget -O clang.zip ${{ env.CUSTOM_CLANG_SOURCE }} + mkdir clang-aosp + unzip clang.zip -d clang-aosp/ + fi + + - name: Download Gcc-aosp + run: | + cd $GITHUB_WORKSPACE/kernel_workspace + if [ ${{ env.ENABLE_GCC_ARM64 }} = true ]; then + mkdir gcc-64 + wget -O gcc-aarch64.tar.gz https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/+archive/refs/tags/android-12.1.0_r27.tar.gz + tar -C gcc-64/ -zxvf gcc-aarch64.tar.gz + echo "GCC_64=CROSS_COMPILE=$GITHUB_WORKSPACE/kernel_workspace/gcc-64/bin/aarch64-linux-android-" >> $GITHUB_ENV + fi + + if [ ${{ env.ENABLE_GCC_ARM32 }} = true ]; then + mkdir gcc-32 + wget -O gcc-arm.tar.gz https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/+archive/refs/tags/android-12.1.0_r27.tar.gz + tar -C gcc-32/ -zxvf gcc-arm.tar.gz + echo "GCC_32=CROSS_COMPILE_ARM32=$GITHUB_WORKSPACE/kernel_workspace/gcc-32/bin/arm-linux-androideabi-" >> $GITHUB_ENV + fi + + - name: Download mkbootimg tools + if: env.BUILD_BOOT_IMG == 'true' + run: | + cd $GITHUB_WORKSPACE/kernel_workspace + git clone https://android.googlesource.com/platform/system/tools/mkbootimg tools -b master-kernel-build-2022 --depth=1 + + - name: Download kernel source + run: | + cd $GITHUB_WORKSPACE/kernel_workspace + git clone ${{ env.KERNEL_SOURCE }} -b ${{ env.KERNEL_SOURCE_BRANCH }} android-kernel --depth=1 + + - name: Download source boot image + if: env.BUILD_BOOT_IMG == 'true' + run: | + cd $GITHUB_WORKSPACE/kernel_workspace + wget -O boot-source.img ${{ env.SOURCE_BOOT_IMAGE }} + if [ -f boot-source.img ]; then + echo "FORMAT_MKBOOTING=$(echo `tools/unpack_bootimg.py --boot_img=boot-source.img --format mkbootimg`)" >> $GITHUB_ENV + echo "HAVE_SOURCE_BOOT_IMAGE=true" >> $GITHUB_ENV + fi + + - name: Setup KernelSU + if: env.ENABLE_KERNELSU == 'true' + run: | + cd $GITHUB_WORKSPACE/kernel_workspace/android-kernel + curl -LSs "https://raw.githubusercontent.com/tiann/KernelSU/main/kernel/setup.sh" | bash -s ${{ env.KERNELSU_TAG }} + echo "UPLOADNAME=-KernelSU" >> $GITHUB_ENV + + - name: Setup Configuration for Kernel + run: | + cd $GITHUB_WORKSPACE/kernel_workspace/android-kernel + if [ ${{ env.ADD_KPROBES_CONFIG }} = true ]; then + echo "CONFIG_MODULES=y" >> arch/${{ env.ARCH }}/configs/${{ env.KERNEL_CONFIG }} + echo "CONFIG_KPROBES=y" >> arch/${{ env.ARCH }}/configs/${{ env.KERNEL_CONFIG }} + echo "CONFIG_HAVE_KPROBES=y" >> arch/${{ env.ARCH }}/configs/${{ env.KERNEL_CONFIG }} + echo "CONFIG_KPROBE_EVENTS=y" >> arch/${{ env.ARCH }}/configs/${{ env.KERNEL_CONFIG }} + fi + if [ ${{ env.ADD_OVERLAYFS_CONFIG }} = true ]; then + echo "CONFIG_OVERLAY_FS=y" >> arch/${{ env.ARCH }}/configs/${{ env.KERNEL_CONFIG }} + fi + if [ ${{ env.DISABLE-LTO }} = true ]; then + sed -i 's/CONFIG_LTO=y/CONFIG_LTO=n/' arch/${{ env.ARCH }}/configs/${{ env.KERNEL_CONFIG }} + sed -i 's/CONFIG_LTO_CLANG=y/CONFIG_LTO_CLANG=n/' arch/${{ env.ARCH }}/configs/${{ env.KERNEL_CONFIG }} + sed -i 's/CONFIG_THINLTO=y/CONFIG_THINLTO=n/' arch/${{ env.ARCH }}/configs/${{ env.KERNEL_CONFIG }} + echo "CONFIG_LTO_NONE=y" >> arch/${{ env.ARCH }}/configs/${{ env.KERNEL_CONFIG }} + fi + if [ ${{ env.DISABLE_CC_WERROR }} = true ]; then + echo "CONFIG_CC_WERROR=n" >> arch/${{ env.ARCH }}/configs/${{ env.KERNEL_CONFIG }} + fi + + - name: Setup ccache + if: env.ENABLE_CCACHE == 'true' + uses: hendrikmuhs/ccache-action@v1.2 + with: + key: build-kernel-${{ env.DEVICE }}${{ env.UPLOADNAME }} + max-size: 2G + + - name: Build kernel + run: | + cd $GITHUB_WORKSPACE/kernel_workspace/android-kernel + export PATH=$GITHUB_WORKSPACE/kernel_workspace/clang-aosp/bin:$PATH + export KBUILD_BUILD_HOST=Github-Action + export KBUILD_BUILD_USER=$(echo ${{ github.actor }} | tr A-Z a-z) + make -j$(nproc --all) CC=clang O=out ARCH=${{ env.ARCH }} ${{ env.CUSTOM_CMDS }} ${{ env.EXTRA_CMDS }} ${{ env.GCC_64 }} ${{ env.GCC_32 }} ${{ env.KERNEL_CONFIG }} + if [ ${{ env.ENABLE_CCACHE }} = true ]; then + make -j$(nproc --all) CC="ccache clang" O=out ARCH=${{ env.ARCH }} ${{ env.CUSTOM_CMDS }} ${{ env.EXTRA_CMDS }} ${{ env.GCC_64 }} ${{ env.GCC_32 }} + else + make -j$(nproc --all) CC=clang O=out ARCH=${{ env.ARCH }} ${{ env.CUSTOM_CMDS }} ${{ env.EXTRA_CMDS }} ${{ env.GCC_64 }} ${{ env.GCC_32 }} + fi + + - name: Check a kernel output files + run: | + cd $GITHUB_WORKSPACE/kernel_workspace + if [ -f android-kernel/out/arch/${{ env.ARCH }}/boot/${{ env.KERNEL_IMAGE_NAME }} ]; then + echo "CHECK_FILE_IS_OK=true" >> $GITHUB_ENV + else + echo "Kernel output file is empty" + exit 1 + fi + if [ ${{ env.NEED_DTBO }} = true ]; then + if [ -f android-kernel/out/arch/${{ env.ARCH }}/boot/dtbo.img ]; then + echo "CHECK_DTBO_IS_OK=true" >> $GITHUB_ENV + else + echo "DTBO image is empty" + exit 1 + fi + fi + + - name: Make Anykernel3 + if: env.CHECK_FILE_IS_OK == 'true' + run: | + cd $GITHUB_WORKSPACE/kernel_workspace + git clone https://github.com/osm0sis/AnyKernel3 + sed -i 's/do.devicecheck=1/do.devicecheck=0/g' AnyKernel3/anykernel.sh + sed -i 's!block=/dev/block/platform/omap/omap_hsmmc.0/by-name/boot;!block=auto;!g' AnyKernel3/anykernel.sh + sed -i 's/is_slot_device=0;/is_slot_device=auto;/g' AnyKernel3/anykernel.sh + cp android-kernel/out/arch/${{ env.ARCH }}/boot/${{ env.KERNEL_IMAGE_NAME }} AnyKernel3/ + if [ ${{ env.CHECK_DTBO_IS_OK }} = true ]; then + cp android-kernel/out/arch/${{ env.ARCH }}/boot/dtbo.img AnyKernel3/ + fi + rm -rf AnyKernel3/.git* AnyKernel3/README.md + + - name: Make boot image + if: env.HAVE_SOURCE_BOOT_IMAGE == 'true' && env.CHECK_FILE_IS_OK == 'true' + run: | + cd $GITHUB_WORKSPACE/kernel_workspace + tools/unpack_bootimg.py --boot_img boot-source.img + cp android-kernel/out/arch/${{ env.ARCH }}/boot/${{ env.KERNEL_IMAGE_NAME }} out/kernel + tools/mkbootimg.py ${{ env.FORMAT_MKBOOTING }} -o boot.img + if [ -f boot.img ]; then + echo "MAKE_BOOT_IMAGE_IS_OK=true" >> $GITHUB_ENV + else + echo "Boot image is empty" + exit 1 + fi + + - name: Upload ${{ env.KERNEL_IMAGE_NAME }} + if: env.CHECK_FILE_IS_OK == 'true' + uses: actions/upload-artifact@v3 + with: + name: ${{ env.KERNEL_IMAGE_NAME }}${{ env.UPLOADNAME }}-${{ env.DEVICE }}-${{ env.BUILD_TIME }} + path: kernel_workspace/android-kernel/out/arch/${{ env.ARCH }}/boot/${{ env.KERNEL_IMAGE_NAME }} + + - name: Upload AnyKernel3 + if: env.CHECK_FILE_IS_OK == 'true' + uses: actions/upload-artifact@v3 + with: + name: Nameless${{ env.UPLOADNAME }}-${{ env.BUILD_TIME }} + path: kernel_workspace/AnyKernel3/* + + - name: Upload DTBO image + if: env.CHECK_DTBO_IS_OK == 'true' + uses: actions/upload-artifact@v3 + with: + name: dtbo-${{ env.DEVICE }}-${{ env.BUILD_TIME }} + path: kernel_workspace/android-kernel/out/arch/${{ env.ARCH }}/boot/dtbo.img + + - name: Upload boot image + if: env.MAKE_BOOT_IMAGE_IS_OK == 'true' + uses: actions/upload-artifact@v3 + with: + name: boot${{ env.UPLOADNAME }}-${{ env.DEVICE }}-${{ env.BUILD_TIME }} + path: kernel_workspace/boot.img diff --git a/.github/workflows/build-kernel-Stellaris.yml b/.github/workflows/build-kernel-Stellaris.yml new file mode 100644 index 0000000000..75523be721 --- /dev/null +++ b/.github/workflows/build-kernel-Stellaris.yml @@ -0,0 +1,238 @@ +name: Build Kernel Stellaris +on: + workflow_dispatch: + schedule: + - cron: '0 21 * * 2,6' + +jobs: + build: + name: Build Kernel by ${{ github.actor }} + runs-on: ubuntu-latest + if: github.event.repository.owner.id == github.event.sender.id + env: + CCACHE_COMPILERCHECK: "%compiler% -dumpmachine; %compiler% -dumpversion" + CCACHE_NOHASHDIR: "true" + CCACHE_HARDLINK: "true" + steps: + - uses: actions/checkout@v3 + - name: Prepare Configuration + run: | + echo "KERNEL_SOURCE=$(cat config_Stellaris.env | grep -w "KERNEL_SOURCE" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "KERNEL_SOURCE_BRANCH=$(cat config_Stellaris.env | grep -w "KERNEL_SOURCE_BRANCH" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "KERNEL_CONFIG=$(cat config_Stellaris.env | grep -w "KERNEL_CONFIG" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "KERNEL_IMAGE_NAME=$(cat config_Stellaris.env | grep -w "KERNEL_IMAGE_NAME" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "ARCH=$(cat config_Stellaris.env | grep -w "ARCH" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "EXTRA_CMDS=$(cat config_Stellaris.env | grep -w "EXTRA_CMDS" | head -n 1 | cut -d ":" -f 2)" >> $GITHUB_ENV + echo "USE_CUSTOM_CLANG=$(cat config_Stellaris.env | grep -w "USE_CUSTOM_CLANG" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "CUSTOM_CLANG_SOURCE=$(cat config_Stellaris.env | grep -w "CUSTOM_CLANG_SOURCE" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "CUSTOM_CLANG_BRANCH=$(cat config_Stellaris.env | grep -w "CUSTOM_CLANG_BRANCH" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "CUSTOM_CMDS=$(cat config_Stellaris.env | grep -w "CUSTOM_CMDS" | head -n 1 | cut -d ":" -f 2)" >> $GITHUB_ENV + echo "CLANG_BRANCH=$(cat config_Stellaris.env | grep -w "CLANG_BRANCH" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "CLANG_VERSION=$(cat config_Stellaris.env | grep -w "CLANG_VERSION" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "ENABLE_GCC_ARM64=$(cat config_Stellaris.env | grep -w "ENABLE_GCC_ARM64" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "ENABLE_GCC_ARM32=$(cat config_Stellaris.env | grep -w "ENABLE_GCC_ARM32" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "ENABLE_KERNELSU=$(cat config_Stellaris.env | grep -w "ENABLE_KERNELSU" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "KERNELSU_TAG=$(cat config_Stellaris.env | grep -w "KERNELSU_TAG" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "ADD_KPROBES_CONFIG=$(cat config_Stellaris.env | grep -w "ADD_KPROBES_CONFIG" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "DISABLE-LTO=$(cat config_Stellaris.env | grep -w "DISABLE-LTO" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "ADD_OVERLAYFS_CONFIG=$(cat config_Stellaris.env | grep -w "ADD_OVERLAYFS_CONFIG" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "DISABLE_CC_WERROR=$(cat config_Stellaris.env | grep -w "DISABLE_CC_WERROR" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "ENABLE_CCACHE=$(cat config_Stellaris.env | grep -w "ENABLE_CCACHE" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "NEED_DTBO=$(cat config_Stellaris.env | grep -w "NEED_DTBO" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "BUILD_BOOT_IMG=$(cat config_Stellaris.env | grep -w "BUILD_BOOT_IMG" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "SOURCE_BOOT_IMAGE=$(cat config_Stellaris.env | grep -w "SOURCE_BOOT_IMAGE" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + + - name: Setup build kernel environment + run: | + echo "BUILD_TIME=$(TZ=Asia/Shanghai date "+%Y%m%d%H%M")" >> $GITHUB_ENV + echo "DEVICE=$(echo ${{ env.KERNEL_CONFIG }} | sed 's!vendor/!!;s/_defconfig//;s/_user//;s/-perf//')" >> $GITHUB_ENV + sudo apt-get update + sudo apt-get install git ccache automake flex lzop bison gperf build-essential zip curl zlib1g-dev g++-multilib libxml2-utils bzip2 libbz2-dev libbz2-1.0 libghc-bzlib-dev squashfs-tools pngcrush schedtool dpkg-dev liblz4-tool make optipng maven libssl-dev pwgen libswitch-perl policycoreutils minicom libxml-sax-base-perl libxml-simple-perl bc libc6-dev-i386 lib32ncurses5-dev libx11-dev lib32z-dev libgl1-mesa-dev xsltproc unzip device-tree-compiler python2 python3 + mkdir -p $GITHUB_WORKSPACE/kernel_workspace + + - name: Download Clang-aosp + if: env.USE_CUSTOM_CLANG == 'false' + run: | + cd $GITHUB_WORKSPACE/kernel_workspace + mkdir clang-aosp + wget https://android.googlesource.com/platform/prebuilts/clang/host/linux-x86/+archive/refs/heads/${{ env.CLANG_BRANCH }}/clang-${{ env.CLANG_VERSION }}.tar.gz + tar -C clang-aosp/ -zxvf clang-${{ env.CLANG_VERSION }}.tar.gz + + - name: Download Custom-Clang + if: env.USE_CUSTOM_CLANG == 'true' + run: | + cd $GITHUB_WORKSPACE/kernel_workspace + if [[ ${{ env.CUSTOM_CLANG_SOURCE }} =~ git ]]; then + if [[ ${{ env.CUSTOM_CLANG_SOURCE }} == *'.tar.gz' ]]; then + wget -O clang.tar.gz ${{ env.CUSTOM_CLANG_SOURCE }} + mkdir clang-aosp + tar -C clang-aosp/ -zxvf clang.tar.gz + else + git clone ${{ env.CUSTOM_CLANG_SOURCE }} -b ${{ env.CUSTOM_CLANG_BRANCH }} clang-aosp --depth=1 + fi + else + wget -O clang.zip ${{ env.CUSTOM_CLANG_SOURCE }} + mkdir clang-aosp + unzip clang.zip -d clang-aosp/ + fi + + - name: Download Gcc-aosp + run: | + cd $GITHUB_WORKSPACE/kernel_workspace + if [ ${{ env.ENABLE_GCC_ARM64 }} = true ]; then + mkdir gcc-64 + wget -O gcc-aarch64.tar.gz https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/+archive/refs/tags/android-12.1.0_r27.tar.gz + tar -C gcc-64/ -zxvf gcc-aarch64.tar.gz + echo "GCC_64=CROSS_COMPILE=$GITHUB_WORKSPACE/kernel_workspace/gcc-64/bin/aarch64-linux-android-" >> $GITHUB_ENV + fi + + if [ ${{ env.ENABLE_GCC_ARM32 }} = true ]; then + mkdir gcc-32 + wget -O gcc-arm.tar.gz https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/+archive/refs/tags/android-12.1.0_r27.tar.gz + tar -C gcc-32/ -zxvf gcc-arm.tar.gz + echo "GCC_32=CROSS_COMPILE_ARM32=$GITHUB_WORKSPACE/kernel_workspace/gcc-32/bin/arm-linux-androideabi-" >> $GITHUB_ENV + fi + + - name: Download mkbootimg tools + if: env.BUILD_BOOT_IMG == 'true' + run: | + cd $GITHUB_WORKSPACE/kernel_workspace + git clone https://android.googlesource.com/platform/system/tools/mkbootimg tools -b master-kernel-build-2022 --depth=1 + + - name: Download kernel source + run: | + cd $GITHUB_WORKSPACE/kernel_workspace + git clone ${{ env.KERNEL_SOURCE }} -b ${{ env.KERNEL_SOURCE_BRANCH }} android-kernel --depth=1 + + - name: Download source boot image + if: env.BUILD_BOOT_IMG == 'true' + run: | + cd $GITHUB_WORKSPACE/kernel_workspace + wget -O boot-source.img ${{ env.SOURCE_BOOT_IMAGE }} + if [ -f boot-source.img ]; then + echo "FORMAT_MKBOOTING=$(echo `tools/unpack_bootimg.py --boot_img=boot-source.img --format mkbootimg`)" >> $GITHUB_ENV + echo "HAVE_SOURCE_BOOT_IMAGE=true" >> $GITHUB_ENV + fi + + - name: Setup KernelSU + if: env.ENABLE_KERNELSU == 'true' + run: | + cd $GITHUB_WORKSPACE/kernel_workspace/android-kernel + curl -LSs "https://raw.githubusercontent.com/tiann/KernelSU/main/kernel/setup.sh" | bash -s ${{ env.KERNELSU_TAG }} + echo "UPLOADNAME=-KernelSU" >> $GITHUB_ENV + + - name: Setup Configuration for Kernel + run: | + cd $GITHUB_WORKSPACE/kernel_workspace/android-kernel + if [ ${{ env.ADD_KPROBES_CONFIG }} = true ]; then + echo "CONFIG_MODULES=y" >> arch/${{ env.ARCH }}/configs/${{ env.KERNEL_CONFIG }} + echo "CONFIG_KPROBES=y" >> arch/${{ env.ARCH }}/configs/${{ env.KERNEL_CONFIG }} + echo "CONFIG_HAVE_KPROBES=y" >> arch/${{ env.ARCH }}/configs/${{ env.KERNEL_CONFIG }} + echo "CONFIG_KPROBE_EVENTS=y" >> arch/${{ env.ARCH }}/configs/${{ env.KERNEL_CONFIG }} + fi + if [ ${{ env.ADD_OVERLAYFS_CONFIG }} = true ]; then + echo "CONFIG_OVERLAY_FS=y" >> arch/${{ env.ARCH }}/configs/${{ env.KERNEL_CONFIG }} + fi + if [ ${{ env.DISABLE-LTO }} = true ]; then + sed -i 's/CONFIG_LTO=y/CONFIG_LTO=n/' arch/${{ env.ARCH }}/configs/${{ env.KERNEL_CONFIG }} + sed -i 's/CONFIG_LTO_CLANG=y/CONFIG_LTO_CLANG=n/' arch/${{ env.ARCH }}/configs/${{ env.KERNEL_CONFIG }} + sed -i 's/CONFIG_THINLTO=y/CONFIG_THINLTO=n/' arch/${{ env.ARCH }}/configs/${{ env.KERNEL_CONFIG }} + echo "CONFIG_LTO_NONE=y" >> arch/${{ env.ARCH }}/configs/${{ env.KERNEL_CONFIG }} + fi + if [ ${{ env.DISABLE_CC_WERROR }} = true ]; then + echo "CONFIG_CC_WERROR=n" >> arch/${{ env.ARCH }}/configs/${{ env.KERNEL_CONFIG }} + fi + + - name: Setup ccache + if: env.ENABLE_CCACHE == 'true' + uses: hendrikmuhs/ccache-action@v1.2 + with: + key: build-kernel-${{ env.DEVICE }}${{ env.UPLOADNAME }} + max-size: 2G + + - name: Build kernel + run: | + cd $GITHUB_WORKSPACE/kernel_workspace/android-kernel + export PATH=$GITHUB_WORKSPACE/kernel_workspace/clang-aosp/bin:$PATH + export KBUILD_BUILD_HOST=Github-Action + export KBUILD_BUILD_USER=$(echo ${{ github.actor }} | tr A-Z a-z) + make -j$(nproc --all) CC=clang O=out ARCH=${{ env.ARCH }} ${{ env.CUSTOM_CMDS }} ${{ env.EXTRA_CMDS }} ${{ env.GCC_64 }} ${{ env.GCC_32 }} ${{ env.KERNEL_CONFIG }} + if [ ${{ env.ENABLE_CCACHE }} = true ]; then + make -j$(nproc --all) CC="ccache clang" O=out ARCH=${{ env.ARCH }} ${{ env.CUSTOM_CMDS }} ${{ env.EXTRA_CMDS }} ${{ env.GCC_64 }} ${{ env.GCC_32 }} + else + make -j$(nproc --all) CC=clang O=out ARCH=${{ env.ARCH }} ${{ env.CUSTOM_CMDS }} ${{ env.EXTRA_CMDS }} ${{ env.GCC_64 }} ${{ env.GCC_32 }} + fi + + - name: Check a kernel output files + run: | + cd $GITHUB_WORKSPACE/kernel_workspace + if [ -f android-kernel/out/arch/${{ env.ARCH }}/boot/${{ env.KERNEL_IMAGE_NAME }} ]; then + echo "CHECK_FILE_IS_OK=true" >> $GITHUB_ENV + else + echo "Kernel output file is empty" + exit 1 + fi + if [ ${{ env.NEED_DTBO }} = true ]; then + if [ -f android-kernel/out/arch/${{ env.ARCH }}/boot/dtbo.img ]; then + echo "CHECK_DTBO_IS_OK=true" >> $GITHUB_ENV + else + echo "DTBO image is empty" + exit 1 + fi + fi + + - name: Make Anykernel3 + if: env.CHECK_FILE_IS_OK == 'true' + run: | + cd $GITHUB_WORKSPACE/kernel_workspace + git clone https://github.com/osm0sis/AnyKernel3 + sed -i 's/do.devicecheck=1/do.devicecheck=0/g' AnyKernel3/anykernel.sh + sed -i 's!block=/dev/block/platform/omap/omap_hsmmc.0/by-name/boot;!block=auto;!g' AnyKernel3/anykernel.sh + sed -i 's/is_slot_device=0;/is_slot_device=auto;/g' AnyKernel3/anykernel.sh + cp android-kernel/out/arch/${{ env.ARCH }}/boot/${{ env.KERNEL_IMAGE_NAME }} AnyKernel3/ + if [ ${{ env.CHECK_DTBO_IS_OK }} = true ]; then + cp android-kernel/out/arch/${{ env.ARCH }}/boot/dtbo.img AnyKernel3/ + fi + rm -rf AnyKernel3/.git* AnyKernel3/README.md + + - name: Make boot image + if: env.HAVE_SOURCE_BOOT_IMAGE == 'true' && env.CHECK_FILE_IS_OK == 'true' + run: | + cd $GITHUB_WORKSPACE/kernel_workspace + tools/unpack_bootimg.py --boot_img boot-source.img + cp android-kernel/out/arch/${{ env.ARCH }}/boot/${{ env.KERNEL_IMAGE_NAME }} out/kernel + tools/mkbootimg.py ${{ env.FORMAT_MKBOOTING }} -o boot.img + if [ -f boot.img ]; then + echo "MAKE_BOOT_IMAGE_IS_OK=true" >> $GITHUB_ENV + else + echo "Boot image is empty" + exit 1 + fi + + - name: Upload ${{ env.KERNEL_IMAGE_NAME }} + if: env.CHECK_FILE_IS_OK == 'true' + uses: actions/upload-artifact@v3 + with: + name: ${{ env.KERNEL_IMAGE_NAME }}${{ env.UPLOADNAME }}-${{ env.DEVICE }}-${{ env.BUILD_TIME }} + path: kernel_workspace/android-kernel/out/arch/${{ env.ARCH }}/boot/${{ env.KERNEL_IMAGE_NAME }} + + - name: Upload AnyKernel3 + if: env.CHECK_FILE_IS_OK == 'true' + uses: actions/upload-artifact@v3 + with: + name: Stellaris${{ env.UPLOADNAME }}-${{ env.BUILD_TIME }} + path: kernel_workspace/AnyKernel3/* + + - name: Upload DTBO image + if: env.CHECK_DTBO_IS_OK == 'true' + uses: actions/upload-artifact@v3 + with: + name: dtbo-${{ env.DEVICE }}-${{ env.BUILD_TIME }} + path: kernel_workspace/android-kernel/out/arch/${{ env.ARCH }}/boot/dtbo.img + + - name: Upload boot image + if: env.MAKE_BOOT_IMAGE_IS_OK == 'true' + uses: actions/upload-artifact@v3 + with: + name: boot${{ env.UPLOADNAME }}-${{ env.DEVICE }}-${{ env.BUILD_TIME }} + path: kernel_workspace/boot.img diff --git a/.github/workflows/build-kernel-blu_spark.yml b/.github/workflows/build-kernel-blu_spark.yml new file mode 100644 index 0000000000..df74f3a09d --- /dev/null +++ b/.github/workflows/build-kernel-blu_spark.yml @@ -0,0 +1,236 @@ +name: Build Kernel blu_spark-Kernel +on: + workflow_dispatch: + +jobs: + build: + name: Build Kernel by ${{ github.actor }} + runs-on: ubuntu-latest + if: github.event.repository.owner.id == github.event.sender.id + env: + CCACHE_COMPILERCHECK: "%compiler% -dumpmachine; %compiler% -dumpversion" + CCACHE_NOHASHDIR: "true" + CCACHE_HARDLINK: "true" + steps: + - uses: actions/checkout@v3 + - name: Prepare Configuration + run: | + echo "KERNEL_SOURCE=$(cat config_blu_spark.env | grep -w "KERNEL_SOURCE" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "KERNEL_SOURCE_BRANCH=$(cat config_blu_spark.env | grep -w "KERNEL_SOURCE_BRANCH" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "KERNEL_CONFIG=$(cat config_blu_spark.env | grep -w "KERNEL_CONFIG" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "KERNEL_IMAGE_NAME=$(cat config_blu_spark.env | grep -w "KERNEL_IMAGE_NAME" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "ARCH=$(cat config_blu_spark.env | grep -w "ARCH" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "EXTRA_CMDS=$(cat config_blu_spark.env | grep -w "EXTRA_CMDS" | head -n 1 | cut -d ":" -f 2)" >> $GITHUB_ENV + echo "USE_CUSTOM_CLANG=$(cat config_blu_spark.env | grep -w "USE_CUSTOM_CLANG" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "CUSTOM_CLANG_SOURCE=$(cat config_blu_spark.env | grep -w "CUSTOM_CLANG_SOURCE" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "CUSTOM_CLANG_BRANCH=$(cat config_blu_spark.env | grep -w "CUSTOM_CLANG_BRANCH" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "CUSTOM_CMDS=$(cat config_blu_spark.env | grep -w "CUSTOM_CMDS" | head -n 1 | cut -d ":" -f 2)" >> $GITHUB_ENV + echo "CLANG_BRANCH=$(cat config_blu_spark.env | grep -w "CLANG_BRANCH" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "CLANG_VERSION=$(cat config_blu_spark.env | grep -w "CLANG_VERSION" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "ENABLE_GCC_ARM64=$(cat config_blu_spark.env | grep -w "ENABLE_GCC_ARM64" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "ENABLE_GCC_ARM32=$(cat config_blu_spark.env | grep -w "ENABLE_GCC_ARM32" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "ENABLE_KERNELSU=$(cat config_blu_spark.env | grep -w "ENABLE_KERNELSU" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "KERNELSU_TAG=$(cat config_blu_spark.env | grep -w "KERNELSU_TAG" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "ADD_KPROBES_CONFIG=$(cat config_blu_spark.env | grep -w "ADD_KPROBES_CONFIG" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "DISABLE-LTO=$(cat config_blu_spark.env | grep -w "DISABLE-LTO" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "ADD_OVERLAYFS_CONFIG=$(cat config_blu_spark.env | grep -w "ADD_OVERLAYFS_CONFIG" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "DISABLE_CC_WERROR=$(cat config_blu_spark.env | grep -w "DISABLE_CC_WERROR" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "ENABLE_CCACHE=$(cat config_blu_spark.env | grep -w "ENABLE_CCACHE" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "NEED_DTBO=$(cat config_blu_spark.env | grep -w "NEED_DTBO" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "BUILD_BOOT_IMG=$(cat config_blu_spark.env | grep -w "BUILD_BOOT_IMG" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "SOURCE_BOOT_IMAGE=$(cat config_blu_spark.env | grep -w "SOURCE_BOOT_IMAGE" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + + - name: Setup build kernel environment + run: | + echo "BUILD_TIME=$(TZ=Asia/Shanghai date "+%Y%m%d%H%M")" >> $GITHUB_ENV + echo "DEVICE=$(echo ${{ env.KERNEL_CONFIG }} | sed 's!vendor/!!;s/_defconfig//;s/_user//;s/-perf//')" >> $GITHUB_ENV + sudo apt-get update + sudo apt-get install git ccache automake flex lzop bison gperf build-essential zip curl zlib1g-dev g++-multilib libxml2-utils bzip2 libbz2-dev libbz2-1.0 libghc-bzlib-dev squashfs-tools pngcrush schedtool dpkg-dev liblz4-tool make optipng maven libssl-dev pwgen libswitch-perl policycoreutils minicom libxml-sax-base-perl libxml-simple-perl bc libc6-dev-i386 lib32ncurses5-dev libx11-dev lib32z-dev libgl1-mesa-dev xsltproc unzip device-tree-compiler python2 python3 + mkdir -p $GITHUB_WORKSPACE/kernel_workspace + + - name: Download Clang-aosp + if: env.USE_CUSTOM_CLANG == 'false' + run: | + cd $GITHUB_WORKSPACE/kernel_workspace + mkdir clang-aosp + wget https://android.googlesource.com/platform/prebuilts/clang/host/linux-x86/+archive/refs/heads/${{ env.CLANG_BRANCH }}/clang-${{ env.CLANG_VERSION }}.tar.gz + tar -C clang-aosp/ -zxvf clang-${{ env.CLANG_VERSION }}.tar.gz + + - name: Download Custom-Clang + if: env.USE_CUSTOM_CLANG == 'true' + run: | + cd $GITHUB_WORKSPACE/kernel_workspace + if [[ ${{ env.CUSTOM_CLANG_SOURCE }} =~ git ]]; then + if [[ ${{ env.CUSTOM_CLANG_SOURCE }} == *'.tar.gz' ]]; then + wget -O clang.tar.gz ${{ env.CUSTOM_CLANG_SOURCE }} + mkdir clang-aosp + tar -C clang-aosp/ -zxvf clang.tar.gz + else + git clone ${{ env.CUSTOM_CLANG_SOURCE }} -b ${{ env.CUSTOM_CLANG_BRANCH }} clang-aosp --depth=1 + fi + else + wget -O clang.zip ${{ env.CUSTOM_CLANG_SOURCE }} + mkdir clang-aosp + unzip clang.zip -d clang-aosp/ + fi + + - name: Download Gcc-aosp + run: | + cd $GITHUB_WORKSPACE/kernel_workspace + if [ ${{ env.ENABLE_GCC_ARM64 }} = true ]; then + mkdir gcc-64 + wget -O gcc-aarch64.tar.gz https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/+archive/refs/tags/android-12.1.0_r27.tar.gz + tar -C gcc-64/ -zxvf gcc-aarch64.tar.gz + echo "GCC_64=CROSS_COMPILE=$GITHUB_WORKSPACE/kernel_workspace/gcc-64/bin/aarch64-linux-android-" >> $GITHUB_ENV + fi + + if [ ${{ env.ENABLE_GCC_ARM32 }} = true ]; then + mkdir gcc-32 + wget -O gcc-arm.tar.gz https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/+archive/refs/tags/android-12.1.0_r27.tar.gz + tar -C gcc-32/ -zxvf gcc-arm.tar.gz + echo "GCC_32=CROSS_COMPILE_ARM32=$GITHUB_WORKSPACE/kernel_workspace/gcc-32/bin/arm-linux-androideabi-" >> $GITHUB_ENV + fi + + - name: Download mkbootimg tools + if: env.BUILD_BOOT_IMG == 'true' + run: | + cd $GITHUB_WORKSPACE/kernel_workspace + git clone https://android.googlesource.com/platform/system/tools/mkbootimg tools -b master-kernel-build-2022 --depth=1 + + - name: Download kernel source + run: | + cd $GITHUB_WORKSPACE/kernel_workspace + git clone ${{ env.KERNEL_SOURCE }} -b ${{ env.KERNEL_SOURCE_BRANCH }} android-kernel --depth=1 + + - name: Download source boot image + if: env.BUILD_BOOT_IMG == 'true' + run: | + cd $GITHUB_WORKSPACE/kernel_workspace + wget -O boot-source.img ${{ env.SOURCE_BOOT_IMAGE }} + if [ -f boot-source.img ]; then + echo "FORMAT_MKBOOTING=$(echo `tools/unpack_bootimg.py --boot_img=boot-source.img --format mkbootimg`)" >> $GITHUB_ENV + echo "HAVE_SOURCE_BOOT_IMAGE=true" >> $GITHUB_ENV + fi + + - name: Setup KernelSU + if: env.ENABLE_KERNELSU == 'true' + run: | + cd $GITHUB_WORKSPACE/kernel_workspace/android-kernel + curl -LSs "https://raw.githubusercontent.com/tiann/KernelSU/main/kernel/setup.sh" | bash -s ${{ env.KERNELSU_TAG }} + echo "UPLOADNAME=-KernelSU" >> $GITHUB_ENV + + - name: Setup Configuration for Kernel + run: | + cd $GITHUB_WORKSPACE/kernel_workspace/android-kernel + if [ ${{ env.ADD_KPROBES_CONFIG }} = true ]; then + echo "CONFIG_MODULES=y" >> arch/${{ env.ARCH }}/configs/${{ env.KERNEL_CONFIG }} + echo "CONFIG_KPROBES=y" >> arch/${{ env.ARCH }}/configs/${{ env.KERNEL_CONFIG }} + echo "CONFIG_HAVE_KPROBES=y" >> arch/${{ env.ARCH }}/configs/${{ env.KERNEL_CONFIG }} + echo "CONFIG_KPROBE_EVENTS=y" >> arch/${{ env.ARCH }}/configs/${{ env.KERNEL_CONFIG }} + fi + if [ ${{ env.ADD_OVERLAYFS_CONFIG }} = true ]; then + echo "CONFIG_OVERLAY_FS=y" >> arch/${{ env.ARCH }}/configs/${{ env.KERNEL_CONFIG }} + fi + if [ ${{ env.DISABLE-LTO }} = true ]; then + sed -i 's/CONFIG_LTO=y/CONFIG_LTO=n/' arch/${{ env.ARCH }}/configs/${{ env.KERNEL_CONFIG }} + sed -i 's/CONFIG_LTO_CLANG=y/CONFIG_LTO_CLANG=n/' arch/${{ env.ARCH }}/configs/${{ env.KERNEL_CONFIG }} + sed -i 's/CONFIG_THINLTO=y/CONFIG_THINLTO=n/' arch/${{ env.ARCH }}/configs/${{ env.KERNEL_CONFIG }} + echo "CONFIG_LTO_NONE=y" >> arch/${{ env.ARCH }}/configs/${{ env.KERNEL_CONFIG }} + fi + if [ ${{ env.DISABLE_CC_WERROR }} = true ]; then + echo "CONFIG_CC_WERROR=n" >> arch/${{ env.ARCH }}/configs/${{ env.KERNEL_CONFIG }} + fi + + - name: Setup ccache + if: env.ENABLE_CCACHE == 'true' + uses: hendrikmuhs/ccache-action@v1.2 + with: + key: build-kernel-${{ env.DEVICE }}${{ env.UPLOADNAME }} + max-size: 2G + + - name: Build kernel + run: | + cd $GITHUB_WORKSPACE/kernel_workspace/android-kernel + export PATH=$GITHUB_WORKSPACE/kernel_workspace/clang-aosp/bin:$PATH + export KBUILD_BUILD_HOST=Github-Action + export KBUILD_BUILD_USER=$(echo ${{ github.actor }} | tr A-Z a-z) + make -j$(nproc --all) CC=clang O=out ARCH=${{ env.ARCH }} ${{ env.CUSTOM_CMDS }} ${{ env.EXTRA_CMDS }} ${{ env.GCC_64 }} ${{ env.GCC_32 }} ${{ env.KERNEL_CONFIG }} + if [ ${{ env.ENABLE_CCACHE }} = true ]; then + make -j$(nproc --all) CC="ccache clang" O=out ARCH=${{ env.ARCH }} ${{ env.CUSTOM_CMDS }} ${{ env.EXTRA_CMDS }} ${{ env.GCC_64 }} ${{ env.GCC_32 }} + else + make -j$(nproc --all) CC=clang O=out ARCH=${{ env.ARCH }} ${{ env.CUSTOM_CMDS }} ${{ env.EXTRA_CMDS }} ${{ env.GCC_64 }} ${{ env.GCC_32 }} + fi + + - name: Check a kernel output files + run: | + cd $GITHUB_WORKSPACE/kernel_workspace + if [ -f android-kernel/out/arch/${{ env.ARCH }}/boot/${{ env.KERNEL_IMAGE_NAME }} ]; then + echo "CHECK_FILE_IS_OK=true" >> $GITHUB_ENV + else + echo "Kernel output file is empty" + exit 1 + fi + if [ ${{ env.NEED_DTBO }} = true ]; then + if [ -f android-kernel/out/arch/${{ env.ARCH }}/boot/dtbo.img ]; then + echo "CHECK_DTBO_IS_OK=true" >> $GITHUB_ENV + else + echo "DTBO image is empty" + exit 1 + fi + fi + + - name: Make Anykernel3 + if: env.CHECK_FILE_IS_OK == 'true' + run: | + cd $GITHUB_WORKSPACE/kernel_workspace + git clone https://github.com/osm0sis/AnyKernel3 + sed -i 's/do.devicecheck=1/do.devicecheck=0/g' AnyKernel3/anykernel.sh + sed -i 's!block=/dev/block/platform/omap/omap_hsmmc.0/by-name/boot;!block=auto;!g' AnyKernel3/anykernel.sh + sed -i 's/is_slot_device=0;/is_slot_device=auto;/g' AnyKernel3/anykernel.sh + cp android-kernel/out/arch/${{ env.ARCH }}/boot/${{ env.KERNEL_IMAGE_NAME }} AnyKernel3/ + if [ ${{ env.CHECK_DTBO_IS_OK }} = true ]; then + cp android-kernel/out/arch/${{ env.ARCH }}/boot/dtbo.img AnyKernel3/ + fi + rm -rf AnyKernel3/.git* AnyKernel3/README.md + + - name: Make boot image + if: env.HAVE_SOURCE_BOOT_IMAGE == 'true' && env.CHECK_FILE_IS_OK == 'true' + run: | + cd $GITHUB_WORKSPACE/kernel_workspace + tools/unpack_bootimg.py --boot_img boot-source.img + cp android-kernel/out/arch/${{ env.ARCH }}/boot/${{ env.KERNEL_IMAGE_NAME }} out/kernel + tools/mkbootimg.py ${{ env.FORMAT_MKBOOTING }} -o boot.img + if [ -f boot.img ]; then + echo "MAKE_BOOT_IMAGE_IS_OK=true" >> $GITHUB_ENV + else + echo "Boot image is empty" + exit 1 + fi + + - name: Upload ${{ env.KERNEL_IMAGE_NAME }} + if: env.CHECK_FILE_IS_OK == 'true' + uses: actions/upload-artifact@v3 + with: + name: ${{ env.KERNEL_IMAGE_NAME }}${{ env.UPLOADNAME }}-${{ env.DEVICE }}-${{ env.BUILD_TIME }} + path: kernel_workspace/android-kernel/out/arch/${{ env.ARCH }}/boot/${{ env.KERNEL_IMAGE_NAME }} + + - name: Upload AnyKernel3 + if: env.CHECK_FILE_IS_OK == 'true' + uses: actions/upload-artifact@v3 + with: + name: blu_spark${{ env.UPLOADNAME }}-${{ env.BUILD_TIME }} + path: kernel_workspace/AnyKernel3/* + + - name: Upload DTBO image + if: env.CHECK_DTBO_IS_OK == 'true' + uses: actions/upload-artifact@v3 + with: + name: dtbo-${{ env.DEVICE }}-${{ env.BUILD_TIME }} + path: kernel_workspace/android-kernel/out/arch/${{ env.ARCH }}/boot/dtbo.img + + - name: Upload boot image + if: env.MAKE_BOOT_IMAGE_IS_OK == 'true' + uses: actions/upload-artifact@v3 + with: + name: boot${{ env.UPLOADNAME }}-${{ env.DEVICE }}-${{ env.BUILD_TIME }} + path: kernel_workspace/boot.img diff --git a/.github/workflows/build-kernel.yml b/.github/workflows/build-kernel.yml index 63ca01e15d..0d9938f6a5 100644 --- a/.github/workflows/build-kernel.yml +++ b/.github/workflows/build-kernel.yml @@ -59,11 +59,17 @@ jobs: run: | cd $GITHUB_WORKSPACE/kernel_workspace if [[ ${{ env.CUSTOM_CLANG }} =~ github ]]; then - git clone ${{ env.CUSTOM_CLANG }} -b ${{ env.CUSTOM_CLANG_BRANCH }} clang-aosp - else - wget -O clang.zip ${{ env.CUSTOM_CLANG }} + if [[ ${{ env.CUSTOM_CLANG }} == *'.tar.gz' ]]; then + wget -O clang.tar.gz ${{ env.CUSTOM_CLANG }} mkdir clang-aosp - unzip clang.zip -d clang-aosp/ + tar -C clang-aosp/ -zxvf clang.tar.gz + else + git clone ${{ env.CUSTOM_CLANG }} -b ${{ env.CUSTOM_CLANG_BRANCH }} clang-aosp --depth=1 + fi + else + wget -O clang.zip ${{ env.CUSTOM_CLANG }} + mkdir clang-aosp + unzip clang.zip -d clang-aosp/ fi - name: Download mkbootimg tools @@ -86,6 +92,10 @@ jobs: echo "FORMAT_MKBOOTING=$(echo `tools/unpack_bootimg.py --boot_img=boot-source.img --format mkbootimg`)" >> $GITHUB_ENV echo "HAVE_SOURCE_BOOT_IMAGE=true" >> $GITHUB_ENV fi + - name: rm KernelSU + run:| + cd $GITHUB_WORKSPACE/kernel_workspace/android-kernel + rm -fr KernelSU - name: Setup KernelSU if: env.USE_KERNELSU == 'true' diff --git a/.github/workflows/build-kernel_flame.yml b/.github/workflows/build-kernel_flame.yml new file mode 100644 index 0000000000..a54ff918e3 --- /dev/null +++ b/.github/workflows/build-kernel_flame.yml @@ -0,0 +1,236 @@ +name: Build Kernel flame +on: + workflow_dispatch: + +jobs: + build: + name: Build Kernel by ${{ github.actor }} + runs-on: ubuntu-latest + if: github.event.repository.owner.id == github.event.sender.id + env: + CCACHE_COMPILERCHECK: "%compiler% -dumpmachine; %compiler% -dumpversion" + CCACHE_NOHASHDIR: "true" + CCACHE_HARDLINK: "true" + steps: + - uses: actions/checkout@v3 + - name: Prepare Configuration + run: | + echo "KERNEL_SOURCE=$(cat config_flame.env | grep -w "KERNEL_SOURCE" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "KERNEL_SOURCE_BRANCH=$(cat config_flame.env | grep -w "KERNEL_SOURCE_BRANCH" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "KERNEL_CONFIG=$(cat config_flame.env | grep -w "KERNEL_CONFIG" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "KERNEL_IMAGE_NAME=$(cat config_flame.env | grep -w "KERNEL_IMAGE_NAME" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "ARCH=$(cat config_flame.env | grep -w "ARCH" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "EXTRA_CMDS=$(cat config_flame.env | grep -w "EXTRA_CMDS" | head -n 1 | cut -d ":" -f 2)" >> $GITHUB_ENV + echo "USE_CUSTOM_CLANG=$(cat config_flame.env | grep -w "USE_CUSTOM_CLANG" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "CUSTOM_CLANG_SOURCE=$(cat config_flame.env | grep -w "CUSTOM_CLANG_SOURCE" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "CUSTOM_CLANG_BRANCH=$(cat config_flame.env | grep -w "CUSTOM_CLANG_BRANCH" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "CUSTOM_CMDS=$(cat config_flame.env | grep -w "CUSTOM_CMDS" | head -n 1 | cut -d ":" -f 2)" >> $GITHUB_ENV + echo "CLANG_BRANCH=$(cat config_flame.env | grep -w "CLANG_BRANCH" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "CLANG_VERSION=$(cat config_flame.env | grep -w "CLANG_VERSION" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "ENABLE_GCC_ARM64=$(cat config_flame.env | grep -w "ENABLE_GCC_ARM64" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "ENABLE_GCC_ARM32=$(cat config_flame.env | grep -w "ENABLE_GCC_ARM32" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "ENABLE_KERNELSU=$(cat config_flame.env | grep -w "ENABLE_KERNELSU" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "KERNELSU_TAG=$(cat config_flame.env | grep -w "KERNELSU_TAG" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "ADD_KPROBES_CONFIG=$(cat config_flame.env | grep -w "ADD_KPROBES_CONFIG" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "DISABLE-LTO=$(cat config_flame.env | grep -w "DISABLE-LTO" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "ADD_OVERLAYFS_CONFIG=$(cat config_flame.env | grep -w "ADD_OVERLAYFS_CONFIG" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "DISABLE_CC_WERROR=$(cat config_flame.env | grep -w "DISABLE_CC_WERROR" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "ENABLE_CCACHE=$(cat config_flame.env | grep -w "ENABLE_CCACHE" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "NEED_DTBO=$(cat config_flame.env | grep -w "NEED_DTBO" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "BUILD_BOOT_IMG=$(cat config_flame.env | grep -w "BUILD_BOOT_IMG" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + echo "SOURCE_BOOT_IMAGE=$(cat config_flame.env | grep -w "SOURCE_BOOT_IMAGE" | head -n 1 | cut -d "=" -f 2)" >> $GITHUB_ENV + + - name: Setup build kernel environment + run: | + echo "BUILD_TIME=$(TZ=Asia/Shanghai date "+%Y%m%d%H%M")" >> $GITHUB_ENV + echo "DEVICE=$(echo ${{ env.KERNEL_CONFIG }} | sed 's!vendor/!!;s/_defconfig//;s/_user//;s/-perf//')" >> $GITHUB_ENV + sudo apt-get update + sudo apt-get install git ccache automake flex lzop bison gperf build-essential zip curl zlib1g-dev g++-multilib libxml2-utils bzip2 libbz2-dev libbz2-1.0 libghc-bzlib-dev squashfs-tools pngcrush schedtool dpkg-dev liblz4-tool make optipng maven libssl-dev pwgen libswitch-perl policycoreutils minicom libxml-sax-base-perl libxml-simple-perl bc libc6-dev-i386 lib32ncurses5-dev libx11-dev lib32z-dev libgl1-mesa-dev xsltproc unzip device-tree-compiler python2 python3 + mkdir -p $GITHUB_WORKSPACE/kernel_workspace + + - name: Download Clang-aosp + if: env.USE_CUSTOM_CLANG == 'false' + run: | + cd $GITHUB_WORKSPACE/kernel_workspace + mkdir clang-aosp + wget https://android.googlesource.com/platform/prebuilts/clang/host/linux-x86/+archive/refs/heads/${{ env.CLANG_BRANCH }}/clang-${{ env.CLANG_VERSION }}.tar.gz + tar -C clang-aosp/ -zxvf clang-${{ env.CLANG_VERSION }}.tar.gz + + - name: Download Custom-Clang + if: env.USE_CUSTOM_CLANG == 'true' + run: | + cd $GITHUB_WORKSPACE/kernel_workspace + if [[ ${{ env.CUSTOM_CLANG_SOURCE }} =~ git ]]; then + if [[ ${{ env.CUSTOM_CLANG_SOURCE }} == *'.tar.gz' ]]; then + wget -O clang.tar.gz ${{ env.CUSTOM_CLANG_SOURCE }} + mkdir clang-aosp + tar -C clang-aosp/ -zxvf clang.tar.gz + else + git clone ${{ env.CUSTOM_CLANG_SOURCE }} -b ${{ env.CUSTOM_CLANG_BRANCH }} clang-aosp --depth=1 + fi + else + wget -O clang.zip ${{ env.CUSTOM_CLANG_SOURCE }} + mkdir clang-aosp + unzip clang.zip -d clang-aosp/ + fi + + - name: Download Gcc-aosp + run: | + cd $GITHUB_WORKSPACE/kernel_workspace + if [ ${{ env.ENABLE_GCC_ARM64 }} = true ]; then + mkdir gcc-64 + wget -O gcc-aarch64.tar.gz https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/+archive/refs/tags/android-12.1.0_r27.tar.gz + tar -C gcc-64/ -zxvf gcc-aarch64.tar.gz + echo "GCC_64=CROSS_COMPILE=$GITHUB_WORKSPACE/kernel_workspace/gcc-64/bin/aarch64-linux-android-" >> $GITHUB_ENV + fi + + if [ ${{ env.ENABLE_GCC_ARM32 }} = true ]; then + mkdir gcc-32 + wget -O gcc-arm.tar.gz https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/+archive/refs/tags/android-12.1.0_r27.tar.gz + tar -C gcc-32/ -zxvf gcc-arm.tar.gz + echo "GCC_32=CROSS_COMPILE_ARM32=$GITHUB_WORKSPACE/kernel_workspace/gcc-32/bin/arm-linux-androideabi-" >> $GITHUB_ENV + fi + + - name: Download mkbootimg tools + if: env.BUILD_BOOT_IMG == 'true' + run: | + cd $GITHUB_WORKSPACE/kernel_workspace + git clone https://android.googlesource.com/platform/system/tools/mkbootimg tools -b master-kernel-build-2022 --depth=1 + + - name: Download kernel source + run: | + cd $GITHUB_WORKSPACE/kernel_workspace + git clone ${{ env.KERNEL_SOURCE }} -b ${{ env.KERNEL_SOURCE_BRANCH }} android-kernel --depth=1 + + - name: Download source boot image + if: env.BUILD_BOOT_IMG == 'true' + run: | + cd $GITHUB_WORKSPACE/kernel_workspace + wget -O boot-source.img ${{ env.SOURCE_BOOT_IMAGE }} + if [ -f boot-source.img ]; then + echo "FORMAT_MKBOOTING=$(echo `tools/unpack_bootimg.py --boot_img=boot-source.img --format mkbootimg`)" >> $GITHUB_ENV + echo "HAVE_SOURCE_BOOT_IMAGE=true" >> $GITHUB_ENV + fi + + - name: Setup KernelSU + if: env.ENABLE_KERNELSU == 'true' + run: | + cd $GITHUB_WORKSPACE/kernel_workspace/android-kernel + curl -LSs "https://raw.githubusercontent.com/tiann/KernelSU/main/kernel/setup.sh" | bash -s ${{ env.KERNELSU_TAG }} + echo "UPLOADNAME=-KernelSU" >> $GITHUB_ENV + + - name: Setup Configuration for Kernel + run: | + cd $GITHUB_WORKSPACE/kernel_workspace/android-kernel + if [ ${{ env.ADD_KPROBES_CONFIG }} = true ]; then + echo "CONFIG_MODULES=y" >> arch/${{ env.ARCH }}/configs/${{ env.KERNEL_CONFIG }} + echo "CONFIG_KPROBES=y" >> arch/${{ env.ARCH }}/configs/${{ env.KERNEL_CONFIG }} + echo "CONFIG_HAVE_KPROBES=y" >> arch/${{ env.ARCH }}/configs/${{ env.KERNEL_CONFIG }} + echo "CONFIG_KPROBE_EVENTS=y" >> arch/${{ env.ARCH }}/configs/${{ env.KERNEL_CONFIG }} + fi + if [ ${{ env.ADD_OVERLAYFS_CONFIG }} = true ]; then + echo "CONFIG_OVERLAY_FS=y" >> arch/${{ env.ARCH }}/configs/${{ env.KERNEL_CONFIG }} + fi + if [ ${{ env.DISABLE-LTO }} = true ]; then + sed -i 's/CONFIG_LTO=y/CONFIG_LTO=n/' arch/${{ env.ARCH }}/configs/${{ env.KERNEL_CONFIG }} + sed -i 's/CONFIG_LTO_CLANG=y/CONFIG_LTO_CLANG=n/' arch/${{ env.ARCH }}/configs/${{ env.KERNEL_CONFIG }} + sed -i 's/CONFIG_THINLTO=y/CONFIG_THINLTO=n/' arch/${{ env.ARCH }}/configs/${{ env.KERNEL_CONFIG }} + echo "CONFIG_LTO_NONE=y" >> arch/${{ env.ARCH }}/configs/${{ env.KERNEL_CONFIG }} + fi + if [ ${{ env.DISABLE_CC_WERROR }} = true ]; then + echo "CONFIG_CC_WERROR=n" >> arch/${{ env.ARCH }}/configs/${{ env.KERNEL_CONFIG }} + fi + + - name: Setup ccache + if: env.ENABLE_CCACHE == 'true' + uses: hendrikmuhs/ccache-action@v1.2 + with: + key: build-kernel-${{ env.DEVICE }}${{ env.UPLOADNAME }} + max-size: 2G + + - name: Build kernel + run: | + cd $GITHUB_WORKSPACE/kernel_workspace/android-kernel + export PATH=$GITHUB_WORKSPACE/kernel_workspace/clang-aosp/bin:$PATH + export KBUILD_BUILD_HOST=Github-Action + export KBUILD_BUILD_USER=$(echo ${{ github.actor }} | tr A-Z a-z) + make -j$(nproc --all) CC=clang O=out ARCH=${{ env.ARCH }} ${{ env.CUSTOM_CMDS }} ${{ env.EXTRA_CMDS }} ${{ env.GCC_64 }} ${{ env.GCC_32 }} ${{ env.KERNEL_CONFIG }} + if [ ${{ env.ENABLE_CCACHE }} = true ]; then + make -j$(nproc --all) CC="ccache clang" O=out ARCH=${{ env.ARCH }} ${{ env.CUSTOM_CMDS }} ${{ env.EXTRA_CMDS }} ${{ env.GCC_64 }} ${{ env.GCC_32 }} + else + make -j$(nproc --all) CC=clang O=out ARCH=${{ env.ARCH }} ${{ env.CUSTOM_CMDS }} ${{ env.EXTRA_CMDS }} ${{ env.GCC_64 }} ${{ env.GCC_32 }} + fi + + - name: Check a kernel output files + run: | + cd $GITHUB_WORKSPACE/kernel_workspace + if [ -f android-kernel/out/arch/${{ env.ARCH }}/boot/${{ env.KERNEL_IMAGE_NAME }} ]; then + echo "CHECK_FILE_IS_OK=true" >> $GITHUB_ENV + else + echo "Kernel output file is empty" + exit 1 + fi + if [ ${{ env.NEED_DTBO }} = true ]; then + if [ -f android-kernel/out/arch/${{ env.ARCH }}/boot/dtbo.img ]; then + echo "CHECK_DTBO_IS_OK=true" >> $GITHUB_ENV + else + echo "DTBO image is empty" + exit 1 + fi + fi + + - name: Make Anykernel3 + if: env.CHECK_FILE_IS_OK == 'true' + run: | + cd $GITHUB_WORKSPACE/kernel_workspace + git clone https://github.com/osm0sis/AnyKernel3 + sed -i 's/do.devicecheck=1/do.devicecheck=0/g' AnyKernel3/anykernel.sh + sed -i 's!block=/dev/block/platform/omap/omap_hsmmc.0/by-name/boot;!block=auto;!g' AnyKernel3/anykernel.sh + sed -i 's/is_slot_device=0;/is_slot_device=auto;/g' AnyKernel3/anykernel.sh + cp android-kernel/out/arch/${{ env.ARCH }}/boot/${{ env.KERNEL_IMAGE_NAME }} AnyKernel3/ + if [ ${{ env.CHECK_DTBO_IS_OK }} = true ]; then + cp android-kernel/out/arch/${{ env.ARCH }}/boot/dtbo.img AnyKernel3/ + fi + rm -rf AnyKernel3/.git* AnyKernel3/README.md + + - name: Make boot image + if: env.HAVE_SOURCE_BOOT_IMAGE == 'true' && env.CHECK_FILE_IS_OK == 'true' + run: | + cd $GITHUB_WORKSPACE/kernel_workspace + tools/unpack_bootimg.py --boot_img boot-source.img + cp android-kernel/out/arch/${{ env.ARCH }}/boot/${{ env.KERNEL_IMAGE_NAME }} out/kernel + tools/mkbootimg.py ${{ env.FORMAT_MKBOOTING }} -o boot.img + if [ -f boot.img ]; then + echo "MAKE_BOOT_IMAGE_IS_OK=true" >> $GITHUB_ENV + else + echo "Boot image is empty" + exit 1 + fi + + - name: Upload ${{ env.KERNEL_IMAGE_NAME }} + if: env.CHECK_FILE_IS_OK == 'true' + uses: actions/upload-artifact@v3 + with: + name: ${{ env.KERNEL_IMAGE_NAME }}${{ env.UPLOADNAME }}-${{ env.DEVICE }}-${{ env.BUILD_TIME }} + path: kernel_workspace/android-kernel/out/arch/${{ env.ARCH }}/boot/${{ env.KERNEL_IMAGE_NAME }} + + - name: Upload AnyKernel3 + if: env.CHECK_FILE_IS_OK == 'true' + uses: actions/upload-artifact@v3 + with: + name: Stellaris${{ env.UPLOADNAME }}-${{ env.BUILD_TIME }} + path: kernel_workspace/AnyKernel3/* + + - name: Upload DTBO image + if: env.CHECK_DTBO_IS_OK == 'true' + uses: actions/upload-artifact@v3 + with: + name: dtbo-${{ env.DEVICE }}-${{ env.BUILD_TIME }} + path: kernel_workspace/android-kernel/out/arch/${{ env.ARCH }}/boot/dtbo.img + + - name: Upload boot image + if: env.MAKE_BOOT_IMAGE_IS_OK == 'true' + uses: actions/upload-artifact@v3 + with: + name: boot${{ env.UPLOADNAME }}-${{ env.DEVICE }}-${{ env.BUILD_TIME }} + path: kernel_workspace/boot.img diff --git a/README.md b/README.md index 4ade6da599..0ca9c40030 100644 --- a/README.md +++ b/README.md @@ -6,64 +6,72 @@ ## 警告:warning: :warning: :warning: -如果你不是内核作者,使用他人的劳动成果构建KernelSU,请仅供自己使用,不要分享给别人,这是对原作者的劳动成果的尊重。 +如果你不是内核作者,使用他人的劳动成果构建 KernelSU,请仅供自己使用,不要分享给别人,这是对原作者的劳动成果的尊重。 ## 支持内核 +- `5.4` - `4.19` - `4.14` +- `4.9` ## 使用 +> 所有 config.env 内的变量均只判断`true` + > 编译成功后,会在`Action`上传 AnyKernel3,已经关闭设备检查,请在 Twrp 刷入。 -Fork 本仓库到你的储存库然后按照以下内容编辑config.env,之后点击`Star`或`Action`,在左侧可看见`Build Kernel`选项,点击选项会看见右边的大对话框的上面会有`Run workflows`点击它会启动构建。 +Fork 本仓库到你的储存库然后按照以下内容编辑 config.env,之后点击`Star`或`Action`,在左侧可看见`Build Kernel`选项,点击选项会看见右边的大对话框的上面会有`Run workflows`点击它会启动构建。 ### Kernel Source -填写你的内核仓库地址 +修改为你的内核仓库地址 例如: https://github.com/Diva-Room/Miku_kernel_xiaomi_wayne ### Kernel Source Branch -填写你的内核分支 +修改为你的内核分支 例如: TDA -### Kernel defconfig +### Kernel Config -填写你的内核配置文件名 +修改为你的内核配置文件名 例如: vendor/wayne_defconfig -### Target arch +### Arch 例如: arm64 -### Kernel file +### Kernel Image Name -填写需要刷写的 image,一般与你的 aosp-device tree 里的 BOARD_KERNEL_IMAGE_NAME 是一致的 +修改为需要刷写的 kernel binary,一般与你的 aosp-device tree 里的 BOARD_KERNEL_IMAGE_NAME 是一致的 例如: Image.gz-dtb +常见还有 Image、Image.gz + ### Clang #### Use custom clang -改成true -可以使用除google官方的clang,如[proton-clang](https://github.com/kdrag0n/proton-clang) +可以使用除 google 官方的 clang,如[proton-clang](https://github.com/kdrag0n/proton-clang) + +#### Custom Clang Source -#### Custom Clang +> 如果是 git 仓库,请填写包含`.git`的链接 -支持github仓库或者zip压缩包的直链 +支持 git 仓库或者 zip 压缩包的直链 -#### Custom Clang Commands +#### Custom cmds -都用自定义clang了,自己改改编译器位置应该会吧 :) +都用自定义 clang 了,自己改改这些配置应该都会吧 :) #### Clang Branch -由于 [#23](https://github.com/xiaoleGun/KernelSU_Action/issues/23) 的需要,我们提供可自定义Google上游分支的选项,主要的有分支有 + +由于 [#23](https://github.com/xiaoleGun/KernelSU_Action/issues/23) 的需要,我们提供可自定义 Google 上游分支的选项,主要的有分支有 | Clang 分支 | | ---------- | | master | @@ -85,46 +93,68 @@ Fork 本仓库到你的储存库然后按照以下内容编辑config.env,之 一般 Clang12 就能通过大部分 4.14 及以上的内核的编译 我自己的 MI 6X 4.19 使用的是 r450784d -### Extra build commands +### GCC + +#### Enable GCC 64 + +启用 GCC 64 交叉编译 + +#### Enable GCC 32 + +启用 GCC 32 交叉编译 + +### Extra cmds -有的内核需要手动加入一些编译命令,才能正常编译,不需要的话不填写即可 +有的内核需要加入一些其它编译命令,才能正常编译,一般不需要其它的命令,请自行搜索自己内核的资料 请在命令与命令之间用空格隔开 例如: LLVM=1 LLVM_IAS=1 +### Enable KernelSU + +启用 KernelSU,用于排查内核故障或单独编译内核 + +#### KernelSU Branch or Tag + +选择 KernelSU 的分支或 tag: + +- main 分支(开发版): `KERNELSU_TAG=main` +- 最新 TAG(稳定版): `KERNELSU_TAG=` +- 指定 TAG(如`v0.5.2`): `KERNELSU_TAG=v0.5.2` + ### Disable LTO -用于优化内核,但有些时候会导致错误,所以提供禁用它,设置为 true 即禁用 +LTO 用于优化内核,但有些时候会导致错误 -### Use KernelSU +### Disable CC_WERROR -是否使用 KernelSU,用于排查内核故障或单独编译内核 +用于修复某些不支持或关闭了Kprobes的内核,修复KernelSU未检测到开启Kprobes的变量抛出警告导致错误 -#### KernelSU Branch or Tag +### Add Kprobes Config -选择KernelSU的分支或tag: -- main分支(开发版): `KERNELSU_TAG=main` -- 最新TAG(稳定版): `KERNELSU_TAG=` -- 指定TAG(如`v0.5.2`): `KERNELSU_TAG=v0.5.2` +自动在 defconfig 注入参数 -### Use Kprobes +### Add overlayfs Config -如果你的内核 Kprobes 工作正常这项改成 true 即可自动在 defconfig 注入参数 +此参数为 KernelSU 模块和 system 分区读写提供支持 +自动在 defconfig 注入参数 -### Use overlayfs +### Enable ccache -内核没有该参数的话请启用,模块需要 +启用缓存,让第二次编译内核更快,最少可以减少 2/5 的时间 ### Need DTBO -如果你的内核还需要刷入DTBO,请设置为true +上传 DTBO +部分设备需要 + +### Build Boot IMG -### Make boot image -> 从之前的Workflows合并进来的,可以查看历史提交 +> 从之前的 Workflows 合并进来的,可以查看历史提交 -设置为true会编译boot.img,需要你提供`Source boot image` +编译 boot.img,需要你提供`Source boot image` -### Source boot image +### Source Boot Image 故名思义,提供一个源系统可以正常开机的 boot 镜像,需要直链,最好是同一套内核源码以及与你当前系统同一套设备树从 aosp 构建出来的。ramdisk 里面包含分区表以及 init,没有的话构建出来的镜像会无法正常引导。 diff --git a/README_EN.md b/README_EN.md index 6cced507a5..f408cbbe9d 100644 --- a/README_EN.md +++ b/README_EN.md @@ -1,129 +1,153 @@ # KernelSU Action -Action for Non-GKI Kernel, with certain universality, requires understanding of kernel and Android related knowledge to apply. +This action is for Non-GKI Kernels and has some universality and requires knowledge of the kernel and Android. -## Warning:warning: :warning: :warning: +## Warning:warning::warning::warning: -If you are not a kernel author, use other people's labor to build KernelSU for personal use only. Do not share it with others. This is respect for the original author's labor results. +If you are not the author of the Kernel, and are using someone else's labor to build KernelSU, please use it for personal use only and do not share it with others. This is to show respect for the author's labor achievements. -## Supported kernels +## Supported Kernel Versions +- `5.4` - `4.19` - `4.14` +- `4.9` ## Usage -> After successful compilation, AnyKernel3 will be uploaded in `Action`, and device check has been turned off. Please flash it in TWRP. +> All variables in the `config.env` file are only checked for `true`. -Fork this repository to your storage, then edit config.env according to the following content. After that, click `Star` or `Action`. You can see the option `Build Kernel` on the left side. Clicking on it will show `Run workflows` on the top of the large dialog box on the right side. Clicking on it will start the build. +> Once the compilation is successful, AnyKernel3 will be uploaded in the `Action` and the device check has been disabled. Please flash it in TWRP. + +Fork this repository to your storage account and edit the `config.env` file with the following content. Afterward, click `Star` or `Action`. On the left side, you can see the `Build Kernel` option. Click on it, and you will find the `Run workflows` option above the dialog. Click on it to start the build. ### Kernel Source -Fill in your kernel repository address. +Change this to your Kernel repository address. -For example: https://github.com/Diva-Room/Miku_kernel_xiaomi_wayne +For example - https://github.com/Diva-Room/Miku_kernel_xiaomi_wayne ### Kernel Source Branch -Fill in your kernel branch. +Change this to your Kernel branch. -For example: TDA +For example - TDA -### Kernel defconfig +### Kernel Config -Fill in the name of your kernel configuration file. +Change this to your kernel configuration file name. -For example: vendor/wayne_defconfig +For example: `vendor/wayne_defconfig` -### Target arch +### Arch For example: arm64 -### Kernel file +### Kernel Image Name + +Change this to the kernel binary that needs to be flashed, generally consistent with `BOARD_KERNEL_IMAGE_NAME` in your AOSP device tree. -Fill in the image that needs to be flashed, which is generally consistent with BOARD_KERNEL_IMAGE_NAME in your AOSP-device tree. +For example: `Image.gz-dtb` -For example: Image.gz-dtb +Common names include `Image`, `Image.gz`. ### Clang #### Use custom clang -Change it to true. You can use non-Google official clang, such as [proton-clang](https://github.com/kdrag0n/proton-clang). +You can use a non-official clang such as [proton-clang](https://github.com/kdrag0n/proton-clang). -#### Custom Clang +#### Custom Clang Source -Supports direct links to GitHub repositories or zip archives. +> Fill in a link that includes `.git` if it is a git repository. -#### Custom Clang Commands +Git repository or direct chain of compressed zip files is supported. -If you are using custom clang, you should change the compiler location yourself. +#### Custom cmds + +If you're using custom clang, you should be able to modify these settings on your own. :) #### Clang Branch -Due to the need of [#23](https://github.com/xiaoleGun/KernelSU_Action/issues/23), we provide an option to customize the Google upstream branch. The main branches are: +Due to [#23](https://github.com/xiaoleGun/KernelSU_Action/issues/23), we provide an option to customize the Google main branch. The main ones include: | Clang Branch | | ------------ | | master | | master-kernel-build-2021 | | master-kernel-build-2022 | -Or other branches, please look for them in https://android.googlesource.com/platform/prebuilts/clang/host/linux-x86 according to your needs. +Or other branches, please search for them according to your own needs at https://android.googlesource.com/platform/prebuilts/clang/host/linux-x86. + +#### Clang Version -#### Clang version +Enter the Clang version to use. -Fill in the Clang version you need to use. | Clang Version | Corresponding Android Version | AOSP-Clang Version | -| ---------- | ----------------- | --------------- | +| ------------- | ----------------------------- | ------------------ | | 12.0.5 | Android S | r416183b | | 14.0.6 | Android T | r450784d | | 14.0.7 | | r450784e | | 15.0.1 | | r458507 | -Generally, Clang12 can compile most kernels above 4.14. My own MI 6X 4.19 uses r450784d. +Generally, Clang12 can compile most of the 4.14 and above kernels. My MI 6X 4.19 uses r450784d. + +### GCC + +#### Enable GCC 64 + +Enable GCC 64C cross-compiler. -### Extra build commands +#### Enable GCC 32 -Some kernels need to manually add some compilation commands to compile normally. If not needed, leave it blank. -Please separate the commands with spaces. +Enable GCC 32C cross-compiler. -For example: LLVM=1 LLVM_IAS=1 +### Extra cmds + +Some kernels require additional compilation commands to compile correctly. Generally, no other commands are needed, so please search for information about your kernel. Please separate the command and the command with a space. + +For example: `LLVM=1 LLVM_IAS=1` ### Disable LTO -Used to optimize the kernel, but sometimes it may cause errors, so it is provided to disable it. Set it to true to disable it. +LTO is used to optimize the kernel but sometimes causes errors. -### Use KernelSU +### Enable KernelSU -Whether to use KernelSU, used to troubleshoot kernel faults or compile kernels separately. +Enable KernelSU for troubleshooting kernel failures or compiling the kernel separately. #### KernelSU Branch or Tag Select the branch or tag of KernelSU: -- Main branch (development version): `KERNELSU_TAG=main` + +- main branch (development version): `KERNELSU_TAG=main` - Latest TAG (stable version): `KERNELSU_TAG=` -- Specify TAG (such as `v0.5.2`): `KERNELSU_TAG=v0.5.2` +- Specify the TAG (such as `v0.5.2`): `KERNELSU_TAG=v0.5.2` -### Use Kprobes +### Add Kprobes Config -If your kernel Kprobes work normally, change this to true to automatically inject parameters into defconfig. +Inject parameters into the defconfig automatically. -### Use overlayfs +### Add overlayfs Config -If the kernel does not have this parameter, please enable it. The module needs it. +This parameter provides support for the KernelSU module and system partition read and write. Inject parameters into Defconfig automatically. + +### Enable ccache + +Enable the cache to make the second kernel compile faster. It can reduce the time by at least 2/5. ### Need DTBO -If your kernel also needs to flash DTBO, please set it to true. +Upload DTBO. Some devices require it. + +### Build Boot IMG -### Make boot image -> Merged from previous Workflows, you can view historical submissions +> Added from previous workflows, view historical commits -Setting it to true will compile boot.img. You need to provide `Source boot image`. +Build boot.img, and you need to provide a `Source boot image`. -### Source boot image +### Source Boot Image -As the name suggests, provide a boot image that can boot the source system normally. It needs a direct link, preferably built from the same kernel source code and device tree as your current system from AOSP. The ramdisk contains partition tables and init. If not, the built image will not be able to boot normally. +As the name suggests, it provides a boot image source system that can boot normally and requires a direct chain, preferably from the same kernel source and AOSP device tree as your current system. Ramdisk contains the partition table and init, without which the compiled image will not boot up properly. For example: https://raw.githubusercontent.com/xiaoleGun/KernelSU_action/main/boot/boot-wayne-from-Miku-UI-latest.img diff --git a/boot/boot.img b/boot/boot.img deleted file mode 100644 index 3804c5b10c..0000000000 Binary files a/boot/boot.img and /dev/null differ diff --git a/config.env b/config.env index 037f42d013..77eb516ab1 100644 --- a/config.env +++ b/config.env @@ -1,33 +1,33 @@ -KERNEL_SOURCE=https://github.com/Diva-Room/Miku_kernel_xiaomi_wayne -KERNEL_SOURCE_BRANCH=TDA -KERNEL_DEFCONFIG=vendor/wayne_defconfig +KERNEL_SOURCE=https://github.com/Coconutat/android_kernel_oppo_a72_12.1.git +KERNEL_SOURCE_BRANCH=KernelSU +KERNEL_DEFCONFIG=A72_c12.1_ksu_defconfig KERNEL_FILE=Image.gz-dtb TARGET_ARCH=arm64 # Clang ## Custom -USE_CUSTOM_CLANG=false -CUSTOM_CLANG= -CUSTOM_CLANG_BRANCH= +USE_CUSTOM_CLANG=true +CUSTOM_CLANG=https://github.com/kdrag0n/proton-clang +CUSTOM_CLANG_BRANCH=master ### if your set USE CUSTOM CLANG to false than DO NOT CHANGE CUSTOM CLANG BUILD COMMAND CUSTOM_CLANG_BUILD_COMMAND:CLANG_TRIPLE=aarch64-linux-gnu- CROSS_COMPILE=$GITHUB_WORKSPACE/kernel_workspace/gcc-aosp/bin/aarch64-linux-android- ## AOSP -CLANG_BRANCH=master-kernel-build-2022 -CLANG_VERSION=r450784d +CLANG_BRANCH=android12-platform-release +CLANG_VERSION=clang-r416183b1 EXTRA_BUILD_COMMAND:LD=ld.lld DISABLE-LTO=false # KernelSU flags USE_KERNELSU=true -KERNELSU_TAG=main +KERNELSU_TAG= USE_KPROBES=false USE_OVERLAYFS=false # DTBO image -NEED_DTBO=false +NEED_DTBO=true # Build boot images -MAKE_BOOT_IMAGE=true -SOURCE_BOOT_IMAGE=https://raw.githubusercontent.com/xiaoleGun/KernelSU_action/main/boot/boot.img +MAKE_BOOT_IMAGE=false +SOURCE_BOOT_IMAGE= diff --git a/config_MeteoricSU.env b/config_MeteoricSU.env new file mode 100644 index 0000000000..3799bd85bb --- /dev/null +++ b/config_MeteoricSU.env @@ -0,0 +1,43 @@ +KERNEL_SOURCE=https://github.com/Kdjjjjn123/kernel_oneplus.git +KERNEL_SOURCE_BRANCH=9r-8t +KERNEL_CONFIG=vendor/kona-perf_defconfig +KERNEL_IMAGE_NAME=Image +ARCH=arm64 +EXTRA_CMDS:LD=ld.lld LLVM=1 LLVM_IAS=1 + +# Clang +## Custom +USE_CUSTOM_CLANG=false +CUSTOM_CLANG_SOURCE=https://github.com/ZyCromerZ/Clang/releases/download/17.0.0-20230521-release/Clang-17.0.0-20230521.tar.gz +CUSTOM_CLANG_BRANCH=master + +### if your set USE CUSTOM CLANG to false than DO NOT CHANGE CUSTOM CLANG BUILD COMMAND +CUSTOM_CMDS:CLANG_TRIPLE=aarch64-linux-gnu- + +## AOSP +CLANG_BRANCH=master +CLANG_VERSION=r487747c + +# Gcc +ENABLE_GCC_ARM64=true +ENABLE_GCC_ARM32=true + +# KernelSU flags +ENABLE_KERNELSU=true +KERNELSU_TAG= + +# Configuration +DISABLE-LTO=false +DISABLE_CC_WERROR=false +ADD_KPROBES_CONFIG=true +ADD_OVERLAYFS_CONFIG=true + +# Ccache +ENABLE_CCACHE=true + +# DTBO image +NEED_DTBO=true + +# Build boot images +BUILD_BOOT_IMG=false +SOURCE_BOOT_IMAGE= diff --git a/config_Nameless.env b/config_Nameless.env new file mode 100644 index 0000000000..e246c879e4 --- /dev/null +++ b/config_Nameless.env @@ -0,0 +1,43 @@ +KERNEL_SOURCE=https://github.com/ppajda/android_kernel_oneplus_sm8250.git +KERNEL_SOURCE_BRANCH=thirteen +KERNEL_CONFIG=xtd_defconfig +KERNEL_IMAGE_NAME=Image +ARCH=arm64 +EXTRA_CMDS:LD=ld.lld LLVM=1 LLVM_IAS=1 + +# Clang +## Custom +USE_CUSTOM_CLANG=true +CUSTOM_CLANG_SOURCE=https://github.com/ZyCromerZ/Clang/releases/download/14.0.6-20230213-release/Clang-14.0.6-20230213.tar.gz +CUSTOM_CLANG_BRANCH=master + +### if your set USE CUSTOM CLANG to false than DO NOT CHANGE CUSTOM CLANG BUILD COMMAND +CUSTOM_CMDS:CLANG_TRIPLE=aarch64-linux-gnu- + +## AOSP +CLANG_BRANCH=master +CLANG_VERSION=r487747c + +# Gcc +ENABLE_GCC_ARM64=true +ENABLE_GCC_ARM32=true + +# KernelSU flags +ENABLE_KERNELSU=true +KERNELSU_TAG= + +# Configuration +DISABLE-LTO=false +DISABLE_CC_WERROR=false +ADD_KPROBES_CONFIG=true +ADD_OVERLAYFS_CONFIG=true + +# Ccache +ENABLE_CCACHE=true + +# DTBO image +NEED_DTBO=false + +# Build boot images +BUILD_BOOT_IMG=false +SOURCE_BOOT_IMAGE= diff --git a/config_Stellaris.env b/config_Stellaris.env new file mode 100644 index 0000000000..4c047ecb99 --- /dev/null +++ b/config_Stellaris.env @@ -0,0 +1,43 @@ +KERNEL_SOURCE=https://github.com/Ling-LuoYi/Stellaris_kernel_oneplus_sm8250 +KERNEL_SOURCE_BRANCH=OOS13 +KERNEL_CONFIG=vendor/kona-perf_defconfig +KERNEL_IMAGE_NAME=Image +ARCH=arm64 +EXTRA_CMDS:LD=ld.lld LLVM=1 LLVM_IAS=1 + +# Clang +## Custom +USE_CUSTOM_CLANG=true +CUSTOM_CLANG_SOURCE=https://github.com/ZyCromerZ/Clang/releases/download/17.0.0-20230630-release/Clang-17.0.0-20230630.tar.gz +CUSTOM_CLANG_BRANCH=master + +### if your set USE CUSTOM CLANG to false than DO NOT CHANGE CUSTOM CLANG BUILD COMMAND +CUSTOM_CMDS:CLANG_TRIPLE=aarch64-linux-gnu- + +## AOSP +CLANG_BRANCH=master +CLANG_VERSION=r487747c + +# Gcc +ENABLE_GCC_ARM64=true +ENABLE_GCC_ARM32=true + +# KernelSU flags +ENABLE_KERNELSU=true +KERNELSU_TAG=main + +# Configuration +DISABLE-LTO=false +DISABLE_CC_WERROR=false +ADD_KPROBES_CONFIG=true +ADD_OVERLAYFS_CONFIG=true + +# Ccache +ENABLE_CCACHE=true + +# DTBO image +NEED_DTBO=true + +# Build boot images +BUILD_BOOT_IMG=false +SOURCE_BOOT_IMAGE= diff --git a/config_blu_spark.env b/config_blu_spark.env new file mode 100644 index 0000000000..60d36fa592 --- /dev/null +++ b/config_blu_spark.env @@ -0,0 +1,43 @@ +KERNEL_SOURCE=https://github.com/engstk/op8 +KERNEL_SOURCE_BRANCH=blu_spark-13-custom +KERNEL_CONFIG=blu_spark_defconfig +KERNEL_IMAGE_NAME=Image +ARCH=arm64 +EXTRA_CMDS:LD=ld.lld LLVM=1 LLVM_IAS=1 + +# Clang +## Custom +USE_CUSTOM_CLANG=true +CUSTOM_CLANG_SOURCE=https://github.com/ZyCromerZ/Clang/releases/download/14.0.6-20230213-release/Clang-14.0.6-20230213.tar.gz +CUSTOM_CLANG_BRANCH=master + +### if your set USE CUSTOM CLANG to false than DO NOT CHANGE CUSTOM CLANG BUILD COMMAND +CUSTOM_CMDS:CLANG_TRIPLE=aarch64-linux-gnu- + +## AOSP +CLANG_BRANCH=master +CLANG_VERSION=r487747c + +# Gcc +ENABLE_GCC_ARM64=true +ENABLE_GCC_ARM32=true + +# KernelSU flags +ENABLE_KERNELSU=true +KERNELSU_TAG=main + +# Configuration +DISABLE-LTO=false +DISABLE_CC_WERROR=false +ADD_KPROBES_CONFIG=true +ADD_OVERLAYFS_CONFIG=true + +# Ccache +ENABLE_CCACHE=true + +# DTBO image +NEED_DTBO=false + +# Build boot images +BUILD_BOOT_IMG=false +SOURCE_BOOT_IMAGE= diff --git a/config_flame.env b/config_flame.env new file mode 100644 index 0000000000..c54310a57a --- /dev/null +++ b/config_flame.env @@ -0,0 +1,43 @@ +KERNEL_SOURCE=https://github.com/kernko56789j/Realking_kernel_sm8250_.git +KERNEL_SOURCE_BRANCH=alioth_defconfig +KERNEL_CONFIG=sunfish_defconfig +KERNEL_IMAGE_NAME=Image +ARCH=arm64 +EXTRA_CMDS:LD=ld.lld + +# Clang +## Custom +USE_CUSTOM_CLANG=true +CUSTOM_CLANG_SOURCE=https://github.com/ZyCromerZ/Clang/releases/download/14.0.6-20230213-release/Clang-14.0.6-20230213.tar.gz +CUSTOM_CLANG_BRANCH=master + +### if your set USE CUSTOM CLANG to false than DO NOT CHANGE CUSTOM CLANG BUILD COMMAND +CUSTOM_CMDS:CLANG_TRIPLE=aarch64-linux-gnu- + +## AOSP +CLANG_BRANCH=master +CLANG_VERSION=r487747c + +# Gcc +ENABLE_GCC_ARM64=true +ENABLE_GCC_ARM32=true + +# KernelSU flags +ENABLE_KERNELSU=true +KERNELSU_TAG=main + +# Configuration +DISABLE-LTO=false +DISABLE_CC_WERROR=false +ADD_KPROBES_CONFIG=true +ADD_OVERLAYFS_CONFIG=true + +# Ccache +ENABLE_CCACHE=true + +# DTBO image +NEED_DTBO=true + +# Build boot images +BUILD_BOOT_IMG=false +SOURCE_BOOT_IMAGE=