From fc23a8a7e0fe32ef18214ced7ee79e111a40df69 Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Sun, 28 May 2023 12:45:05 +0000 Subject: [PATCH] Lazily patch coretests --- build_system/prepare.rs | 17 +---------------- build_system/tests.rs | 32 ++++++++++++++++++++++++++++---- 2 files changed, 29 insertions(+), 20 deletions(-) diff --git a/build_system/prepare.rs b/build_system/prepare.rs index 0302946e654..8cf51db1770 100644 --- a/build_system/prepare.rs +++ b/build_system/prepare.rs @@ -6,7 +6,6 @@ use std::process::Command; use super::build_sysroot::{BUILD_SYSROOT, ORIG_BUILD_SYSROOT, SYSROOT_RUSTC_VERSION, SYSROOT_SRC}; use super::path::{Dirs, RelPath}; use super::rustc_info::{get_default_sysroot, get_rustc_version}; -use super::tests::LIBCORE_TESTS_SRC; use super::utils::{ copy_dir_recursively, git_command, remove_dir_if_exists, retry_spawn_and_wait, spawn_and_wait, }; @@ -19,7 +18,6 @@ pub(crate) fn prepare(dirs: &Dirs, rustc: &Path) { // FIXME do this on the fly? prepare_stdlib(dirs, rustc); - prepare_coretests(dirs, rustc); super::tests::RAND_REPO.patch(dirs); super::tests::REGEX_REPO.patch(dirs); @@ -44,19 +42,6 @@ fn prepare_stdlib(dirs: &Dirs, rustc: &Path) { fs::write(SYSROOT_RUSTC_VERSION.to_path(dirs), &rustc_version).unwrap(); } -fn prepare_coretests(dirs: &Dirs, rustc: &Path) { - let sysroot_src_orig = get_default_sysroot(rustc).join("lib/rustlib/src/rust"); - assert!(sysroot_src_orig.exists()); - - // FIXME ensure builds error out or update the copy if any of the files copied here change - apply_patches( - dirs, - "coretests", - &sysroot_src_orig.join("library/core/tests"), - &LIBCORE_TESTS_SRC.to_path(dirs), - ); -} - pub(crate) struct GitRepo { url: GitRepoUrl, rev: &'static str, @@ -263,7 +248,7 @@ fn get_patches(dirs: &Dirs, crate_name: &str) -> Vec { patches } -fn apply_patches(dirs: &Dirs, crate_name: &str, source_dir: &Path, target_dir: &Path) { +pub(crate) fn apply_patches(dirs: &Dirs, crate_name: &str, source_dir: &Path, target_dir: &Path) { // FIXME avoid copy and patch if src, patches and target are unchanged remove_dir_if_exists(target_dir); diff --git a/build_system/tests.rs b/build_system/tests.rs index e60f0a4c612..ec97be2b2d9 100644 --- a/build_system/tests.rs +++ b/build_system/tests.rs @@ -1,12 +1,14 @@ use super::build_sysroot; use super::config; use super::path::{Dirs, RelPath}; -use super::prepare::GitRepo; +use super::prepare::{apply_patches, GitRepo}; +use super::rustc_info::get_default_sysroot; use super::utils::{spawn_and_wait, spawn_and_wait_with_input, CargoProject, Compiler}; use super::{CodegenBackend, SysrootKind}; use std::env; use std::ffi::OsStr; use std::fs; +use std::path::PathBuf; use std::process::Command; static BUILD_EXAMPLE_OUT_DIR: RelPath = RelPath::BUILD.join("example"); @@ -125,9 +127,9 @@ pub(crate) static PORTABLE_SIMD_REPO: GitRepo = GitRepo::github( pub(crate) static PORTABLE_SIMD: CargoProject = CargoProject::new(&PORTABLE_SIMD_REPO.source_dir(), "portable_simd_target"); -pub(crate) static LIBCORE_TESTS_SRC: RelPath = RelPath::BUILD.join("coretests_src"); +static LIBCORE_TESTS_SRC: RelPath = RelPath::BUILD.join("coretests_src"); -pub(crate) static LIBCORE_TESTS: CargoProject = CargoProject::new(&LIBCORE_TESTS_SRC, "core_tests"); +static LIBCORE_TESTS: CargoProject = CargoProject::new(&LIBCORE_TESTS_SRC, "core_tests"); const EXTENDED_SYSROOT_SUITE: &[TestCase] = &[ TestCase::custom("test.rust-random/rand", &|runner| { @@ -145,6 +147,13 @@ const EXTENDED_SYSROOT_SUITE: &[TestCase] = &[ } }), TestCase::custom("test.libcore", &|runner| { + apply_patches( + &runner.dirs, + "coretests", + &runner.stdlib_source.join("library/core/tests"), + &LIBCORE_TESTS_SRC.to_path(&runner.dirs), + ); + LIBCORE_TESTS.clean(&runner.dirs); if runner.is_native { @@ -231,6 +240,10 @@ pub(crate) fn run_tests( rustup_toolchain_name: Option<&str>, target_triple: String, ) { + let stdlib_source = + get_default_sysroot(&bootstrap_host_compiler.rustc).join("lib/rustlib/src/rust"); + assert!(stdlib_source.exists()); + if config::get_bool("testsuite.no_sysroot") { let target_compiler = build_sysroot::build_sysroot( dirs, @@ -247,6 +260,7 @@ pub(crate) fn run_tests( target_compiler, use_unstable_features, bootstrap_host_compiler.triple == target_triple, + stdlib_source.clone(), ); BUILD_EXAMPLE_OUT_DIR.ensure_fresh(dirs); @@ -277,6 +291,7 @@ pub(crate) fn run_tests( target_compiler, use_unstable_features, bootstrap_host_compiler.triple == target_triple, + stdlib_source, ); if run_base_sysroot { @@ -299,6 +314,7 @@ struct TestRunner { use_unstable_features: bool, dirs: Dirs, target_compiler: Compiler, + stdlib_source: PathBuf, } impl TestRunner { @@ -307,6 +323,7 @@ impl TestRunner { mut target_compiler: Compiler, use_unstable_features: bool, is_native: bool, + stdlib_source: PathBuf, ) -> Self { if let Ok(rustflags) = env::var("RUSTFLAGS") { target_compiler.rustflags.push(' '); @@ -327,7 +344,14 @@ impl TestRunner { && target_compiler.triple.contains("x86_64") && !target_compiler.triple.contains("windows"); - Self { is_native, jit_supported, use_unstable_features, dirs, target_compiler } + Self { + is_native, + jit_supported, + use_unstable_features, + dirs, + target_compiler, + stdlib_source, + } } fn run_testsuite(&self, tests: &[TestCase]) {