aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Bestas <mkbestas@lineageos.org>2025-10-21 22:18:02 +0300
committerLuK1337 <priv.luk@gmail.com>2025-11-03 00:19:00 +0100
commit751459e70cce9ece4d6b92005629cd6ae349ca7e (patch)
tree6c674f52b7299de71174260fe1fc1e94e59a8912
parenta13626ad899607f6aa3cc3a8780db719af996223 (diff)
envsetup: Add build_kernel function for Pixel OOT kernel build
Change-Id: Ib2840cb2bf236a6d25906b60256ef521dd6a2c8a
-rw-r--r--build/envsetup.sh83
1 files changed, 83 insertions, 0 deletions
diff --git a/build/envsetup.sh b/build/envsetup.sh
index 2a87c71e6..e15841adf 100644
--- a/build/envsetup.sh
+++ b/build/envsetup.sh
@@ -929,3 +929,86 @@ function fixup_common_out_dir() {
mkdir -p ${common_out_dir}
fi
}
+
+function build_kernel() {
+ local lineage_version="lineage-$(_get_build_var_cached PRODUCT_VERSION_MAJOR).$(_get_build_var_cached PRODUCT_VERSION_MINOR)"
+
+ local target_kernel_device="$(_get_build_var_cached TARGET_KERNEL_DEVICE)"
+ local target_kernel_dir="${ANDROID_BUILD_TOP}/$(_get_build_var_cached TARGET_KERNEL_DIR)"
+ local target_kernel_source="$(_get_build_var_cached TARGET_KERNEL_PLATFORM_SOURCE)"
+
+ local KERNEL_BUILD_TOP="${ANDROID_BUILD_TOP}/out-kernel/${target_kernel_source}"
+
+ # Make sure we have the kernel source folder structure in place
+ if [ ! -d "${KERNEL_BUILD_TOP}/.repo" ]; then
+ echo "Kernel source ${KERNEL_BUILD_TOP} is missing, preparing folder structure"
+
+ # Copy .repo/repo from Android tree to allow nested `repo init`
+ mkdir -p "${KERNEL_BUILD_TOP}/.repo"
+ cp -R "${ANDROID_BUILD_TOP}/.repo/repo" "${KERNEL_BUILD_TOP}/.repo/repo"
+
+ # Allow custom .repo/project-objects dir
+ if [ -n "${KERNEL_REPO_PROJECT_OBJECTS_DIR}" ]; then
+ if [ ! -d "${KERNEL_REPO_PROJECT_OBJECTS_DIR}" ]; then
+ mkdir "${KERNEL_REPO_PROJECT_OBJECTS_DIR}"
+ fi
+ ln -sf "${KERNEL_REPO_PROJECT_OBJECTS_DIR}" "${KERNEL_BUILD_TOP}/.repo/project-objects"
+ fi
+
+ # Allow custom .repo/projects dir
+ if [ -n "${KERNEL_REPO_PROJECTS_DIR}" ]; then
+ if [ ! -d "${KERNEL_REPO_PROJECTS_DIR}" ]; then
+ mkdir "${KERNEL_REPO_PROJECTS_DIR}"
+ fi
+ ln -sf "${KERNEL_REPO_PROJECTS_DIR}" "${KERNEL_BUILD_TOP}/.repo/projects"
+ fi
+
+ # Mark as out dir to prevent build system from scanning it
+ touch "${KERNEL_BUILD_TOP}/.out-dir"
+ fi
+
+ # Init, sync, remove previous build output & build kernel
+ pushd "${KERNEL_BUILD_TOP}" > /dev/null
+ if [[ "${SKIP_KERNEL_SYNC}" != "true" && "${SKIP_KERNEL_SYNC}" != "1" ]]; then
+ echo "Syncing ${KERNEL_BUILD_TOP}"
+ local target_kernel_manifest=$(echo android_kernel_${target_kernel_source}_manifest | tr / _)
+ local repo_init_args=("-b" "${lineage_version}")
+ if [ -n "${LINEAGE_MIRROR}" ]; then
+ repo_init_args+=("--reference" "${LINEAGE_MIRROR}")
+ fi
+ if [ -n "${REPO_VERSION}" ]; then
+ repo_init_args+=("--repo-rev" "${REPO_VERSION}")
+ fi
+
+ yes | repo init -u https://github.com/LineageOS/${target_kernel_manifest}.git ${repo_init_args[@]} || [ $? -eq 141 ]
+ if [ $? -ne 0 ]; then
+ echo "Kernel source repo init failed"
+ popd > /dev/null
+ return 1
+ fi
+ if ! repo sync --detach --force-sync; then
+ echo "Kernel source repo sync failed"
+ popd > /dev/null
+ return 1
+ fi
+ fi
+ if [ -d "${KERNEL_BUILD_TOP}/out/${target_kernel_device}/dist" ]; then
+ rm -rf "${KERNEL_BUILD_TOP}/out/${target_kernel_device}/dist"
+ fi
+ if ! ./build_"${target_kernel_device}".sh; then
+ popd > /dev/null
+ return 1
+ fi
+ popd > /dev/null
+
+ # Remove previous kernel prebuilts
+ if [ -d "${target_kernel_dir}" ]; then
+ find "${target_kernel_dir}" -maxdepth 1 ! \( -name .gitignore \) -type f -delete
+ fi
+
+ # Copy the new kernel prebuilts
+ mkdir -p "${target_kernel_dir}"
+ cp -a "${KERNEL_BUILD_TOP}/out/${target_kernel_device}/dist/"* "${target_kernel_dir}/"
+ chmod -x "${target_kernel_dir}/"*
+ echo "Kernel build output copied to ${target_kernel_dir}/"
+}