Browse Source

Update build.yml

James McConnell 1 year ago
parent
commit
be1d949cc7
1 changed files with 127 additions and 4 deletions
  1. 127 4
      .github/workflows/build.yml

+ 127 - 4
.github/workflows/build.yml

@@ -6,6 +6,9 @@ permissions:
 on:
   workflow_call:
     inputs:
+      use_make:
+        required: true
+        type: boolean
       android_version:
         required: true
         type: string
@@ -30,6 +33,9 @@ on:
       revision:
         required: false
         type: string
+      use_make:
+        required: true
+        type: boolean
 
 jobs:
   build-gki:
@@ -410,6 +416,7 @@ jobs:
           fi
 
       - name: Build
+        if: ${{ inputs.use_make == 'false' }}
         run : |
           set -e
           set -x
@@ -423,7 +430,7 @@ jobs:
           ccache --show-stats
 
       - name: Create Bootimgs Folder and Copy Images for Android 12/13
-        if: ${{ inputs.android_version == 'android12' || inputs.android_version == 'android13' }}
+        if: ${{ (inputs.android_version == 'android12' || inputs.android_version == 'android13') && inputs.use_make == 'false' }}
         run: |
           mkdir bootimgs
 
@@ -437,7 +444,7 @@ jobs:
           gzip -n -k -f -9 ./Image > ./Image.gz
 
       - name: Create Bootimgs Folder and Copy Images for Android 14/15
-        if: ${{ inputs.android_version == 'android14' || inputs.android_version == 'android15' }}
+        if: ${{ (inputs.android_version == 'android14' || inputs.android_version == 'android15') && inputs.use_make == 'false' }}
         run: |
           mkdir bootimgs
 
@@ -451,6 +458,7 @@ jobs:
           gzip -n -k -f -9 ./Image > ./Image.gz
 
       - name: Create ZIP Files for Different Formats
+        if: ${{ inputs.use_make == 'false' }}
         run: |
           echo "Creating zip files for all formats..."
           cd ./AnyKernel3
@@ -475,7 +483,7 @@ jobs:
           rm ./Image.gz
 
       - name: Android 12 boot image build script
-        if: ${{ inputs.android_version == 'android12' }}
+        if: ${{ inputs.android_version == 'android12' && inputs.use_make == 'false' }}
         run: |
           echo "Changing to configuration directory: $CONFIG..."
           cd bootimgs
@@ -525,7 +533,7 @@ jobs:
           cp ./boot-lz4.img ../${{ inputs.kernelsu_variant }}-$KSUVER-${{ inputs.android_version }}-${{ inputs.kernel_version }}.${{ inputs.sub_level }}-${{ inputs.os_patch_level }}-boot-lz4.img
 
       - name: Android 13/14/15 boot image build script
-        if: ${{ inputs.android_version == 'android13' || inputs.android_version == 'android14' || inputs.android_version == 'android15' }}
+        if: ${{ inputs.android_version == 'android13' || inputs.android_version == 'android14' || inputs.android_version == 'android15' && inputs.use_make == 'false' }}
         run: |
           cd bootimgs
 
@@ -548,10 +556,125 @@ jobs:
           cp ./boot-lz4.img ../${{ inputs.kernelsu_variant }}-$KSUVER-${{ inputs.android_version }}-${{ inputs.kernel_version }}.${{ inputs.sub_level }}-${{ inputs.os_patch_level }}-boot-lz4.img
           
       - name: Compress all img files with gzip
+        if: ${{ inputs.use_make == 'false' }}
         run: |
           for image in *.img; do
             gzip -vnf9 "$image"
           done
+
+      - name: Add Build based configs
+        if: ${{ github.event.inputs.use_make == 'true' }}
+        run: |
+          echo "Changing to configuration directory: $CONFIG..."
+          cd "$CONFIG"
+          echo "CONFIG_LTO_CLANG_THIN=y" >> ./common/arch/arm64/configs/gki_defconfig
+          echo "CONFIG_LTO_CLANG=y" >> ./common/arch/arm64/configs/gki_defconfig
+          echo "CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y" >> "./common/arch/arm64/configs/gki_defconfig"
+          echo "CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE_O3=n" >> "./common/arch/arm64/configs/gki_defconfig"
+
+      - name: Detect Clang Version from Configs
+        if: ${{ github.event.inputs.use_make == 'true' }}
+        shell: bash
+        run: |
+          KERNEL_PATH="$GITHUB_WORKSPACE/$CONFIG"
+          DEFCONFIG="$KERNEL_PATH/common/arch/arm64/configs/gki_defconfig"
+          BUILDCONFIG="$KERNEL_PATH/common/build.config.gki"
+          CONSTANTSCONFIG="$KERNEL_PATH/common/build.config.constants"
+          CLANG_VERSION=""
+          CLANG_BIN_PATH=""
+          if grep -q '^CONFIG_CLANG_VERSION=' "$DEFCONFIG" 2>/dev/null; then
+            CLANG_VERSION=$(grep '^CONFIG_CLANG_VERSION=' "$DEFCONFIG" 2>/dev/null | head -n1 | cut -d'=' -f2 | tr -d '"' | xargs)
+          elif grep -q '^CLANG_VERSION=' "$BUILDCONFIG" 2>/dev/null; then
+            CLANG_VERSION=$(grep '^CLANG_VERSION=' "$BUILDCONFIG" 2>/dev/null | head -n1 | cut -d'=' -f2 | xargs)
+          elif grep -q '^CLANG_VERSION=' "$CONSTANTSCONFIG" 2>/dev/null; then
+            CLANG_VERSION=$(grep '^CLANG_VERSION=' "$CONSTANTSCONFIG" 2>/dev/null | head -n1 | cut -d'=' -f2 | xargs)
+            CLANG_VERSION="clang-$CLANG_VERSION"
+          else
+            echo "No clang version found in config, will auto-detect in prebuilts."
+          fi
+          if [ -z "$CLANG_VERSION" ]; then
+            if [ -d "$KERNEL_PATH/prebuilts/clang/host/linux-x86" ]; then
+              CLANG_VERSION=$(ls -d "$KERNEL_PATH"/prebuilts/clang/host/linux-x86/clang-r*/ | tail -n 1 | xargs basename)
+              CLANG_BIN_PATH="$KERNEL_PATH/prebuilts/clang/host/linux-x86/$CLANG_VERSION/bin"
+            elif [ -d "$KERNEL_PATH/prebuilts-master/clang/host/linux-x86" ]; then
+              CLANG_VERSION=$(ls -d "$KERNEL_PATH"/prebuilts-master/clang/host/linux-x86/clang-r*/ | tail -n 1 | xargs basename)
+              CLANG_BIN_PATH="$KERNEL_PATH/prebuilts-master/clang/host/linux-x86/$CLANG_VERSION/bin"
+            else
+              CLANG_VERSION="clang"
+              CLANG_BIN_PATH="$KERNEL_PATH/prebuilts/clang/host/linux-x86/$CLANG_VERSION/bin" # dummy
+            fi
+          else
+            if [ -d "$KERNEL_PATH/prebuilts/clang/host/linux-x86" ]; then
+              CLANG_BIN_PATH="$KERNEL_PATH/prebuilts/clang/host/linux-x86/$CLANG_VERSION/bin"
+            else
+              CLANG_BIN_PATH="$KERNEL_PATH/prebuilts-master/clang/host/linux-x86/$CLANG_VERSION/bin"
+            fi
+          fi
+          echo "Detected CLANG_VERSION: $CLANG_VERSION"
+          echo "CLANG_VERSION=$CLANG_VERSION" >> $GITHUB_ENV
+          echo "CLANG_BIN_PATH=$CLANG_BIN_PATH" >> $GITHUB_ENV
+
+      - name: Build Kernel
+        if: ${{ github.event.inputs.use_make == 'true' }}  
+        shell: bash
+        run: |
+          KERNEL_PATH="$GITHUB_WORKSPACE/$CONFIG"
+          CLANG_BIN_PATH="${{ env.CLANG_BIN_PATH }}"
+          CLANG_VERSION="${{ env.CLANG_VERSION }}"
+          if [ -d "$CLANG_BIN_PATH" ] && [ -x "$CLANG_BIN_PATH/clang" ]; then
+            echo "Adding Clang to PATH: $CLANG_BIN_PATH"
+            export PATH="$CLANG_BIN_PATH:$PATH"
+            SELECTED_CLANG="$CLANG_BIN_PATH/clang"
+          elif command -v clang >/dev/null 2>&1; then
+            SELECTED_CLANG="$(command -v clang)"
+            echo "Using system Clang: $SELECTED_CLANG"
+            exit 1
+          else
+            echo "Error: No valid Clang binary found"
+            exit 1
+          fi
+          echo "Using Clang version: $($SELECTED_CLANG --version | head -n1)"
+          LLVM_TOOLS="clang ld.lld llvm-ar llvm-objcopy llvm-objdump llvm-nm"
+          MISSING_TOOLS=""
+          for tool in $LLVM_TOOLS; do
+            if ! command -v $tool >/dev/null 2>&1; then
+              MISSING_TOOLS="$MISSING_TOOLS $tool"
+            fi
+          done
+          if [ -n "$MISSING_TOOLS" ]; then
+            echo "Installing missing LLVM tools:$MISSING_TOOLS"
+            sudo apt-get update
+            sudo apt-get install -yq --no-install-recommends llvm
+            for tool in $MISSING_TOOLS; do
+              if ! command -v $tool >/dev/null 2>&1; then
+                echo "Error: Failed to install $tool"
+                exit 1
+              fi
+            done
+          fi
+          KERNEL_VERSION="${{ inputs.kernel_version }}"
+          if [[ "$KERNEL_VERSION" == "5.10" ]]; then
+            USE_LLVM_IAS=true
+          fi
+          cd "$KERNEL_PATH/common" || exit 1
+          MAKE_ARGS="LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-android- \
+            RUSTC=$KERNEL_PATH/prebuilts/rust/linux-x86/1.73.0b/bin/rustc \
+            PAHOLE=$KERNEL_PATH/prebuilts/kernel-build-tools/linux-x86/bin/pahole \
+            LD=ld.lld HOSTLD=ld.lld"
+          if [[ -v USE_LLVM_IAS ]]; then
+            MAKE_ARGS="LLVM_IAS=1 $MAKE_ARGS"
+          fi
+          
+          make -j$(nproc --all) O=out $MAKE_ARGS KCFLAGS+="-Wno-error -O2 -flto=thin -fno-stack-protector" gki_defconfig || exit 1
+          make -j$(nproc --all) O=out $MAKE_ARGS KCFLAGS+="-Wno-error -O2 -flto=thin -fno-stack-protector" || exit 1
+
+      - name: Create Kernel ZIP
+        if: ${{ github.event.inputs.use_make == 'true' }}
+        run: |
+          cp $CONFIG/common/out/arch/arm64/boot/Image AnyKernel3/Image
+          cd AnyKernel3
+          ZIP_NAME="${{ inputs.kernelsu_variant }}-$KSUVER-${{ inputs.android_version }}-${{ inputs.kernel_version }}.${{ inputs.sub_level }}-${{ inputs.os_patch_level }}-AnyKernel3.zip"
+          zip -r "../$ZIP_NAME" ./*
   
       - name: Upload Build Artifacts
         uses: actions/upload-artifact@v4