unix-toolchain-download.sh 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. #!/bin/sh
  2. # shellcheck disable=SC2086,SC2034
  3. # unofficial strict mode
  4. set -eu;
  5. check_system()
  6. {
  7. VER="$1"; # toolchain version
  8. printf "Checking kernel type..";
  9. SYS_TYPE="$(uname -s)"
  10. if [ "$SYS_TYPE" = "Darwin" ]; then
  11. echo "darwin";
  12. TOOLCHAIN_URL="https://update.flipperzero.one/builds/toolchain/gcc-arm-none-eabi-10.3-x86_64-darwin-flipper-$VER.tar.gz";
  13. TOOLCHAIN_PATH="toolchain/x86_64-darwin";
  14. elif [ "$SYS_TYPE" = "Linux" ]; then
  15. echo "linux";
  16. TOOLCHAIN_URL="https://update.flipperzero.one/builds/toolchain/gcc-arm-none-eabi-10.3-x86_64-linux-flipper-$VER.tar.gz";
  17. TOOLCHAIN_PATH="toolchain/x86_64-linux";
  18. else
  19. echo "unsupported.";
  20. echo "Your system is unsupported.. sorry..";
  21. exit 1;
  22. fi
  23. }
  24. check_tar()
  25. {
  26. printf "Checking tar..";
  27. if ! tar --version > /dev/null 2>&1; then
  28. echo "no";
  29. exit 1;
  30. fi
  31. echo "yes";
  32. }
  33. curl_wget_check()
  34. {
  35. printf "Checking curl..";
  36. if ! curl --version > /dev/null 2>&1; then
  37. echo "no";
  38. printf "Checking wget..";
  39. if ! wget --version > /dev/null 2>&1; then
  40. echo "no";
  41. echo "No curl or wget found in your PATH.";
  42. echo "Please provide it or download this file:";
  43. echo;
  44. echo "$TOOLCHAIN_URL";
  45. echo;
  46. echo "And place in repo root dir mannualy.";
  47. exit 1;
  48. fi
  49. echo "yes"
  50. DOWNLOADER="wget";
  51. DOWNLOADER_ARGS="--show-progress --progress=bar:force -qO";
  52. return;
  53. fi
  54. echo "yes"
  55. DOWNLOADER="curl";
  56. DOWNLOADER_ARGS="--progress-bar -SLo";
  57. }
  58. check_downloaded_toolchain()
  59. {
  60. printf "Checking downloaded toolchain tgz..";
  61. if [ -f "$REPO_ROOT/$TOOLCHAIN_TAR" ]; then
  62. echo "yes";
  63. return 0;
  64. fi
  65. echo "no";
  66. return 1;
  67. }
  68. download_toolchain()
  69. {
  70. echo "Downloading toolchain:";
  71. "$DOWNLOADER" $DOWNLOADER_ARGS "$REPO_ROOT/$TOOLCHAIN_TAR" "$TOOLCHAIN_URL";
  72. echo "done";
  73. }
  74. remove_old_tooclhain()
  75. {
  76. printf "Removing old toolchain (if exist)..";
  77. rm -rf "${REPO_ROOT:?}/$TOOLCHAIN_PATH";
  78. echo "done";
  79. }
  80. show_unpack_percentage()
  81. {
  82. LINE=0;
  83. while read -r line; do
  84. LINE=$(( LINE + 1 ));
  85. if [ $(( LINE % 300 )) -eq 0 ]; then
  86. printf "#";
  87. fi
  88. done
  89. echo " 100.0%";
  90. }
  91. unpack_toolchain()
  92. {
  93. echo "Unpacking toolchain:";
  94. tar -xvf "$REPO_ROOT/$TOOLCHAIN_TAR" -C "$REPO_ROOT/" 2>&1 | show_unpack_percentage;
  95. mkdir -p "$REPO_ROOT/toolchain";
  96. mv "$REPO_ROOT/$TOOLCHAIN_DIR" "$REPO_ROOT/$TOOLCHAIN_PATH/";
  97. echo "done";
  98. }
  99. clearing()
  100. {
  101. printf "Clearing..";
  102. rm -rf "${REPO_ROOT:?}/$TOOLCHAIN_TAR";
  103. echo "done";
  104. }
  105. main()
  106. {
  107. SCRIPT_PATH="$(cd "$(dirname "$0")" && pwd -P)"
  108. REPO_ROOT="$(cd "$SCRIPT_PATH/../../" && pwd)";
  109. check_system "$1"; # recives TOOLCHAIN_VERSION, defines TOOLCHAIN_URL and TOOLCHAIN_PATH
  110. check_tar;
  111. TOOLCHAIN_TAR="$(basename "$TOOLCHAIN_URL")";
  112. TOOLCHAIN_DIR="$(echo "$TOOLCHAIN_TAR" | sed "s/-$VER.tar.gz//g")";
  113. if ! check_downloaded_toolchain; then
  114. curl_wget_check;
  115. download_toolchain;
  116. fi
  117. remove_old_tooclhain;
  118. unpack_toolchain;
  119. }
  120. trap clearing EXIT;
  121. trap clearing 2; # SIGINT not coverable by EXIT
  122. main "$1"; # toochain version