xref: /drstd/init_dragonos_toolchain.sh (revision b4db606949a2426f4b8edda9a9b9b8fc5c412739)
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