diff --git a/tools/.gitignore b/tools/.gitignore index 7f6fa1ac..aea86584 100644 --- a/tools/.gitignore +++ b/tools/.gitignore @@ -2,4 +2,7 @@ grub-2.06.tar.xz* grub-2.06/ arch/i386/legacy/grub/* arch/i386/efi/grub/* -arch/x86_64/efi/grub/* \ No newline at end of file +arch/x86_64/efi/grub/* + +*.tar.gz +build/* \ No newline at end of file diff --git a/tools/init_rust_toolchain.sh b/tools/init_rust_toolchain.sh new file mode 100644 index 00000000..3f86e5e5 --- /dev/null +++ b/tools/init_rust_toolchain.sh @@ -0,0 +1,84 @@ +# 当前脚本用于初始化自定义的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