toolchain.sh 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. #!/bin/bash
  2. declare -A download_urls=(
  3. ["arm-none-eabi-gcc"]="https://github.com/RT-Thread/toolchains-ci/releases/download/v1.3/gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2"
  4. ["mips-sde-elf-gcc"]="https://github.com/RT-Thread/toolchains-ci/releases/download/v1.1/mips-2016.05-7-mips-sde-elf-i686-pc-linux-gnu.tar.bz2"
  5. ["aarch64-none-elf-gcc"]="https://github.com/RT-Thread/toolchains-ci/releases/download/v1.6/gcc-arm-10.2-2020.11-x86_64-aarch64-none-elf.tar.xz"
  6. ["riscv64-unknown-elf-gcc"]="https://github.com/RT-Thread/toolchains-ci/releases/download/v1.4/riscv64-unknown-elf-toolchain-10.2.0-2020.12.8-x86_64-linux-ubuntu14.tar.gz"
  7. ["riscv32-unknown-elf-gcc"]="https://github.com/hpmicro/riscv-gnu-toolchain/releases/download/2022.05.15/riscv32-unknown-elf-newlib-multilib_2022.05.15_linux.tar.gz"
  8. ["riscv-none-embed-gcc"]="https://github.com/RT-Thread/toolchains-ci/releases/download/v1.5/xpack-riscv-none-embed-gcc-8.3.0-2.3-linux-x64.tar.gz"
  9. ["riscv32-esp-elf-gcc"]="https://github.com/espressif/crosstool-NG/releases/download/esp-2022r1-RC1/riscv32-esp-elf-gcc11_2_0-esp-2022r1-RC1-linux-amd64.tar.xz"
  10. ["clang"]="https://github.com/ARM-software/LLVM-embedded-toolchain-for-Arm/releases/download/release-16.0.0/LLVMEmbeddedToolchainForArm-16.0.0-Linux-x86_64.tar.gz"
  11. ["i686-atxhua-newlib-elf-gcc"]="https://github.com/atxhua/i686-atxhua-newlib-elf/releases/download/15.2.0/i686-atxhua-newlib-elf-linux.tar.gz"
  12. )
  13. show_help() {
  14. echo "Available toolchains:"
  15. for key in "${!download_urls[@]}"; do
  16. echo " - $key"
  17. done
  18. }
  19. extract_file() {
  20. local file_name=$1
  21. local destination=$2
  22. echo "Extracting $file_name to $destination..."
  23. case "$file_name" in
  24. *.tar.bz2) tar -xjf "$file_name" -C "$destination" --strip-components=1;;
  25. *.tar.gz) tar -xzf "$file_name" -C "$destination" --strip-components=1;;
  26. *.tar.xz) tar -xJf "$file_name" -C "$destination" --strip-components=1;;
  27. *) echo "Unsupported file format: $file_name"; exit 1;;
  28. esac
  29. echo "Extracted to $destination"
  30. }
  31. install_toolchain() {
  32. local toolchain_name=$1
  33. local url="${download_urls[$toolchain_name]}"
  34. if [ -z "$url" ]; then
  35. echo "Toolchain not found."
  36. exit 1
  37. fi
  38. local file_name=$(basename "$url")
  39. echo "Downloading $file_name..."
  40. wget -q "$url"
  41. echo "Extracting $file_name..."
  42. local target_dir="/opt/$toolchain_name"
  43. echo "target_dir $target_dir..."
  44. mkdir -p "$target_dir"
  45. extract_file "$file_name" "$target_dir"
  46. rm $file_name
  47. echo "Installed: $target_dir"
  48. local toolchain_bin="$target_dir/bin"
  49. if [[ ":$PATH:" != *":$toolchain_bin:"* ]]; then
  50. echo "Adding $toolchain_bin to PATH..."
  51. export PATH="$PATH:$toolchain_bin"
  52. echo "export PATH=\$PATH:$toolchain_bin" >> ~/.bashrc
  53. fi
  54. #need source toolchain.sh or source ~/.bashrc to work
  55. #local toolchain_exec=$(find "$toolchain_bin" -type f -executable | head -n 1)
  56. local toolchain_exec=$(which "$toolchain_name")
  57. if [ -x "$toolchain_exec" ]; then
  58. echo "Testing executable: $toolchain_exec"
  59. $toolchain_exec --version
  60. else
  61. echo "No executable found in $toolchain_bin"
  62. fi
  63. }
  64. if [[ $# -eq 1 ]]; then
  65. if [[ "$1" == "help" ]]; then
  66. show_help
  67. elif [ "$1" == "all" ]; then
  68. for toolchain in "${!download_urls[@]}"; do
  69. install_toolchain "$toolchain"
  70. done
  71. else
  72. install_toolchain "$1"
  73. fi
  74. else
  75. show_help
  76. fi