1# 当前脚本用于初始化自定义的Rust工具链 2if [ -z "$(which cargo)" ]; then 3 echo "尚未安装Rust,请先安装Rust" 4 exit 1 5fi 6 7WORK_DIR=$(pwd) 8RUST_SRC_VERSION=1.66.0 9# 初始化bare bone工具链 10DRAGONOS_UNKNOWN_ELF_PATH=$(rustc --print sysroot)/lib/rustlib/x86_64-unknown-dragonos 11mkdir -p ${DRAGONOS_UNKNOWN_ELF_PATH}/lib 12# 设置工具链配置文件 13echo \ 14"{\ 15 \"arch\": \"x86_64\", 16 \"code-model\": \"kernel\", 17 \"cpu\": \"x86-64\", 18 \"os\": \"dragonos\", 19 \"target-endian\": \"little\", 20 \"target-pointer-width\": \"64\", 21 \"target-c-int-width\": \"32\", 22 \"data-layout\": \"e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128\", 23 \"disable-redzone\": true, 24 \"features\": \"-mmx,-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-3dnow,-3dnowa,-avx,-avx2,+soft-float\", 25 \"linker\": \"rust-lld\", 26 \"linker-flavor\": \"ld.lld\", 27 \"llvm-target\": \"x86_64-unknown-none\", 28 \"max-atomic-width\": 64, 29 \"panic-strategy\": \"abort\", 30 \"position-independent-executables\": true, 31 \"relro-level\": \"full\", 32 \"stack-probes\": { 33 \"kind\": \"inline-or-call\", 34 \"min-llvm-version-for-inline\": [ 35 16, 36 0, 37 0 38 ] 39 }, 40 \"static-position-independent-executables\": true, 41 \"supported-sanitizers\": [ 42 \"kcfi\" 43 ], 44 \"target-pointer-width\": \"64\" 45}" > ${DRAGONOS_UNKNOWN_ELF_PATH}/target.json || exit 1 46 47 48# echo \ 49# "{ 50# \"llvm-target\": \"x86_64-unknown-none\", 51# \"data-layout\": \"e-m:e-i64:64-f80:128-n8:16:32:64-S128\", 52# \"arch\": \"x86_64\", 53# \"target-endian\": \"little\", 54# \"target-pointer-width\": \"64\", 55# \"target-c-int-width\": \"32\", 56# \"os\": \"dragonos\", 57# \"linker\": \"rust-lld\", 58# \"linker-flavor\": \"ld.lld\", 59# \"executables\": true, 60# \"features\": \"-mmx,-sse,+soft-float\", 61# \"disable-redzone\": true, 62# \"panic-strategy\": \"abort\" 63# }" > ${DRAGONOS_UNKNOWN_ELF_PATH}/target.json || exit 1 64 65 66# 编译标准库 (仍存在问题,不能编译) 67# mkdir -p build || exit 1 68# cd build 69# if [ ! -d "rust" ]; then 70# git clone -b $RUST_SRC_VERSION https://github.com/rust-lang/rust.git --depth=1 --recursive || exit 1 71# fi 72 73# cd rust 74# git checkout $RUST_SRC_VERSION 75# git submodule update --init --recursive 76 77# cargo clean 78# export RUST_COMPILER_RT_ROOT=$(pwd)/src/llvm-project/compiler-rt 79# CARGO_PROFILE_RELEASE_DEBUG=0 \ 80# CARGO_PROFILE_RELEASE_DEBUG_ASSERTIONS=true \ 81# RUSTC_BOOTSTRAP=1 \ 82# RUSTFLAGS="-Cforce-unwind-tables=yes -Cembed-bitcode=yes" \ 83# __CARGO_DEFAULT_LIB_METADATA="stablestd" \ 84# ./x.py build --target x86_64-unknown-dragonos || exit 1 85