bootstrap: only build crt{begin,end}.o when compiling to MUSL
only MUSL needs those objects and trying to compile them to other targets, e.g. Windows or macOS, will produce C compilation errors check the target before shelling out to the C compiler and tweak `make_run` to skip the actual C compilation when the target is not MUSL fixes #135782
This commit is contained in:
parent
b5741a36a8
commit
88260f4ba4
3 changed files with 8 additions and 2 deletions
|
|
@ -339,7 +339,7 @@ fn copy_self_contained_objects(
|
|||
// to using gcc from a glibc-targeting toolchain for linking.
|
||||
// To do that we have to distribute musl startup objects as a part of Rust toolchain
|
||||
// and link with them manually in the self-contained mode.
|
||||
if target.contains("musl") && !target.contains("unikraft") {
|
||||
if target.needs_crt_begin_end() {
|
||||
let srcdir = builder.musl_libdir(target).unwrap_or_else(|| {
|
||||
panic!("Target {:?} does not have a \"musl-libdir\" key", target.triple)
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1295,7 +1295,9 @@ impl Step for CrtBeginEnd {
|
|||
}
|
||||
|
||||
fn make_run(run: RunConfig<'_>) {
|
||||
run.builder.ensure(CrtBeginEnd { target: run.target });
|
||||
if run.target.needs_crt_begin_end() {
|
||||
run.builder.ensure(CrtBeginEnd { target: run.target });
|
||||
}
|
||||
}
|
||||
|
||||
/// Build crtbegin.o/crtend.o for musl target.
|
||||
|
|
|
|||
|
|
@ -573,6 +573,10 @@ impl TargetSelection {
|
|||
env::var("OSTYPE").is_ok_and(|v| v.to_lowercase().contains("cygwin"))
|
||||
}
|
||||
|
||||
pub fn needs_crt_begin_end(&self) -> bool {
|
||||
self.contains("musl") && !self.contains("unikraft")
|
||||
}
|
||||
|
||||
/// Path to the file defining the custom target, if any.
|
||||
pub fn filepath(&self) -> Option<&Path> {
|
||||
self.file.as_ref().map(Path::new)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue