handle stage0 cargo and rustc separately

This change allows setting either `build.cargo` or `build.rustc` without requiring
both to be set simultaneously, which was not possible previously.

To try it, set `build.rustc` without setting `build.cargo`, and try to bootstrap on clean build.

Signed-off-by: onur-ozkan <work@onurozkan.dev>
This commit is contained in:
onur-ozkan 2024-08-23 12:08:41 +03:00
parent a32d4a0e82
commit 5f2cedc5dc

View File

@ -533,9 +533,13 @@ class RustBuild(object):
bin_root = self.bin_root() bin_root = self.bin_root()
key = self.stage0_compiler.date key = self.stage0_compiler.date
if self.rustc().startswith(bin_root) and \ is_outdated = self.program_out_of_date(self.rustc_stamp(), key)
(not os.path.exists(self.rustc()) or need_rustc = self.rustc().startswith(bin_root) and (not os.path.exists(self.rustc()) \
self.program_out_of_date(self.rustc_stamp(), key)): or is_outdated)
need_cargo = self.cargo().startswith(bin_root) and (not os.path.exists(self.cargo()) \
or is_outdated)
if need_rustc or need_cargo:
if os.path.exists(bin_root): if os.path.exists(bin_root):
# HACK: On Windows, we can't delete rust-analyzer-proc-macro-server while it's # HACK: On Windows, we can't delete rust-analyzer-proc-macro-server while it's
# running. Kill it. # running. Kill it.
@ -556,7 +560,6 @@ class RustBuild(object):
run_powershell([script]) run_powershell([script])
shutil.rmtree(bin_root) shutil.rmtree(bin_root)
key = self.stage0_compiler.date
cache_dst = (self.get_toml('bootstrap-cache-path', 'build') or cache_dst = (self.get_toml('bootstrap-cache-path', 'build') or
os.path.join(self.build_dir, "cache")) os.path.join(self.build_dir, "cache"))
@ -568,11 +571,16 @@ class RustBuild(object):
toolchain_suffix = "{}-{}{}".format(rustc_channel, self.build, tarball_suffix) toolchain_suffix = "{}-{}{}".format(rustc_channel, self.build, tarball_suffix)
tarballs_to_download = [ tarballs_to_download = []
("rust-std-{}".format(toolchain_suffix), "rust-std-{}".format(self.build)),
("rustc-{}".format(toolchain_suffix), "rustc"), if need_rustc:
("cargo-{}".format(toolchain_suffix), "cargo"), tarballs_to_download.append(
] ("rust-std-{}".format(toolchain_suffix), "rust-std-{}".format(self.build))
)
tarballs_to_download.append(("rustc-{}".format(toolchain_suffix), "rustc"))
if need_cargo:
tarballs_to_download.append(("cargo-{}".format(toolchain_suffix), "cargo"))
tarballs_download_info = [ tarballs_download_info = [
DownloadInfo( DownloadInfo(