diff options
Diffstat (limited to 'src/compiletest')
| -rw-r--r-- | src/compiletest/header.rs | 4 | ||||
| -rw-r--r-- | src/compiletest/runtest.rs | 15 | ||||
| -rw-r--r-- | src/compiletest/util.rs | 4 |
3 files changed, 22 insertions, 1 deletions
diff --git a/src/compiletest/header.rs b/src/compiletest/header.rs index f5505b6e83a..a648e51497e 100644 --- a/src/compiletest/header.rs +++ b/src/compiletest/header.rs @@ -170,6 +170,9 @@ pub fn is_test_ignored(config: &Config, testfile: &Path) -> bool { format!("ignore-{}", config.stage_id.split('-').next().unwrap()) } + fn ignore_env(config: &Config) -> String { + format!("ignore-{}", util::get_env(&config.target).unwrap_or("<unknown>")) + } fn ignore_gdb(config: &Config, line: &str) -> bool { if config.mode != common::DebugInfoGdb { return false; @@ -231,6 +234,7 @@ pub fn is_test_ignored(config: &Config, testfile: &Path) -> bool { !parse_name_directive(ln, &ignore_target(config)) && !parse_name_directive(ln, &ignore_architecture(config)) && !parse_name_directive(ln, &ignore_stage(config)) && + !parse_name_directive(ln, &ignore_env(config)) && !(config.mode == common::Pretty && parse_name_directive(ln, "ignore-pretty")) && !(config.target != config.host && parse_name_directive(ln, "ignore-cross-compile")) && !ignore_gdb(config, ln) && diff --git a/src/compiletest/runtest.rs b/src/compiletest/runtest.rs index 3d4aebad9d6..33d4f761eea 100644 --- a/src/compiletest/runtest.rs +++ b/src/compiletest/runtest.rs @@ -1233,7 +1233,20 @@ fn compose_and_run_compiler(config: &Config, props: &TestProps, let mut crate_type = if aux_props.no_prefer_dynamic { Vec::new() } else { - vec!("--crate-type=dylib".to_string()) + // We primarily compile all auxiliary libraries as dynamic libraries + // to avoid code size bloat and large binaries as much as possible + // for the test suite (otherwise including libstd statically in all + // executables takes up quite a bit of space). + // + // For targets like MUSL, however, there is no support for dynamic + // libraries so we just go back to building a normal library. Note, + // however, that if the library is built with `force_host` then it's + // ok to be a dylib as the host should always support dylibs. + if config.target.contains("musl") && !aux_props.force_host { + vec!("--crate-type=lib".to_string()) + } else { + vec!("--crate-type=dylib".to_string()) + } }; crate_type.extend(extra_link_args.clone().into_iter()); let aux_args = diff --git a/src/compiletest/util.rs b/src/compiletest/util.rs index a8b26cb3ef7..184d62db451 100644 --- a/src/compiletest/util.rs +++ b/src/compiletest/util.rs @@ -60,6 +60,10 @@ pub fn get_arch(triple: &str) -> &'static str { panic!("Cannot determine Architecture from triple"); } +pub fn get_env(triple: &str) -> Option<&str> { + triple.split('-').nth(3) +} + pub fn make_new_path(path: &str) -> String { assert!(cfg!(windows)); // Windows just uses PATH as the library search path, so we have to |
