@@ -215,7 +215,7 @@ runs:
215215 sudo DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
216216 git curl ca-certificates build-essential clang lld flex bison \
217217 libelf-dev libssl-dev libncurses-dev zlib1g-dev liblz4-tool \
218- libxml2-utils rsync unzip dwarves file python3 ccache jq bc dos2unix
218+ libxml2-utils rsync unzip dwarves file python3 ccache jq bc dos2unix kmod libdw-dev elfutils
219219 sudo apt-get clean
220220 echo "✅ Dependencies installed"
221221 echo "::endgroup::"
@@ -343,30 +343,49 @@ runs:
343343 echo " User: $BUILD_USER"
344344 echo " Host: $BUILD_HOST"
345345 echo "::endgroup::"
346-
347- - name : Detect Clang
346+
347+ - name : Detect Clang and Rust
348348 shell : bash
349349 run : |
350350 set -euo pipefail
351351 echo "::group::Detect Clang"
352352 KP="$GITHUB_WORKSPACE/$CONFIG/kernel_platform"
353353 CLANG_FOUND=false
354+ RUSTC_FOUND=false
354355 for base in "$KP/prebuilts" "$KP/prebuilts-master"; do
355356 [ -d "$base/clang/host/linux-x86" ] || continue
356- latest=$(ls -d "$base"/clang/host/linux-x86/clang-r*/ 2>/dev/null | sort -V | tail -n1 || true)
357+ latest=$(ls -d "$base"/clang/host/linux-x86/clang-r*/ 2>/dev/null | sort -V | head -n1 || true)
357358 if [ -n "$latest" ] && [ -x "$latest/bin/clang" ]; then
358359 CLANG_BIN="$latest/bin"
359360 CLANG_FOUND=true
360361 break
361362 fi
362363 done
364+ for base in "$KP/prebuilts" "$KP/prebuilts-master"; do
365+ [ -d "$base/rust/linux-x86/" ] || continue
366+ ls -la "$base/rust/linux-x86/"
367+ latest=$(ls -d "$base/rust/linux-x86/1."* 2>/dev/null | sort -V | head -n1 || true)
368+ if [ -n "$latest" ] && [ -x "$latest/bin/rustc" ]; then
369+ RUSTC_BIN="$latest/bin"
370+ RUSTC_FOUND=true
371+ break
372+ fi
373+ done
363374 if ! $CLANG_FOUND && command -v clang >/dev/null 2>&1; then
364375 CLANG_BIN="$(dirname "$(command -v clang)")"
365376 CLANG_FOUND=true
366377 echo "Using system clang."
367378 fi
368379 $CLANG_FOUND || { echo "::error::No clang toolchain found"; exit 1; }
380+ $RUSTC_FOUND || { echo "::warning::No RUST toolchain found! Ignoring";}
369381 echo "CLANG_BIN_PATH=$CLANG_BIN" >> "$GITHUB_ENV"
382+ if [ "$RUSTC_FOUND" = true ]; then
383+ echo "RUSTC_BIN_PATH=$RUSTC_BIN" >> "$GITHUB_ENV"
384+ RUSTC_VERSION="$("$RUSTC_BIN/rustc" --version | head -n1)"
385+ echo "RUSTC_VERSION=$RUSTC_VERSION" >> "$GITHUB_ENV"
386+ echo "✅ Detected RUSTC: $RUSTC_VERSION"
387+ fi
388+
370389 CLANG_VERSION="$("$CLANG_BIN/clang" --version | head -n1)"
371390 echo "CLANG_VERSION=$CLANG_VERSION" >> "$GITHUB_ENV"
372391 echo "✅ Detected Clang: $CLANG_VERSION"
@@ -1027,8 +1046,94 @@ runs:
10271046 echo "CUSTOM_LOCALVERSION=$CUSTOM_LOCALVERSION" >> "$GITHUB_ENV"
10281047 echo "::endgroup::"
10291048
1049+ - name : Run sed and perl Commands
1050+ shell : bash
1051+ if : ${{ env.OP_KERNEL_VERSION == '6.12' }}
1052+ run : |
1053+ echo "Changing to configuration directory: $CONFIG..."
1054+ cd "$CONFIG/kernel_platform"
1055+
1056+ echo "Running sed commands..."
1057+
1058+ sed -i 's/CONFIG_LTO=n/CONFIG_LTO=y/' "./common/arch/arm64/configs/gki_defconfig"
1059+ sed -i 's/CONFIG_LTO_CLANG_FULL=y/CONFIG_LTO_CLANG_NONE=y/' "./common/arch/arm64/configs/gki_defconfig"
1060+ sed -i 's/CONFIG_LTO_CLANG_THIN=y/CONFIG_LTO_CLANG_NONE=y/' "./common/arch/arm64/configs/gki_defconfig"
1061+ echo "CONFIG_ANDROID_BINDER_IPC_RUST=m" >> ./common/arch/arm64/configs/gki_defconfig
1062+ echo "CONFIG_LOCALVERSION=\"-OP-Wild\"" >> ./common/arch/arm64/configs/gki_defconfig
1063+
1064+ sed -i '/_ARM64_GKI_MODULES_LIST = \[/,/\]/ {
1065+ /\]/i\
1066+ "net/ipv4/tcp_bic.ko",\
1067+ "net/ipv4/tcp_htcp.ko",\
1068+ "net/ipv4/tcp_westwood.ko",
1069+ }' ./common/modules.bzl
1070+
1071+ sed -i "s/$(printf '\044'){{kernelrelease}}/\"$(printf '\044'){{kernelrelease}}\"/g" ./build/kernel/kleaf/impl/kernel_modules_install.bzl
1072+ sed -i -e '/_GKI_AARCH64_MAKE_GOALS/,/]/ s/"modules",\?//g' -e '/_GKI_AARCH64_MAKE_GOALS/,/]/ {/^[[:space:]]*$/d}' -e 's/module_implicit_outs = get_gki_modules_list("arm64") + get_kunit_modules_list("arm64")/module_implicit_outs = []/' common/BUILD.bazel
1073+ sed -i -e 's/":tests_zip_arm64",//' -e '/extra_dist/,/]/ {/^[[:space:]]*$/d}' -e 's/kmi_enforced = True,/kmi_enforced = False,/' -e 's/kmi_symbol_list_strict_mode = True,/kmi_symbol_list_strict_mode = False,/' -e 's/trim_nonlisted_kmi = True,/trim_nonlisted_kmi = False,/' common/BUILD.bazel
1074+
1075+ # Run sed commands for modifications
1076+ sed -i 's/check_defconfig//' ./common/build.config.gki
1077+
1078+ if [[ "$OP_KERNEL_VERSION" == "6.12" ]]; then
1079+ sed -i '/check_defconfig = select({/,/}/c\ check_defconfig = "disabled"' ./build/kernel/kleaf/common_kernels.bzl
1080+ fi
1081+
1082+ # sed -i 's/echo "${KERNELVERSION}${file_localversion}${config_localversion}${LOCALVERSION}${scm_version}"/echo "${KERNEL_FULL_VER}${config_localversion}"/' ./common/scripts/setlocalversion
1083+ # chmod +x ./common/scripts/setlocalversion
1084+ sed -i "/stable_scmversion_cmd/s/-maybe-dirty//g" ./build/kernel/kleaf/impl/stamp.bzl || echo "No stamp.bzl!"
1085+ sed -i 's/-dirty//' ./build/kernel/kleaf/workspace_status_stamp.py || echo "No workspace_status_stamp.py!"
1086+
1087+ # Run perl command to modify UTS_VERSION
1088+ DATESTR=$(date -u)
1089+ perl -pi -e 's{UTS_VERSION="\$\(echo \$UTS_VERSION \$CONFIG_FLAGS \$TIMESTAMP \| cut -b -\$UTS_LEN\)"}{UTS_VERSION="#1 SMP PREEMPT $DATESTR"}' ./common/scripts/mkcompile_h
1090+
1091+ - name : Build the Kernel
1092+ shell : bash
1093+ if : ${{ env.OP_KERNEL_VERSION == '6.12' }}
1094+ run : |
1095+ echo "Changing to configuration directory: $CONFIG..."
1096+ cd "$CONFIG"
1097+
1098+ echo "Building the kernel..."
1099+ # Clear Cache
1100+ sudo sh -c 'sync; echo 3 > /proc/sys/vm/drop_caches'
1101+
1102+ rm ./kernel_platform/common/android/abi_gki_protected_exports_* || echo "No protected exports!"
1103+
1104+ (stdbuf -oL bash -c '
1105+ while true; do
1106+ echo "=== $(date) ==="
1107+ free -h
1108+ echo "======"
1109+ df -h
1110+ echo "======"
1111+ top -b -n 1 | head -n 15
1112+ echo ""
1113+ sleep 60
1114+ done
1115+ ') &
1116+ MONITOR_PID=$!
1117+ trap "kill $MONITOR_PID" EXIT
1118+
1119+ KERNEL_PATH="$GITHUB_WORKSPACE/$CONFIG/kernel_platform"
1120+ BASE_PATH="/usr/lib/ccache:${CLANG_BIN_PATH}:${KERNEL_PATH}/prebuilts/kernel-build-tools/linux-x86/bin/:${KERNEL_PATH}/prebuilts/kernel-build-tools/linux_musl-x86/bin/"
1121+ export PATH="${BASE_PATH}:${PATH}"
1122+
1123+ BUILD_START=$(date +%s)
1124+ cd kernel_platform
1125+ ./tools/bazel build --config=fast --config=stamp --lto=none //common:kernel_aarch64_dist --disk_cache="$CCACHE_DIR" --sandbox_writable_path="$CCACHE_DIR" --verbose_failures --sandbox_debug || exit 1
1126+
1127+ BUILD_END=$(date +%s)
1128+ BUILD_TIME=$((BUILD_END - BUILD_START))
1129+
1130+ echo "BUILD_START=$BUILD_START" >> "$GITHUB_ENV"
1131+ echo "BUILD_END=$BUILD_END" >> "$GITHUB_ENV"
1132+ echo "BUILD_TIME=$BUILD_TIME" >> "$GITHUB_ENV"
1133+
10301134 - name : Build Kernel
10311135 shell : bash
1136+ if : ${{ env.OP_KERNEL_VERSION != '6.12' }}
10321137 env :
10331138 PYTHONWARNINGS : " ignore:invalid escape sequence"
10341139 run : |
@@ -1059,15 +1164,6 @@ runs:
10591164 echo "👤 Build user: $KBUILD_BUILD_USER"
10601165 echo "🖥️ Build host: $KBUILD_BUILD_HOST"
10611166
1062- export PATH="/usr/lib/ccache:${CLANG_BIN_PATH}:${PATH}"
1063-
1064- if [ "${{ inputs.clean }}" = "true" ]; then
1065- echo "🧹 Clean build mode - ccache disabled"
1066- export CCACHE_DISABLE=1
1067- else
1068- echo "🚀 ccache-accelerated build"
1069- fi
1070-
10711167 WORKSPACE="${GITHUB_WORKSPACE}"
10721168 MAP="-fdebug-prefix-map=${WORKSPACE}=."
10731169 MPMAP="-fmacro-prefix-map=${WORKSPACE}=."
@@ -1084,11 +1180,26 @@ runs:
10841180 export LLVM=1 LLVM_IAS=1
10851181 export ARCH=arm64 SUBARCH=arm64
10861182 export CROSS_COMPILE=aarch64-linux-gnu-
1087- export RUSTC="$KERNEL_PATH/prebuilts/rust/linux-x86/1.73.0b/bin/rustc"
10881183 export PAHOLE="$KERNEL_PATH/prebuilts/kernel-build-tools/linux-x86/bin/pahole"
10891184 export LD=ld.lld HOSTLD=ld.lld AR=llvm-ar NM=llvm-nm
10901185 export OBJCOPY=llvm-objcopy OBJDUMP=llvm-objdump STRIP=llvm-strip
10911186
1187+ BASE_PATH="/usr/lib/ccache:${CLANG_BIN_PATH}:${KERNEL_PATH}/prebuilts/kernel-build-tools/linux-x86/bin/"
1188+
1189+ if [ -n "${RUSTC_BIN_PATH:-}" ]; then
1190+ export PATH="${BASE_PATH}:${RUSTC_BIN_PATH}:${PATH}"
1191+ export RUSTC="$RUSTC_BIN_PATH/rustc"
1192+ else
1193+ export PATH="${BASE_PATH}:${PATH}"
1194+ fi
1195+
1196+ if [ "${{ inputs.clean }}" = "true" ]; then
1197+ echo "🧹 Clean build mode - ccache disabled"
1198+ export CCACHE_DISABLE=1
1199+ else
1200+ echo "🚀 ccache-accelerated build"
1201+ fi
1202+
10921203 OUT=out
10931204 mkdir -p "$OUT"
10941205
@@ -1271,6 +1382,12 @@ runs:
12711382 OUT="$COMMON/out"
12721383 IMG="$OUT/arch/arm64/boot/Image"
12731384
1385+ if [ -f "$KERNEL_PATH/out/$OP_ANDROID_VERSION-$OP_KERNEL_VERSION/dist/Image" ]; then
1386+ IMG="$KERNEL_PATH/out/$OP_ANDROID_VERSION-$OP_KERNEL_VERSION/dist/Image"
1387+ elif [ -f "$KERNEL_PATH/bazel-bin/common/kernel_aarch64/Image" ]; then
1388+ IMG="$KERNEL_PATH/bazel-bin/common/kernel_aarch64/Image"
1389+ fi
1390+
12741391 if [ -f "$COMMON/build.log" ]; then
12751392 WARNINGS_COUNT="$(grep -ciE '\bwarning:' "$COMMON/build.log" || true)"
12761393 [ -n "$WARNINGS_COUNT" ] || WARNINGS_COUNT="0"
@@ -1320,9 +1437,16 @@ runs:
13201437 set -euo pipefail
13211438 echo "::group::Create kernel ZIP package"
13221439
1440+ KERNEL_PATH="$GITHUB_WORKSPACE/$CONFIG/kernel_platform"
13231441 CONFIG_DIR="$GITHUB_WORKSPACE/$CONFIG"
13241442 IMAGE_PATH="$CONFIG_DIR/kernel_platform/common/out/arch/arm64/boot/Image"
13251443
1444+ if [ -f "$KERNEL_PATH/out/$OP_ANDROID_VERSION-$OP_KERNEL_VERSION/dist/Image" ]; then
1445+ IMAGE_PATH="$KERNEL_PATH/out/$OP_ANDROID_VERSION-$OP_KERNEL_VERSION/dist/Image"
1446+ elif [ -f "$KERNEL_PATH/bazel-bin/common/kernel_aarch64/Image" ]; then
1447+ IMAGE_PATH="$KERNEL_PATH/bazel-bin/common/kernel_aarch64/Image"
1448+ fi
1449+
13261450 if [ ! -f "$IMAGE_PATH" ]; then
13271451 echo "::error::Built Image not found at: $IMAGE_PATH"
13281452 exit 1
@@ -1386,10 +1510,10 @@ runs:
13861510 echo "Build Host: ${{ env.BUILD_HOST }}"
13871511 if [ "${{ inputs.ksu_type }}" = "KSUN" ]; then
13881512 echo "KSUN Version: ${KSUVER:-unknown}"
1389- echo "KSUN commit SHA: $KSU_SHA"
1513+ echo "KSUN commit SHA: ${ KSU_SHA:-unknown} "
13901514 else
13911515 echo "KSU Version: ${KSUVER:-unknown}"
1392- echo "KSU commit SHA: $KSU_SHA"
1516+ echo "KSU commit SHA: ${ KSU_SHA:-unknown} "
13931517 fi
13941518 if [ "${{ env.OP_SUSFS }}" = true ]; then
13951519 echo "SUSFS Version: ${SUSVER:-unknown}"
0 commit comments