xref: /dragonos-dsc/toolchain.sh (revision b972e64f1e063c040c8d4019858d2425712ef95f)
1# 当前脚本用于初始化自定义的Rust工具链
2if [ -z "$(which cargo)" ]; then
3    echo "尚未安装Rust,请先安装Rust"
4    exit 1
5fi
6
7DRAGONOS_UNKNOWN_ELF_PATH=$(rustc --print sysroot)/lib/rustlib/x86_64-unknown-dragonos
8mkdir -p ${DRAGONOS_UNKNOWN_ELF_PATH}/lib
9# 设置工具链配置文件
10echo   \
11"{\
12    \"arch\": \"x86_64\",
13    \"code-model\": \"kernel\",
14    \"cpu\": \"x86-64\",
15    \"os\": \"dragonos\",
16    \"target-endian\": \"little\",
17    \"target-pointer-width\": \"64\",
18    \"target-c-int-width\": \"32\",
19    \"data-layout\": \"e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128\",
20    \"disable-redzone\": true,
21    \"features\": \"-3dnow,-3dnowa,-avx,-avx2\",
22    \"linker\": \"rust-lld\",
23    \"linker-flavor\": \"ld.lld\",
24    \"llvm-target\": \"x86_64-unknown-none\",
25    \"max-atomic-width\": 64,
26    \"panic-strategy\": \"abort\",
27    \"position-independent-executables\": true,
28    \"relro-level\": \"full\",
29    \"stack-probes\": {
30      \"kind\": \"inline-or-call\",
31      \"min-llvm-version-for-inline\": [
32        16,
33        0,
34        0
35      ]
36    },
37    \"static-position-independent-executables\": true,
38    \"supported-sanitizers\": [
39      \"kcfi\"
40    ],
41    \"target-pointer-width\": \"64\"
42}" > ${DRAGONOS_UNKNOWN_ELF_PATH}/target.json || exit 1