diff options
| author | Michael Bestas <mkbestas@lineageos.org> | 2025-10-21 22:18:02 +0300 |
|---|---|---|
| committer | LuK1337 <priv.luk@gmail.com> | 2025-11-03 00:19:00 +0100 |
| commit | 751459e70cce9ece4d6b92005629cd6ae349ca7e (patch) | |
| tree | 6c674f52b7299de71174260fe1fc1e94e59a8912 | |
| parent | a13626ad899607f6aa3cc3a8780db719af996223 (diff) | |
envsetup: Add build_kernel function for Pixel OOT kernel build
Change-Id: Ib2840cb2bf236a6d25906b60256ef521dd6a2c8a
| -rw-r--r-- | build/envsetup.sh | 83 |
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}/" +} |
