Author: Jonas Devlieghere Date: 2021-04-21T14:22:13-07:00 New Revision: 6331680ad2ad000fdaf7e72f3c1880c7908ffa25
URL: https://github.com/llvm/llvm-project/commit/6331680ad2ad000fdaf7e72f3c1880c7908ffa25 DIFF: https://github.com/llvm/llvm-project/commit/6331680ad2ad000fdaf7e72f3c1880c7908ffa25.diff LOG: Re-land "[Driver] Support default libc++ library location on Darwin" This reverts commit 05eeed9691aeb3e0316712195b998e9078cdceb0 and after fixing the impacted lldb tests in 5d1c43f333c2327be61604dc90ea675f0d1e6913. [Driver] Support default libc++ library location on Darwin Darwin driver currently uses libc++ headers that are part of Clang toolchain when available (by default ../include/c++/v1 relative to executable), but it completely ignores the libc++ library itself because it doesn't pass the location of libc++ library that's part of Clang (by default ../lib relative to the exceutable) to the linker always using the system copy of libc++. This may lead to subtle issues when the compilation fails because the headers that are part of Clang toolchain are incompatible with the system library. Either the driver should ignore both headers as well as the library, or it should always try to use both when available. This patch changes the driver behavior to do the latter which seems more reasonable, it makes it easy to test and use custom libc++ build on Darwin while still allowing the use of system version. This also matches the Clang driver behavior on other systems. Differential Revision: https://reviews.llvm.org/D45639 Added: Modified: clang/lib/Driver/ToolChains/Darwin.cpp clang/test/Driver/darwin-ld.c Removed: ################################################################################ diff --git a/clang/lib/Driver/ToolChains/Darwin.cpp b/clang/lib/Driver/ToolChains/Darwin.cpp index bc59b6beafc7..06d4f2f4df0b 100644 --- a/clang/lib/Driver/ToolChains/Darwin.cpp +++ b/clang/lib/Driver/ToolChains/Darwin.cpp @@ -615,6 +615,8 @@ void darwin::Linker::ConstructJob(Compilation &C, const JobAction &JA, Args.AddAllArgs(CmdArgs, options::OPT_L); + getToolChain().AddFilePathLibArgs(Args, CmdArgs); + AddLinkerInputs(getToolChain(), Inputs, Args, CmdArgs, JA); // Build the input file for -filelist (list of linker input files) in case we // need it later @@ -802,6 +804,7 @@ MachO::MachO(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) getProgramPaths().push_back(getDriver().getInstalledDir()); if (getDriver().getInstalledDir() != getDriver().Dir) getProgramPaths().push_back(getDriver().Dir); + getFilePaths().push_back(getDriver().Dir + "/../lib"); } /// Darwin - Darwin tool chain for i386 and x86_64. diff --git a/clang/test/Driver/darwin-ld.c b/clang/test/Driver/darwin-ld.c index 15e5d100afcb..9fe68f1821c9 100644 --- a/clang/test/Driver/darwin-ld.c +++ b/clang/test/Driver/darwin-ld.c @@ -365,3 +365,7 @@ // RUN: FileCheck -check-prefix=MNO_OUTLINE %s < %t.log // MNO_OUTLINE: {{ld(.exe)?"}} // MNO_OUTLINE-SAME: "-mllvm" "-enable-machine-outliner=never" + +// RUN: %clang -target x86_64-apple-darwin10 -### %t.o 2> %t.log +// RUN: FileCheck -check-prefix=INSTALL-DIR %s < %t.log +// INSTALL-DIR: "-L{{.*}}{{/|\\\\}}..{{/|\\\\}}lib" _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits