KhronosGroup / KhronosGroup/SPIRV-LLVM-Translator
llvm_release_140 branch fails to build with SPIRV Tools integration on Windows with MSVC
- Dominant language
- LLVM
- Stars
- 625
- Forks
- 279
- Avg merge
- 3d 5h
- Merged PRs (30d)
- 34
Description
### General information
- [x] Build is in tree
- [Build environment information](https://github.com/pal1000/mesa-dist-win/blob/6b81ea216472b53aba1f9dba359585a2fe0a7009/buildinfo/msvc.txt)
- Branch: llvm_release_140
- Commit: e95eb30ace4954a3a7e8e17a3cc22f7382d4a47e
- SPIRV headers commit always syncs with `spirv-headers-tag.conf`
### SPIRV LLVM translator build configuration command
````
cmake "C:\Software\DEVELO~1\projects\llvm-project\llvm" -GNinja -DCMAKE_BUILD_TYPE=Release -DLLVM_USE_CRT_RELEASE=MT -DLLVM_ENABLE_PROJECTS="clang;lld" -DLLVM_TARGETS_TO_BUILD=AMDGPU;X86 -DLLVM_OPTIMIZED_TABLEGEN=TRUE -DLLVM_INCLUDE_UTILS=OFF -DLLVM_INCLUDE_RUNTIMES=OFF -DLLVM_INCLUDE_TESTS=OFF -DLLVM_INCLUDE_EXAMPLES=OFF -DLLVM_INCLUDE_GO_TESTS=OFF -DLLVM_INCLUDE_BENCHMARKS=OFF -DLLVM_BUILD_LLVM_C_DYLIB=OFF -DLLVM_ENABLE_DIA_SDK=OFF -DCLANG_BUILD_TOOLS=ON -DLLVM_ENABLE_RTTI=ON -DLLVM_ENABLE_TERMINFO=OFF -DCMAKE_INSTALL_PREFIX="C:/Software/DEVELO~1/projects/llvm/build/spv-x64" -DLLVM_SPIRV_INCLUDE_TESTS=OFF
````
- Build command `ninja projects/SPIRV-LLVM-Translator/install`
### Build Log
````
[1/2] Linking CXX executable bin\llvm-spirv.exe
FAILED: bin/llvm-spirv.exe
cmd.exe /C "cd . && C:\Software\Development\projects\cmake\bin\cmake.exe -E vs_link_exe --intdir=projects\SPIRV-LLVM-Translator\tools\llvm-spirv\CMakeFiles\llvm-spirv.dir --rc=C:\PROGRA~2\WI3CF2~1\10\bin\100220~1.0\x64\rc.exe --mt=C:\PROGRA~2\WI3CF2~1\10\bin\100220~1.0\x64\mt.exe --manifests -- C:\PROGRA~2\MICROS~3\2022\BUILDT~1\VC\Tools\MSVC\1431~1.311\bin\Hostx64\x64\link.exe /nologo projects\SPIRV-LLVM-Translator\tools\llvm-spirv\CMakeFiles\llvm-spirv.dir\llvm-spirv.cpp.obj projects\SPIRV-LLVM-Translator\tools\llvm-spirv\CMakeFiles\llvm-spirv.dir\__\__\__\__\resources\windows_version_resource.rc.res /out:bin\llvm-spirv.exe /implib:lib\llvm-spirv.lib /pdb:bin\llvm-spirv.pdb /version:0.0 /machine:x64 /STACK:10000000 /INCREMENTAL:NO /subsystem:console lib\LLVMSPIRVLib.lib lib\LLVMAnalysis.lib lib\LLVMBitReader.lib lib\LLVMBitWriter.lib lib\LLVMCore.lib lib\LLVMSupport.lib lib\LLVMTransformUtils.lib -LC:/Software/DEVELO~1/projects/spirv-tools/build/x64/lib -lSPIRV-Tools-opt -lSPIRV-Tools -lSPIRV-Tools-link lib\LLVMCodeGen.lib lib\LLVMBitWriter.lib lib\LLVMScalarOpts.lib lib\LLVMAggressiveInstCombine.lib lib\LLVMInstCombine.lib lib\LLVMTarget.lib lib\LLVMIRReader.lib lib\LLVMAsmParser.lib lib\LLVMLinker.lib lib\LLVMTransformUtils.lib lib\LLVMAnalysis.lib lib\LLVMProfileData.lib lib\LLVMDebugInfoDWARF.lib lib\LLVMObject.lib lib\LLVMBitReader.lib lib\LLVMCore.lib lib\LLVMRemarks.lib lib\LLVMBitstreamReader.lib lib\LLVMMCParser.lib lib\LLVMMC.lib lib\LLVMDebugInfoCodeView.lib lib\LLVMTextAPI.lib lib\LLVMBinaryFormat.lib lib\LLVMSupport.lib lib\LLVMDemangle.lib psapi.lib shell32.lib ole32.lib uuid.lib advapi32.lib delayimp.lib -delayload:shell32.dll -delayload:ole32.dll kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib && cd ."
LINK: command "C:\PROGRA~2\MICROS~3\2022\BUILDT~1\VC\Tools\MSVC\1431~1.311\bin\Hostx64\x64\link.exe /nologo projects\SPIRV-LLVM-Translator\tools\llvm-spirv\CMakeFiles\llvm-spirv.dir\llvm-spirv.cpp.obj projects\SPIRV-LLVM-Translator\tools\llvm-spirv\CMakeFiles\llvm-spirv.dir\__\__\__\__\resources\windows_version_resource.rc.res /out:bin\llvm-spirv.exe /implib:lib\llvm-spirv.lib /pdb:bin\llvm-spirv.pdb /version:0.0 /machine:x64 /STACK:10000000 /INCREMENTAL:NO /subsystem:console lib\LLVMSPIRVLib.lib lib\LLVMAnalysis.lib lib\LLVMBitReader.lib lib\LLVMBitWriter.lib lib\LLVMCore.lib lib\LLVMSupport.lib lib\LLVMTransformUtils.lib -LC:/Software/DEVELO~1/projects/spirv-tools/build/x64/lib -lSPIRV-Tools-opt -lSPIRV-Tools -lSPIRV-Tools-link lib\LLVMCodeGen.lib lib\LLVMBitWriter.lib lib\LLVMScalarOpts.lib lib\LLVMAggressiveInstCombine.lib lib\LLVMInstCombine.lib lib\LLVMTarget.lib lib\LLVMIRReader.lib lib\LLVMAsmParser.lib lib\LLVMLinker.lib lib\LLVMTransformUtils.lib lib\LLVMAnalysis.lib lib\LLVMProfileData.lib lib\LLVMDebugInfoDWARF.lib lib\LLVMObject.lib lib\LLVMBitReader.lib lib\LLVMCore.lib lib\LLVMRemarks.lib lib\LLVMBitstreamReader.lib lib\LLVMMCParser.lib lib\LLVMMC.lib lib\LLVMDebugInfoCodeView.lib lib\LLVMTextAPI.lib lib\LLVMBinaryFormat.lib lib\LLVMSupport.lib lib\LLVMDemangle.lib psapi.lib shell32.lib ole32.lib uuid.lib advapi32.lib delayimp.lib -delayload:shell32.dll -delayload:ole32.dll kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib /MANIFEST /MANIFESTFILE:bin\llvm-spirv.exe.manifest" failed (exit code 1120) with the following output:
LINK : warning LNK4044: unrecognized option '/LC:/Software/DEVELO~1/projects/spirv-tools/build/x64/lib'; ignored
LINK : warning LNK4044: unrecognized option '/lSPIRV-Tools-opt'; ignored
LINK : warning LNK4044: unrecognized option '/lSPIRV-Tools'; ignored
LINK : warning LNK4044: unrecognized option '/lSPIRV-Tools-link'; ignored
llvm-spirv.cpp.obj : error LNK2019: unresolved external symbol "public: __cdecl spvtools::SpirvTools::SpirvTools(enum spv_target_env)" (??0SpirvTools@spvtools@@QEAA@W4spv_target_env@@@Z) referenced in function "int __cdecl convertLLVMToSPIRV(class SPIRV::TranslatorOpts const &)" (?convertLLVMToSPIRV@@YAHAEBVTranslatorOpts@SPIRV@@@Z)
llvm-spirv.cpp.obj : error LNK2019: unresolved external symbol "public: __cdecl spvtools::SpirvTools::~SpirvTools(void)" (??1SpirvTools@spvtools@@QEAA@XZ) referenced in function "int __cdecl convertLLVMToSPIRV(class SPIRV::TranslatorOpts const &)" (?convertLLVMToSPIRV@@YAHAEBVTranslatorOpts@SPIRV@@@Z)
llvm-spirv.cpp.obj : error LNK2019: unresolved external symbol "public: void __cdecl spvtools::SpirvTools::SetMessageConsumer(class std::function)" (?SetMessageConsumer@SpirvTools@spvtools@@QEAAXV?$function@$$A6AXW4spv_message_level_t@@PEBDAEBUspv_position_t@@1@Z@std@@@Z) referenced in function "int __cdecl convertLLVMToSPIRV(class SPIRV::TranslatorOpts const &)" (?convertLLVMToSPIRV@@YAHAEBVTranslatorOpts@SPIRV@@@Z)
llvm-spirv.cpp.obj : error LNK2019: unresolved external symbol "public: bool __cdecl spvtools::SpirvTools::Disassemble(unsigned int const *,unsigned __int64,class std::basic_string,class std::allocator > *,unsigned int)const " (?Disassemble@SpirvTools@spvtools@@QEBA_NPEBI_KPEAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@I@Z) referenced in function "int __cdecl convertLLVMToSPIRV(class SPIRV::TranslatorOpts const &)" (?convertLLVMToSPIRV@@YAHAEBVTranslatorOpts@SPIRV@@@Z)
bin\llvm-spirv.exe : fatal error LNK1120: 4 unresolved externals
ninja: build stopped: subcommand failed.
````
Contributor guide
Research direction
Reproduce the `ninja projects/SPIRV-LLVM-Translator/install` build using the reported CMake configuration and Windows MSVC environment. Start with the generated link command for `projects/SPIRV-LLVM-Translator/tools/llvm-spirv` and the SPIR-V Tools library arguments. Done means the `llvm-spirv.exe` link completes without unresolved SPIR-V Tools symbols.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cmake, cpp
- Domain
- build-system
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100