mirror of
https://github.com/Ysurac/openmptcprouter-feeds.git
synced 2025-02-15 03:51:51 +00:00
Update Rust patches (#499)
This commit is contained in:
commit
ec8d3b4b6d
3 changed files with 155 additions and 55 deletions
|
@ -0,0 +1,47 @@
|
||||||
|
From bd479113d38aa453cbad9d9f5ca9c5fc8903b0cf Mon Sep 17 00:00:00 2001
|
||||||
|
From: onur-ozkan <work@onurozkan.dev>
|
||||||
|
Date: Thu, 11 Apr 2024 14:57:10 +0300
|
||||||
|
Subject: [PATCH] correct the handling of `bootstrap-cache-path` option
|
||||||
|
|
||||||
|
This change makes `build.bootstrap-cache-path` option to be configurable with
|
||||||
|
`./configure` script, so it can be used like `./configure --bootstrap-cache-path=demo`.
|
||||||
|
|
||||||
|
Signed-off-by: onur-ozkan <work@onurozkan.dev>
|
||||||
|
---
|
||||||
|
config.example.toml | 2 +-
|
||||||
|
src/bootstrap/configure.py | 4 +++-
|
||||||
|
2 files changed, 4 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
--- a/config.example.toml
|
||||||
|
+++ b/config.example.toml
|
||||||
|
@@ -302,7 +302,7 @@
|
||||||
|
|
||||||
|
# Set the bootstrap/download cache path. It is useful when building rust
|
||||||
|
# repeatedly in a CI invironment.
|
||||||
|
-# bootstrap-cache-path = /shared/cache
|
||||||
|
+#bootstrap-cache-path = /path/to/shared/cache
|
||||||
|
|
||||||
|
# Enable a build of the extended Rust tool set which is not only the compiler
|
||||||
|
# but also tools such as Cargo. This will also produce "combined installers"
|
||||||
|
--- a/src/bootstrap/configure.py
|
||||||
|
+++ b/src/bootstrap/configure.py
|
||||||
|
@@ -152,9 +152,9 @@ v("default-linker", "rust.default-linker
|
||||||
|
# (others are conditionally saved).
|
||||||
|
o("manage-submodules", "build.submodules", "let the build manage the git submodules")
|
||||||
|
o("full-bootstrap", "build.full-bootstrap", "build three compilers instead of two (not recommended except for testing reproducible builds)")
|
||||||
|
-o("bootstrap-cache-path", "build.bootstrap-cache-path", "use provided path for the bootstrap cache")
|
||||||
|
o("extended", "build.extended", "build an extended rust tool set")
|
||||||
|
|
||||||
|
+v("bootstrap-cache-path", None, "use provided path for the bootstrap cache")
|
||||||
|
v("tools", None, "List of extended tools will be installed")
|
||||||
|
v("codegen-backends", None, "List of codegen backends to build")
|
||||||
|
v("build", "build.build", "GNUs ./configure syntax LLVM build triple")
|
||||||
|
@@ -359,6 +359,8 @@ def apply_args(known_args, option_checki
|
||||||
|
set('target.{}.llvm-filecheck'.format(build_triple), value, config)
|
||||||
|
elif option.name == 'tools':
|
||||||
|
set('build.tools', value.split(','), config)
|
||||||
|
+ elif option.name == 'bootstrap-cache-path':
|
||||||
|
+ set('build.bootstrap-cache-path', value, config)
|
||||||
|
elif option.name == 'codegen-backends':
|
||||||
|
set('rust.codegen-backends', value.split(','), config)
|
||||||
|
elif option.name == 'host':
|
|
@ -1,55 +0,0 @@
|
||||||
--- a/src/bootstrap/bootstrap.py
|
|
||||||
+++ b/src/bootstrap/bootstrap.py
|
|
||||||
@@ -557,7 +557,7 @@ class RustBuild(object):
|
|
||||||
shutil.rmtree(bin_root)
|
|
||||||
|
|
||||||
key = self.stage0_compiler.date
|
|
||||||
- cache_dst = os.path.join(self.build_dir, "cache")
|
|
||||||
+ cache_dst = os.getenv('OPENWRT_RUSTC_BOOTSTRAP_CACHE', os.path.join(self.build_dir, "cache"))
|
|
||||||
rustc_cache = os.path.join(cache_dst, key)
|
|
||||||
if not os.path.exists(rustc_cache):
|
|
||||||
os.makedirs(rustc_cache)
|
|
||||||
--- a/src/bootstrap/src/core/download.rs
|
|
||||||
+++ b/src/bootstrap/src/core/download.rs
|
|
||||||
@@ -208,10 +208,13 @@ impl Config {
|
|
||||||
Some(other) => panic!("unsupported protocol {other} in {url}"),
|
|
||||||
None => panic!("no protocol in {url}"),
|
|
||||||
}
|
|
||||||
- t!(
|
|
||||||
- std::fs::rename(&tempfile, dest_path),
|
|
||||||
- format!("failed to rename {tempfile:?} to {dest_path:?}")
|
|
||||||
- );
|
|
||||||
+ match std::fs::rename(&tempfile, dest_path) {
|
|
||||||
+ Ok(v) => v,
|
|
||||||
+ Err(_) => {
|
|
||||||
+ t!(std::fs::copy(&tempfile, dest_path));
|
|
||||||
+ t!(std::fs::remove_file(&tempfile));
|
|
||||||
+ }
|
|
||||||
+ };
|
|
||||||
}
|
|
||||||
|
|
||||||
fn download_http_with_retries(&self, tempfile: &Path, url: &str, help_on_error: &str) {
|
|
||||||
@@ -577,7 +580,10 @@ impl Config {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
- let cache_dst = self.out.join("cache");
|
|
||||||
+ let cache_dst = match env::var_os("OPENWRT_RUSTC_BOOTSTRAP_CACHE") {
|
|
||||||
+ Some(v) => PathBuf::from(v),
|
|
||||||
+ None => self.out.join("cache"),
|
|
||||||
+ };
|
|
||||||
let cache_dir = cache_dst.join(key);
|
|
||||||
if !cache_dir.exists() {
|
|
||||||
t!(fs::create_dir_all(&cache_dir));
|
|
||||||
@@ -704,7 +710,10 @@ download-rustc = false
|
|
||||||
let llvm_assertions = self.llvm_assertions;
|
|
||||||
|
|
||||||
let cache_prefix = format!("llvm-{llvm_sha}-{llvm_assertions}");
|
|
||||||
- let cache_dst = self.out.join("cache");
|
|
||||||
+ let cache_dst = match env::var_os("OPENWRT_RUSTC_BOOTSTRAP_CACHE") {
|
|
||||||
+ Some(v) => PathBuf::from(v),
|
|
||||||
+ None => self.out.join("cache"),
|
|
||||||
+ };
|
|
||||||
let rustc_cache = cache_dst.join(cache_prefix);
|
|
||||||
if !rustc_cache.exists() {
|
|
||||||
t!(fs::create_dir_all(&rustc_cache));
|
|
108
rust/patches/0004-Use-an-helper-to-move-the-files.patch
Normal file
108
rust/patches/0004-Use-an-helper-to-move-the-files.patch
Normal file
|
@ -0,0 +1,108 @@
|
||||||
|
From 4db00fe229f08b06feeee552ae53af9f49c25048 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Luca Barbato <lu_zero@gentoo.org>
|
||||||
|
Date: Fri, 10 May 2024 16:38:19 +0200
|
||||||
|
Subject: [PATCH] Use an helper to move the files
|
||||||
|
|
||||||
|
In case the source is not in the same filesystem.
|
||||||
|
---
|
||||||
|
src/bootstrap/src/core/build_steps/dist.rs | 6 ++++--
|
||||||
|
src/bootstrap/src/core/download.rs | 6 +++---
|
||||||
|
src/bootstrap/src/utils/helpers.rs | 15 +++++++++++++++
|
||||||
|
src/bootstrap/src/utils/tarball.rs | 4 ++--
|
||||||
|
4 files changed, 24 insertions(+), 7 deletions(-)
|
||||||
|
|
||||||
|
--- a/src/bootstrap/src/core/build_steps/dist.rs
|
||||||
|
+++ b/src/bootstrap/src/core/build_steps/dist.rs
|
||||||
|
@@ -26,7 +26,9 @@ use crate::core::build_steps::tool::{sel
|
||||||
|
use crate::core::builder::{Builder, Kind, RunConfig, ShouldRun, Step};
|
||||||
|
use crate::core::config::TargetSelection;
|
||||||
|
use crate::utils::channel;
|
||||||
|
-use crate::utils::helpers::{exe, is_dylib, output, t, target_supports_cranelift_backend, timeit};
|
||||||
|
+use crate::utils::helpers::{
|
||||||
|
+ exe, is_dylib, move_file, output, t, target_supports_cranelift_backend, timeit,
|
||||||
|
+};
|
||||||
|
use crate::utils::tarball::{GeneratedTarball, OverlayKind, Tarball};
|
||||||
|
use crate::{Compiler, DependencyType, Mode, LLVM_TOOLS};
|
||||||
|
|
||||||
|
@@ -1993,7 +1995,7 @@ impl Step for Extended {
|
||||||
|
builder.run(&mut cmd);
|
||||||
|
|
||||||
|
if !builder.config.dry_run() {
|
||||||
|
- t!(fs::rename(exe.join(&filename), distdir(builder).join(&filename)));
|
||||||
|
+ t!(move_file(exe.join(&filename), distdir(builder).join(&filename)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
--- a/src/bootstrap/src/core/download.rs
|
||||||
|
+++ b/src/bootstrap/src/core/download.rs
|
||||||
|
@@ -12,7 +12,7 @@ use build_helper::ci::CiEnv;
|
||||||
|
use xz2::bufread::XzDecoder;
|
||||||
|
|
||||||
|
use crate::core::config::RustfmtMetadata;
|
||||||
|
-use crate::utils::helpers::{check_run, exe, program_out_of_date};
|
||||||
|
+use crate::utils::helpers::{check_run, exe, move_file, program_out_of_date};
|
||||||
|
use crate::{core::build_steps::llvm::detect_llvm_sha, utils::helpers::hex_encode};
|
||||||
|
use crate::{t, Config};
|
||||||
|
|
||||||
|
@@ -209,7 +209,7 @@ impl Config {
|
||||||
|
None => panic!("no protocol in {url}"),
|
||||||
|
}
|
||||||
|
t!(
|
||||||
|
- std::fs::rename(&tempfile, dest_path),
|
||||||
|
+ move_file(&tempfile, dest_path),
|
||||||
|
format!("failed to rename {tempfile:?} to {dest_path:?}")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
@@ -313,7 +313,7 @@ impl Config {
|
||||||
|
if src_path.is_dir() && dst_path.exists() {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
- t!(fs::rename(src_path, dst_path));
|
||||||
|
+ t!(move_file(src_path, dst_path));
|
||||||
|
}
|
||||||
|
let dst_dir = dst.join(directory_prefix);
|
||||||
|
if dst_dir.exists() {
|
||||||
|
--- a/src/bootstrap/src/utils/helpers.rs
|
||||||
|
+++ b/src/bootstrap/src/utils/helpers.rs
|
||||||
|
@@ -150,6 +150,21 @@ pub fn symlink_dir(config: &Config, orig
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+/// Rename a file if from and to are in the same filesystem or
|
||||||
|
+/// copy and remove the file otherwise
|
||||||
|
+pub fn move_file<P: AsRef<Path>, Q: AsRef<Path>>(from: P, to: Q) -> io::Result<()> {
|
||||||
|
+ match fs::rename(&from, &to) {
|
||||||
|
+ // FIXME: Once `ErrorKind::CrossesDevices` is stabilized use
|
||||||
|
+ // if e.kind() == io::ErrorKind::CrossesDevices {
|
||||||
|
+ #[cfg(unix)]
|
||||||
|
+ Err(e) if e.raw_os_error() == Some(libc::EXDEV) => {
|
||||||
|
+ std::fs::copy(&from, &to)?;
|
||||||
|
+ std::fs::remove_file(&from)
|
||||||
|
+ }
|
||||||
|
+ r => r,
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
pub fn forcing_clang_based_tests() -> bool {
|
||||||
|
if let Some(var) = env::var_os("RUSTBUILD_FORCE_CLANG_BASED_TESTS") {
|
||||||
|
match &var.to_string_lossy().to_lowercase()[..] {
|
||||||
|
--- a/src/bootstrap/src/utils/tarball.rs
|
||||||
|
+++ b/src/bootstrap/src/utils/tarball.rs
|
||||||
|
@@ -6,7 +6,7 @@ use std::{
|
||||||
|
use crate::core::builder::Builder;
|
||||||
|
use crate::core::{build_steps::dist::distdir, builder::Kind};
|
||||||
|
use crate::utils::channel;
|
||||||
|
-use crate::utils::helpers::t;
|
||||||
|
+use crate::utils::helpers::{move_file, t};
|
||||||
|
|
||||||
|
#[derive(Copy, Clone)]
|
||||||
|
pub(crate) enum OverlayKind {
|
||||||
|
@@ -269,7 +269,7 @@ impl<'a> Tarball<'a> {
|
||||||
|
// name, not "image". We rename the image directory just before passing
|
||||||
|
// into rust-installer.
|
||||||
|
let dest = self.temp_dir.join(self.package_name());
|
||||||
|
- t!(std::fs::rename(&self.image_dir, &dest));
|
||||||
|
+ t!(move_file(&self.image_dir, &dest));
|
||||||
|
|
||||||
|
self.run(|this, cmd| {
|
||||||
|
let distdir = distdir(this.builder);
|
Loading…
Reference in a new issue