rust: Cache bootstrap downloads to $(DL_DIR)/rustc
authorJeffery To <jeffery.to@gmail.com>
Sun, 1 Oct 2023 20:52:32 +0000 (04:52 +0800)
committerJeffery To <jeffery.to@gmail.com>
Thu, 12 Oct 2023 05:59:32 +0000 (13:59 +0800)
Signed-off-by: Jeffery To <jeffery.to@gmail.com>
(cherry picked from commit 35768bf31e5867046874dc6fd0374ff8fe575da2)

lang/rust/Makefile
lang/rust/patches/0002-rustc-bootstrap-cache.patch [new file with mode: 0644]

index 63c587beb6d080373d94f18e5a9743e755d60374..37fe20aeb0215571869ff389d65f0405cc936d71 100644 (file)
@@ -82,6 +82,7 @@ endef
 define Host/Compile
        ( \
                cd $(HOST_BUILD_DIR) ; \
+               OPENWRT_RUSTC_BOOTSTRAP_CACHE=$(DL_DIR)/rustc \
                $(PYTHON) x.py --config ./config.toml dist build-manifest cargo llvm-tools \
                        rustc rust-std rust-src ; \
        )
diff --git a/lang/rust/patches/0002-rustc-bootstrap-cache.patch b/lang/rust/patches/0002-rustc-bootstrap-cache.patch
new file mode 100644 (file)
index 0000000..670ba11
--- /dev/null
@@ -0,0 +1,37 @@
+--- a/src/bootstrap/bootstrap.py
++++ b/src/bootstrap/bootstrap.py
+@@ -543,7 +543,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/download.rs
++++ b/src/bootstrap/download.rs
+@@ -507,7 +507,10 @@ impl Config {
+         key: &str,
+         destination: &str,
+     ) {
+-        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));
+@@ -627,7 +630,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));