提交 6c048723 编写于 作者: A Alex Crichton

std: Prepare for linking to musl

This commit modifies the standard library and its dependencies to link correctly
when built against MUSL. This primarily ensures that the right libraries are
linked against and when they're linked against they're linked against
statically.
上级 d0985173
......@@ -211,7 +211,9 @@ fn je_malloc_stats_print(write_cb: Option<extern "C" fn(cbopaque: *mut c_void,
}
// -lpthread needs to occur after -ljemalloc, the earlier argument isn't enough
#[cfg(all(not(windows), not(target_os = "android")))]
#[cfg(all(not(windows),
not(target_os = "android"),
not(target_env = "musl")))]
#[link(name = "pthread")]
extern {}
......
......@@ -140,11 +140,15 @@
// On NaCl, these libraries are static. Thus it would be a Bad Idea to link them
// in when creating a test crate.
#[cfg(not(any(windows, all(target_os = "nacl", test))))]
#[cfg(not(any(windows, target_env = "musl", all(target_os = "nacl", test))))]
#[link(name = "c")]
#[link(name = "m")]
extern {}
#[cfg(all(target_env = "musl", not(test)))]
#[link(name = "c", kind = "static")]
extern {}
// libnacl provides functions that require a trip through the IRT to work.
// ie: _exit, mmap, nanosleep, etc. Anything that would otherwise require a trip
// to the kernel.
......
......@@ -125,7 +125,9 @@ mod tests {
use path::Path;
#[test]
#[cfg_attr(any(windows, target_os = "android"), ignore)] // FIXME #8818, #10379
#[cfg_attr(any(windows,
target_os = "android", // FIXME #10379
target_env = "musl"), ignore)]
fn test_loading_cosine() {
// The math library does not need to be loaded since it is already
// statically linked in
......
......@@ -97,10 +97,15 @@ pub enum _Unwind_Context {}
extern "C" fn(unwind_code: _Unwind_Reason_Code,
exception: *mut _Unwind_Exception);
#[cfg(any(target_os = "linux", target_os = "freebsd"))]
#[cfg(any(all(target_os = "linux", not(target_env = "musl")),
target_os = "freebsd"))]
#[link(name = "gcc_s")]
extern {}
#[cfg(all(target_os = "linux", target_env = "musl", not(test)))]
#[link(name = "unwind", kind = "static")]
extern {}
#[cfg(any(target_os = "android", target_os = "openbsd"))]
#[link(name = "gcc")]
extern {}
......
......@@ -24,7 +24,7 @@
//
// On Linux, librt and libdl are indirect dependencies via std,
// and binutils 2.22+ won't add them automatically
#[cfg(target_os = "linux")]
#[cfg(all(target_os = "linux", not(target_env = "musl")))]
#[link(name = "dl")]
#[link(name = "pthread")]
extern {}
......
......@@ -82,7 +82,8 @@ pub struct SteadyTime {
// OpenBSD provide it via libc
#[cfg(not(any(target_os = "android",
target_os = "bitrig",
target_os = "openbsd")))]
target_os = "openbsd",
target_env = "musl")))]
#[link(name = "rt")]
extern {}
......
......@@ -364,6 +364,7 @@ unsafe fn register_dtor(t: *mut u8, dtor: unsafe extern fn(*mut u8)) {
use sys_common::thread_local as os;
extern {
#[linkage = "extern_weak"]
static __dso_handle: *mut u8;
#[linkage = "extern_weak"]
static __cxa_thread_atexit_impl: *const ();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册