install_cross_gcc.sh 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. #! /bin/bash
  2. #########################################################################
  3. # 这个脚本用于安装musl交叉编译工具链
  4. # 该脚本会自动下载musl交叉编译工具链,并将其添加到PATH中
  5. #########################################################################
  6. export USE_GITHUB=${USE_GITHUB:=0}
  7. MUSL_GCC_DATE="231114"
  8. MUSL_GCC_VERSION="9.4.0"
  9. MUSL_GCC_X86_64_TAR=
  10. MUSL_GCC_RISCV64_TAR=
  11. LA64_GCC_VERSION="loongarch64-cross-14.2.0"
  12. LA64_GCC_TAR="${LA64_GCC_VERSION}.tar.xz"
  13. MUSL_GCC_X86_64_DOWNLOAD_URL=""
  14. MUSL_GCC_RISCV64_DOWNLOAD_URL=""
  15. LA64_GCC_DOWNLOAD_URL="https://mirrors.dragonos.org.cn/pub/third_party/toolchain/gcc/${LA64_GCC_TAR}"
  16. if [ $USE_GITHUB -eq 1 ]; then
  17. echo "Download from github"
  18. MUSL_GCC_X86_64_TAR=x86_64-linux-musl-cross-gcc-${MUSL_GCC_VERSION}.tar.xz
  19. MUSL_GCC_RISCV64_TAR=riscv64-linux-musl-cross-gcc-${MUSL_GCC_VERSION}.tar.xz
  20. MUSL_GCC_X86_64_DOWNLOAD_URL="https://github.com/DragonOS-Community/musl-cross-make/releases/download/${MUSL_GCC_VERSION}-${MUSL_GCC_DATE}/${MUSL_GCC_X86_64_TAR}"
  21. MUSL_GCC_RISCV64_DOWNLOAD_URL="https://github.com/DragonOS-Community/musl-cross-make/releases/download/${MUSL_GCC_VERSION}-${MUSL_GCC_DATE}/${MUSL_GCC_RISCV64_TAR}"
  22. else
  23. echo "Download from mirrors.dragonos.org.cn"
  24. MUSL_GCC_X86_64_TAR="x86_64-linux-musl-cross-gcc-${MUSL_GCC_VERSION}-${MUSL_GCC_DATE}.tar.xz"
  25. MUSL_GCC_RISCV64_TAR="riscv64-linux-musl-cross-gcc-${MUSL_GCC_VERSION}-${MUSL_GCC_DATE}.tar.xz"
  26. MUSL_GCC_X86_64_DOWNLOAD_URL="https://mirrors.dragonos.org.cn/pub/third_party/toolchain/gcc/${MUSL_GCC_X86_64_TAR}"
  27. MUSL_GCC_RISCV64_DOWNLOAD_URL="https://mirrors.dragonos.org.cn/pub/third_party/toolchain/gcc/${MUSL_GCC_RISCV64_TAR}"
  28. fi
  29. INSTALL_POS="$HOME/opt/"
  30. mkdir -p $INSTALL_POS
  31. get_shell_rc_file()
  32. {
  33. if [ -n "$ZSH_VERSION" ]; then
  34. echo "$HOME/.zshrc"
  35. elif [ -n "$BASH_VERSION" ]; then
  36. echo "$HOME/.bashrc"
  37. else
  38. echo "$HOME/.profile"
  39. fi
  40. }
  41. # 信号退出时清理下载的文件
  42. trap_handler(){
  43. rm -f $MUSL_GCC_X86_64_TAR
  44. rm -f $MUSL_GCC_RISCV64_TAR
  45. rm -f $LA64_GCC_TAR
  46. }
  47. trap trap_handler EXIT
  48. trap trap_handler SIGINT
  49. SHELL_RC=$(get_shell_rc_file)
  50. source $SHELL_RC
  51. install_loongarch64_gcc()
  52. {
  53. echo "正在安装 loongarch64-unknown-linux-gnu 工具链"
  54. wget ${LA64_GCC_DOWNLOAD_URL} || exit 1
  55. echo "正在解压 loongarch64-unknown-linux-gnu 工具链"
  56. tar xf $LA64_GCC_TAR -C $INSTALL_POS || exit 1
  57. echo "正在将 loongarch64-unknown-linux-gnu 工具链添加到 PATH 环境变量中"
  58. echo "export PATH=\$PATH:$INSTALL_POS/${LA64_GCC_VERSION}/bin" >> $SHELL_RC
  59. echo "loongarch64-unknown-linux-gnu 工具链已成功安装!请运行 source $SHELL_RC 以使更改生效!"
  60. rm -rf $LA64_GCC_TAR || exit 1
  61. }
  62. # 下载musl交叉编译工具链
  63. # 如果x86_64-linux-musl-gcc或x86_64-linux-musl-g++不存在,则下载
  64. if [ ! -n "$(which x86_64-linux-musl-gcc)" ] || [ ! -n "$(which x86_64-linux-musl-g++)" ]; then
  65. echo "开始下载x86_64-linux-musl-gcc"
  66. wget ${MUSL_GCC_X86_64_DOWNLOAD_URL} || exit 1
  67. echo "下载完成"
  68. echo "开始解压x86_64-linux-musl-gcc"
  69. tar xvf $MUSL_GCC_X86_64_TAR -C $INSTALL_POS || exit 1
  70. echo "export PATH=\$PATH:$INSTALL_POS/x86_64-linux-musl-cross-gcc-${MUSL_GCC_VERSION}/bin" >> $SHELL_RC
  71. echo "安装完成"
  72. echo "开始清理x86_64-linux-musl-gcc的下载缓存"
  73. rm -rf $MUSL_GCC_X86_64_TAR || exit 1
  74. echo "清理完成"
  75. else
  76. echo "x86_64-linux-musl-gcc已经安装"
  77. fi
  78. # 如果riscv64-linux-musl-gcc或riscv64-linux-musl-g++不存在,则下载
  79. if [ ! -n "$(which riscv64-linux-musl-gcc)" ] || [ ! -n "$(which riscv64-linux-musl-g++)" ]; then
  80. echo "开始下载riscv64-linux-musl-gcc"
  81. wget ${MUSL_GCC_RISCV64_DOWNLOAD_URL} || exit 1
  82. echo "下载完成"
  83. echo "开始解压riscv64-linux-musl-gcc"
  84. tar xvf $MUSL_GCC_RISCV64_TAR -C $INSTALL_POS || exit 1
  85. echo "export PATH=\"\$PATH:$INSTALL_POS/riscv64-linux-musl-cross-gcc-${MUSL_GCC_VERSION}/bin\"" >> $SHELL_RC
  86. echo "安装完成"
  87. echo "开始清理riscv64-linux-musl-gcc的下载缓存"
  88. rm -rf $MUSL_GCC_RISCV64_TAR || exit 1
  89. echo "清理完成"
  90. else
  91. echo "riscv64-linux-musl-gcc已经安装"
  92. fi
  93. if [ ! -n "$(which loongarch64-unknown-linux-gnu-gcc)" ] || [ ! -n "$(which loongarch64-unknown-linux-gnu-g++)" ]; then
  94. install_loongarch64_gcc || exit 1
  95. else
  96. echo "loongarch64-unknown-linux-gnu-gcc已经安装"
  97. fi
  98. source $SHELL_RC
  99. echo "musl交叉编译工具链安装完成,请运行 source $SHELL_RC 以使musl交叉编译工具链在当前窗口生效!"