<html>
    <head>
      <base href="https://bugs.llvm.org/">
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - [Improvement] Shared version of LLVM library for MSVC"
   href="https://bugs.llvm.org/show_bug.cgi?id=44339">44339</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>[Improvement] Shared version of LLVM library for MSVC
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>Build scripts
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>9.0
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>PC
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>Windows XP
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>enhancement
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>P
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>cmake
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>unassignedbugs@nondot.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>akornilov.82@gmail.com
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>llvm-bugs@lists.llvm.org
          </td>
        </tr></table>
      <p>
        <div>
        <pre>For now, the LLVM build procedure is not to support DLL (shared library)
version for MSVC.
The reason is that LLVM classes don't have
__declspec(dllexport)/__declspec(dllimport) in declaration.
But there is another way to export class by Microsoft toolchain.
Microsoft linker supports /DEF:<def filename> option. Inside DEF-file in
'EXPORTS' section all required names for export can be described.
I have successfully used this approach for LLVM 9.0.0 in the plugin:
<a href="https://sourceforge.net/p/gradle-cpp/wiki/cpp-llvm">https://sourceforge.net/p/gradle-cpp/wiki/cpp-llvm</a>.

In attachment, there is the file 'llvm-so.def'. It has been generated by the
special tool for LLVM 9.0.0 and MSVC 2019 and contains all required exports.

Linker options required to build DLL:
/DLL
/DEF:llvm-so.def
psapi.lib
shell32.lib
ole32.lib
uuid.lib
advapi32.lib
LLVMXRay.lib
LLVMWindowsManifest.lib
LLVMTextAPI.lib
LLVMTableGen.lib
LLVMSymbolize.lib
LLVMDebugInfoPDB.lib
LLVMOrcJIT.lib
LLVMJITLink.lib
LLVMObjectYAML.lib
LLVMMCA.lib
LLVMLTO.lib
LLVMPasses.lib
LLVMObjCARCOpts.lib
LLVMLineEditor.lib
LLVMLibDriver.lib
LLVMInterpreter.lib
LLVMFuzzMutate.lib
LLVMMCJIT.lib
LLVMExecutionEngine.lib
LLVMRuntimeDyld.lib
LLVMDlltoolDriver.lib
LLVMOption.lib
LLVMDebugInfoGSYM.lib
LLVMCoverage.lib
LLVMCoroutines.lib
LLVMXCoreDisassembler.lib
LLVMXCoreCodeGen.lib
LLVMXCoreDesc.lib
LLVMXCoreInfo.lib
LLVMX86Disassembler.lib
LLVMX86AsmParser.lib
LLVMX86CodeGen.lib
LLVMX86Desc.lib
LLVMX86Utils.lib
LLVMX86Info.lib
LLVMWebAssemblyDisassembler.lib
LLVMWebAssemblyCodeGen.lib
LLVMWebAssemblyDesc.lib
LLVMWebAssemblyAsmParser.lib
LLVMWebAssemblyInfo.lib
LLVMSystemZDisassembler.lib
LLVMSystemZCodeGen.lib
LLVMSystemZAsmParser.lib
LLVMSystemZDesc.lib
LLVMSystemZInfo.lib
LLVMSparcDisassembler.lib
LLVMSparcCodeGen.lib
LLVMSparcAsmParser.lib
LLVMSparcDesc.lib
LLVMSparcInfo.lib
LLVMRISCVDisassembler.lib
LLVMRISCVCodeGen.lib
LLVMRISCVAsmParser.lib
LLVMRISCVDesc.lib
LLVMRISCVUtils.lib
LLVMRISCVInfo.lib
LLVMPowerPCDisassembler.lib
LLVMPowerPCCodeGen.lib
LLVMPowerPCAsmParser.lib
LLVMPowerPCDesc.lib
LLVMPowerPCInfo.lib
LLVMNVPTXCodeGen.lib
LLVMNVPTXDesc.lib
LLVMNVPTXInfo.lib
LLVMMSP430Disassembler.lib
LLVMMSP430CodeGen.lib
LLVMMSP430AsmParser.lib
LLVMMSP430Desc.lib
LLVMMSP430Info.lib
LLVMMipsDisassembler.lib
LLVMMipsCodeGen.lib
LLVMMipsAsmParser.lib
LLVMMipsDesc.lib
LLVMMipsInfo.lib
LLVMLanaiDisassembler.lib
LLVMLanaiCodeGen.lib
LLVMLanaiAsmParser.lib
LLVMLanaiDesc.lib
LLVMLanaiInfo.lib
LLVMHexagonDisassembler.lib
LLVMHexagonCodeGen.lib
LLVMHexagonAsmParser.lib
LLVMHexagonDesc.lib
LLVMHexagonInfo.lib
LLVMBPFDisassembler.lib
LLVMBPFCodeGen.lib
LLVMBPFAsmParser.lib
LLVMBPFDesc.lib
LLVMBPFInfo.lib
LLVMARMDisassembler.lib
LLVMARMCodeGen.lib
LLVMARMAsmParser.lib
LLVMARMDesc.lib
LLVMARMUtils.lib
LLVMARMInfo.lib
LLVMAMDGPUDisassembler.lib
LLVMAMDGPUCodeGen.lib
LLVMMIRParser.lib
LLVMipo.lib
LLVMInstrumentation.lib
LLVMVectorize.lib
LLVMLinker.lib
LLVMIRReader.lib
LLVMAsmParser.lib
LLVMAMDGPUAsmParser.lib
LLVMAMDGPUDesc.lib
LLVMAMDGPUUtils.lib
LLVMAMDGPUInfo.lib
LLVMAArch64Disassembler.lib
LLVMMCDisassembler.lib
LLVMAArch64CodeGen.lib
LLVMGlobalISel.lib
LLVMSelectionDAG.lib
LLVMAsmPrinter.lib
LLVMDebugInfoDWARF.lib
LLVMCodeGen.lib
LLVMTarget.lib
LLVMScalarOpts.lib
LLVMInstCombine.lib
LLVMAggressiveInstCombine.lib
LLVMTransformUtils.lib
LLVMBitWriter.lib
LLVMAnalysis.lib
LLVMProfileData.lib
LLVMObject.lib
LLVMBitReader.lib
LLVMBitstreamReader.lib
LLVMCore.lib
LLVMRemarks.lib
LLVMAArch64AsmParser.lib
LLVMMCParser.lib
LLVMAArch64Desc.lib
LLVMMC.lib
LLVMDebugInfoCodeView.lib
LLVMDebugInfoMSF.lib
LLVMBinaryFormat.lib
LLVMAArch64Utils.lib
LLVMAArch64Info.lib
LLVMSupport.lib
LLVMDemangle.lib</pre>
        </div>
      </p>


      <hr>
      <span>You are receiving this mail because:</span>

      <ul>
          <li>You are on the CC list for the bug.</li>
      </ul>
    </body>
</html>