download.sh 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. #!/usr/bin/env bash
  2. set -euo pipefail
  3. # Quick script to download ALL kernel sources used in test builds and name them properly.
  4. # Folder name format: "<kernel_version>.<sublevel>-<android_version>-lts"
  5. # Usage: ./download.sh [target_root]
  6. # Example: ./download.sh ./kernel_sources_lts
  7. TARGET_ROOT=${1:-"./kernel_sources_lts"}
  8. # Ensure target root exists
  9. mkdir -p "$TARGET_ROOT"
  10. # Require the 'repo' tool to be installed and available in PATH
  11. if ! command -v repo >/dev/null 2>&1; then
  12. echo "Error: 'repo' tool is required but not found in PATH." >&2
  13. echo "Install instructions: https://source.android.com/docs/setup/build/downloading\n" >&2
  14. exit 1
  15. fi
  16. REPO=$(command -v repo)
  17. # Determine CPU count for parallel sync
  18. CPU_COUNT() {
  19. if command -v nproc >/dev/null 2>&1; then
  20. nproc
  21. elif command -v sysctl >/dev/null 2>&1; then
  22. sysctl -n hw.ncpu
  23. else
  24. echo 4
  25. fi
  26. }
  27. # Branch format used by AOSP kernel manifest
  28. # common-${android_version}-${kernel_version}-${os_patch_level}
  29. download_one() {
  30. local android_version="$1" # e.g. android14
  31. local kernel_version="$2" # e.g. 6.1
  32. local os_patch_level="$3" # e.g. lts
  33. local formatted_branch="${android_version}-${kernel_version}-${os_patch_level}"
  34. local work_dir="${TARGET_ROOT}/${kernel_version}.X-${android_version}-${os_patch_level}"
  35. echo "\n=== Downloading sources for ${kernel_version}.X-${android_version}-${os_patch_level} ==="
  36. mkdir -p "$work_dir"
  37. pushd "$work_dir" >/dev/null
  38. # Initialize manifest
  39. "$REPO" init --depth=1 \
  40. --u https://android.googlesource.com/kernel/manifest \
  41. -b "common-${formatted_branch}" \
  42. --repo-rev=v2.16
  43. # Handle deprecated branches (matches build.yml logic)
  44. local remote_branch
  45. remote_branch=$(git ls-remote https://android.googlesource.com/kernel/common "${formatted_branch}" || true)
  46. local default_manifest_path=".repo/manifests/default.xml"
  47. if echo "$remote_branch" | grep -q deprecated; then
  48. sed -i "s/\"${formatted_branch}\"/\"deprecated\/${formatted_branch}\"/g" "$default_manifest_path"
  49. fi
  50. # Sync
  51. "$REPO" --trace sync -c -j"$(CPU_COUNT)" --no-tags --fail-fast
  52. # Extract sublevel from common/Makefile
  53. local sublevel="X"
  54. if [ -f "common/Makefile" ]; then
  55. sublevel=$(grep '^SUBLEVEL = ' common/Makefile | awk '{print $3}') || true
  56. if [ -z "$sublevel" ]; then
  57. sublevel="X"
  58. fi
  59. fi
  60. popd >/dev/null
  61. # Final name with actual sublevel
  62. local final_dir="${TARGET_ROOT}/${kernel_version}.${sublevel}-${android_version}-${os_patch_level}"
  63. if [ "$final_dir" != "$work_dir" ]; then
  64. mv "$work_dir" "$final_dir"
  65. fi
  66. echo "Saved to: $final_dir"
  67. }
  68. # All kernel combinations from test build workflow
  69. # Android 12 - 5.10
  70. download_one "android12" "5.10" "2021-08" # oldest (sub_level: 43)
  71. download_one "android12" "5.10" "lts" # LTS
  72. # Android 13 - 5.10
  73. download_one "android13" "5.10" "2022-04" # oldest (sub_level: 107)
  74. download_one "android13" "5.10" "lts" # LTS
  75. # Android 13 - 5.15
  76. download_one "android13" "5.15" "2022-06" # oldest (sub_level: 41)
  77. download_one "android13" "5.15" "lts" # LTS
  78. # Android 14 - 5.15
  79. download_one "android14" "5.15" "2023-06" # oldest (sub_level: 110)
  80. download_one "android14" "5.15" "lts" # LTS
  81. # Android 14 - 6.1
  82. download_one "android14" "6.1" "2023-06" # oldest (sub_level: 25)
  83. download_one "android14" "6.1" "lts" # LTS
  84. download_one "android14" "6.1" "2025-05" # specific (sub_level: 134)
  85. # Android 15 - 6.6
  86. download_one "android15" "6.6" "2024-07" # oldest (sub_level: 30)
  87. download_one "android15" "6.6" "lts" # LTS
  88. echo "\nAll kernel sources downloaded to: $TARGET_ROOT"