xref: /relibc/init_dragonos_toolchain.sh (revision 70e3f729c5e36eae23fa7075e8554b7c2effb3ce)
169120002SGou Ngai# 当前脚本用于初始化自定义的Rust工具链
269120002SGou Ngaiif [ -z "$(which cargo)" ]; then
369120002SGou Ngai    echo "尚未安装Rust,请先安装Rust"
469120002SGou Ngai    exit 1
569120002SGou Ngaifi
669120002SGou Ngai
7*70e3f729Slogin# 是否强制覆盖已有的工具链配置文件
8*70e3f729SloginFORCE=0
9*70e3f729Slogin
10*70e3f729Sloginwhile getopts "f" arg
11*70e3f729Slogindo
12*70e3f729Slogin    case $arg in
13*70e3f729Slogin        f)
14*70e3f729Slogin            FORCE=1
15*70e3f729Slogin            ;;
16*70e3f729Slogin        ?)
17*70e3f729Slogin            echo "unkonw argument"
18*70e3f729Slogin            exit 1
19*70e3f729Slogin        ;;
20*70e3f729Slogin    esac
21*70e3f729Slogindone
22*70e3f729Slogin
2369120002SGou NgaiDRAGONOS_UNKNOWN_ELF_PATH=$(rustc --print sysroot)/lib/rustlib/x86_64-unknown-dragonos
2469120002SGou Ngaimkdir -p ${DRAGONOS_UNKNOWN_ELF_PATH}/lib
25be35961dSloginecho $DRAGONOS_UNKNOWN_ELF_PATH
26*70e3f729Slogin
27*70e3f729Slogin# 判断是否已经存在工具链配置文件
28*70e3f729Sloginif [ -f "${DRAGONOS_UNKNOWN_ELF_PATH}/target.json" ]; then
29*70e3f729Slogin    if [ $FORCE -eq 0 ]; then
30*70e3f729Slogin        echo "已存在工具链配置文件,如需重新初始化,请使用-f参数"
31*70e3f729Slogin        exit 0
32*70e3f729Slogin    fi
33*70e3f729Sloginfi
34*70e3f729Slogin
3569120002SGou Ngai# 设置工具链配置文件
3669120002SGou Ngaiecho   \
3769120002SGou Ngai"{\
3869120002SGou Ngai    \"arch\": \"x86_64\",
3969120002SGou Ngai    \"code-model\": \"kernel\",
4069120002SGou Ngai    \"cpu\": \"x86-64\",
4169120002SGou Ngai    \"os\": \"dragonos\",
4269120002SGou Ngai    \"target-endian\": \"little\",
4369120002SGou Ngai    \"target-pointer-width\": \"64\",
4469120002SGou Ngai    \"target-c-int-width\": \"32\",
4569120002SGou Ngai    \"data-layout\": \"e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128\",
4669120002SGou Ngai    \"disable-redzone\": true,
4769120002SGou Ngai    \"features\": \"-3dnow,-3dnowa,-avx,-avx2\",
4869120002SGou Ngai    \"linker\": \"rust-lld\",
4969120002SGou Ngai    \"linker-flavor\": \"ld.lld\",
5069120002SGou Ngai    \"llvm-target\": \"x86_64-unknown-none\",
5169120002SGou Ngai    \"max-atomic-width\": 64,
5269120002SGou Ngai    \"panic-strategy\": \"abort\",
5369120002SGou Ngai    \"position-independent-executables\": true,
5469120002SGou Ngai    \"relro-level\": \"full\",
5569120002SGou Ngai    \"stack-probes\": {
5669120002SGou Ngai      \"kind\": \"inline-or-call\",
5769120002SGou Ngai      \"min-llvm-version-for-inline\": [
5869120002SGou Ngai        16,
5969120002SGou Ngai        0,
6069120002SGou Ngai        0
6169120002SGou Ngai      ]
6269120002SGou Ngai    },
6369120002SGou Ngai    \"static-position-independent-executables\": true,
6469120002SGou Ngai    \"supported-sanitizers\": [
6569120002SGou Ngai      \"kcfi\"
6669120002SGou Ngai    ],
6769120002SGou Ngai    \"target-pointer-width\": \"64\"
6869120002SGou Ngai}" > ${DRAGONOS_UNKNOWN_ELF_PATH}/target.json || exit 1