Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
1--- a/lib/Driver/ToolChains.cpp 2+++ b/lib/Driver/ToolChains.cpp 3@@ -1475,7 +1475,17 @@ const char *ToolChain::getClangLinkerDriver( 4 5 // If there is a linker driver in the toolchain folder, use that instead. 6 if (auto tool = llvm::sys::findProgramByName(LinkerDriver, {toolchainPath})) 7- LinkerDriver = Args.MakeArgString(tool.get()); 8+ return Args.MakeArgString(tool.get()); 9+ } 10+ 11+ // For Nix, prefer linking using the wrapped system clang, instead of using 12+ // the unwrapped clang packaged with swift. The latter is unable to link, but 13+ // we still want to use it for other purposes (clang importer). 14+ if (auto nixCC = llvm::sys::Process::GetEnv("NIX_CC")) { 15+ llvm::SmallString<128> binDir(nixCC.getValue()); 16+ llvm::sys::path::append(binDir, "bin"); 17+ if (auto tool = llvm::sys::findProgramByName(LinkerDriver, {binDir.str()})) 18+ return Args.MakeArgString(tool.get()); 19 } 20 21 return LinkerDriver;