<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:DengXian;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:"\@DengXian";
        panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal">Dear clang experts,<o:p></o:p></p>
<p class="MsoNormal">I want to build out ELF image using clang in Windows OS. But I met an issue when using “-fuse-ld=ld.lld” to ask clang launch ld.lld.exe as a linker.<o:p></o:p></p>
<p class="MsoNormal">Somehow clang always passes additional parameter to ld.lld: <span style="color:red;background:yellow;mso-highlight:yellow">
"-libpath:E:\\bin\\LLVM\\lib\\clang\\12.0.0\\lib\\windows" -nologo</span><span style="color:red"><o:p></o:p></span></p>
<p class="MsoNormal">I found this behavior when I pass “-v” to clang. With “-v”, clang will output the complete command line about how ld.lld is invoked.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Command as below:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">"<b>E:\bin\LLVM\bin\clang</b>" -o e:\work\edk2\Build\UefiPayloadPkgX64\DEBUG_CLANGDWARF\IA32\UefiPayloadPkg\UefiPayloadEntry\UniversalPayloadEntry\DEBUG\UniversalPayloadEntry.elf -nostdlib -Wl,-n,-q,--gc-sections -z common-page-size=0x40
 -Wl,--entry,_ModuleEntryPoint -u _ModuleEntryPoint -Wl,-Map,e:\work\edk2\Build\UefiPayloadPkgX64\DEBUG_CLANGDWARF\IA32\UefiPayloadPkg\UefiPayloadEntry\UniversalPayloadEntry\DEBUG/UniversalPayloadEntry.map,--whole-archive
<span style="background:yellow;mso-highlight:yellow">-fuse-ld=ld.lld</span> -flto -Wl,-melf_i386 -Wl,--format=elf @e:\work\edk2\Build\UefiPayloadPkgX64\DEBUG_CLANGDWARF\IA32\UefiPayloadPkg\UefiPayloadEntry\UniversalPayloadEntry\OUTPUT\static_library_files.lst
<b><span style="background:yellow;mso-highlight:yellow">-v</span><o:p></o:p></b></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">clang version 12.0.0<o:p></o:p></p>
<p class="MsoNormal">Target: x86_64-pc-windows-msvc<o:p></o:p></p>
<p class="MsoNormal">Thread model: posix<o:p></o:p></p>
<p class="MsoNormal">InstalledDir: E:\bin\LLVM\bin<o:p></o:p></p>
<p class="MsoNormal">clang: warning: argument unused during compilation: '-u _ModuleEntryPoint' [-Wunused-command-line-argument]<o:p></o:p></p>
<p class="MsoNormal">"<b>E:\\bin\\LLVM\\bin\\ld.lld</b>" "-out:e:\\work\\edk2\\Build\\UefiPayloadPkgX64\\DEBUG_CLANGDWARF\\IA32\\UefiPayloadPkg\\UefiPayloadEntry\\UniversalPayloadEntry\\DEBUG\\UniversalPayloadEntry.elf"
<span style="color:red;background:yellow;mso-highlight:yellow">"-libpath:E:\\bin\\LLVM\\lib\\clang\\12.0.0\\lib\\windows" -nologo</span><span style="color:red">
</span>-n -q --gc-sections common-page-size=0x40 --entry _ModuleEntryPoint -Map "e:\\work\\edk2\\Build\\UefiPayloadPkgX64\\DEBUG_CLANGDWARF\\IA32\\UefiPayloadPkg\\UefiPayloadEntry\\UniversalPayloadEntry\\DEBUG/UniversalPayloadEntry.map" --whole-archive -melf_i386
 --format=elf e:/work/edk2/Build/UefiPayloadPkgX64/DEBUG_CLANGDWARF/IA32/MdePkg/Library/BasePcdLibNull/BasePcdLibNull/OUTPUT/BasePcdLibNull.lib e:/work/edk2/Build/UefiPayloadPkgX64/DEBUG_CLANGDWARF/IA32/MdePkg/Library/RegisterFilterLibNull/RegisterFilterLibNull/OUTPUT/FilterLibNull.lib
 e:/work/edk2/Build/UefiPayloadPkgX64/DEBUG_CLANGDWARF/IA32/MdePkg/Library/BaseLib/BaseLib/OUTPUT/BaseLib.lib e:/work/edk2/Build/UefiPayloadPkgX64/DEBUG_CLANGDWARF/IA32/MdePkg/Library/BaseMemoryLibRepStr/BaseMemoryLibRepStr/OUTPUT/BaseMemoryLibRepStr.lib e:/work/edk2/Build/UefiPayloadPkgX64/DEBUG_CLANGDWARF/IA32/MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic/OUTPUT/BaseIoLibIntrinsic.lib
 e:/work/edk2/Build/UefiPayloadPkgX64/DEBUG_CLANGDWARF/IA32/MdePkg/Library/BasePciExpressLib/BasePciExpressLib/OUTPUT/BasePciExpressLib.lib e:/work/edk2/Build/UefiPayloadPkgX64/DEBUG_CLANGDWARF/IA32/UefiPayloadPkg/Library/DxeHobListLibNull/DxeHobListLibNull/OUTPUT/DxeHobListLibNull.lib
 e:/work/edk2/Build/UefiPayloadPkgX64/DEBUG_CLANGDWARF/IA32/UefiPayloadPkg/Library/PayloadEntryHobLib/HobLib/OUTPUT/HobLib.lib e:/work/edk2/Build/UefiPayloadPkgX64/DEBUG_CLANGDWARF/IA32/MdePkg/Library/BasePciLibPciExpress/BasePciLibPciExpress/OUTPUT/BasePciLibPciExpress.lib
 e:/work/edk2/Build/UefiPayloadPkgX64/DEBUG_CLANGDWARF/IA32/UefiPayloadPkg/Library/UniversalPayloadPlatformHookLib/PlatformHookLib/OUTPUT/PlatformHookLib.lib e:/work/edk2/Build/UefiPayloadPkgX64/DEBUG_CLANGDWARF/IA32/MdePkg/Library/BaseDebugPrintErrorLevelLib/BaseDebugPrintErrorLevelLib/OUTPUT/BaseDebugPrintErrorLevelLib.lib
 e:/work/edk2/Build/UefiPayloadPkgX64/DEBUG_CLANGDWARF/IA32/MdePkg/Library/BasePrintLib/BasePrintLib/OUTPUT/BasePrintLib.lib e:/work/edk2/Build/UefiPayloadPkgX64/DEBUG_CLANGDWARF/IA32/MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550/OUTPUT/BaseSerialPortLib16550.lib
 e:/work/edk2/Build/UefiPayloadPkgX64/DEBUG_CLANGDWARF/IA32/MdePkg/Library/BaseDebugLibSerialPort/BaseDebugLibSerialPort/OUTPUT/BaseDebugLibSerialPort.lib e:/work/edk2/Build/UefiPayloadPkgX64/DEBUG_CLANGDWARF/IA32/MdePkg/Library/BasePeCoffExtraActionLibNull/BasePeCoffExtraActionLibNull/OUTPUT/PeCoffExtraActionLibNull.lib
 e:/work/edk2/Build/UefiPayloadPkgX64/DEBUG_CLANGDWARF/IA32/MdePkg/Library/BasePeCoffLib/BasePeCoffLib/OUTPUT/BasePeCoffLib.lib e:/work/edk2/Build/UefiPayloadPkgX64/DEBUG_CLANGDWARF/IA32/UefiCpuPkg/Library/BaseUefiCpuLib/BaseUefiCpuLib/OUTPUT/BaseUefiCpuLib.lib
 e:/work/edk2/Build/UefiPayloadPkgX64/DEBUG_CLANGDWARF/IA32/UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry/OUTPUT/UniversalPayloadEntry.lib<o:p></o:p></p>
<p class="MsoNormal">ld.lld: error: unknown argument '-nologo'<o:p></o:p></p>
<p class="MsoNormal">ld.lld: error: unable to find library -libpath:E:\bin\LLVM\lib\clang\12.0.0\lib\windows<o:p></o:p></p>
<p class="MsoNormal">ld.lld: error: cannot open common-page-size=0x40: no such file or directory<o:p></o:p></p>
<p class="MsoNormal">clang: error: linker command failed with exit code 1 (use -v to see invocation)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Thanks,<o:p></o:p></p>
<p class="MsoNormal">Ray<o:p></o:p></p>
</div>
</body>
</html>