DragonOS/tools/init_rust_toolchain.sh
2023-03-12 21:04:37 +08:00

85 lines
2.6 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 当前脚本用于初始化自定义的Rust工具链
if [ -z "$(which cargo)" ]; then
echo "尚未安装Rust请先安装Rust"
exit 1
fi
WORK_DIR=$(pwd)
RUST_SRC_VERSION=1.66.0
# 初始化bare bone工具链
DRAGONOS_UNKNOWN_ELF_PATH=$(rustc --print sysroot)/lib/rustlib/x86_64-unknown-dragonos
mkdir -p ${DRAGONOS_UNKNOWN_ELF_PATH}/lib
# 设置工具链配置文件
echo \
"{\
\"arch\": \"x86_64\",
\"code-model\": \"kernel\",
\"cpu\": \"x86-64\",
\"os\": \"dragonos\",
\"target-endian\": \"little\",
\"target-pointer-width\": \"64\",
\"target-c-int-width\": \"32\",
\"data-layout\": \"e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128\",
\"disable-redzone\": true,
\"features\": \"-mmx,-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-3dnow,-3dnowa,-avx,-avx2,+soft-float\",
\"linker\": \"rust-lld\",
\"linker-flavor\": \"ld.lld\",
\"llvm-target\": \"x86_64-unknown-none\",
\"max-atomic-width\": 64,
\"panic-strategy\": \"abort\",
\"position-independent-executables\": true,
\"relro-level\": \"full\",
\"stack-probes\": {
\"kind\": \"inline-or-call\",
\"min-llvm-version-for-inline\": [
16,
0,
0
]
},
\"static-position-independent-executables\": true,
\"supported-sanitizers\": [
\"kcfi\"
],
\"target-pointer-width\": \"64\"
}" > ${DRAGONOS_UNKNOWN_ELF_PATH}/target.json || exit 1
# echo \
# "{
# \"llvm-target\": \"x86_64-unknown-none\",
# \"data-layout\": \"e-m:e-i64:64-f80:128-n8:16:32:64-S128\",
# \"arch\": \"x86_64\",
# \"target-endian\": \"little\",
# \"target-pointer-width\": \"64\",
# \"target-c-int-width\": \"32\",
# \"os\": \"dragonos\",
# \"linker\": \"rust-lld\",
# \"linker-flavor\": \"ld.lld\",
# \"executables\": true,
# \"features\": \"-mmx,-sse,+soft-float\",
# \"disable-redzone\": true,
# \"panic-strategy\": \"abort\"
# }" > ${DRAGONOS_UNKNOWN_ELF_PATH}/target.json || exit 1
# 编译标准库 (仍存在问题,不能编译)
# mkdir -p build || exit 1
# cd build
# if [ ! -d "rust" ]; then
# git clone -b $RUST_SRC_VERSION https://github.com/rust-lang/rust.git --depth=1 --recursive || exit 1
# fi
# cd rust
# git checkout $RUST_SRC_VERSION
# git submodule update --init --recursive
# cargo clean
# export RUST_COMPILER_RT_ROOT=$(pwd)/src/llvm-project/compiler-rt
# CARGO_PROFILE_RELEASE_DEBUG=0 \
# CARGO_PROFILE_RELEASE_DEBUG_ASSERTIONS=true \
# RUSTC_BOOTSTRAP=1 \
# RUSTFLAGS="-Cforce-unwind-tables=yes -Cembed-bitcode=yes" \
# __CARGO_DEFAULT_LIB_METADATA="stablestd" \
# ./x.py build --target x86_64-unknown-dragonos || exit 1