1*b4db6069SGnoCiYeH# 当前脚本用于初始化自定义的Rust工具链 2*b4db6069SGnoCiYeHif [ -z "$(which cargo)" ]; then 3*b4db6069SGnoCiYeH echo "尚未安装Rust,请先安装Rust" 4*b4db6069SGnoCiYeH exit 1 5*b4db6069SGnoCiYeHfi 6*b4db6069SGnoCiYeH 7*b4db6069SGnoCiYeH# 是否强制覆盖已有的工具链配置文件 8*b4db6069SGnoCiYeHFORCE=0 9*b4db6069SGnoCiYeH 10*b4db6069SGnoCiYeHwhile getopts "f" arg 11*b4db6069SGnoCiYeHdo 12*b4db6069SGnoCiYeH case $arg in 13*b4db6069SGnoCiYeH f) 14*b4db6069SGnoCiYeH FORCE=1 15*b4db6069SGnoCiYeH ;; 16*b4db6069SGnoCiYeH ?) 17*b4db6069SGnoCiYeH echo "unkonw argument" 18*b4db6069SGnoCiYeH exit 1 19*b4db6069SGnoCiYeH ;; 20*b4db6069SGnoCiYeH esac 21*b4db6069SGnoCiYeHdone 22*b4db6069SGnoCiYeH 23*b4db6069SGnoCiYeHDRAGONOS_UNKNOWN_ELF_PATH=$(rustc --print sysroot)/lib/rustlib/x86_64-unknown-dragonos 24*b4db6069SGnoCiYeHmkdir -p ${DRAGONOS_UNKNOWN_ELF_PATH}/lib 25*b4db6069SGnoCiYeHecho $DRAGONOS_UNKNOWN_ELF_PATH 26*b4db6069SGnoCiYeH 27*b4db6069SGnoCiYeH# 判断是否已经存在工具链配置文件 28*b4db6069SGnoCiYeHif [ -f "${DRAGONOS_UNKNOWN_ELF_PATH}/target.json" ]; then 29*b4db6069SGnoCiYeH if [ $FORCE -eq 0 ]; then 30*b4db6069SGnoCiYeH echo "已存在工具链配置文件,如需重新初始化,请使用-f参数" 31*b4db6069SGnoCiYeH exit 0 32*b4db6069SGnoCiYeH fi 33*b4db6069SGnoCiYeHfi 34*b4db6069SGnoCiYeH 35*b4db6069SGnoCiYeH# 设置工具链配置文件 36*b4db6069SGnoCiYeHecho \ 37*b4db6069SGnoCiYeH"{\ 38*b4db6069SGnoCiYeH \"arch\": \"x86_64\", 39*b4db6069SGnoCiYeH \"code-model\": \"kernel\", 40*b4db6069SGnoCiYeH \"cpu\": \"x86-64\", 41*b4db6069SGnoCiYeH \"os\": \"dragonos\", 42*b4db6069SGnoCiYeH \"target-endian\": \"little\", 43*b4db6069SGnoCiYeH \"target-pointer-width\": \"64\", 44*b4db6069SGnoCiYeH \"target-c-int-width\": \"32\", 45*b4db6069SGnoCiYeH \"data-layout\": \"e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128\", 46*b4db6069SGnoCiYeH \"disable-redzone\": true, 47*b4db6069SGnoCiYeH \"features\": \"-3dnow,-3dnowa,-avx,-avx2\", 48*b4db6069SGnoCiYeH \"linker\": \"rust-lld\", 49*b4db6069SGnoCiYeH \"linker-flavor\": \"ld.lld\", 50*b4db6069SGnoCiYeH \"llvm-target\": \"x86_64-unknown-none\", 51*b4db6069SGnoCiYeH \"max-atomic-width\": 64, 52*b4db6069SGnoCiYeH \"panic-strategy\": \"abort\", 53*b4db6069SGnoCiYeH \"position-independent-executables\": true, 54*b4db6069SGnoCiYeH \"relro-level\": \"full\", 55*b4db6069SGnoCiYeH \"stack-probes\": { 56*b4db6069SGnoCiYeH \"kind\": \"inline-or-call\", 57*b4db6069SGnoCiYeH \"min-llvm-version-for-inline\": [ 58*b4db6069SGnoCiYeH 16, 59*b4db6069SGnoCiYeH 0, 60*b4db6069SGnoCiYeH 0 61*b4db6069SGnoCiYeH ] 62*b4db6069SGnoCiYeH }, 63*b4db6069SGnoCiYeH \"static-position-independent-executables\": true, 64*b4db6069SGnoCiYeH \"supported-sanitizers\": [ 65*b4db6069SGnoCiYeH \"kcfi\" 66*b4db6069SGnoCiYeH ], 67*b4db6069SGnoCiYeH \"target-pointer-width\": \"64\" 68*b4db6069SGnoCiYeH}" > ${DRAGONOS_UNKNOWN_ELF_PATH}/target.json || exit 1