This commit is contained in:
2025-11-27 14:08:33 -05:00
parent 29d4643e59
commit ce913a85e6
4 changed files with 350 additions and 162 deletions

6
README.md Normal file
View File

@@ -0,0 +1,6 @@
# Sources
-
- [AnyKernel3](https://github.com/osm0sis/AnyKernel3)
- [magiskboot](

View File

@@ -4,7 +4,7 @@
### AnyKernel setup ### AnyKernel setup
# global properties # global properties
properties() { ' properties() { '
kernel.string=LiteKernel for OnePlus SM8750 kernel.string=Modified LineageOS Kernel for OnePlus 13
do.devicecheck=0 do.devicecheck=0
do.modules=0 do.modules=0
do.systemless=0 do.systemless=0
@@ -41,64 +41,3 @@ else
flash_boot flash_boot
fi fi
## end boot install ## end boot install
## init_boot files attributes
#init_boot_attributes() {
#set_perm_recursive 0 0 755 644 $RAMDISK/*;
#set_perm_recursive 0 0 750 750 $RAMDISK/init* $RAMDISK/sbin;
#} # end attributes
# init_boot shell variables
#BLOCK=init_boot;
#IS_SLOT_DEVICE=1;
#RAMDISK_COMPRESSION=auto;
#PATCH_VBMETA_FLAG=auto;
# reset for init_boot patching
#reset_ak;
# init_boot install
#dump_boot; # unpack ramdisk since it is the new first stage init ramdisk where overlay.d must go
#write_boot;
## end init_boot install
## vendor_kernel_boot shell variables
#BLOCK=vendor_kernel_boot;
#IS_SLOT_DEVICE=1;
#RAMDISK_COMPRESSION=auto;
#PATCH_VBMETA_FLAG=auto;
# reset for vendor_kernel_boot patching
#reset_ak;
# vendor_kernel_boot install
#split_boot; # skip unpack/repack ramdisk, e.g. for dtb on devices with hdr v4 and vendor_kernel_boot
#flash_boot;
## end vendor_kernel_boot install
## vendor_boot files attributes
#vendor_boot_attributes() {
#set_perm_recursive 0 0 755 644 $RAMDISK/*;
#set_perm_recursive 0 0 750 750 $RAMDISK/init* $RAMDISK/sbin;
#} # end attributes
# vendor_boot shell variables
#BLOCK=vendor_boot;
#IS_SLOT_DEVICE=1;
#RAMDISK_COMPRESSION=auto;
#PATCH_VBMETA_FLAG=auto;
# reset for vendor_boot patching
#reset_ak;
# vendor_boot install
#dump_boot; # use split_boot to skip ramdisk unpack, e.g. for dtb on devices with hdr v4 but no vendor_kernel_boot
#write_boot; # use flash_boot to skip ramdisk repack, e.g. for dtb on devices with hdr v4 but no vendor_kernel_boot
## end vendor_boot install

390
build.sh
View File

@@ -1,37 +1,58 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# Set $BASEDIR and use it to ensure we're in the correct directory. usage() {
BASEDIR=$(realpath "$(dirname -- "$(realpath -- "${BASH_SOURCE[0]}")")/..") cat << EOF
Usage: $(basename "$0") [COMMAND]
# Ensure that .repo is present in $BASEDIR. Commands:
# This code probably won't ever fire unless you're doing something weird. build Build the kernel (default)
if [ ! -d "$BASEDIR/.repo" ]; then menuconfig Run menuconfig and save customizations
repack Repack stock boot image with custom kernel
download Download latest LineageOS boot image
help Show this help message
Examples:
$(basename "$0") # Build the kernel
$(basename "$0") build # Build the kernel
$(basename "$0") menuconfig # Configure kernel interactively
$(basename "$0") repack # Repack stock_boot.img with new kernel (auto-downloads if missing)
$(basename "$0") download # Download latest LineageOS boot.img for dodge
EOF
exit 0
}
set_basedir() {
BASEDIR=$(realpath "$(dirname -- "$(realpath -- "${BASH_SOURCE[0]}")")/..")
}
ensure_repo_initialized() {
if [ ! -d "$BASEDIR/.repo" ]; then
echo ".dir missing, initializing..." echo ".dir missing, initializing..."
pushd "$BASEDIR" > /dev/null pushd "$BASEDIR" > /dev/null
repo init -u "$BASEDIR/repo" --git-lfs repo init -u "$BASEDIR/meta" --git-lfs
repo sync repo sync
popd > /dev/null popd > /dev/null
fi fi
}
# Download latest magisk and extract it. download_magisk() {
# TODO: Put extracted Magisk in a repo so that it can be handled by repo. if [ ! -d "$BASEDIR/prebuilts/magisk" ]; then
if [ ! -d "$BASEDIR/prebuilts/magisk" ]; then
echo "Magisk binaries missing, downloading..." echo "Magisk binaries missing, downloading..."
mkdir -p "$BASEDIR/prebuilts/magisk" mkdir -p "$BASEDIR/prebuilts/magisk"
pushd "$BASEDIR/prebuilts/magisk" > /dev/null pushd "$BASEDIR/prebuilts/magisk" > /dev/null
wget "https://github.com/topjohnwu/Magisk/releases/download/v29.0/Magisk-v29.0.apk" || curl -OL "https://github.com/topjohnwu/Magisk/releases/download/v29.0/Magisk-v29.0.apk" wget "https://github.com/topjohnwu/Magisk/releases/download/v29.0/Magisk-v29.0.apk" || curl -OL "https://github.com/topjohnwu/Magisk/releases/download/v29.0/Magisk-v29.0.apk"
unzip "Magisk-v29.0.apk" unzip "Magisk-v29.0.apk"
popd > /dev/null popd > /dev/null
fi fi
}
# Set some variables for well-known directories. setup_toolchain_vars() {
GCCDIR="$BASEDIR/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9" GCCDIR="$BASEDIR/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9"
GCCDIR32="$BASEDIR/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9" GCCDIR32="$BASEDIR/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9"
CLANGDIR="$BASEDIR/prebuilts/clang/host/linux-x86/clang-r547379" CLANGDIR="$BASEDIR/prebuilts/clang/host/linux-x86/clang-r547379"
KERNELBUILDTOOLS="$BASEDIR/prebuilts/kernel-build-tools/linux-x86" KERNELBUILDTOOLS="$BASEDIR/prebuilts/kernel-build-tools/linux-x86"
# Define common options used with make MAKEOPTS=(
MAKEOPTS=(
O="$BASEDIR/work" O="$BASEDIR/work"
ARCH=arm64 ARCH=arm64
PATH="$CLANGDIR/bin:$GCCDIR/bin:$KERNELBUILDTOOLS/bin:$PATH" PATH="$CLANGDIR/bin:$GCCDIR/bin:$KERNELBUILDTOOLS/bin:$PATH"
@@ -40,85 +61,302 @@ MAKEOPTS=(
CROSS_COMPILE="$GCCDIR/bin/aarch64-linux-android-" CROSS_COMPILE="$GCCDIR/bin/aarch64-linux-android-"
CROSS_COMPILE_ARM32="$GCCDIR32/bin/arm-linux-androideabi-" CROSS_COMPILE_ARM32="$GCCDIR32/bin/arm-linux-androideabi-"
CLANG_TRIPLE=aarch64-linux-gnu- CLANG_TRIPLE=aarch64-linux-gnu-
) )
}
echo Preparing source... prepare_kernel_source() {
pushd "$BASEDIR/kernel/oneplus/sm8750" > /dev/null echo "Preparing source..."
pushd "$BASEDIR/kernel/oneplus/sm8750" > /dev/null
# Reset everything git reset --hard
git reset --hard git clean -fd
git clean -fd ln -s "${BASEDIR}/external/SukiSU-Ultra" "KernelSU"
ln -s "${BASEDIR}/external/SukiSU-Ultra" "KernelSU" ln -s "${BASEDIR}/external/SukiSU-Ultra/kernel" "drivers/kernelsu"
ln -s "${BASEDIR}/external/SukiSU-Ultra/kernel" "drivers/kernelsu"
# Add SukiSU popd > /dev/null
MOD=false }
grep -q "kernelsu" "drivers/Makefile" || printf "\nobj-\$(CONFIG_KSU) += kernelsu/\n" >> "drivers/Makefile" || echo "[+] Modified Makefile."
grep -q "source \"drivers/kernelsu/Kconfig\"" "drivers/Kconfig" || sed -i "/endmenu/i\source \"drivers/kernelsu/Kconfig\"" "drivers/Kconfig" && echo "[+] Modified Kconfig."
# Add SUSFS add_sukisu() {
cp "${BASEDIR}/external/susfs4ksu/kernel_patches/fs/"* "fs/" pushd "$BASEDIR/kernel/oneplus/sm8750" > /dev/null
cp "${BASEDIR}/external/susfs4ksu/kernel_patches/include/linux/"* "include/linux/"
patch --fuzz=3 -p1 < "${BASEDIR}/external/susfs4ksu/kernel_patches/50_add_susfs_in_gki-android15-6.6.patch"
mkdir -p "$BASEDIR/out" MOD=false
mkdir -p "$BASEDIR/work" grep -q "kernelsu" "drivers/Makefile" || printf "\nobj-\$(CONFIG_KSU) += kernelsu/\n" >> "drivers/Makefile" || echo "[+] Modified Makefile."
# Ensure things are clean? grep -q "source \"drivers/kernelsu/Kconfig\"" "drivers/Kconfig" || sed -i "/endmenu/i\source \"drivers/kernelsu/Kconfig\"" "drivers/Kconfig" && echo "[+] Modified Kconfig."
make ${MAKEOPTS[@]} mrproper
# Start with the GKI base configuration popd > /dev/null
make ${MAKEOPTS[@]} gki_defconfig }
# Merge configurations that are specific to the device
scripts/kconfig/merge_config.sh -m -O "$BASEDIR/work" \ add_susfs() {
pushd "$BASEDIR/kernel/oneplus/sm8750" > /dev/null
cp "${BASEDIR}/external/susfs4ksu/kernel_patches/fs/"* "fs/"
cp "${BASEDIR}/external/susfs4ksu/kernel_patches/include/linux/"* "include/linux/"
patch --fuzz=3 -p1 < "${BASEDIR}/external/susfs4ksu/kernel_patches/50_add_susfs_in_gki-android15-6.6.patch"
popd > /dev/null
}
configure_kernel() {
pushd "$BASEDIR/kernel/oneplus/sm8750" > /dev/null
mkdir -p "$BASEDIR/out"
mkdir -p "$BASEDIR/work"
make ${MAKEOPTS[@]} mrproper
make ${MAKEOPTS[@]} gki_defconfig
scripts/kconfig/merge_config.sh -m -O "$BASEDIR/work" \
"$BASEDIR/work/.config" \ "$BASEDIR/work/.config" \
arch/arm64/configs/vendor/sun_perf.config \ arch/arm64/configs/vendor/sun_perf.config \
arch/arm64/configs/vendor/oplus/sun_perf.config arch/arm64/configs/vendor/oplus/sun_perf.config
if [ -e "${BASEDIR}/.config" ]; then if [ -e "${BASEDIR}/.config" ]; then
echo Adding custom configuration... echo "Adding custom configuration..."
scripts/kconfig/merge_config.sh -m -O "${BASEDIR}/work" \ scripts/kconfig/merge_config.sh -m -O "${BASEDIR}/work" \
"${BASEDIR}/work/.config" \ "${BASEDIR}/work/.config" \
"${BASEDIR}/.config" "${BASEDIR}/.config"
fi fi
# Add in things that are missing from the above config templates echo "CONFIG_DODGE_DTB=y" >> "$BASEDIR/work/.config"
echo "CONFIG_DODGE_DTB=y" >> "$BASEDIR/work/.config" echo "CONFIG_OPLUS_DEVICE_DTBS=y" >> "$BASEDIR/work/.config"
echo "CONFIG_OPLUS_DEVICE_DTBS=y" >> "$BASEDIR/work/.config" echo "CONFIG_COMPAT=y" >> "$BASEDIR/work/.config"
echo "CONFIG_COMPAT=y" >> "$BASEDIR/work/.config" echo "CONFIG_COMPAT_VDSO=y" >> "$BASEDIR/work/.config"
echo "CONFIG_COMPAT_VDSO=y" >> "$BASEDIR/work/.config"
# Re-process the configuration and accept defaults for unknowns. make ${MAKEOPTS[@]} olddefconfig
make ${MAKEOPTS[@]} olddefconfig
# Compile the kernel popd > /dev/null
make ${MAKEOPTS[@]} \ }
build_kernel() {
pushd "$BASEDIR/kernel/oneplus/sm8750" > /dev/null
make ${MAKEOPTS[@]} \
KCFLAGS="-Wno-error=frame-larger-than=" \ KCFLAGS="-Wno-error=frame-larger-than=" \
-j$(nproc) 2>&1 | tee "$BASEDIR/work/build.log" -j$(nproc) 2>&1 | tee "$BASEDIR/work/build.log"
popd > /dev/null
# Prepare AnyKernel3 with our customizations popd > /dev/null
echo "Preparing AnyKernel3 package..." }
rm -rf "${BASEDIR}/work/AnyKernel3"
mkdir -p "${BASEDIR}/work/AnyKernel3"
cp -ra "${BASEDIR}/external/AnyKernel3/"* "${BASEDIR}/work/AnyKernel3/"
cp "${BASEDIR}/repo/anykernel.sh" "${BASEDIR}/work/AnyKernel3/anykernel.sh"
cp "${BASEDIR}/prebuilts/magisk/lib/arm64-v8a/libbusybox.so" "${BASEDIR}/work/AnyKernel3/tools/busybox"
cp "${BASEDIR}/prebuilts/magisk/lib/arm64-v8a/libmagiskboot.so" "${BASEDIR}/work/AnyKernel3/tools/magiskboot"
chmod +x "${BASEDIR}/work/AnyKernel3/tools/"*
# Copy kernel Image prepare_anykernel() {
echo "Copying kernel Image..." echo "Preparing AnyKernel3 package..."
cp "${BASEDIR}/work/arch/arm64/boot/Image" "${BASEDIR}/work/AnyKernel3/" rm -rf "${BASEDIR}/work/AnyKernel3"
mkdir -p "${BASEDIR}/work/AnyKernel3"
cp -ra "${BASEDIR}/external/AnyKernel3/"* "${BASEDIR}/work/AnyKernel3/"
cp "${BASEDIR}/meta/anykernel.sh" "${BASEDIR}/work/AnyKernel3/anykernel.sh"
cp "${BASEDIR}/prebuilts/magisk/lib/arm64-v8a/libbusybox.so" "${BASEDIR}/work/AnyKernel3/tools/busybox"
cp "${BASEDIR}/prebuilts/magisk/lib/arm64-v8a/libmagiskboot.so" "${BASEDIR}/work/AnyKernel3/tools/magiskboot"
chmod +x "${BASEDIR}/work/AnyKernel3/tools/"*
# Create flashable zip echo "Copying kernel Image..."
echo "Creating flashable zip..." cp "${BASEDIR}/work/arch/arm64/boot/Image" "${BASEDIR}/work/AnyKernel3/"
KERNEL_VERSION=$(cat "${BASEDIR}/kernel/oneplus/sm8750/include/config/kernel.release" 2>/dev/null || echo "unknown") }
OUTPUT_ZIP="${BASEDIR}/out/LiteKernel-${KERNEL_VERSION}-$(date +%Y%m%d-%H%M%S).zip"
pushd "${BASEDIR}/work/AnyKernel3" > /dev/null create_flashable_zip() {
zip -r9 "${OUTPUT_ZIP}" * -x .git README.md .gitignore ./*.zip echo "Creating flashable zip..."
popd > /dev/null KERNEL_VERSION=$(cat "${BASEDIR}/kernel/oneplus/sm8750/include/config/kernel.release" 2>/dev/null || echo "unknown")
OUTPUT_ZIP="${BASEDIR}/out/LiteKernel-${KERNEL_VERSION}-$(date +%Y%m%d-%H%M%S).zip"
echo "Build complete!" pushd "${BASEDIR}/work/AnyKernel3" > /dev/null
echo "Flashable zip: ${OUTPUT_ZIP}" zip -r9 "${OUTPUT_ZIP}" * -x .git README.md .gitignore ./*.zip
popd > /dev/null
echo "Build complete!"
echo "Flashable zip: ${OUTPUT_ZIP}"
}
run_menuconfig() {
set_basedir
setup_toolchain_vars
mkdir -p "$BASEDIR/out"
mkdir -p "$BASEDIR/work"
pushd "$BASEDIR/kernel/oneplus/sm8750" > /dev/null
echo "Generating base configuration..."
make ${MAKEOPTS[@]} mrproper
make ${MAKEOPTS[@]} gki_defconfig
scripts/kconfig/merge_config.sh -m -O "$BASEDIR/work" \
"$BASEDIR/work/.config" \
arch/arm64/configs/vendor/sun_perf.config \
arch/arm64/configs/vendor/oplus/sun_perf.config
make ${MAKEOPTS[@]} olddefconfig
cp "$BASEDIR/work/.config" "$BASEDIR/work/.config.base"
if [ -e "${BASEDIR}/.config" ]; then
echo "Merging existing custom configuration..."
scripts/kconfig/merge_config.sh -m -O "${BASEDIR}/work" \
"${BASEDIR}/work/.config" \
"${BASEDIR}/.config"
make ${MAKEOPTS[@]} olddefconfig
fi
make ${MAKEOPTS[@]} menuconfig
extract_custom_config
popd > /dev/null
}
extract_custom_config() {
echo "Extracting custom configuration differences..."
if [ ! -f "$BASEDIR/work/.config.base" ]; then
echo "Warning: No base config found for comparison"
return
fi
> "$BASEDIR/.config"
declare -A base_configs
declare -A current_configs
while IFS= read -r line; do
if [[ "$line" =~ ^CONFIG_([^=]+)= ]]; then
config_name="${BASH_REMATCH[1]}"
base_configs["$config_name"]="$line"
elif [[ "$line" =~ ^#\ (CONFIG_[^\ ]+)\ is\ not\ set ]]; then
config_name="${BASH_REMATCH[1]#CONFIG_}"
base_configs["$config_name"]="$line"
fi
done < "$BASEDIR/work/.config.base"
while IFS= read -r line; do
if [[ "$line" =~ ^CONFIG_([^=]+)= ]]; then
config_name="${BASH_REMATCH[1]}"
current_configs["$config_name"]="$line"
elif [[ "$line" =~ ^#\ (CONFIG_[^\ ]+)\ is\ not\ set ]]; then
config_name="${BASH_REMATCH[1]#CONFIG_}"
current_configs["$config_name"]="$line"
fi
done < "$BASEDIR/work/.config"
for config_name in "${!current_configs[@]}"; do
if [[ "${base_configs[$config_name]}" != "${current_configs[$config_name]}" ]]; then
echo "${current_configs[$config_name]}" >> "$BASEDIR/.config"
fi
done
if [ -s "$BASEDIR/.config" ]; then
sort -o "$BASEDIR/.config" "$BASEDIR/.config"
echo ""
echo "Custom configuration saved to: $BASEDIR/.config"
echo "Changes from base configuration:"
cat "$BASEDIR/.config"
echo ""
else
echo "No configuration changes from base detected."
rm -f "$BASEDIR/.config"
fi
}
download_lineageos_boot() {
set_basedir
echo "Fetching latest LineageOS build information for dodge..."
if ! command -v python3 &> /dev/null; then
echo "Error: python3 is required but not found"
return 1
fi
BOOT_URL=$(curl -s "https://download.lineageos.org/api/v2/devices/dodge/builds" | python3 -c 'import sys,json;d=json.load(sys.stdin);boot=[f for f in d[0]["files"] if f["filename"]=="boot.img"][0];print(boot["url"])' 2>/dev/null)
if [ -z "$BOOT_URL" ]; then
echo "Error: Failed to fetch boot.img URL from LineageOS API"
return 1
fi
echo "Found boot.img URL: $BOOT_URL"
echo "Downloading boot.img..."
wget -O "${BASEDIR}/stock_boot.img" "$BOOT_URL" || curl -L -o "${BASEDIR}/stock_boot.img" "$BOOT_URL"
if [ ! -f "${BASEDIR}/stock_boot.img" ]; then
echo "Error: Failed to download boot.img"
return 1
fi
echo "Boot image saved to: ${BASEDIR}/stock_boot.img"
}
repack_boot_image() {
set_basedir
download_magisk
if [ ! -f "${BASEDIR}/stock_boot.img" ]; then
echo "stock_boot.img not found, attempting to download from LineageOS..."
download_lineageos_boot || return 1
fi
if [ ! -f "${BASEDIR}/work/arch/arm64/boot/Image" ]; then
echo "Error: Kernel Image not found at ${BASEDIR}/work/arch/arm64/boot/Image"
echo "Please build the kernel first using: $(basename "$0") build"
return 1
fi
MAGISKBOOT="${BASEDIR}/prebuilts/magisk/lib/x86_64/libmagiskboot.so"
chmod +x "${MAGISKBOOT}"
echo "Repacking boot image..."
rm -rf "${BASEDIR}/out/repack"
mkdir -p "${BASEDIR}/out/repack"
pushd "${BASEDIR}/out/repack" > /dev/null
${MAGISKBOOT} unpack "${BASEDIR}/stock_boot.img"
cp "${BASEDIR}/work/arch/arm64/boot/Image" kernel
${MAGISKBOOT} repack "${BASEDIR}/stock_boot.img" "${BASEDIR}/out/new_boot.img"
popd > /dev/null
echo ""
echo "Boot image repacked successfully!"
echo "Output: ${BASEDIR}/out/new_boot.img"
}
build() {
set_basedir
ensure_repo_initialized
download_magisk
setup_toolchain_vars
prepare_kernel_source
add_sukisu
add_susfs
configure_kernel
build_kernel
prepare_anykernel
create_flashable_zip
}
main() {
local command="${1:-build}"
case "$command" in
build)
build
;;
menuconfig)
run_menuconfig
;;
repack)
repack_boot_image
;;
download)
download_lineageos_boot
;;
help|--help|-h)
usage
;;
*)
echo "Error: Unknown command '$command'"
echo ""
usage
;;
esac
}
main "$@"

View File

@@ -3,9 +3,13 @@
<remote name="github" fetch="https://github.com" review="review.lineageos.org" /> <remote name="github" fetch="https://github.com" review="review.lineageos.org" />
<remote name="gitlab" fetch="https://gitlab.com" /> <remote name="gitlab" fetch="https://gitlab.com" />
<remote name="i5" fetch="https://git.i5.wtf" />
<remote name="aosp" fetch="https://android.googlesource.com" review="android-review.googlesource.com" revision="refs/tags/android-16.0.0_r1" /> <remote name="aosp" fetch="https://android.googlesource.com" review="android-review.googlesource.com" revision="refs/tags/android-16.0.0_r1" />
<default revision="refs/heads/lineage-23.0" remote="github" sync-c="true" sync-j="4" /> <default revision="refs/heads/lineage-23.0" remote="github" sync-c="true" sync-j="4" />
<project path="meta" name="KiTTYsh/los-dodge-kernel-sukisu-susfs" remote="i5" revision="master" >
<linkfile src="build.sh" name="build.sh" />
</project>
<project path="prebuilts/clang/host/linux-x86/clang-r547379" name="KiTTYsh/clang-r547379" clone-depth="1" revision="main" /> <project path="prebuilts/clang/host/linux-x86/clang-r547379" name="KiTTYsh/clang-r547379" clone-depth="1" revision="main" />
<project path="prebuilts/kernel-build-tools" name="kernel/prebuilts/build-tools" clone-depth="1" remote="aosp" revision="main-kernel-build-2024" /> <project path="prebuilts/kernel-build-tools" name="kernel/prebuilts/build-tools" clone-depth="1" remote="aosp" revision="main-kernel-build-2024" />
<project path="prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9" name="LineageOS/android_prebuilts_gcc_linux-x86_aarch64_aarch64-linux-android-4.9" clone-depth="1" revision="lineage-19.1" /> <project path="prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9" name="LineageOS/android_prebuilts_gcc_linux-x86_aarch64_aarch64-linux-android-4.9" clone-depth="1" revision="lineage-19.1" />
@@ -19,6 +23,7 @@
<linkfile src="bindings" dest="kernel/oneplus/sm8750/Documentation/devicetree/bindings" /> <linkfile src="bindings" dest="kernel/oneplus/sm8750/Documentation/devicetree/bindings" />
</project> </project>
<project path="external/AnyKernel3" name="osm0sis/AnyKernel3" clone-depth="1" revision="master" /> <project path="external/AnyKernel3" name="osm0sis/AnyKernel3" clone-depth="1" revision="master" />
<project path="external/magisk" name="KiTTYsh/magisk-unpacked" clone-depth="1" revision="main" />
<project path="external/SukiSU-Ultra" name="SukiSU-Ultra/SukiSU-Ultra" clone-depth="1" revision="susfs-main" > <project path="external/SukiSU-Ultra" name="SukiSU-Ultra/SukiSU-Ultra" clone-depth="1" revision="susfs-main" >
<linkfile src="." dest="kernel/oneplus/sm8750/KernelSU" /> <linkfile src="." dest="kernel/oneplus/sm8750/KernelSU" />
<linkfile src="kernel" dest="kernel/oneplus/sm8750/drivers/kernelsu" /> <linkfile src="kernel" dest="kernel/oneplus/sm8750/drivers/kernelsu" />