This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rGaf744f0b84e2: [LLD][COFF] Add LLVM toolchain library paths
by default. (authored by thieta).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D151188/new/
https://reviews.llvm.org/D151188
Files:
clang/lib/Driver/Driver.cpp
lld/COFF/Driver.cpp
lld/COFF/Driver.h
lld/docs/ReleaseNotes.rst
lld/test/COFF/print-search-paths.s
Index: lld/test/COFF/print-search-paths.s
===================================================================
--- lld/test/COFF/print-search-paths.s
+++ lld/test/COFF/print-search-paths.s
@@ -4,11 +4,17 @@
# RUN: llvm-mc -triple i686-windows-msvc %s -filetype=obj -o %t_32.obj
# RUN: lld-link -safeseh:no /dll /noentry /winsysroot:%t.dir/sysroot /vctoolsversion:1.1.1.1 /winsdkversion:10.0.1 %t_32.obj -print-search-paths | FileCheck -DSYSROOT=%t.dir -check-prefix=X86 %s
# CHECK: Library search paths:
+# CHECK: [[CPATH:.*]]lib{{[/\\]}}clang{{[/\\]}}{{[0-9]+}}{{[/\\]}}lib{{[/\\]}}windows
+# CHECK: [[CPATH]]lib{{[/\\]}}clang{{[/\\]}}{{[0-9]+}}{{[/\\]}}lib
+# CHECK: [[CPATH]]lib
# CHECK: [[SYSROOT]]{{[/\\]}}sysroot{{[/\\]}}VC{{[/\\]}}Tools{{[/\\]}}MSVC{{[/\\]}}1.1.1.1{{[/\\]}}lib{{[/\\]}}x64
# CHECK: [[SYSROOT]]{{[/\\]}}sysroot{{[/\\]}}VC{{[/\\]}}Tools{{[/\\]}}MSVC{{[/\\]}}1.1.1.1{{[/\\]}}atlmfc{{[/\\]}}lib{{[/\\]}}x64
# CHECK: [[SYSROOT]]{{[/\\]}}sysroot{{[/\\]}}Windows Kits{{[/\\]}}10{{[/\\]}}Lib{{[/\\]}}10.0.1{{[/\\]}}ucrt{{[/\\]}}x64
# CHECK: [[SYSROOT]]{{[/\\]}}sysroot{{[/\\]}}Windows Kits{{[/\\]}}10{{[/\\]}}Lib{{[/\\]}}10.0.1{{[/\\]}}um{{[/\\]}}x64
# X86: Library search paths:
+# X86: [[CPATH:.*]]lib{{[/\\]}}clang{{[/\\]}}{{[0-9]+}}{{[/\\]}}lib{{[/\\]}}windows
+# X86: [[CPATH]]lib{{[/\\]}}clang{{[/\\]}}{{[0-9]+}}{{[/\\]}}lib
+# X86: [[CPATH]]lib
# X86: [[SYSROOT]]{{[/\\]}}sysroot{{[/\\]}}VC{{[/\\]}}Tools{{[/\\]}}MSVC{{[/\\]}}1.1.1.1{{[/\\]}}lib{{[/\\]}}x86
# X86: [[SYSROOT]]{{[/\\]}}sysroot{{[/\\]}}VC{{[/\\]}}Tools{{[/\\]}}MSVC{{[/\\]}}1.1.1.1{{[/\\]}}atlmfc{{[/\\]}}lib{{[/\\]}}x86
# X86: [[SYSROOT]]{{[/\\]}}sysroot{{[/\\]}}Windows Kits{{[/\\]}}10{{[/\\]}}Lib{{[/\\]}}10.0.1{{[/\\]}}ucrt{{[/\\]}}x86
Index: lld/docs/ReleaseNotes.rst
===================================================================
--- lld/docs/ReleaseNotes.rst
+++ lld/docs/ReleaseNotes.rst
@@ -42,6 +42,12 @@
current directory.
I.e. ``lld-link /libpath:c:\relative\root relative\path\my.lib`` where before
we would have to do ``lld-link /libpath:c:\relative\root\relative\path my.lib``
+* lld-link learned -print-search-paths that will print all the paths where it will
+ search for libraries.
+* By default lld-link will now search for libraries in the toolchain directories.
+ Specifically it will search:
+ ``<toolchain>/lib``, ``<toolchain>/lib/clang/<version>/lib`` and
+ ``<toolchain>/lib/clang/<version>/lib/windows``.
MinGW Improvements
------------------
Index: lld/COFF/Driver.h
===================================================================
--- lld/COFF/Driver.h
+++ lld/COFF/Driver.h
@@ -84,6 +84,8 @@
// config->machine has been set.
void addWinSysRootLibSearchPaths();
+ void addClangLibSearchPaths(const std::string &argv0);
+
// Used by the resolver to parse .drectve section contents.
void parseDirectives(InputFile *file);
Index: lld/COFF/Driver.cpp
===================================================================
--- lld/COFF/Driver.cpp
+++ lld/COFF/Driver.cpp
@@ -637,6 +637,31 @@
}
}
+void LinkerDriver::addClangLibSearchPaths(const std::string &argv0) {
+ std::string lldBinary = sys::fs::getMainExecutable(argv0.c_str(), nullptr);
+ SmallString<128> binDir(lldBinary);
+ sys::path::remove_filename(binDir); // remove lld-link.exe
+ StringRef rootDir = sys::path::parent_path(binDir); // remove 'bin'
+
+ SmallString<128> libDir(rootDir);
+ sys::path::append(libDir, "lib");
+ // We need to prepend the paths here in order to make sure that we always
+ // try to link the clang versions of the builtins over the ones supplied by MSVC.
+ searchPaths.insert(searchPaths.begin(), saver().save(libDir.str()));
+
+ // Add the resource dir library path
+ SmallString<128> runtimeLibDir(rootDir);
+ sys::path::append(runtimeLibDir, "lib", "clang", std::to_string(LLVM_VERSION_MAJOR), "lib");
+ searchPaths.insert(searchPaths.begin(), saver().save(runtimeLibDir.str()));
+
+ // Resource dir + osname, which is hardcoded to windows since we are in the
+ // COFF driver.
+ SmallString<128> runtimeLibDirWithOS(runtimeLibDir);
+ sys::path::append(runtimeLibDirWithOS, "windows");
+ searchPaths.insert(searchPaths.begin(), saver().save(runtimeLibDirWithOS.str()));
+
+}
+
void LinkerDriver::addWinSysRootLibSearchPaths() {
if (!diaPath.empty()) {
// The DIA SDK always uses the legacy vc arch, even in new MSVC versions.
@@ -1543,6 +1568,7 @@
detectWinSysRoot(args);
if (!args.hasArg(OPT_lldignoreenv) && !args.hasArg(OPT_winsysroot))
addLibSearchPaths();
+ addClangLibSearchPaths(argsArr[0]);
// Handle /ignore
for (auto *arg : args.filtered(OPT_ignore)) {
Index: clang/lib/Driver/Driver.cpp
===================================================================
--- clang/lib/Driver/Driver.cpp
+++ clang/lib/Driver/Driver.cpp
@@ -184,6 +184,8 @@
// path of the embedding binary, which for LLVM binaries will be in bin/.
// ../lib gets us to lib/ in both cases.
P = llvm::sys::path::parent_path(Dir);
+ // This search path is also created in the COFF driver of lld, so any
+ // changes here also needs to happen in lld/COFF/Driver.cpp
llvm::sys::path::append(P, CLANG_INSTALL_LIBDIR_BASENAME, "clang",
CLANG_VERSION_MAJOR_STRING);
}
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits