about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAnthony Ramine <nox@nox.paris>2020-02-12 12:06:14 +0100
committerAnthony Ramine <nox@nox.paris>2020-02-12 12:06:14 +0100
commit15adbf6e086794d197e744db815476994b9ce3d7 (patch)
treeb87274e4205c75eb462f6c7110d8b02d29eb962b
parente6db6697fa84271695a96570370f3f194785699a (diff)
downloadrust-15adbf6e086794d197e744db815476994b9ce3d7.tar.gz
rust-15adbf6e086794d197e744db815476994b9ce3d7.zip
Properly use the darwin archive format on Apple targets
See https://github.com/servo/servo/issues/25550.
-rw-r--r--src/librustc_codegen_llvm/llvm/ffi.rs1
-rw-r--r--src/librustc_codegen_llvm/llvm/mod.rs1
-rw-r--r--src/librustc_target/spec/apple_base.rs2
-rw-r--r--src/rustllvm/ArchiveWrapper.cpp3
4 files changed, 6 insertions, 1 deletions
diff --git a/src/librustc_codegen_llvm/llvm/ffi.rs b/src/librustc_codegen_llvm/llvm/ffi.rs
index 146b7d3d76c..fca4b1c598c 100644
--- a/src/librustc_codegen_llvm/llvm/ffi.rs
+++ b/src/librustc_codegen_llvm/llvm/ffi.rs
@@ -459,6 +459,7 @@ pub enum ArchiveKind {
     Other,
     K_GNU,
     K_BSD,
+    K_DARWIN,
     K_COFF,
 }
 
diff --git a/src/librustc_codegen_llvm/llvm/mod.rs b/src/librustc_codegen_llvm/llvm/mod.rs
index eb13d6a575f..96014cbee5d 100644
--- a/src/librustc_codegen_llvm/llvm/mod.rs
+++ b/src/librustc_codegen_llvm/llvm/mod.rs
@@ -69,6 +69,7 @@ impl FromStr for ArchiveKind {
         match s {
             "gnu" => Ok(ArchiveKind::K_GNU),
             "bsd" => Ok(ArchiveKind::K_BSD),
+            "darwin" => Ok(ArchiveKind::K_DARWIN),
             "coff" => Ok(ArchiveKind::K_COFF),
             _ => Err(()),
         }
diff --git a/src/librustc_target/spec/apple_base.rs b/src/librustc_target/spec/apple_base.rs
index 325efd10973..d116ddf952a 100644
--- a/src/librustc_target/spec/apple_base.rs
+++ b/src/librustc_target/spec/apple_base.rs
@@ -26,7 +26,7 @@ pub fn opts() -> TargetOptions {
         has_rpath: true,
         dll_prefix: "lib".to_string(),
         dll_suffix: ".dylib".to_string(),
-        archive_format: "bsd".to_string(),
+        archive_format: "darwin".to_string(),
         pre_link_args: LinkArgs::new(),
         has_elf_tls: version >= (10, 7),
         abi_return_struct_as_int: true,
diff --git a/src/rustllvm/ArchiveWrapper.cpp b/src/rustllvm/ArchiveWrapper.cpp
index 678d787571e..93704638f83 100644
--- a/src/rustllvm/ArchiveWrapper.cpp
+++ b/src/rustllvm/ArchiveWrapper.cpp
@@ -38,6 +38,7 @@ enum class LLVMRustArchiveKind {
   Other,
   GNU,
   BSD,
+  DARWIN,
   COFF,
 };
 
@@ -47,6 +48,8 @@ static Archive::Kind fromRust(LLVMRustArchiveKind Kind) {
     return Archive::K_GNU;
   case LLVMRustArchiveKind::BSD:
     return Archive::K_BSD;
+  case LLVMRustArchiveKind::DARWIN:
+    return Archive::K_DARWIN;
   case LLVMRustArchiveKind::COFF:
     return Archive::K_COFF;
   default: