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 cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits