about summary refs log tree commit diff
path: root/pkgs/development/compilers/swift/compiler/patches/swift-linux-fix-linking.patch
blob: e09d5162a93a44167188a47a3a2eccef7f038deb (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
--- a/lib/Driver/ToolChains.cpp
+++ b/lib/Driver/ToolChains.cpp
@@ -1475,7 +1475,17 @@ const char *ToolChain::getClangLinkerDriver(
 
     // If there is a linker driver in the toolchain folder, use that instead.
     if (auto tool = llvm::sys::findProgramByName(LinkerDriver, {toolchainPath}))
-      LinkerDriver = Args.MakeArgString(tool.get());
+      return Args.MakeArgString(tool.get());
+  }
+
+  // For Nix, prefer linking using the wrapped system clang, instead of using
+  // the unwrapped clang packaged with swift. The latter is unable to link, but
+  // we still want to use it for other purposes (clang importer).
+  if (auto nixCC = llvm::sys::Process::GetEnv("NIX_CC")) {
+    llvm::SmallString<128> binDir(nixCC.getValue());
+    llvm::sys::path::append(binDir, "bin");
+    if (auto tool = llvm::sys::findProgramByName(LinkerDriver, {binDir.str()}))
+      return Args.MakeArgString(tool.get());
   }
 
   return LinkerDriver;