Only include metadata for non-dynamic libraries in rustc-dev
The actual object code should be linked from librustc_driver.so, which is still included in rustc-dev. This saves on download time and disk usage.
This commit is contained in:
parent
96c1f338bb
commit
5c84f76f57
@ -105,7 +105,7 @@ impl Step for Std {
|
||||
"Checking stage{} library artifacts ({} -> {})",
|
||||
builder.top_stage, &compiler.host, target
|
||||
));
|
||||
run_cargo(builder, cargo, &libstd_stamp(builder, compiler, target), vec![], true);
|
||||
run_cargo(builder, cargo, &libstd_stamp(builder, compiler, target), vec![], true, false);
|
||||
|
||||
// We skip populating the sysroot in non-zero stage because that'll lead
|
||||
// to rlib/rmeta conflicts if std gets built during this session.
|
||||
@ -155,7 +155,14 @@ impl Step for Std {
|
||||
"Checking stage{} library test/bench/example targets ({} -> {})",
|
||||
builder.top_stage, &compiler.host, target
|
||||
));
|
||||
run_cargo(builder, cargo, &libstd_test_stamp(builder, compiler, target), vec![], true);
|
||||
run_cargo(
|
||||
builder,
|
||||
cargo,
|
||||
&libstd_test_stamp(builder, compiler, target),
|
||||
vec![],
|
||||
true,
|
||||
false,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@ -225,7 +232,7 @@ impl Step for Rustc {
|
||||
"Checking stage{} compiler artifacts ({} -> {})",
|
||||
builder.top_stage, &compiler.host, target
|
||||
));
|
||||
run_cargo(builder, cargo, &librustc_stamp(builder, compiler, target), vec![], true);
|
||||
run_cargo(builder, cargo, &librustc_stamp(builder, compiler, target), vec![], true, false);
|
||||
|
||||
let libdir = builder.sysroot_libdir(compiler, target);
|
||||
let hostdir = builder.sysroot_libdir(compiler, compiler.host);
|
||||
@ -285,6 +292,7 @@ impl Step for CodegenBackend {
|
||||
&codegen_backend_stamp(builder, compiler, target, backend),
|
||||
vec![],
|
||||
true,
|
||||
false,
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -343,7 +351,7 @@ impl Step for RustAnalyzer {
|
||||
"Checking stage{} {} artifacts ({} -> {})",
|
||||
compiler.stage, "rust-analyzer", &compiler.host.triple, target.triple
|
||||
));
|
||||
run_cargo(builder, cargo, &stamp(builder, compiler, target), vec![], true);
|
||||
run_cargo(builder, cargo, &stamp(builder, compiler, target), vec![], true, false);
|
||||
|
||||
/// Cargo's output path in a given stage, compiled by a particular
|
||||
/// compiler for the specified target.
|
||||
@ -417,6 +425,7 @@ macro_rules! tool_check_step {
|
||||
&stamp(builder, compiler, target),
|
||||
vec![],
|
||||
true,
|
||||
false,
|
||||
);
|
||||
|
||||
/// Cargo's output path in a given stage, compiled by a particular
|
||||
|
@ -141,7 +141,14 @@ impl Step for Std {
|
||||
&compiler.host,
|
||||
target,
|
||||
));
|
||||
run_cargo(builder, cargo, &libstd_stamp(builder, compiler, target), target_deps, false);
|
||||
run_cargo(
|
||||
builder,
|
||||
cargo,
|
||||
&libstd_stamp(builder, compiler, target),
|
||||
target_deps,
|
||||
false,
|
||||
false,
|
||||
);
|
||||
|
||||
builder.ensure(StdLink::from_std(
|
||||
self,
|
||||
@ -728,7 +735,14 @@ impl Step for Rustc {
|
||||
&compiler.host,
|
||||
target,
|
||||
));
|
||||
run_cargo(builder, cargo, &librustc_stamp(builder, compiler, target), vec![], false);
|
||||
run_cargo(
|
||||
builder,
|
||||
cargo,
|
||||
&librustc_stamp(builder, compiler, target),
|
||||
vec![],
|
||||
false,
|
||||
true, // Only ship rustc_driver.so and .rmeta files, not all intermediate .rlib files.
|
||||
);
|
||||
|
||||
builder.ensure(RustcLink::from_rustc(
|
||||
self,
|
||||
@ -984,7 +998,7 @@ impl Step for CodegenBackend {
|
||||
"Building stage{} codegen backend {} ({} -> {})",
|
||||
compiler.stage, backend, &compiler.host, target
|
||||
));
|
||||
let files = run_cargo(builder, cargo, &tmp_stamp, vec![], false);
|
||||
let files = run_cargo(builder, cargo, &tmp_stamp, vec![], false, false);
|
||||
if builder.config.dry_run() {
|
||||
return;
|
||||
}
|
||||
@ -1411,6 +1425,7 @@ pub fn run_cargo(
|
||||
stamp: &Path,
|
||||
additional_target_deps: Vec<(PathBuf, DependencyType)>,
|
||||
is_check: bool,
|
||||
rlib_only_metadata: bool,
|
||||
) -> Vec<PathBuf> {
|
||||
if builder.config.dry_run() {
|
||||
return Vec::new();
|
||||
@ -1444,13 +1459,35 @@ pub fn run_cargo(
|
||||
};
|
||||
for filename in filenames {
|
||||
// Skip files like executables
|
||||
if !(filename.ends_with(".rlib")
|
||||
|| filename.ends_with(".lib")
|
||||
let mut keep = false;
|
||||
if filename.ends_with(".lib")
|
||||
|| filename.ends_with(".a")
|
||||
|| is_debug_info(&filename)
|
||||
|| is_dylib(&filename)
|
||||
|| (is_check && filename.ends_with(".rmeta")))
|
||||
{
|
||||
// Always keep native libraries, rust dylibs and debuginfo
|
||||
keep = true;
|
||||
}
|
||||
if is_check && filename.ends_with(".rmeta") {
|
||||
// During check builds we need to keep crate metadata
|
||||
keep = true;
|
||||
} else if rlib_only_metadata {
|
||||
if filename.contains("jemalloc_sys") || filename.contains("rustc_smir") {
|
||||
// jemalloc_sys and rustc_smir are not linked into librustc_driver.so,
|
||||
// so we need to distribute them as rlib to be able to use them.
|
||||
keep |= filename.ends_with(".rlib");
|
||||
} else {
|
||||
// Distribute the rest of the rustc crates as rmeta files only to reduce
|
||||
// the tarball sizes by about 50%. The object files are linked into
|
||||
// librustc_driver.so, so it is still possible to link against them.
|
||||
keep |= filename.ends_with(".rmeta");
|
||||
}
|
||||
} else {
|
||||
// In all other cases keep all rlibs
|
||||
keep |= filename.ends_with(".rlib");
|
||||
}
|
||||
|
||||
if !keep {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user