diff --git a/lld/COFF/Config.h b/lld/COFF/Config.h --- a/lld/COFF/Config.h +++ b/lld/COFF/Config.h @@ -132,6 +132,7 @@ bool driverWdm = false; bool showTiming = false; bool showSummary = false; + bool printSearchPaths = false; unsigned debugTypes = static_cast(DebugType::None); llvm::SmallVector mllvmOpts; std::vector natvisFiles; diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp --- a/lld/COFF/Driver.cpp +++ b/lld/COFF/Driver.cpp @@ -1500,6 +1500,7 @@ config->showTiming = true; config->showSummary = args.hasArg(OPT_summary); + config->printSearchPaths = args.hasArg(OPT_print_search_paths); // Handle --version, which is an lld extension. This option is a bit odd // because it doesn't start with "/", but we deliberately chose "--" to @@ -2052,6 +2053,18 @@ } config->wordsize = config->is64() ? 8 : 4; + if (config->printSearchPaths) { + SmallString<256> buffer; + raw_svector_ostream stream(buffer); + stream << "Library search paths:\n"; + + for (StringRef path : searchPaths) + stream << " " << path << "\n"; + + message(buffer); + return; + } + // Process files specified as /defaultlib. These must be processed after // addWinSysRootLibSearchPaths(), which is why they are in a separate loop. for (auto *arg : args.filtered(OPT_defaultlib)) diff --git a/lld/COFF/Options.td b/lld/COFF/Options.td --- a/lld/COFF/Options.td +++ b/lld/COFF/Options.td @@ -297,6 +297,7 @@ def map_info : P<"mapinfo", "Include the specified information in a map file">; def show_timing : F<"time">; def summary : F<"summary">; +def print_search_paths : F<"print-search-paths">; //============================================================================== // The flags below do nothing. They are defined only for link.exe compatibility. diff --git a/lld/test/COFF/print-search-paths.s b/lld/test/COFF/print-search-paths.s new file mode 100644 --- /dev/null +++ b/lld/test/COFF/print-search-paths.s @@ -0,0 +1,29 @@ +# REQUIRES: x86 +# RUN: mkdir -p %t.dir/sysroot/VC/Tools/MSVC/1.1.1.1/lib/x86 +# RUN: mkdir -p %t.dir/sysroot/VC/Tools/MSVC/1.1.1.1/lib/x64 +# RUN: mkdir -p %t.dir/sysroot/VC/Tools/MSVC/1.1.1.1/ATLMFC/lib/x86 +# RUN: mkdir -p %t.dir/sysroot/VC/Tools/MSVC/1.1.1.1/ATLMFC/lib/x64 +# RUN: mkdir -p %t.dir/sysroot/Windows Kits/10/Lib/10.0.1/ucrt/x86 +# RUN: mkdir -p %t.dir/sysroot/Windows Kits/10/Lib/10.0.1/ucrt/x64 +# RUN: mkdir -p %t.dir/sysroot/Windows Kits/10/Lib/10.0.1/um/x86 +# RUN: mkdir -p %t.dir/sysroot/Windows Kits/10/Lib/10.0.1/um/x64 +# RUN: llvm-mc -triple x86_64-windows-msvc %s -filetype=obj -o %t.obj +# RUN: lld-link /winsysroot:%t.dir/sysroot /winsdkversion:10.0.1 %t.obj -print-search-paths | FileCheck %s +# RUN: llvm-mc -triple i686-windows-msvc %s -filetype=obj -o %t_32.obj +# RUN: lld-link /winsysroot:%t.dir/sysroot /winsdkversion:10.0.1 %t_32.obj -print-search-paths | FileCheck %s -check-prefix X86 +# CHECK: Library search paths: +# CHECK: sysroot\VC\Tools\MSVC\1.1.1.1\lib\x64 +# CHECK: sysroot\VC\Tools\MSVC\1.1.1.1\atlmfc\lib\x64 +# CHECK: sysroot\Windows Kits\10\Lib\10.0.1\ucrt\x64 +# CHECK: sysroot\Windows Kits\10\Lib\10.0.1\um\x64 +# X86: Library search paths: +# X86: sysroot\VC\Tools\MSVC\1.1.1.1\lib\x86 +# X86: sysroot\VC\Tools\MSVC\1.1.1.1\atlmfc\lib\x86 +# X86: sysroot\Windows Kits\10\Lib\10.0.1\ucrt\x86 +# X86: sysroot\Windows Kits\10\Lib\10.0.1\um\x86 + + + .text + .globl _main +_main: + ret