commit a101c12f0dbe7da3de2e200c20dccd6a952c7a5d Author: Jiayi Yin Date: Sun May 18 20:38:31 2025 +0000 转换LFS仓库为普通仓库 diff --git a/0001-Use-lld-provided-by-system.patch b/0001-Use-lld-provided-by-system.patch new file mode 100644 index 0000000..bee8e16 --- /dev/null +++ b/0001-Use-lld-provided-by-system.patch @@ -0,0 +1,53 @@ +From 61b5cc96337da2121221dd1bcdb63fd36551d065 Mon Sep 17 00:00:00 2001 +From: Josh Stone +Date: Wed, 1 Nov 2023 15:21:15 -0700 +Subject: [PATCH] Use lld provided by system + +--- + compiler/rustc_target/src/spec/base/wasm.rs | 3 +-- + compiler/rustc_target/src/spec/targets/x86_64_unknown_none.rs | 2 +- + compiler/rustc_target/src/spec/targets/x86_64_unknown_uefi.rs | 1 + + 3 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/compiler/rustc_target/src/spec/base/wasm.rs b/compiler/rustc_target/src/spec/base/wasm.rs +index 87ade9e58cf4..2ddff95febab 100644 +--- a/compiler/rustc_target/src/spec/base/wasm.rs ++++ b/compiler/rustc_target/src/spec/base/wasm.rs +@@ -91,8 +91,7 @@ macro_rules! args { + // arguments just yet + limit_rdylib_exports: false, + +- // we use the LLD shipped with the Rust toolchain by default +- linker: Some("rust-lld".into()), ++ linker: Some("lld".into()), + linker_flavor: LinkerFlavor::WasmLld(Cc::No), + + pre_link_args, +diff --git a/compiler/rustc_target/src/spec/targets/x86_64_unknown_none.rs b/compiler/rustc_target/src/spec/targets/x86_64_unknown_none.rs +index 9aa95a35f8e5..a9172f9441b7 100644 +--- a/compiler/rustc_target/src/spec/targets/x86_64_unknown_none.rs ++++ b/compiler/rustc_target/src/spec/targets/x86_64_unknown_none.rs +@@ -17,7 +17,7 @@ pub fn target() -> Target { + static_position_independent_executables: true, + relro_level: RelroLevel::Full, + linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes), +- linker: Some("rust-lld".into()), ++ linker: Some("lld".into()), + features: + "-mmx,-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-3dnow,-3dnowa,-avx,-avx2,+soft-float" + .into(), +diff --git a/compiler/rustc_target/src/spec/targets/x86_64_unknown_uefi.rs b/compiler/rustc_target/src/spec/targets/x86_64_unknown_uefi.rs +index 5abfb8162f70..13cb43bda1a4 100644 +--- a/compiler/rustc_target/src/spec/targets/x86_64_unknown_uefi.rs ++++ b/compiler/rustc_target/src/spec/targets/x86_64_unknown_uefi.rs +@@ -16,6 +16,7 @@ pub fn target() -> Target { + base.plt_by_default = false; + base.max_atomic_width = Some(64); + base.entry_abi = Conv::X86_64Win64; ++ base.linker = Some("lld".into()); + + // We disable MMX and SSE for now, even though UEFI allows using them. Problem is, you have to + // enable these CPU features explicitly before their first use, otherwise their instructions +-- +2.41.0 + diff --git a/CVE-2024-24575.patch b/CVE-2024-24575.patch new file mode 100644 index 0000000..82eb043 --- /dev/null +++ b/CVE-2024-24575.patch @@ -0,0 +1,50 @@ +From c9d31b711e8906cf248566f43142f20b03e20cbf Mon Sep 17 00:00:00 2001 +From: Edward Thomson +Date: Fri, 17 Nov 2023 16:54:47 +0000 +Subject: [PATCH] revparse: fix parsing bug for trailing `@` + +Origin: https://github.com/libgit2/libgit2/commit/c9d31b711e8906cf248566f43142f20b03e20cbf + +When parsing a revspec that ends with a trailing `@`, explicitly stop +parsing. Introduce a sentinel variable to explicitly stop parsing. + +Prior to this, we would set `spec` to `HEAD`, but were looping on the +value of `spec[pos]`, so we would continue walking the (new) `spec` +at offset `pos`, looking for a NUL. This is obviously an out-of-bounds +read. + +Credit to Michael Rodler (@f0rki) and Amazon AWS Security. +--- + vendor/libgit2-sys/libgit2/src/libgit2/revparse.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/vendor/libgit2-sys/libgit2/src/libgit2/revparse.c b/vendor/libgit2-sys/libgit2/src/libgit2/revparse.c +index 964afe378da..06d92f82bf2 100644 +--- a/vendor/libgit2-sys/libgit2/src/libgit2/revparse.c ++++ b/vendor/libgit2-sys/libgit2/src/libgit2/revparse.c +@@ -701,6 +701,7 @@ static int revparse( + git_object *base_rev = NULL; + + bool should_return_reference = true; ++ bool parsed = false; + + GIT_ASSERT_ARG(object_out); + GIT_ASSERT_ARG(reference_out); +@@ -710,7 +711,7 @@ static int revparse( + *object_out = NULL; + *reference_out = NULL; + +- while (spec[pos]) { ++ while (!parsed && spec[pos]) { + switch (spec[pos]) { + case '^': + should_return_reference = false; +@@ -817,6 +818,8 @@ static int revparse( + break; + } else if (spec[pos+1] == '\0') { + spec = "HEAD"; ++ identifier_len = 4; ++ parsed = true; + break; + } + /* fall through */ diff --git a/CVE-2024-24577.patch b/CVE-2024-24577.patch new file mode 100644 index 0000000..f69477e --- /dev/null +++ b/CVE-2024-24577.patch @@ -0,0 +1,51 @@ +From eb4c1716cd92bf56f2770653a915d5fc01eab8f3 Mon Sep 17 00:00:00 2001 +From: Edward Thomson +Date: Sat, 16 Dec 2023 11:19:07 +0000 +Subject: [PATCH] index: correct index has_dir_name check + +Origin: https://github.com/libgit2/libgit2/commit/eb4c1716cd92bf56f2770653a915d5fc01eab8f3 + +`has_dir_name` is used to check for directory/file collisions, +and attempts to determine whether the index contains a file with +a directory name that is a proper subset of the new index entry +that we're trying to add. + +To determine directory name, the function would walk the path string +backwards to identify a `/`, stopping at the end of the string. However, +the function assumed that the strings did not start with a `/`. If the +paths contain only a single `/` at the beginning of the string, then the +function would continue the loop, erroneously, when they should have +stopped at the first character. + +Correct the order of the tests to terminate properly. + +Credit to Michael Rodler (@f0rki) and Amazon AWS Security. + +--- + vendor/libgit2-sys/libgit2/src/libgit2/index.c | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/vendor/libgit2-sys/libgit2/src/libgit2/index.c b/vendor/libgit2-sys/libgit2/src/libgit2/index.c +index 7ebe075..7862273 100644 +--- a/vendor/libgit2-sys/libgit2/src/libgit2/index.c ++++ b/vendor/libgit2-sys/libgit2/src/libgit2/index.c +@@ -1155,10 +1155,14 @@ static int has_dir_name(git_index *index, + size_t len, pos; + + for (;;) { +- if (*--slash == '/') +- break; ++ slash--; ++ + if (slash <= entry->path) + return 0; ++ ++ ++ if (*slash == '/') ++ break; + } + len = slash - name; + +-- +2.23.0 + diff --git a/cargo-config b/cargo-config new file mode 100644 index 0000000..621c190 --- /dev/null +++ b/cargo-config @@ -0,0 +1,5 @@ +[source.crates-io] +replace-with = 'ustc' + +[source.ustc] +registry = "sparse+https://mirrors.ustc.edu.cn/crates.io-index/" diff --git a/cargo-config.csh b/cargo-config.csh new file mode 100644 index 0000000..7613473 --- /dev/null +++ b/cargo-config.csh @@ -0,0 +1,5 @@ +# Copy cargo config from skel if it is not exist +if ( ! -e "$HOME/.cargo/config.toml" ) then + mkdir -p $HOME/.cargo + cp -f /etc/skel/.cargo/config.toml $HOME/.cargo +endif diff --git a/cargo-config.sh b/cargo-config.sh new file mode 100644 index 0000000..2338945 --- /dev/null +++ b/cargo-config.sh @@ -0,0 +1,5 @@ +# Copy cargo config from skel if it is not exist +if [ ! -f "$HOME/.cargo/config.toml" ] ; then + mkdir -p $HOME/.cargo + cp -f /etc/skel/.cargo/config.toml $HOME/.cargo +fi diff --git a/embed-riscv64-target-abi-in-bc-when-plugin-_-lto-is-used.patch b/embed-riscv64-target-abi-in-bc-when-plugin-_-lto-is-used.patch new file mode 100644 index 0000000..631a5eb --- /dev/null +++ b/embed-riscv64-target-abi-in-bc-when-plugin-_-lto-is-used.patch @@ -0,0 +1,296 @@ +From a599284dbac82d272aac53a7ace524484b4bb4dc Mon Sep 17 00:00:00 2001 +From: kxxt +Date: Sun, 28 Jan 2024 18:38:41 +0800 +Subject: [PATCH] embed riscv64 target abi in bc when plugin-lto is used + +Fixes chromium linking error. + +Related: +- https://discourse.llvm.org/t/encode-target-abi-into-llvm-bitcode-for-lto/54116 +- https://internals.rust-lang.org/t/per-target-llvm-module-flags/12023 +--- + compiler/rustc_codegen_llvm/src/back/lto.rs | 2 +- + compiler/rustc_codegen_llvm/src/context.rs | 49 +++++++++++++------ + .../rustc_codegen_llvm/src/debuginfo/mod.rs | 6 +-- + compiler/rustc_codegen_llvm/src/llvm/ffi.rs | 10 +++- + compiler/rustc_codegen_llvm/src/llvm/mod.rs | 5 ++ + .../rustc_llvm/llvm-wrapper/RustWrapper.cpp | 11 ++++- + 6 files changed, 62 insertions(+), 21 deletions(-) + +diff --git a/compiler/rustc_codegen_llvm/src/back/lto.rs b/compiler/rustc_codegen_llvm/src/back/lto.rs +index 42bd8687042a1..6c204b7ab2bc9 100644 +--- a/compiler/rustc_codegen_llvm/src/back/lto.rs ++++ b/compiler/rustc_codegen_llvm/src/back/lto.rs +@@ -607,7 +607,7 @@ pub(crate) fn run_pass_manager( + "LTOPostLink".as_ptr().cast(), + 11, + ) { +- llvm::LLVMRustAddModuleFlag( ++ llvm::LLVMRustAddModuleFlagU32( + module.module_llvm.llmod(), + llvm::LLVMModFlagBehavior::Error, + c"LTOPostLink".as_ptr().cast(), +diff --git a/compiler/rustc_codegen_llvm/src/context.rs b/compiler/rustc_codegen_llvm/src/context.rs +index 6cb62280a595e..ebb657f97b398 100644 +--- a/compiler/rustc_codegen_llvm/src/context.rs ++++ b/compiler/rustc_codegen_llvm/src/context.rs +@@ -30,6 +30,7 @@ use rustc_span::Span; + use rustc_target::abi::{ + call::FnAbi, HasDataLayout, PointeeInfo, Size, TargetDataLayout, VariantIdx, + }; ++use rustc_target::spec::TargetTriple; + use rustc_target::spec::{HasTargetSpec, RelocModel, Target, TlsModel}; + use smallvec::SmallVec; + +@@ -203,13 +204,13 @@ pub unsafe fn create_module<'ll>( + // to ensure intrinsic calls don't use it. + if !sess.needs_plt() { + let avoid_plt = c"RtLibUseGOT".as_ptr().cast(); +- llvm::LLVMRustAddModuleFlag(llmod, llvm::LLVMModFlagBehavior::Warning, avoid_plt, 1); ++ llvm::LLVMRustAddModuleFlagU32(llmod, llvm::LLVMModFlagBehavior::Warning, avoid_plt, 1); + } + + // Enable canonical jump tables if CFI is enabled. (See https://reviews.llvm.org/D65629.) + if sess.is_sanitizer_cfi_canonical_jump_tables_enabled() && sess.is_sanitizer_cfi_enabled() { + let canonical_jump_tables = c"CFI Canonical Jump Tables".as_ptr().cast(); +- llvm::LLVMRustAddModuleFlag( ++ llvm::LLVMRustAddModuleFlagU32( + llmod, + llvm::LLVMModFlagBehavior::Override, + canonical_jump_tables, +@@ -220,7 +221,7 @@ pub unsafe fn create_module<'ll>( + // Enable LTO unit splitting if specified or if CFI is enabled. (See https://reviews.llvm.org/D53891.) + if sess.is_split_lto_unit_enabled() || sess.is_sanitizer_cfi_enabled() { + let enable_split_lto_unit = c"EnableSplitLTOUnit".as_ptr().cast(); +- llvm::LLVMRustAddModuleFlag( ++ llvm::LLVMRustAddModuleFlagU32( + llmod, + llvm::LLVMModFlagBehavior::Override, + enable_split_lto_unit, +@@ -231,7 +232,7 @@ pub unsafe fn create_module<'ll>( + // Add "kcfi" module flag if KCFI is enabled. (See https://reviews.llvm.org/D119296.) + if sess.is_sanitizer_kcfi_enabled() { + let kcfi = c"kcfi".as_ptr().cast(); +- llvm::LLVMRustAddModuleFlag(llmod, llvm::LLVMModFlagBehavior::Override, kcfi, 1); ++ llvm::LLVMRustAddModuleFlagU32(llmod, llvm::LLVMModFlagBehavior::Override, kcfi, 1); + } + + // Control Flow Guard is currently only supported by the MSVC linker on Windows. +@@ -240,7 +241,7 @@ pub unsafe fn create_module<'ll>( + CFGuard::Disabled => {} + CFGuard::NoChecks => { + // Set `cfguard=1` module flag to emit metadata only. +- llvm::LLVMRustAddModuleFlag( ++ llvm::LLVMRustAddModuleFlagU32( + llmod, + llvm::LLVMModFlagBehavior::Warning, + c"cfguard".as_ptr() as *const _, +@@ -249,7 +250,7 @@ pub unsafe fn create_module<'ll>( + } + CFGuard::Checks => { + // Set `cfguard=2` module flag to emit metadata and checks. +- llvm::LLVMRustAddModuleFlag( ++ llvm::LLVMRustAddModuleFlagU32( + llmod, + llvm::LLVMModFlagBehavior::Warning, + c"cfguard".as_ptr() as *const _, +@@ -267,26 +268,26 @@ pub unsafe fn create_module<'ll>( + }; + + if sess.target.arch == "aarch64" { +- llvm::LLVMRustAddModuleFlag( ++ llvm::LLVMRustAddModuleFlagU32( + llmod, + behavior, + c"branch-target-enforcement".as_ptr().cast(), + bti.into(), + ); +- llvm::LLVMRustAddModuleFlag( ++ llvm::LLVMRustAddModuleFlagU32( + llmod, + behavior, + c"sign-return-address".as_ptr().cast(), + pac_ret.is_some().into(), + ); + let pac_opts = pac_ret.unwrap_or(PacRet { leaf: false, key: PAuthKey::A }); +- llvm::LLVMRustAddModuleFlag( ++ llvm::LLVMRustAddModuleFlagU32( + llmod, + behavior, + c"sign-return-address-all".as_ptr().cast(), + pac_opts.leaf.into(), + ); +- llvm::LLVMRustAddModuleFlag( ++ llvm::LLVMRustAddModuleFlagU32( + llmod, + behavior, + c"sign-return-address-with-bkey".as_ptr().cast(), +@@ -302,7 +303,7 @@ pub unsafe fn create_module<'ll>( + + // Pass on the control-flow protection flags to LLVM (equivalent to `-fcf-protection` in Clang). + if let CFProtection::Branch | CFProtection::Full = sess.opts.unstable_opts.cf_protection { +- llvm::LLVMRustAddModuleFlag( ++ llvm::LLVMRustAddModuleFlagU32( + llmod, + llvm::LLVMModFlagBehavior::Override, + c"cf-protection-branch".as_ptr().cast(), +@@ -310,7 +311,7 @@ pub unsafe fn create_module<'ll>( + ) + } + if let CFProtection::Return | CFProtection::Full = sess.opts.unstable_opts.cf_protection { +- llvm::LLVMRustAddModuleFlag( ++ llvm::LLVMRustAddModuleFlagU32( + llmod, + llvm::LLVMModFlagBehavior::Override, + c"cf-protection-return".as_ptr().cast(), +@@ -319,7 +320,7 @@ pub unsafe fn create_module<'ll>( + } + + if sess.opts.unstable_opts.virtual_function_elimination { +- llvm::LLVMRustAddModuleFlag( ++ llvm::LLVMRustAddModuleFlagU32( + llmod, + llvm::LLVMModFlagBehavior::Error, + c"Virtual Function Elim".as_ptr().cast(), +@@ -329,7 +330,7 @@ pub unsafe fn create_module<'ll>( + + // Set module flag to enable Windows EHCont Guard (/guard:ehcont). + if sess.opts.unstable_opts.ehcont_guard { +- llvm::LLVMRustAddModuleFlag( ++ llvm::LLVMRustAddModuleFlagU32( + llmod, + llvm::LLVMModFlagBehavior::Warning, + c"ehcontguard".as_ptr() as *const _, +@@ -354,6 +355,24 @@ pub unsafe fn create_module<'ll>( + llvm::LLVMMDNodeInContext(llcx, &name_metadata, 1), + ); + ++ // Embed target-abi into bitcode for rv64gc when plugin-lto is enabled ++ // Relevant: ++ // https://discourse.llvm.org/t/encode-target-abi-into-llvm-bitcode-for-lto/54116 ++ // https://internals.rust-lang.org/t/per-target-llvm-module-flags/12023 ++ if sess.opts.cg.linker_plugin_lto.enabled() { ++ let TargetTriple::TargetTriple(ref triple) = sess.opts.target_triple else { ++ panic!("Unexpected TargetTriple::TargetJson") ++ }; ++ if triple == "riscv64gc-unknown-linux-gnu" { ++ llvm::LLVMRustAddModuleFlagString( ++ llmod, ++ llvm::LLVMModFlagBehavior::Error, ++ c"target-abi".as_ptr() as *const _, ++ c"lp64d".as_ptr() as *const _, ++ ) ++ } ++ } ++ + // Add module flags specified via -Z llvm_module_flag + for (key, value, behavior) in &sess.opts.unstable_opts.llvm_module_flag { + let key = format!("{key}\0"); +@@ -369,7 +388,7 @@ pub unsafe fn create_module<'ll>( + // We already checked this during option parsing + _ => unreachable!(), + }; +- llvm::LLVMRustAddModuleFlag(llmod, behavior, key.as_ptr().cast(), *value) ++ llvm::LLVMRustAddModuleFlagU32(llmod, behavior, key.as_ptr().cast(), *value) + } + + llmod +diff --git a/compiler/rustc_codegen_llvm/src/debuginfo/mod.rs b/compiler/rustc_codegen_llvm/src/debuginfo/mod.rs +index d3a851b40c0a2..4fdaa59e0e559 100644 +--- a/compiler/rustc_codegen_llvm/src/debuginfo/mod.rs ++++ b/compiler/rustc_codegen_llvm/src/debuginfo/mod.rs +@@ -110,7 +110,7 @@ impl<'ll, 'tcx> CodegenUnitDebugContext<'ll, 'tcx> { + .unstable_opts + .dwarf_version + .unwrap_or(sess.target.default_dwarf_version); +- llvm::LLVMRustAddModuleFlag( ++ llvm::LLVMRustAddModuleFlagU32( + self.llmod, + llvm::LLVMModFlagBehavior::Warning, + c"Dwarf Version".as_ptr().cast(), +@@ -118,7 +118,7 @@ impl<'ll, 'tcx> CodegenUnitDebugContext<'ll, 'tcx> { + ); + } else { + // Indicate that we want CodeView debug information on MSVC +- llvm::LLVMRustAddModuleFlag( ++ llvm::LLVMRustAddModuleFlagU32( + self.llmod, + llvm::LLVMModFlagBehavior::Warning, + c"CodeView".as_ptr().cast(), +@@ -127,7 +127,7 @@ impl<'ll, 'tcx> CodegenUnitDebugContext<'ll, 'tcx> { + } + + // Prevent bitcode readers from deleting the debug info. +- llvm::LLVMRustAddModuleFlag( ++ llvm::LLVMRustAddModuleFlagU32( + self.llmod, + llvm::LLVMModFlagBehavior::Warning, + c"Debug Info Version".as_ptr().cast(), +diff --git a/compiler/rustc_codegen_llvm/src/llvm/ffi.rs b/compiler/rustc_codegen_llvm/src/llvm/ffi.rs +index ee73c6b4756f0..4d1fc09c54854 100644 +--- a/compiler/rustc_codegen_llvm/src/llvm/ffi.rs ++++ b/compiler/rustc_codegen_llvm/src/llvm/ffi.rs +@@ -1793,12 +1793,20 @@ extern "C" { + /// + /// In order for Rust-C LTO to work, module flags must be compatible with Clang. What + /// "compatible" means depends on the merge behaviors involved. +- pub fn LLVMRustAddModuleFlag( ++ pub fn LLVMRustAddModuleFlagU32( + M: &Module, + merge_behavior: LLVMModFlagBehavior, + name: *const c_char, + value: u32, + ); ++ ++ pub fn LLVMRustAddModuleFlagString( ++ M: &Module, ++ merge_behavior: LLVMModFlagBehavior, ++ name: *const c_char, ++ value: *const c_char, ++ ); ++ + pub fn LLVMRustHasModuleFlag(M: &Module, name: *const c_char, len: size_t) -> bool; + + pub fn LLVMRustDIBuilderCreate(M: &Module) -> &mut DIBuilder<'_>; +diff --git a/compiler/rustc_codegen_llvm/src/llvm/mod.rs b/compiler/rustc_codegen_llvm/src/llvm/mod.rs +index 4f5cc575da6e5..73cd5e3052413 100644 +--- a/compiler/rustc_codegen_llvm/src/llvm/mod.rs ++++ b/compiler/rustc_codegen_llvm/src/llvm/mod.rs +@@ -324,3 +324,8 @@ impl Drop for OperandBundleDef<'_> { + } + } + } ++ ++pub enum LLVMModFlagValue { ++ String(String), ++ U32(u32), ++} +diff --git a/compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp b/compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp +index 0df7b7eed11f9..7408526f6ebef 100644 +--- a/compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp ++++ b/compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp +@@ -748,7 +748,7 @@ extern "C" uint32_t LLVMRustVersionMinor() { return LLVM_VERSION_MINOR; } + + extern "C" uint32_t LLVMRustVersionMajor() { return LLVM_VERSION_MAJOR; } + +-extern "C" void LLVMRustAddModuleFlag( ++extern "C" void LLVMRustAddModuleFlagU32( + LLVMModuleRef M, + Module::ModFlagBehavior MergeBehavior, + const char *Name, +@@ -756,6 +756,15 @@ extern "C" void LLVMRustAddModuleFlag( + unwrap(M)->addModuleFlag(MergeBehavior, Name, Value); + } + ++extern "C" void LLVMRustAddModuleFlagString( ++ LLVMModuleRef M, ++ Module::ModFlagBehavior MergeBehavior, ++ const char *Name, ++ const char *Value) { ++ llvm::LLVMContext &Ctx = unwrap(M)->getContext(); ++ unwrap(M)->addModuleFlag(MergeBehavior, Name, llvm::MDString::get(Ctx, Value)); ++} ++ + extern "C" bool LLVMRustHasModuleFlag(LLVMModuleRef M, const char *Name, + size_t Len) { + return unwrap(M)->getModuleFlag(StringRef(Name, Len)) != nullptr; diff --git a/rust-1.76.0-aarch64-unknown-linux-gnu.tar.xz b/rust-1.76.0-aarch64-unknown-linux-gnu.tar.xz new file mode 100644 index 0000000..f5b2469 Binary files /dev/null and b/rust-1.76.0-aarch64-unknown-linux-gnu.tar.xz differ diff --git a/rust-1.76.0-x86_64-unknown-linux-gnu.tar.xz b/rust-1.76.0-x86_64-unknown-linux-gnu.tar.xz new file mode 100644 index 0000000..defd8ea Binary files /dev/null and b/rust-1.76.0-x86_64-unknown-linux-gnu.tar.xz differ diff --git a/rust-key.gpg.ascii b/rust-key.gpg.ascii new file mode 100644 index 0000000..93e2282 --- /dev/null +++ b/rust-key.gpg.ascii @@ -0,0 +1,86 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1 + +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 +Mve696B5tlHyc1KxjHR6w9GRsh4= +=5FXw +-----END PGP PUBLIC KEY BLOCK----- diff --git a/rust.spec b/rust.spec new file mode 100644 index 0000000..c1970da --- /dev/null +++ b/rust.spec @@ -0,0 +1,577 @@ +%global bootstrap_rust 1.76.0 +%global bootstrap_cargo 1.76.0 +%global bootstrap_channel 1.76.0 +%global bootstrap_date 2024-02-08 +%global bootstrap_arches x86_64 aarch64 +%bcond_with llvm_static +%bcond_with bundled_llvm +%bcond_without bundled_libgit2 +%bcond_with disabled_libssh2 +%bcond_without lldb +%bcond_without analyzer + +Name: rust +Version: 1.76.0 +Release: 1 +Summary: The Rust Programming Language +License: Apache-2.0 OR MIT +URL: https://www.rust-lang.org +Source0: https://static.rust-lang.org/dist/rustc-%{version}-src.tar.xz +Source1: https://static.rust-lang.org/dist/rustc-%{version}-src.tar.xz.asc +Source2: https://static.rust-lang.org/rust-key.gpg.ascii +# SOURCE3-5: use local mirror for speed up +Source3: cargo-config +Source4: cargo-config.sh +Source5: cargo-config.csh + +Patch0000: rustc-1.76.0-disable-libssh2.patch +# By default, rust tries to use "rust-lld" as a linker for some targets. +Patch0001: 0001-Use-lld-provided-by-system.patch +# Set a substitute-path in rust-gdb for standard library sources. +Patch0002: rustc-1.70.0-rust-gdb-substitute-path.patch +Patch0003: CVE-2024-24575.patch +Patch0004: CVE-2024-24577.patch + +%ifarch riscv64 +Patch1000: embed-riscv64-target-abi-in-bc-when-plugin-_-lto-is-used.patch +%endif + +%{lua: function rust_triple(arch) + local abi = "gnu" + if arch == "armv7hl" then + arch = "armv7" + abi = "gnueabihf" + elseif arch == "ppc64" then + arch = "powerpc64" + elseif arch == "ppc64le" then + arch = "powerpc64le" + elseif arch == "riscv64" then + arch = "riscv64gc" + elseif arch == "loongarch64" then + arch = "loongarch64" + end + return arch.."-unknown-linux-"..abi +end} +%{lua: function rust_musl_triple(arch) + local abi = "musl" + if arch == "riscv64" then + arch = "riscv64gc" + end + return arch.."-unknown-linux-"..abi +end} +%{lua: function rust_musl_root(arch) + if arch == "riscv64" then + arch = "riscv64gc" + end + return "--musl-root-"..arch +end} +%global rust_triple %{lua: print(rust_triple(rpm.expand("%{_target_cpu}")))} +%global rust_musl_triple %{lua: print(rust_musl_triple(rpm.expand("%{_target_cpu}")))} +%global rust_musl_root %{lua: print(rust_musl_root(rpm.expand("%{_target_cpu}")))} +%if %defined bootstrap_arches +%{lua: do + local bootstrap_arches = {} + for arch in string.gmatch(rpm.expand("%{bootstrap_arches}"), "%S+") do + table.insert(bootstrap_arches, arch) + end + local base = rpm.expand("https://static.rust-lang.org/dist/%{bootstrap_date}" + .."/rust-%{bootstrap_channel}") + local target_arch = rpm.expand("%{_target_cpu}") + for i, arch in ipairs(bootstrap_arches) do + print(string.format("Source%d: %s-%s.tar.xz\n", + i+5, base, rust_triple(arch))) + if arch == target_arch then + rpm.define("bootstrap_source "..i+5) + end + end +end} +%endif +%ifarch %{bootstrap_arches} +%global bootstrap_root rust-%{bootstrap_channel}-%{rust_triple} +%global local_rust_root %{_builddir}/%{bootstrap_root}/usr +Provides: bundled(%{name}-bootstrap) = %{bootstrap_rust} +%else +BuildRequires: cargo >= %{bootstrap_cargo} +BuildRequires: (%{name} >= %{bootstrap_rust} with %{name} <= %{version}) +%global local_rust_root %{_prefix} +%endif +BuildRequires: make gcc gcc-c++ ncurses-devel curl curl-devel musl-libc-static musl-gcc pkgconfig(libcurl) pkgconfig(liblzma) +BuildRequires: pkgconfig(openssl) pkgconfig(zlib) pkgconfig(libssh2) >= 1.6.0 gnupg2 wget +%global python python3 +BuildRequires: %{python} +%if %with bundled_llvm +BuildRequires: cmake3 >= 3.13.4 +Provides: bundled(llvm) = 17.0.4 +%else +BuildRequires: cmake >= 2.8.11 +%if %defined llvm +%global llvm_root %{_libdir}/%{llvm} +%else +# default llvm is decent enough on riscv64 +%global llvm llvm-toolset-17-llvm +%global llvm_root /opt/openEuler/llvm-toolset-17/root%{_prefix} +%endif +# rust currently requires llvm 14.0+ +BuildRequires: %{llvm} >= 16.0.0 +BuildRequires: %{llvm}-devel >= 16.0.0 +%if %with llvm_static +BuildRequires: %{llvm}-static libffi-devel +%endif +%endif +BuildRequires: procps-ng +BuildRequires: ninja-build +Provides: rustc = %{version}-%{release} +Provides: rustc%{?_isa} = %{version}-%{release} +Requires: %{name}-std-static%{?_isa} = %{version}-%{release} +Requires: /usr/bin/cc +%global _privatelibs lib(.*-[[:xdigit:]]{16}*|rustc.*)[.]so.* +%global __provides_exclude ^(%{_privatelibs})$ +%global __requires_exclude ^(%{_privatelibs})$ +%global __provides_exclude_from ^(%{_docdir}|%{rustlibdir}/src)/.*$ +%global __requires_exclude_from ^(%{_docdir}|%{rustlibdir}/src)/.*$ +%global _find_debuginfo_opts --keep-section .rustc +%global rustflags -Clink-arg=-Wl,-z,relro,-z,now +%if %{without bundled_llvm} +%if "%{llvm_root}" == "%{_prefix}" || 0%{?scl:1} +%global llvm_has_filecheck 1 +%endif +%endif +%global musl_root %{_prefix}/musl + +# The 'analysis' component is removed since Rust 1.69.0 +# ref: https://github.com/rust-lang/rust/pull/101841 +Obsoletes: %{name}-analysis < 1.69.0~ + +%description +Rust is a systems programming language that runs blazingly fast, prevents +segfaults, and guarantees thread safety. +This package includes the Rust compiler and documentation generator. + +%package std-static +Summary: Standard library for Rust +%description std-static +This package includes the standard libraries for building applications +written in Rust. + +%package debugger-common +Summary: Common debugger pretty printers for Rust +BuildArch: noarch +%description debugger-common +This package includes the common functionality for %{name}-gdb and %{name}-lldb. + +%package gdb +Summary: GDB pretty printers for Rust +BuildArch: noarch +Requires: gdb %{name}-debugger-common = %{version}-%{release} +%description gdb +This package includes the rust-gdb script, which allows easier debugging of Rust +programs. + +%package lldb +Summary: LLDB pretty printers for Rust +BuildArch: noarch +Requires: lldb %{python}-lldb +Requires: %{name}-debugger-common = %{version}-%{release} + +%description lldb +This package includes the rust-lldb script, which allows easier debugging of Rust +programs. + +%package -n cargo +Summary: Rust's package manager and build tool +%if %with bundled_libgit2 +Provides: bundled(libgit2) = 1.1.0 +%endif +BuildRequires: git +Requires: rust +Obsoletes: cargo-vendor <= 0.1.23 +Provides: cargo-vendor = %{version}-%{release} +%description -n cargo +Cargo is a tool that allows Rust projects to declare their various dependencies +and ensure that you'll always get a repeatable build. + +%package -n rustfmt +Summary: Tool to find and fix Rust formatting issues +Requires: cargo +# /usr/bin/rustfmt is dynamically linked against internal rustc libs +Requires: %{name}%{?_isa} = %{version}-%{release} +Obsoletes: rustfmt-preview < 1.0.0 +Provides: rustfmt-preview = %{version}-%{release} +Conflicts: rustfmt-preview < 1.0.0 +%description -n rustfmt +A tool for formatting Rust code according to style guidelines. + +%if %{with analyzer} +%package analyzer +Summary:Rust implementation of the Language Server Protocol +Requires: %{name}-src +# RLS is no longer available as of Rust 1.65, but we're including the stub +# binary that implements LSP just enough to recommend rust-analyzer. +Obsoletes: rls < 1.65.0~ +Obsoletes: rls-preview < 1.31.6 + +%description analyzer +rust-analyzer is an implementation of Language Server Protocol for the Rust +programming language. It provides features like completion and goto definition +for many code editors, including VS Code, Emacs and Vim. +%endif + +%package -n clippy +Summary: Lints to catch common mistakes and improve your Rust code +Requires: cargo %{name}%{?_isa} = %{version}-%{release} +Obsoletes: clippy-preview <= 0.0.212 +Provides: clippy-preview = %{version}-%{release} +Conflicts: clippy-preview <= 0.0.212 +%description -n clippy +A collection of lints to catch common mistakes and improve your Rust code. + +%package src +Summary: Sources for the Rust standard library +BuildArch: noarch +%description src +This package includes source files for the Rust standard library. It may be +useful as a reference for code completion tools in various editors. + +%package help +Summary: Help documents for rust + +Provides: %{name}-doc = %{version}-%{release} %{name}-cargo-doc = %{version}-%{release} +Obsoletes: %{name}-doc < %{version}-%{release} %{name}-cargo-doc < %{version}-%{release} + +%description help +Man pages and other related help documents for rust. + +%prep +# download source0 and gpg check +# wget -qO %{SOURCE0} https://user-repo.openeuler.openatom.cn/lfs-tar/rust/rustc-%{version}-src.tar.xz +gpg --import %{SOURCE2} +gpg --verify %{SOURCE1} %{SOURCE0} + +%ifarch %{bootstrap_arches} +%setup -q -n %{bootstrap_root} -T -b %{bootstrap_source} +./install.sh --components=cargo,rustc,rust-std-%{rust_triple} \ + --prefix=%{local_rust_root} --disable-ldconfig +test -f '%{local_rust_root}/bin/cargo' +test -f '%{local_rust_root}/bin/rustc' +%endif +%setup -q -n rustc-%{version}-src +%if %with disabled_libssh2 +%patch -P 0000 -p1 +%endif +%if "%{python}" != "python3" +sed -i.try-python -e '/^try python3 /i try "%{python}" "$@"' ./configure +%endif +%patch -P 0001 -p1 +%patch -P 0002 -p1 +%patch -P 0003 -p1 +%patch -P 0004 -p1 +%ifarch riscv64 +%patch -P 1000 -p1 +%endif +rm -rf vendor/curl-sys*/curl/ +rm -rf vendor/jemalloc-sys/jemalloc/ +rm -rf vendor/libffi-sys*/libffi/ +rm -rf vendor/libssh2-sys*/libssh2/ +rm -rf vendor/libz-sys*/src/zlib{,-ng}/ +rm -rf vendor/lzma-sys*/xz-*/ +rm -rf vendor/openssl-src*/openssl/ +%if %without bundled_libgit2 +rm -rf vendor/libgit2-sys*/libgit2/ +%endif +%if %with disabled_libssh2 +rm -rf vendor/libssh2-sys*/ +%endif + +# This only affects the transient rust-installer, but let it use our dynamic xz-libs +sed -i.lzma -e '/LZMA_API_STATIC/d' src/bootstrap/src/core/build_steps/tool.rs + +%if %{without bundled_llvm} && %{with llvm_static} +sed -i.ffi -e '$a #[link(name = "ffi")] extern {}' \ + src/librustc_llvm/lib.rs +%endif +find vendor -name .cargo-checksum.json \ + -exec sed -i.uncheck -e 's/"files":{[^}]*}/"files":{ }/' '{}' '+' +find -name '*.rs' -type f -perm /111 -exec chmod -v -x '{}' '+' +%global rust_env RUSTFLAGS="%{rustflags}" +%if 0%{?cmake_path:1} +%global rust_env %{rust_env} PATH="%{cmake_path}:$PATH" +%endif +%if %without bundled_libgit2 +%global rust_env %{rust_env} LIBGIT2_SYS_USE_PKG_CONFIG=1 +%endif +%if %without disabled_libssh2 +%global rust_env %{rust_env} LIBSSH2_SYS_USE_PKG_CONFIG=1 +%endif + +%build +export %{rust_env} +%global common_libdir %{_prefix}/lib +%global rustlibdir %{common_libdir}/rustlib +%ifarch %{arm} %{ix86} s390x +%define enable_debuginfo --debuginfo-level=0 --debuginfo-level-std=2 +%else +%define enable_debuginfo --debuginfo-level=1 +%endif +%ifnarch %{power64} +%define codegen_units_std --set rust.codegen-units-std=1 +%endif +ncpus=$(/usr/bin/getconf _NPROCESSORS_ONLN) +max_cpus=$(( ($(free -g | awk '/^Mem:/{print $2}') + 1) / 2 )) +if [ "$max_cpus" -ge 1 -a "$max_cpus" -lt "$ncpus" ]; then + ncpus="$max_cpus" +fi +# Find the compiler-rt library for the Rust profiler_builtins crate. +# But there are two versions in openEuler. Why? +# We don't have macros.clang so we need clang version here +# This is for avoiding rpm syntax error +%ifarch ppc64le +%global _arch powerpc64le +%endif + +%configure --disable-option-checking \ + --libdir=%{common_libdir} \ +%ifarch loongarch64 + --build=%{rust_triple} --host=%{rust_triple} --target=%{rust_triple} \ +%else + %{rust_musl_root}=%{musl_root} \ + --build=%{rust_triple} --host=%{rust_triple} --target=%{rust_triple},%{rust_musl_triple} \ +%endif + --python=%{python} \ + --local-rust-root=%{local_rust_root} \ + %{!?with_bundled_llvm: --llvm-root=%{llvm_root} \ + %{!?llvm_has_filecheck: --disable-codegen-tests} \ + %{!?with_llvm_static: --enable-llvm-link-shared } } \ + --disable-rpath \ + %{enable_debuginfo} \ + --enable-extended \ + --tools=cargo,clippy,%{?with_analyzer:rls,rust-analyzer,}rustfmt,src \ + --enable-vendor \ + --enable-verbose-tests \ + %{?codegen_units_std} \ + --release-channel=stable +%{python} ./x.py build -j "$ncpus" --stage 2 +%{python} ./x.py doc --stage 2 + +%install +export %{rust_env} +DESTDIR=%{buildroot} %{python} ./x.py install + +# Some of the components duplicate-install binaries, leaving backups we don't want +rm -f %{buildroot}%{_bindir}/*.old + +%if "%{_libdir}" != "%{common_libdir}" +mkdir -p %{buildroot}%{_libdir} +find %{buildroot}%{common_libdir} -maxdepth 1 -type f -name '*.so' \ + -exec mv -v -t %{buildroot}%{_libdir} '{}' '+' +%endif +find %{buildroot}%{_libdir} -maxdepth 1 -type f -name '*.so' \ + -exec chmod -v +x '{}' '+' +(cd "%{buildroot}%{rustlibdir}/%{rust_triple}/lib" && + find ../../../../%{_lib} -maxdepth 1 -name '*.so' | + while read lib; do + if [ -f "${lib##*/}" ]; then + # make sure they're actually identical! + cmp "$lib" "${lib##*/}" + ln -v -f -s -t . "$lib" + fi + done) +find %{buildroot}%{rustlibdir} -maxdepth 1 -type f -exec rm -v '{}' '+' +find %{buildroot}%{rustlibdir} -type f -name '*.orig' -exec rm -v '{}' '+' +find %{buildroot}%{rustlibdir}/src -type f -name '*.py' -exec rm -v '{}' '+' +rm -f %{buildroot}%{_docdir}/%{name}/README.md +rm -f %{buildroot}%{_docdir}/%{name}/COPYRIGHT +rm -f %{buildroot}%{_docdir}/%{name}/LICENSE +rm -f %{buildroot}%{_docdir}/%{name}/LICENSE-APACHE +rm -f %{buildroot}%{_docdir}/%{name}/LICENSE-MIT +rm -f %{buildroot}%{_docdir}/%{name}/LICENSE-THIRD-PARTY +rm -f %{buildroot}%{_docdir}/%{name}/*.old +find %{buildroot}%{_docdir}/%{name}/html -empty -delete +find %{buildroot}%{_docdir}/%{name}/html -type f -exec chmod -x '{}' '+' +mkdir -p %{buildroot}%{_datadir}/cargo/registry +mkdir -p %{buildroot}%{_docdir}/cargo +ln -sT ../rust/html/cargo/ %{buildroot}%{_docdir}/cargo/html + +# install default config for cargo mirror +install -m 0644 -D -p %{SOURCE3} %{buildroot}%{_sysconfdir}/skel/.cargo/config.toml +install -m 0644 -D -p %{SOURCE4} %{buildroot}%{_sysconfdir}/profile.d/cargo-config.sh +install -m 0644 -D -p %{SOURCE5} %{buildroot}%{_sysconfdir}/profile.d/cargo-config.csh + +%if %{with analyzer} +# The rls stub doesn't have an install target, but we can just copy it. +%{__install} -t %{buildroot}%{_bindir} build/%{rust_triple}/stage2-tools-bin/rls +%endif + +%if %without lldb +rm -f %{buildroot}%{_bindir}/rust-lldb +rm -f %{buildroot}%{rustlibdir}/etc/lldb_* +%endif +rm -f %{buildroot}%{rustlibdir}/%{rust_triple}/bin/rust-ll* + +%check +export %{rust_env} +%{python} ./x.py test --no-fail-fast --stage 2 || : +%{python} ./x.py test --no-fail-fast --stage 2 cargo || : +%{python} ./x.py test --no-fail-fast --stage 2 clippy || : +%if %{with analyzer} +%{python} ./x.py test --no-fail-fast --stage 2 rust-analyzer || : +%endif +%{python} ./x.py test --no-fail-fast --stage 2 rustfmt || : +%ldconfig_scriptlets + +%files +%license COPYRIGHT LICENSE-APACHE LICENSE-MIT +%license %{_docdir}/%{name}/html/*.txt +%doc README.md +%{_bindir}/rustc +%{_bindir}/rustdoc +%{_libdir}/*.so +%dir %{rustlibdir} +%dir %{rustlibdir}/%{rust_triple} +%dir %{rustlibdir}/%{rust_triple}/lib +%if %{with analyzer} +%{_libexecdir}/rust-analyzer-proc-macro-srv +%endif +%{rustlibdir}/%{rust_triple}/lib/*.so +%ifnarch loongarch64 +%dir %{rustlibdir}/%{rust_musl_triple} +%dir %{rustlibdir}/%{rust_musl_triple}/lib +%endif + +%files std-static +%dir %{rustlibdir} +%dir %{rustlibdir}/%{rust_triple} +%dir %{rustlibdir}/%{rust_triple}/lib +%{rustlibdir}/%{rust_triple}/lib/*.rlib +%ifnarch loongarch64 +%dir %{rustlibdir}/%{rust_musl_triple} +%dir %{rustlibdir}/%{rust_musl_triple}/lib +%{rustlibdir}/%{rust_musl_triple}/lib/*.rlib +%{rustlibdir}/%{rust_musl_triple}/lib/self-contained/*.o +%{rustlibdir}/%{rust_musl_triple}/lib/self-contained/libunwind.a +%{rustlibdir}/%{rust_musl_triple}/lib/self-contained/libc.a +%endif + +%files debugger-common +%dir %{rustlibdir} +%dir %{rustlibdir}/etc +%{rustlibdir}/etc/rust_*.py* + +%files gdb +%{_bindir}/rust-gdb +%{rustlibdir}/etc/gdb_* +%exclude %{_bindir}/rust-gdbgui +%if %with lldb + +%files lldb +%{_bindir}/rust-lldb +%{rustlibdir}/etc/lldb_* +%endif + +%files -n cargo +%license src/tools/cargo/LICENSE-APACHE src/tools/cargo/LICENSE-MIT src/tools/cargo/LICENSE-THIRD-PARTY +%doc src/tools/cargo/README.md +%config(noreplace) %{_sysconfdir}/skel/.cargo/config.toml +%{_sysconfdir}/profile.d/cargo-config.* +%{_bindir}/cargo +%{_sysconfdir}/bash_completion.d/cargo +%{_datadir}/zsh/site-functions/_cargo +%dir %{_datadir}/cargo +%dir %{_datadir}/cargo/registry + +%files -n rustfmt +%{_bindir}/rustfmt +%{_bindir}/cargo-fmt +%doc src/tools/rustfmt/{README,CHANGELOG,Configurations}.md +%license src/tools/rustfmt/LICENSE-{APACHE,MIT} + +%if %{with analyzer} +%files analyzer +%{_bindir}/rls +%{_bindir}/rust-analyzer +%doc src/tools/rust-analyzer/README.md +%license src/tools/rust-analyzer/LICENSE-{APACHE,MIT} +%endif + +%files -n clippy +%{_bindir}/cargo-clippy +%{_bindir}/clippy-driver +%doc src/tools/clippy/{README.md,CHANGELOG.md} +%license src/tools/clippy/LICENSE-{APACHE,MIT} + +%files src +%dir %{rustlibdir} +%{rustlibdir}/src + +%files help +%dir %{_docdir}/%{name} +%docdir %{_docdir}/%{name} +%{_docdir}/%{name}/html +%dir %{_docdir}/cargo +%docdir %{_docdir}/cargo +%{_docdir}/cargo/html +%{_mandir}/man1/rustc.1* +%{_mandir}/man1/rustdoc.1* +%{_mandir}/man1/cargo*.1* + +%changelog +* Mon Feb 24 2025 wangkai <13474090681@163.com> - 1.76.0-1 +- Update to 1.76.0 because firefox update 128ESR version +- Fix CVE-2022-21658 CVE-2022-46176 CVE-2023-38497 +- Obsoletes rust-analysis + +* Sat Feb 17 2024 wangkai <13474090681@163.com> - 1.64.0-3 +- Fix CVE-2024-24575,CVE-2024-24577 + +* Sun Jul 30 2023 Funda Wang - 1.64.0-2 +- Use local mirror for speed up + +* Thu May 11 2023 wangkai <13474090681@163.com> - 1.64.0-1 +- Update to 1.64.0 + +* Tue Nov 01 2022 wangkai - 1.60.0-1 +- Update to 1.60.0 + +* Thu May 26 2022 fushanqing - 1.58.1-1 +- update to 1.58.1 + +* Mon Feb 14 2022 chenchen - 1.57.0-1 +- Update to 1.57.0 + +* Tue Aug 24 2021 caodongxia - 1.51.0-9 +- Fix rustdoc error info + +* Wed Aug 18 2021 yaoxin - 1.51.0-8 +- Fix CVE-2021-29922 + +* Wed Aug 04 2021 chenyanpanHW - 1.51.0-7 +- DESC: delete BuildRequires gdb + +* Thu Jul 08 2021 Jiajie Li - 1.51.0-6 +- Add build require of ninja and llvm + +* Thu Jul 01 2021 Jiajie Li - 1.51.0-5 +- Add support for musl target + +* Thu Jun 24 2021 sunguoshuai - 1.51.0-4 +- fix a println wrong format + +* Thu Jun 24 2021 sunguoshuai - 1.51.0-3 +- cargo help clippy should have description to user + +* Wed Jun 23 2021 sunguoshuai - 1.51.0-2 +- clippy-driver usage should user friendly + +* Fri May 07 2021 wangyue - 1.51.0-1 +- Update to 1.51.0 + +* Mon Nov 30 2020 Jeffery.Gao - 1.45.2-2 +- fix upgrade error + +* Mon Sep 21 2020 Jeffery.Gao - 1.45.2-1 +- Update to 1.45.2 + +* Fri Apr 17 2020 zhujunhao - 1.29.1-4 +- add llvm in rust + +* Thu Dec 5 2019 wutao - 1.29.1-3 +- Package init diff --git a/rust.yaml b/rust.yaml new file mode 100644 index 0000000..45b29fd --- /dev/null +++ b/rust.yaml @@ -0,0 +1,4 @@ +version_control: github +src_repo: rust-lang/rust +tag_prefix: ^ +seperator: . diff --git a/rustc-1.70.0-rust-gdb-substitute-path.patch b/rustc-1.70.0-rust-gdb-substitute-path.patch new file mode 100644 index 0000000..e9e5e2e --- /dev/null +++ b/rustc-1.70.0-rust-gdb-substitute-path.patch @@ -0,0 +1,21 @@ +diff --git a/src/etc/rust-gdb b/src/etc/rust-gdb +index 9abed30ea6f7..e4bf55df3688 100755 +--- a/src/etc/rust-gdb ++++ b/src/etc/rust-gdb +@@ -13,8 +13,6 @@ fi + # Find out where the pretty printer Python module is + RUSTC_SYSROOT="$("$RUSTC" --print=sysroot)" + GDB_PYTHON_MODULE_DIRECTORY="$RUSTC_SYSROOT/lib/rustlib/etc" +-# Get the commit hash for path remapping +-RUSTC_COMMIT_HASH="$("$RUSTC" -vV | sed -n 's/commit-hash: \([a-zA-Z0-9_]*\)/\1/p')" + + # Run GDB with the additional arguments that load the pretty printers + # Set the environment variable `RUST_GDB` to overwrite the call to a +@@ -23,6 +21,6 @@ RUST_GDB="${RUST_GDB:-gdb}" + PYTHONPATH="$PYTHONPATH:$GDB_PYTHON_MODULE_DIRECTORY" exec ${RUST_GDB} \ + --directory="$GDB_PYTHON_MODULE_DIRECTORY" \ + -iex "add-auto-load-safe-path $GDB_PYTHON_MODULE_DIRECTORY" \ +- -iex "set substitute-path /rustc/$RUSTC_COMMIT_HASH $RUSTC_SYSROOT/lib/rustlib/src/rust" \ ++ -iex "set substitute-path @BUILDDIR@ $RUSTC_SYSROOT/lib/rustlib/src/rust" \ + "$@" + diff --git a/rustc-1.76.0-disable-libssh2.patch b/rustc-1.76.0-disable-libssh2.patch new file mode 100644 index 0000000..2c6fba2 --- /dev/null +++ b/rustc-1.76.0-disable-libssh2.patch @@ -0,0 +1,42 @@ +--- rustc-beta-src/src/tools/cargo/Cargo.lock.orig 2024-01-07 18:12:08.000000000 -0800 ++++ rustc-beta-src/src/tools/cargo/Cargo.lock 2024-01-09 15:25:51.519781381 -0800 +@@ -2071,7 +2071,6 @@ + dependencies = [ + "cc", + "libc", +- "libssh2-sys", + "libz-sys", + "openssl-sys", + "pkg-config", +@@ -2113,20 +2112,6 @@ + "pkg-config", + "vcpkg", + ] +- +-[[package]] +-name = "libssh2-sys" +-version = "0.3.0" +-source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "2dc8a030b787e2119a731f1951d6a773e2280c660f8ec4b0f5e1505a386e71ee" +-dependencies = [ +- "cc", +- "libc", +- "libz-sys", +- "openssl-sys", +- "pkg-config", +- "vcpkg", +-] + + [[package]] + name = "libz-sys" +--- rustc-beta-src/src/tools/cargo/Cargo.toml.orig 2024-01-09 15:23:02.369032291 -0800 ++++ rustc-beta-src/src/tools/cargo/Cargo.toml 2024-01-09 15:24:44.015679666 -0800 +@@ -40,7 +40,7 @@ + curl-sys = "0.4.70" + filetime = "0.2.22" + flate2 = { version = "1.0.28", default-features = false, features = ["zlib"] } +-git2 = "0.18.1" ++git2 = { version = "0.18.1", default-features = false, features = ["https"] } + git2-curl = "0.19.0" + gix = { version = "0.56.0", default-features = false, features = ["blocking-http-transport-curl", "progress-tree", "revision"] } + gix-features-for-configuration-only = { version = "0.35.0", package = "gix-features", features = [ "parallel" ] } diff --git a/rustc-1.76.0-src.tar.xz b/rustc-1.76.0-src.tar.xz new file mode 100644 index 0000000..668cdb7 Binary files /dev/null and b/rustc-1.76.0-src.tar.xz differ diff --git a/rustc-1.76.0-src.tar.xz.asc b/rustc-1.76.0-src.tar.xz.asc new file mode 100644 index 0000000..70cbdc7 --- /dev/null +++ b/rustc-1.76.0-src.tar.xz.asc @@ -0,0 +1,16 @@ +-----BEGIN PGP SIGNATURE----- + +wsFcBAABCgAQBQJlxNqSCRCFq5bm+hvl/gAA8kIP/ib21y3Rg18POvESXFDPmXAT +blvZsJwR4GsPcUeT2cUYEsWqrtEjoEjMPDumhaSJY4nt6wuAdpCSDf9RQxFSn5vW +Um68Q4dMqmIA2BOIbgDYIBwMUm+Q/ft+1eaKvitJSldqJCTFVXCee1MxeHpE9HSb +2sBC1sGD0aPecMJ9gnSYo57O9rAtItfWroek8KJ+NOxWABHkbRxhx4wSTK4mPy1i +DAtL4VYXomN3OvU1JiunAKhyuIttnrkH92x+YeUlNwOeLTECfLp8sq9yD0hgAkdW +b12ARrQCnBV3HwrgQNIw78ypPOSDYj4B++NB5F2j3wMCyIs6j/891F14ugzLEHuO +b1sjw/xW12kgUbRoyoW/5o60qE18QxgKaxNfgRme/XEF7hBxwFhOcc3BrBTvcA70 +enFXpiqswpdvAMpW/YNEwT+Zm0UnWmsU9NXSB4cc8otL9Hj4oYyfX1q6XgmuyupL +jNXSd5evfTEjqcnpHFe0pnNJEExET7EQsEWFgn9J4K7hymSu/bliHMBIx+DAA4Ry +IMBP51oj+o+I8E84z9LDlBshGvcJvYsAXMrbpHonng7u9smitSA+oAy54qevS8+9 +kK+UYY95Pl++BxdAFemsldoC0KkKJXGxK0FR2o1ttAA1I+uXrJLJXg8/K7binCeW +A7AXRJdE/spq/O9snPcA +=lnbm +-----END PGP SIGNATURE-----