Fix missing lib with builtin_glslang=false#93478
Conversation
builtin_glslang=false
|
Which distro did you test this on? In my experience glslang packaging is hit and miss on Linux distros (due to it not really being designed to be used as a shared library, at least in the past). |
|
This patch was needed on alpine linux: https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/67911 |
Calinou
left a comment
There was a problem hiding this comment.
Tested locally on Fedora 40, it doesn't work on my end.
I get this, despite having glslang-devel-14.2.0-1.fc40.x86_64 installed from the repositories:
modules/glslang/register_types.cpp:36:10: fatal error: glslang/Include/Types.h: No such file or directory
36 | #include <glslang/Include/Types.h>
| ^~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
scons: *** [modules/glslang/register_types.linuxbsd.editor.x86_64.o] Error 1
scons: building terminated because of errors.
Previously, compilation appeared to succeed but I got a linking error at the end:
Linking Program bin/godot.linuxbsd.editor.x86_64 ...
progress_finish(["progress_finish"], [])
mold: error: undefined symbol: spvtools::CreateAnalyzeLiveInputPass(std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int> >*, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int> >*)
>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsAnalyzeDeadOutputStores(spv_target_env, std::vector<unsigned int, std::allocator<unsigned int> >&, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int> >*, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int> >*, spv::SpvBuildLogger*))
mold: error: undefined symbol: spvOptimizerOptionsDestroy
>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsAnalyzeDeadOutputStores(spv_target_env, std::vector<unsigned int, std::allocator<unsigned int> >&, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int> >*, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int> >*, spv::SpvBuildLogger*))>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsEliminateDeadOutputStores(spv_target_env, std::vector<unsigned int, std::allocator<unsigned int> >&, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int> >*, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int> >*, spv::SpvBuildLogger*))>>> referenced 2 more times
mold: error: undefined symbol: spvtools::CreateEliminateDeadOutputComponentsPassv
>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsEliminateDeadOutputStores(spv_target_env, std::vector<unsigned int, std::allocator<unsigned int> >&, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int> >*, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int> >*, spv::SpvBuildLogger*))
mold: error: undefined symbol: spvtools::Optimizer::Run(unsigned int const*, unsigned long, std::vector<unsigned int, std::allocator<unsigned int> >*, spv_optimizer_options_t*) const
>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsAnalyzeDeadOutputStores(spv_target_env, std::vector<unsigned int, std::allocator<unsigned int> >&, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int> >*, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int> >*, spv::SpvBuildLogger*))>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsEliminateDeadOutputStores(spv_target_env, std::vector<unsigned int, std::allocator<unsigned int> >&, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int> >*, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int> >*, spv::SpvBuildLogger*))>>> referenced 2 more times
mold: error: undefined symbol: glslang::TShader::setStringsPKPKci
>>> referenced by /usr/lib64/libglslang.a(glslang_c_interface.cpp.o):(.text)
>>> /usr/lib64/libglslang.a(glslang_c_interface.cpp.o):(glslang_shader_create)>>> referenced by /usr/lib64/libglslang.a(glslang_c_interface.cpp.o):(.text)
>>> /usr/lib64/libglslang.a(glslang_c_interface.cpp.o):(glslang_shader_parse)>>> referenced by register_types.cpp
>>> modules/libmodule_glslang.linuxbsd.editor.x86_64.a(register_types.linuxbsd.editor.x86_64.o):(_compile_shader_glsl(RenderingDeviceCommons::ShaderStage, String const&, RenderingDevice::ShaderLanguage, String*, RenderingDevice const*))
mold: error: undefined symbol: spvtools::CreateEliminateDeadInputComponentsPassv
>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsEliminateDeadInputComponents(spv_target_env, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*))
mold: error: undefined symbol: glslang::GetThreadPoolAllocatorv
>>> referenced by /usr/lib64/libSPIRV.a(GlslangToSpv.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(GlslangToSpv.cpp.o):(std::_Rb_tree_node<std::pair<int const, glslang::TVector<glslang::TIntermTyped const*> > >* std::_Rb_tree<int, std::pair<int const, glslang::TVector<glslang::TIntermTyped const*> >, std::_Select1st<std::pair<int const, glslang::TVector<glslang::TIntermTyped const*> > >, std::less<int>, glslang::pool_allocator<std::pair<int const, glslang::TVector<glslang::TIntermTyped const*> > > >::_M_copy<false, std::_Rb_tree<int, std::pair<int const, glslang::TVector<glslang::TIntermTyped const*> >, std::_Select1st<std::pair<int const, glslang::TVector<glslang::TIntermTyped const*> > >, std::less<int>, glslang::pool_allocator<std::pair<int const, glslang::TVector<glslang::TIntermTyped const*> > > >::_Alloc_node>(std::_Rb_tree_node<std::pair<int const, glslang::TVector<glslang::TIntermTyped const*> > >*, std::_Rb_tree_node_base*, std::_Rb_tree<int, std::pair<int const, glslang::TVector<glslang::TIntermTyped const*> >, std::_Select1st<std::pair<int const, glslang::TVector<glslang::TIntermTyped const*> > >, std::less<int>, glslang::pool_allocator<std::pair<int const, glslang::TVector<glslang::TIntermTyped const*> > > >::_Alloc_node&) [clone .isra.0])>>> referenced by /usr/lib64/libSPIRV.a(GlslangToSpv.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(GlslangToSpv.cpp.o):(std::_Rb_tree_node<std::pair<int const, glslang::TVector<glslang::TIntermTyped const*> > >* std::_Rb_tree<int, std::pair<int const, glslang::TVector<glslang::TIntermTyped const*> >, std::_Select1st<std::pair<int const, glslang::TVector<glslang::TIntermTyped const*> > >, std::less<int>, glslang::pool_allocator<std::pair<int const, glslang::TVector<glslang::TIntermTyped const*> > > >::_M_copy<false, std::_Rb_tree<int, std::pair<int const, glslang::TVector<glslang::TIntermTyped const*> >, std::_Select1st<std::pair<int const, glslang::TVector<glslang::TIntermTyped const*> > >, std::less<int>, glslang::pool_allocator<std::pair<int const, glslang::TVector<glslang::TIntermTyped const*> > > >::_Alloc_node>(std::_Rb_tree_node<std::pair<int const, glslang::TVector<glslang::TIntermTyped const*> > >*, std::_Rb_tree_node_base*, std::_Rb_tree<int, std::pair<int const, glslang::TVector<glslang::TIntermTyped const*> >, std::_Select1st<std::pair<int const, glslang::TVector<glslang::TIntermTyped const*> > >, std::less<int>, glslang::pool_allocator<std::pair<int const, glslang::TVector<glslang::TIntermTyped const*> > > >::_Alloc_node&) [clone .isra.0])>>> referenced by /usr/lib64/libSPIRV.a(GlslangToSpv.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(GlslangToSpv.cpp.o):(std::_Rb_tree_node<std::pair<int const, glslang::TVector<glslang::TIntermConstantUnion const*> > >* std::_Rb_tree<int, std::pair<int const, glslang::TVector<glslang::TIntermConstantUnion const*> >, std::_Select1st<std::pair<int const, glslang::TVector<glslang::TIntermConstantUnion const*> > >, std::less<int>, glslang::pool_allocator<std::pair<int const, glslang::TVector<glslang::TIntermConstantUnion const*> > > >::_M_copy<false, std::_Rb_tree<int, std::pair<int const, glslang::TVector<glslang::TIntermConstantUnion const*> >, std::_Select1st<std::pair<int const, glslang::TVector<glslang::TIntermConstantUnion const*> > >, std::less<int>, glslang::pool_allocator<std::pair<int const, glslang::TVector<glslang::TIntermConstantUnion const*> > > >::_Alloc_node>(std::_Rb_tree_node<std::pair<int const, glslang::TVector<glslang::TIntermConstantUnion const*> > >*, std::_Rb_tree_node_base*, std::_Rb_tree<int, std::pair<int const, glslang::TVector<glslang::TIntermConstantUnion const*> >, std::_Select1st<std::pair<int const, glslang::TVector<glslang::TIntermConstantUnion const*> > >, std::less<int>, glslang::pool_allocator<std::pair<int const, glslang::TVector<glslang::TIntermConstantUnion const*> > > >::_Alloc_node&) [clone .isra.0])>>> referenced 14 more times
mold: error: undefined symbol: spvtools::CreateBlockMergePassv
>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))
mold: error: undefined symbol: spvtools::CreateDeadInsertElimPassv
>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))
mold: error: undefined symbol: glslang::TIntermediate::getMemberAlignment(glslang::TType const&, int&, int&, glslang::TLayoutPacking, bool)
>>> referenced by /usr/lib64/libSPIRV.a(GlslangToSpv.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(GlslangToSpv.cpp.o):((anonymous namespace)::TGlslangToSpvTraverser::convertGlslangStructToSpvType(glslang::TType const&, glslang::TVector<glslang::TTypeLoc> const*, glslang::TLayoutPacking, glslang::TQualifier const&))>>> referenced by /usr/lib64/libSPIRV.a(GlslangToSpv.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(GlslangToSpv.cpp.o):((anonymous namespace)::TGlslangToSpvTraverser::convertGlslangStructToSpvType(glslang::TType const&, glslang::TVector<glslang::TTypeLoc> const*, glslang::TLayoutPacking, glslang::TQualifier const&))>>> referenced by /usr/lib64/libSPIRV.a(GlslangToSpv.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(GlslangToSpv.cpp.o):((anonymous namespace)::TGlslangToSpvTraverser::convertGlslangToSpvType(glslang::TType const&, glslang::TLayoutPacking, glslang::TQualifier const&, bool, bool))>>> referenced 1 more times
mold: error: undefined symbol: glslang::TProgram::link11EShMessages
>>> referenced by /usr/lib64/libglslang.a(glslang_c_interface.cpp.o):(.text)
>>> /usr/lib64/libglslang.a(glslang_c_interface.cpp.o):(glslang_program_link)>>> referenced by register_types.cpp
>>> modules/libmodule_glslang.linuxbsd.editor.x86_64.a(register_types.linuxbsd.editor.x86_64.o):(_compile_shader_glsl(RenderingDeviceCommons::ShaderStage, String const&, RenderingDevice::ShaderLanguage, String*, RenderingDevice const*))
mold: error: undefined symbol: spvtools::CreateIfConversionPassv
>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))
mold: error: undefined symbol: glslang::TProgram::getInfoLogv
>>> referenced by /usr/lib64/libglslang.a(glslang_c_interface.cpp.o):(.text)
>>> /usr/lib64/libglslang.a(glslang_c_interface.cpp.o):(glslang_program_get_info_log)>>> referenced by register_types.cpp
>>> modules/libmodule_glslang.linuxbsd.editor.x86_64.a(register_types.linuxbsd.editor.x86_64.o):(_compile_shader_glsl(RenderingDeviceCommons::ShaderStage, String const&, RenderingDevice::ShaderLanguage, String*, RenderingDevice const*))
mold: error: undefined symbol: glslang::TIntermediate::getBaseAlignmentScalar(glslang::TType const&, int&)
>>> referenced by /usr/lib64/libSPIRV.a(GlslangToSpv.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(GlslangToSpv.cpp.o):((anonymous namespace)::TGlslangToSpvTraverser::convertGlslangStructToSpvType(glslang::TType const&, glslang::TVector<glslang::TTypeLoc> const*, glslang::TLayoutPacking, glslang::TQualifier const&))>>> referenced by /usr/lib64/libSPIRV.a(GlslangToSpv.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(GlslangToSpv.cpp.o):((anonymous namespace)::TGlslangToSpvTraverser::visitBinary(glslang::TVisit, glslang::TIntermBinary*))>>> referenced by /usr/lib64/libSPIRV.a(GlslangToSpv.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(GlslangToSpv.cpp.o):((anonymous namespace)::TGlslangToSpvTraverser::visitBinary(glslang::TVisit, glslang::TIntermBinary*))>>> referenced 1 more times
mold: error: undefined symbol: glslang::TShader::setOverrideVersioni
>>> referenced by /usr/lib64/libglslang.a(glslang_c_interface.cpp.o):(.text)
>>> /usr/lib64/libglslang.a(glslang_c_interface.cpp.o):(glslang_shader_set_glsl_version)
mold: error: undefined symbol: spvtools::Optimizer::RegisterPass(spvtools::Optimizer::PassToken&&)
>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))>>> referenced 33 more times
mold: error: undefined symbol: glslang::InitializeProcessv
>>> referenced by /usr/lib64/libglslang.a(glslang_c_interface.cpp.o):(.text)
>>> /usr/lib64/libglslang.a(glslang_c_interface.cpp.o):(glslang_initialize_process)>>> referenced by register_types.cpp
>>> modules/libmodule_glslang.linuxbsd.editor.x86_64.a(register_types.linuxbsd.editor.x86_64.o):(initialize_glslang_module(ModuleInitializationLevel))
mold: error: undefined symbol: spvtools::Optimizer::PassToken::~PassToken()
>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))>>> referenced 33 more times
mold: error: undefined symbol: spvValidatorOptionsSetWorkgroupScalarBlockLayout
>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsValidate(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, bool))
mold: error: undefined symbol: spvValidatorOptionsSetBeforeHlslLegalization
>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsValidate(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, bool))
mold: error: undefined symbol: spvtools::CreateInlineExhaustivePassv
>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))
mold: error: undefined symbol: glslang::TShader::getInfoDebugLogv
>>> referenced by /usr/lib64/libglslang.a(glslang_c_interface.cpp.o):(.text)
>>> /usr/lib64/libglslang.a(glslang_c_interface.cpp.o):(glslang_shader_get_info_debug_log)>>> referenced by register_types.cpp
>>> modules/libmodule_glslang.linuxbsd.editor.x86_64.a(register_types.linuxbsd.editor.x86_64.o):(_compile_shader_glsl(RenderingDeviceCommons::ShaderStage, String const&, RenderingDevice::ShaderLanguage, String*, RenderingDevice const*))
mold: error: undefined symbol: spvtools::CreateRedundancyEliminationPassv
>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))
mold: error: undefined symbol: glslang::TIntermediate::findLinkerObjects() const
>>> referenced by /usr/lib64/libSPIRV.a(GlslangToSpv.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(GlslangToSpv.cpp.o):(_GLOBAL__N_1::TGlslangToSpvTraverser::collectRayTracingLinkerObjectsv)
mold: error: undefined symbol: spvOptimizerOptionsCreate
>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsAnalyzeDeadOutputStores(spv_target_env, std::vector<unsigned int, std::allocator<unsigned int> >&, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int> >*, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int> >*, spv::SpvBuildLogger*))>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsEliminateDeadOutputStores(spv_target_env, std::vector<unsigned int, std::allocator<unsigned int> >&, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int> >*, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int> >*, spv::SpvBuildLogger*))>>> referenced 2 more times
mold: error: undefined symbol: spvtools::CreateEliminateDeadFunctionsPassv
>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))
mold: error: undefined symbol: glslang::TSpirvTypeParameter::operator==(glslang::TSpirvTypeParameter const&) const
>>> referenced by /usr/lib64/libSPIRV.a(GlslangToSpv.cpp.o):(.text._ZNK7glslang5TTypeeqERKS0_)
>>> /usr/lib64/libSPIRV.a(GlslangToSpv.cpp.o):(glslang::TType::operator==(glslang::TType const&) const)>>> referenced by /usr/lib64/libSPIRV.a(GlslangToSpv.cpp.o):(.text._ZNK7glslang5TTypeeqERKS0_)
>>> /usr/lib64/libSPIRV.a(GlslangToSpv.cpp.o):(glslang::TType::operator==(glslang::TType const&) const)
mold: error: undefined symbol: spvDiagnosticPrint
>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsDisassemble(std::ostream&, std::vector<unsigned int, std::allocator<unsigned int> > const&, spv_target_env))
mold: error: undefined symbol: spvtools::CreateEliminateDeadOutputStoresPass(std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int> >*, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int> >*)
>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsEliminateDeadOutputStores(spv_target_env, std::vector<unsigned int, std::allocator<unsigned int> >&, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int> >*, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int> >*, spv::SpvBuildLogger*))
mold: error: undefined symbol: spvValidatorOptionsSetRelaxBlockLayout
>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsValidate(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, bool))
mold: error: undefined symbol: glslang::TShader::preprocess(TBuiltInResource const*, int, EProfile, bool, bool, EShMessages, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, glslang::TShader::Includer&)
>>> referenced by /usr/lib64/libglslang.a(glslang_c_interface.cpp.o):(.text)
>>> /usr/lib64/libglslang.a(glslang_c_interface.cpp.o):(glslang_shader_preprocess)
mold: error: undefined symbol: glslang::TShader::setShiftBindingForSet(glslang::TResourceType, unsigned int, unsigned int)
>>> referenced by /usr/lib64/libglslang.a(glslang_c_interface.cpp.o):(.text)
>>> /usr/lib64/libglslang.a(glslang_c_interface.cpp.o):(glslang_shader_shift_binding_for_set)
mold: error: undefined symbol: spvtools::Optimizer::SetTargetEnv(spv_target_env)
>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsAnalyzeDeadOutputStores(spv_target_env, std::vector<unsigned int, std::allocator<unsigned int> >&, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int> >*, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int> >*, spv::SpvBuildLogger*))>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsEliminateDeadOutputStores(spv_target_env, std::vector<unsigned int, std::allocator<unsigned int> >&, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int> >*, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int> >*, spv::SpvBuildLogger*))>>> referenced 2 more times
mold: error: undefined symbol: glslang::FinalizeProcessv
>>> referenced by /usr/lib64/libglslang.a(glslang_c_interface.cpp.o):(.text)
>>> /usr/lib64/libglslang.a(glslang_c_interface.cpp.o):(glslang_finalize_process)>>> referenced by register_types.cpp
>>> modules/libmodule_glslang.linuxbsd.editor.x86_64.a(register_types.linuxbsd.editor.x86_64.o):(uninitialize_glslang_module(ModuleInitializationLevel))
mold: error: undefined symbol: spvtools::Optimizer::~Optimizer()
>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsAnalyzeDeadOutputStores(spv_target_env, std::vector<unsigned int, std::allocator<unsigned int> >&, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int> >*, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int> >*, spv::SpvBuildLogger*))>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsEliminateDeadOutputStores(spv_target_env, std::vector<unsigned int, std::allocator<unsigned int> >&, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int> >*, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int> >*, spv::SpvBuildLogger*))>>> referenced 2 more times
mold: error: undefined symbol: glslang::TShader::parse(TBuiltInResource const*, int, EProfile, bool, bool, EShMessages, glslang::TShader::Includer&)
>>> referenced by /usr/lib64/libglslang.a(glslang_c_interface.cpp.o):(.text)
>>> /usr/lib64/libglslang.a(glslang_c_interface.cpp.o):(glslang_shader_parse)>>> referenced by register_types.cpp
>>> modules/libmodule_glslang.linuxbsd.editor.x86_64.a(register_types.linuxbsd.editor.x86_64.o):(glslang::TShader::parsePK16TBuiltInResourcei8EProfilebb11EShMessages)
mold: error: undefined symbol: spvtools::CreateAggressiveDCEPassbb
>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsEliminateDeadOutputStores(spv_target_env, std::vector<unsigned int, std::allocator<unsigned int> >&, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int> >*, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int> >*, spv::SpvBuildLogger*))>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsEliminateDeadOutputStores(spv_target_env, std::vector<unsigned int, std::allocator<unsigned int> >&, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int> >*, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int> >*, spv::SpvBuildLogger*))
mold: error: undefined symbol: glslang::GetKhronosToolIdv
>>> referenced by /usr/lib64/libSPIRV.a(GlslangToSpv.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(GlslangToSpv.cpp.o):(glslang::GlslangToSpv(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions*))
mold: error: undefined symbol: spvtools::CreateInterpolateFixupPassv
>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))
mold: error: undefined symbol: spvDiagnosticDestroy
>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsDisassemble(std::ostream&, std::vector<unsigned int, std::allocator<unsigned int> > const&, spv_target_env))>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsValidate(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, bool))
mold: error: undefined symbol: glslang::TShader::getInfoLogv
>>> referenced by /usr/lib64/libglslang.a(glslang_c_interface.cpp.o):(.text)
>>> /usr/lib64/libglslang.a(glslang_c_interface.cpp.o):(glslang_shader_get_info_log)>>> referenced by register_types.cpp
>>> modules/libmodule_glslang.linuxbsd.editor.x86_64.a(register_types.linuxbsd.editor.x86_64.o):(_compile_shader_glsl(RenderingDeviceCommons::ShaderStage, String const&, RenderingDevice::ShaderLanguage, String*, RenderingDevice const*))
mold: error: undefined symbol: spvtools::CreateScalarReplacementPassj
>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))
mold: error: undefined symbol: spvtools::Optimizer::Optimizer(spv_target_env)
>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsAnalyzeDeadOutputStores(spv_target_env, std::vector<unsigned int, std::allocator<unsigned int> >&, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int> >*, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int> >*, spv::SpvBuildLogger*))>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsEliminateDeadOutputStores(spv_target_env, std::vector<unsigned int, std::allocator<unsigned int> >&, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int> >*, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int> >*, spv::SpvBuildLogger*))>>> referenced 2 more times
mold: error: undefined symbol: glslang::TProgram::TProgram()
>>> referenced by /usr/lib64/libglslang.a(glslang_c_interface.cpp.o):(.text)
>>> /usr/lib64/libglslang.a(glslang_c_interface.cpp.o):(glslang_program_create)>>> referenced by register_types.cpp
>>> modules/libmodule_glslang.linuxbsd.editor.x86_64.a(register_types.linuxbsd.editor.x86_64.o):(_compile_shader_glsl(RenderingDeviceCommons::ShaderStage, String const&, RenderingDevice::ShaderLanguage, String*, RenderingDevice const*))
mold: error: undefined symbol: spvtools::CreateLocalSingleBlockLoadStoreElimPassv
>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))
mold: error: undefined symbol: spvtools::CreateCFGCleanupPassv
>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))
mold: error: undefined symbol: glslang::TProgram::mapIO(glslang::TIoMapResolver*, glslang::TIoMapper*)
>>> referenced by /usr/lib64/libglslang.a(glslang_c_interface.cpp.o):(.text)
>>> /usr/lib64/libglslang.a(glslang_c_interface.cpp.o):(glslang_program_map_io)
mold: error: undefined symbol: spvtools::CreateLocalAccessChainConvertPassv
>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))
mold: error: undefined symbol: spvtools::CreateWrapOpKillPassv
>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))
mold: error: undefined symbol: GetDefaultResources()
>>> referenced by register_types.cpp
>>> modules/libmodule_glslang.linuxbsd.editor.x86_64.a(register_types.linuxbsd.editor.x86_64.o):(_compile_shader_glsl(RenderingDeviceCommons::ShaderStage, String const&, RenderingDevice::ShaderLanguage, String*, RenderingDevice const*))
mold: error: undefined symbol: spvBinaryToText
>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsDisassemble(std::ostream&, std::vector<unsigned int, std::allocator<unsigned int> > const&, spv_target_env))
mold: error: undefined symbol: spvContextCreate
>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsDisassemble(std::ostream&, std::vector<unsigned int, std::allocator<unsigned int> > const&, spv_target_env))>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsValidate(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, bool))
mold: error: undefined symbol: spvValidatorOptionsDestroy
>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsValidate(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, bool))
mold: error: undefined symbol: glslang::TProgram::~TProgram()
>>> referenced by register_types.cpp
>>> modules/libmodule_glslang.linuxbsd.editor.x86_64.a(register_types.linuxbsd.editor.x86_64.o):(_compile_shader_glsl(RenderingDeviceCommons::ShaderStage, String const&, RenderingDevice::ShaderLanguage, String*, RenderingDevice const*))
mold: error: undefined symbol: spvtools::CreateSimplificationPassv
>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))
mold: error: undefined symbol: glslang::TShader::~TShader()
>>> referenced by register_types.cpp
>>> modules/libmodule_glslang.linuxbsd.editor.x86_64.a(register_types.linuxbsd.editor.x86_64.o):(_compile_shader_glsl(RenderingDeviceCommons::ShaderStage, String const&, RenderingDevice::ShaderLanguage, String*, RenderingDevice const*))
mold: error: undefined symbol: spvtools::CreateAggressiveDCEPassv
>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))>>> referenced 2 more times
mold: error: undefined symbol: spvContextDestroy
>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsDisassemble(std::ostream&, std::vector<unsigned int, std::allocator<unsigned int> > const&, spv_target_env))>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsValidate(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, bool))
mold: error: undefined symbol: glslang::TShader::setAutoMapBindingsb
>>> referenced by /usr/lib64/libglslang.a(glslang_c_interface.cpp.o):(.text)
>>> /usr/lib64/libglslang.a(glslang_c_interface.cpp.o):(glslang_shader_set_options)
mold: error: undefined symbol: glslang::TIntermediate::improperStraddle(glslang::TType const&, int, int, bool)
>>> referenced by /usr/lib64/libSPIRV.a(GlslangToSpv.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(GlslangToSpv.cpp.o):((anonymous namespace)::TGlslangToSpvTraverser::convertGlslangStructToSpvType(glslang::TType const&, glslang::TVector<glslang::TTypeLoc> const*, glslang::TLayoutPacking, glslang::TQualifier const&))
mold: error: undefined symbol: spvtools::CreateLocalMultiStoreElimPassv
>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))
mold: error: undefined symbol: spvtools::CreateVectorDCEPassv
>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))
mold: error: undefined symbol: spvValidatorOptionsSetScalarBlockLayout
>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsValidate(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, bool))
mold: error: undefined symbol: glslang::TShader::TShader(EShLanguage)
>>> referenced by /usr/lib64/libglslang.a(glslang_c_interface.cpp.o):(.text)
>>> /usr/lib64/libglslang.a(glslang_c_interface.cpp.o):(glslang_shader_create)>>> referenced by register_types.cpp
>>> modules/libmodule_glslang.linuxbsd.editor.x86_64.a(register_types.linuxbsd.editor.x86_64.o):(_compile_shader_glsl(RenderingDeviceCommons::ShaderStage, String const&, RenderingDevice::ShaderLanguage, String*, RenderingDevice const*))
mold: error: undefined symbol: glslang::TPoolAllocator::allocatem
>>> referenced by /usr/lib64/libSPIRV.a(GlslangToSpv.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(GlslangToSpv.cpp.o):(glslang::TIntermConstantUnion const*& std::vector<glslang::TIntermConstantUnion const*, glslang::pool_allocator<glslang::TIntermConstantUnion const*> >::emplace_back<glslang::TIntermConstantUnion const*>(glslang::TIntermConstantUnion const*&&) [clone .isra.0])>>> referenced by /usr/lib64/libSPIRV.a(GlslangToSpv.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(GlslangToSpv.cpp.o):(std::_Rb_tree_node<std::pair<int const, glslang::TVector<glslang::TIntermTyped const*> > >* std::_Rb_tree<int, std::pair<int const, glslang::TVector<glslang::TIntermTyped const*> >, std::_Select1st<std::pair<int const, glslang::TVector<glslang::TIntermTyped const*> > >, std::less<int>, glslang::pool_allocator<std::pair<int const, glslang::TVector<glslang::TIntermTyped const*> > > >::_M_copy<false, std::_Rb_tree<int, std::pair<int const, glslang::TVector<glslang::TIntermTyped const*> >, std::_Select1st<std::pair<int const, glslang::TVector<glslang::TIntermTyped const*> > >, std::less<int>, glslang::pool_allocator<std::pair<int const, glslang::TVector<glslang::TIntermTyped const*> > > >::_Alloc_node>(std::_Rb_tree_node<std::pair<int const, glslang::TVector<glslang::TIntermTyped const*> > >*, std::_Rb_tree_node_base*, std::_Rb_tree<int, std::pair<int const, glslang::TVector<glslang::TIntermTyped const*> >, std::_Select1st<std::pair<int const, glslang::TVector<glslang::TIntermTyped const*> > >, std::less<int>, glslang::pool_allocator<std::pair<int const, glslang::TVector<glslang::TIntermTyped const*> > > >::_Alloc_node&) [clone .isra.0])>>> referenced by /usr/lib64/libSPIRV.a(GlslangToSpv.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(GlslangToSpv.cpp.o):(std::_Rb_tree_node<std::pair<int const, glslang::TVector<glslang::TIntermTyped const*> > >* std::_Rb_tree<int, std::pair<int const, glslang::TVector<glslang::TIntermTyped const*> >, std::_Select1st<std::pair<int const, glslang::TVector<glslang::TIntermTyped const*> > >, std::less<int>, glslang::pool_allocator<std::pair<int const, glslang::TVector<glslang::TIntermTyped const*> > > >::_M_copy<false, std::_Rb_tree<int, std::pair<int const, glslang::TVector<glslang::TIntermTyped const*> >, std::_Select1st<std::pair<int const, glslang::TVector<glslang::TIntermTyped const*> > >, std::less<int>, glslang::pool_allocator<std::pair<int const, glslang::TVector<glslang::TIntermTyped const*> > > >::_Alloc_node>(std::_Rb_tree_node<std::pair<int const, glslang::TVector<glslang::TIntermTyped const*> > >*, std::_Rb_tree_node_base*, std::_Rb_tree<int, std::pair<int const, glslang::TVector<glslang::TIntermTyped const*> >, std::_Select1st<std::pair<int const, glslang::TVector<glslang::TIntermTyped const*> > >, std::less<int>, glslang::pool_allocator<std::pair<int const, glslang::TVector<glslang::TIntermTyped const*> > > >::_Alloc_node&) [clone .isra.0])>>> referenced 12 more times
mold: error: undefined symbol: spvValidateWithOptions
>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsValidate(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, bool))
mold: error: undefined symbol: spvtools::CreateLocalSingleStoreElimPassv
>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))
mold: error: undefined symbol: spvtools::CreateStripDebugInfoPassv
>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsStripDebugInfo(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*))
mold: error: undefined symbol: spvtools::Optimizer::SetMessageConsumer(std::function<void (spv_message_level_t, char const*, spv_position_t const&, char const*)>)
>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsAnalyzeDeadOutputStores(spv_target_env, std::vector<unsigned int, std::allocator<unsigned int> >&, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int> >*, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int> >*, spv::SpvBuildLogger*))>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsEliminateDeadOutputStores(spv_target_env, std::vector<unsigned int, std::allocator<unsigned int> >&, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int> >*, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int> >*, spv::SpvBuildLogger*))>>> referenced 2 more times
mold: error: undefined symbol: glslang::TShader::setAutoMapLocationsb
>>> referenced by /usr/lib64/libglslang.a(glslang_c_interface.cpp.o):(.text)
>>> /usr/lib64/libglslang.a(glslang_c_interface.cpp.o):(glslang_shader_set_options)
mold: error: undefined symbol: glslang::TPoolAllocator::pushv
>>> referenced by /usr/lib64/libSPIRV.a(GlslangToSpv.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(GlslangToSpv.cpp.o):(glslang::GlslangToSpv(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions*))
mold: error: undefined symbol: spvValidatorOptionsCreate
>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsValidate(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, bool))
mold: error: undefined symbol: spvOptimizerOptionsSetRunValidator
>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsAnalyzeDeadOutputStores(spv_target_env, std::vector<unsigned int, std::allocator<unsigned int> >&, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int> >*, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int> >*, spv::SpvBuildLogger*))>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsEliminateDeadOutputStores(spv_target_env, std::vector<unsigned int, std::allocator<unsigned int> >&, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int> >*, std::unordered_set<unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<unsigned int> >*, spv::SpvBuildLogger*))>>> referenced 2 more times
mold: error: undefined symbol: glslang::TProgram::getInfoDebugLogv
>>> referenced by /usr/lib64/libglslang.a(glslang_c_interface.cpp.o):(.text)
>>> /usr/lib64/libglslang.a(glslang_c_interface.cpp.o):(glslang_program_get_info_debug_log)>>> referenced by register_types.cpp
>>> modules/libmodule_glslang.linuxbsd.editor.x86_64.a(register_types.linuxbsd.editor.x86_64.o):(_compile_shader_glsl(RenderingDeviceCommons::ShaderStage, String const&, RenderingDevice::ShaderLanguage, String*, RenderingDevice const*))
mold: error: undefined symbol: spvtools::CreateMergeReturnPassv
>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))
mold: error: undefined symbol: glslang::TShader::setShiftBinding(glslang::TResourceType, unsigned int)
>>> referenced by /usr/lib64/libglslang.a(glslang_c_interface.cpp.o):(.text)
>>> /usr/lib64/libglslang.a(glslang_c_interface.cpp.o):(glslang_shader_shift_binding)
mold: error: undefined symbol: spvtools::CreateEliminateDeadInputComponentsSafePassv
>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))
mold: error: undefined symbol: glslang::TPoolAllocator::popv
>>> referenced by /usr/lib64/libSPIRV.a(GlslangToSpv.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(GlslangToSpv.cpp.o):(glslang::GlslangToSpv(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions*))
mold: error: undefined symbol: spvtools::CreateDeadBranchElimPassv
>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))>>> referenced by /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(.text)
>>> /usr/lib64/libSPIRV.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))
collect2: error: ld returned 1 exit status
scons: *** [bin/godot.linuxbsd.editor.x86_64] Error 1
scons: building terminated because of errors.
In contrast, compiling works with builtin_glslang=yes.
|
I fix that in a separate PR: #93471 It's not yet in a release though. |
|
Could you rebase your PR? See our pull request guidelines for more information |
|
Done, I think? |
|
I tested on Fedora 43 with That being said I'm not sure how much effort should be put in supporting system-provided glslang, in my experience it's a library that doesn't have a stable ABI nor soname so linking against an arbitrary version that may not be compatible with Godot's expectation is a bit hit and miss. On Mageia I had packaged glslang as a shared library so at least attempting it seemed to make sense to reduce binary size and reusing system libraries between multiple packages. But Fedora only seems to provide static libraries so there wouldn't be much difference to letting Godot use its bundled copy, aside from potential incompatibilities. |
|
On Fedora 43 I get it to link with: diff --git a/platform/linuxbsd/detect.py b/platform/linuxbsd/detect.py
index 35415dc269..add157b3b6 100644
--- a/platform/linuxbsd/detect.py
+++ b/platform/linuxbsd/detect.py
@@ -514,7 +514,7 @@ def configure(env: "SConsEnvironment"):
env.ParseConfig("pkg-config vulkan --cflags --libs")
if not env["builtin_glslang"]:
# No pkgconfig file so far, hardcode expected lib name.
- env.Append(LIBS=["glslang", "SPIRV"])
+ env.Append(LIBS=["glslang", "glslang-default-resource-limits", "SPIRV", "SPIRV-Tools", "SPIRV-Tools-opt"])
if env["opengl3"]:
env.Append(CPPDEFINES=["GLES3_ENABLED"])But as expected this doesn't serve much purpose, it even makes the resulting binary ( Those are dev binaries with debug symbols, the difference should be smaller with optimized builds. But overall I think the best option is to drop the |
|
There are 18 alpine packages using shared glslang and no (frequent) ABI issues. Would it be possible to have this option maintained by the people who are using it (like it already is)? The godot alpine package is still at version 4.4.1 at the moment so maybe something has changed in the meantime. When that is upgraded I would likely fix all issues that I encounter. I however don't have the time to troubleshoot compilation failure on fedora if I can't easily reproduce them on alpine. |
|
I would just like to chime in that this issue also seems to exist on Arch Linux. I was able to link all other system libraries, but not glslang: #!/usr/bin/bash
scons platform=linuxbsd use_llvm=yes linker=mold\
builtin_brotli=no builtin_freetype=no builtin_glslang=yes builtin_graphite=no builtin_harfbuzz=no builtin_icu4c=no builtin_libjpeg_turbo=no builtin_libogg=no\
builtin_mbedtls=no builtin_miniupnpc=no builtin_libpng=no builtin_libtheora=no builtin_libvorbis=no builtin_libwebp=no builtin_pcre2=no\
builtin_sdl=no builtin_wslay=no builtin_zlib=no builtin_zstd=no\
deprecated=no disable_exceptions=no warnings=extra x11=no\
use_asan=no use_lsan=no use_msan=no use_tsan=no use_ubsan=no\
debug_symbols=yes dev_build=yes dev_mode=yesworks, changing to mold: error: undefined symbol: GetDefaultResources()
>>> referenced by register_types.cpp
>>> bin/obj/modules/libmodule_glslang.linuxbsd.editor.dev.x86_64.llvm.a(register_types.linuxbsd.editor.dev.x86_64.llvm.o):(compile_glslang_shader(RenderingDeviceCommons::ShaderStage, String const&, RenderingDeviceCommons::ShaderLanguageVersion, RenderingDeviceCommons::ShaderSpirvVersion, String*))(See linked Arch package issue for full log.) |
|
FWIW:
|
|
This also allows |
The `GetDefaultResource` function is in separate library file.
|
The Alpine Linux package for godot 4.6 still uses the same patch and works. @akien-mga I am relatively certain that the difference you see on fedora (both in size and required libraries) is due to fedora only packaging static libraries instead of shared libraries: https://packages.fedoraproject.org/pkgs/glslang/glslang-devel/fedora-43-updates.html |
|
This would become a lot easier if upstream glslang would provide pkgconf files but unfortunately it doesn't (yet): KhronosGroup/glslang#1715 |
akien-mga
left a comment
There was a problem hiding this comment.
Alright, let's merge this since it's useful for distros with shared libraries for glslang (which is apparently somewhat supported by upstream nowadays, I remember having to patch it myself in Mageia and thus the shared library output couldn't be considered standard).
I still think this might be a footgun and I can't guarantee that the engine will work as it should with system glslang if it's not matching the rest of the Vulkan SDK components in Godot, some of which can't be unbundled (like spirv-reflect, spirv-cross).
|
Thanks! |
|
Thanks! The unbundling/using system libraries for Vulkan is a little messy currently, would be good to be able to do that cleanly as well. |
|
Cherry-picked for 4.6.1. |
Fix missing lib with `builtin_glslang=false`
The
GetDefaultResourcefunction is in separate library file.