install_musl_gcc.sh 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #########################################################################
  2. # 这个脚本用于安装musl交叉编译工具链
  3. # 该脚本会自动下载musl交叉编译工具链,并将其添加到PATH中
  4. #########################################################################
  5. MUSL_GCC_DATE="231114"
  6. MUSL_GCC_VERSION="9.4.0"
  7. MUSL_GCC_X86_64_TAR="x86_64-linux-musl-cross-gcc-${MUSL_GCC_VERSION}-${MUSL_GCC_DATE}.tar.xz"
  8. MUSL_GCC_RISCV64_TAR="riscv64-linux-musl-cross-gcc-${MUSL_GCC_VERSION}-${MUSL_GCC_DATE}.tar.xz"
  9. MUSL_GCC_X86_64_DOWNLOAD_URL="https://mirrors.dragonos.org.cn/pub/third_party/toolchain/gcc/${MUSL_GCC_X86_64_TAR}"
  10. MUSL_GCC_RISCV64_DOWNLOAD_URL="https://mirrors.dragonos.org.cn/pub/third_party/toolchain/gcc/${MUSL_GCC_RISCV64_TAR}"
  11. INSTALL_POS="$HOME/opt/"
  12. get_shell_rc_file()
  13. {
  14. if [ -n "$ZSH_VERSION" ]; then
  15. echo "$HOME/.zshrc"
  16. elif [ -n "$BASH_VERSION" ]; then
  17. echo "$HOME/.bashrc"
  18. else
  19. echo "$HOME/.profile"
  20. fi
  21. }
  22. # 信号退出时清理下载的文件
  23. trap_handler(){
  24. rm -f $MUSL_GCC_X86_64_TAR
  25. rm -f $MUSL_GCC_RISCV64_TAR
  26. }
  27. trap trap_handler EXIT
  28. trap trap_handler SIGINT
  29. SHELL_RC=$(get_shell_rc_file)
  30. # 下载musl交叉编译工具链
  31. # 如果x86_64-linux-musl-gcc或x86_64-linux-musl-g++不存在,则下载
  32. if [ ! -n "$(which x86_64-linux-musl-gcc)" ] || [ ! -n "$(which x86_64-linux-musl-g++)" ]; then
  33. echo "开始下载x86_64-linux-musl-gcc"
  34. wget ${MUSL_GCC_X86_64_DOWNLOAD_URL} || exit 1
  35. echo "下载完成"
  36. echo "开始解压x86_64-linux-musl-gcc"
  37. tar xvf $MUSL_GCC_X86_64_TAR -C $INSTALL_POS || exit 1
  38. echo "PATH=\$PATH:$INSTALL_POS/x86_64-linux-musl-cross-gcc-${MUSL_GCC_VERSION}-${MUSL_GCC_DATE}/bin" >> $SHELL_RC
  39. echo "安装完成"
  40. echo "开始清理x86_64-linux-musl-gcc的下载缓存"
  41. rm -rf $MUSL_GCC_X86_64_TAR || exit 1
  42. echo "清理完成"
  43. else
  44. echo "x86_64-linux-musl-gcc已经安装"
  45. fi
  46. # 如果riscv64-linux-musl-gcc或riscv64-linux-musl-g++不存在,则下载
  47. if [ ! -n "$(which riscv64-linux-musl-gcc)" ] || [ ! -n "$(which riscv64-linux-musl-g++)" ]; then
  48. echo "开始下载riscv64-linux-musl-gcc"
  49. wget ${MUSL_GCC_RISCV64_DOWNLOAD_URL} || exit 1
  50. echo "下载完成"
  51. echo "开始解压riscv64-linux-musl-gcc"
  52. tar xvf $MUSL_GCC_RISCV64_TAR -C $INSTALL_POS || exit 1
  53. echo "export PATH=\"\$PATH:$INSTALL_POS/riscv64-linux-musl-cross-gcc-${MUSL_GCC_VERSION}/bin\"" >> $SHELL_RC
  54. echo "安装完成"
  55. echo "开始清理riscv64-linux-musl-gcc的下载缓存"
  56. rm -rf $MUSL_GCC_RISCV64_TAR || exit 1
  57. echo "清理完成"
  58. else
  59. echo "riscv64-linux-musl-gcc已经安装"
  60. fi
  61. source $SHELL_RC
  62. echo "musl交叉编译工具链安装完成,请运行 source $SHELL_RC 以使musl交叉编译工具链在当前窗口生效!"