X Tutup
Skip to content

Fix missing lib with builtin_glslang=false#93478

Merged
Repiteo merged 1 commit intogodotengine:masterfrom
sertonix:patch-2
Feb 4, 2026
Merged

Fix missing lib with builtin_glslang=false#93478
Repiteo merged 1 commit intogodotengine:masterfrom
sertonix:patch-2

Conversation

@sertonix
Copy link
Contributor

The GetDefaultResource function is in separate library file.

@sertonix sertonix requested a review from a team as a code owner June 22, 2024 17:14
@AThousandShips AThousandShips added this to the 4.3 milestone Jun 22, 2024
@akien-mga akien-mga changed the title Fix missing lib with builtin_glslang=false Fix missing lib with builtin_glslang=false Jul 31, 2024
@akien-mga
Copy link
Member

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).

@akien-mga akien-mga modified the milestones: 4.3, 4.4 Jul 31, 2024
@akien-mga akien-mga added the cherrypick:4.3 Considered for cherry-picking into a future 4.3.x release label Jul 31, 2024
@sertonix
Copy link
Contributor Author

This patch was needed on alpine linux: https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/67911

Copy link
Member

@Calinou Calinou left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@sertonix
Copy link
Contributor Author

sertonix commented Aug 8, 2024

I fix that in a separate PR: #93471

It's not yet in a release though.

@Repiteo Repiteo added the cherrypick:4.4 Considered for cherry-picking into a future 4.4.x release label Feb 24, 2025
@Repiteo Repiteo modified the milestones: 4.4, 4.5 Feb 24, 2025
@Repiteo Repiteo added the cherrypick:4.5 Considered for cherry-picking into a future 4.5.x release label Sep 5, 2025
@Repiteo Repiteo modified the milestones: 4.5, 4.6 Sep 5, 2025
@Repiteo
Copy link
Contributor

Repiteo commented Nov 18, 2025

Could you rebase your PR? See our pull request guidelines for more information

@sertonix
Copy link
Contributor Author

Done, I think?

@akien-mga
Copy link
Member

I tested on Fedora 43 with glslang-devel installed and it doesn't seem to work for me, I get a similar issue to @Calinou's above.

g++ -o bin/godot.linuxbsd.editor.dev.x86_64 -rdynamic -fuse-ld=mold -static-libgcc -static-libstdc++ -O0 bin/obj/platform/linuxbsd/crash_handler_linuxbsd.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/os_linuxbsd.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/freedesktop_portal_desktop.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/freedesktop_screensaver.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/freedesktop_at_spi_monitor.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/godot_linuxbsd.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/xkbcommon-so_wrap.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/x11/display_server_x11.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/x11/key_mapping_x11.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/x11/dynwrappers/xlib-so_wrap.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/x11/dynwrappers/xcursor-so_wrap.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/x11/dynwrappers/xinerama-so_wrap.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/x11/dynwrappers/xinput2-so_wrap.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/x11/dynwrappers/xrandr-so_wrap.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/x11/dynwrappers/xrender-so_wrap.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/x11/dynwrappers/xext-so_wrap.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/x11/rendering_context_driver_vulkan_x11.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/x11/gl_manager_x11_egl.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/x11/gl_manager_x11.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/x11/detect_prime_x11.linuxbsd.editor.dev.x86_64.o bin/obj/thirdparty/glad/glx.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/wayland/protocol/wayland.gen.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/wayland/protocol/tablet.gen.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/wayland/protocol/viewporter.gen.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/wayland/protocol/xdg_shell.gen.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/wayland/protocol/cursor_shape.gen.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/wayland/protocol/fractional_scale.gen.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/wayland/protocol/xdg_activation.gen.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/wayland/protocol/xdg_system_bell.gen.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/wayland/protocol/xdg_toplevel_icon.gen.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/wayland/protocol/idle_inhibit.gen.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/wayland/protocol/pointer_constraints.gen.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/wayland/protocol/pointer_gestures.gen.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/wayland/protocol/primary_selection.gen.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/wayland/protocol/relative_pointer.gen.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/wayland/protocol/text_input.gen.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/wayland/protocol/xdg_decoration.gen.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/wayland/protocol/xdg_foreign_v1.gen.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/wayland/protocol/xdg_foreign_v2.gen.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/wayland/detect_prime_egl.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/wayland/display_server_wayland.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/wayland/key_mapping_xkb.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/wayland/wayland_thread.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/wayland/dynwrappers/wayland-cursor-so_wrap.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/wayland/dynwrappers/wayland-client-core-so_wrap.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/wayland/dynwrappers/wayland-egl-core-so_wrap.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/wayland/dynwrappers/libdecor-so_wrap.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/wayland/rendering_context_driver_vulkan_wayland.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/wayland/egl_manager_wayland.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/wayland/egl_manager_wayland_gles.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/tts_linux.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/speechd-so_wrap.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/fontconfig-so_wrap.linuxbsd.editor.dev.x86_64.o bin/obj/platform/linuxbsd/dbus-so_wrap.linuxbsd.editor.dev.x86_64.o bin/obj/main/libmain.linuxbsd.editor.dev.x86_64.a bin/obj/tests/libtests.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodules.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_text_server_adv.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_fbx.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_gltf.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_ktx.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_svg.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_theora.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_vorbis.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_astcenc.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_basis_universal.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_bcdec.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_betsy.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_bmp.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_camera.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_csg.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_cvtt.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_dds.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_enet.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_etcpak.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_gdscript.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_glslang.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_godot_physics_2d.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_godot_physics_3d.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_gridmap.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_hdr.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_interactive_music.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_jolt_physics.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_jpg.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_jsonrpc.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_lightmapper_rd.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_mbedtls.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_meshoptimizer.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_minimp3.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_mobile_vr.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_multiplayer.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_navigation_2d.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_navigation_3d.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_noise.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_objectdb_profiler.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_ogg.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_openxr.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_raycast.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_regex.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_tga.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_tinyexr.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_upnp.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_vhacd.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_webp.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_webrtc.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_websocket.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_webxr.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_xatlas_unwrap.linuxbsd.editor.dev.x86_64.a bin/obj/modules/libmodule_zip.linuxbsd.editor.dev.x86_64.a bin/obj/platform/libplatform.linuxbsd.editor.dev.x86_64.a bin/obj/drivers/libdrivers.linuxbsd.editor.dev.x86_64.a bin/obj/editor/libeditor.linuxbsd.editor.dev.x86_64.a bin/obj/scene/libscene.linuxbsd.editor.dev.x86_64.a bin/obj/servers/libservers.linuxbsd.editor.dev.x86_64.a bin/obj/core/libcore.linuxbsd.editor.dev.x86_64.a bin/obj/modules/freetype/libfreetype_builtin.linuxbsd.editor.dev.x86_64.a bin/obj/modules/msdfgen/libmsdfgen_builtin.linuxbsd.editor.dev.x86_64.a bin/obj/modules/text_server_adv/libharfbuzz_builtin.linuxbsd.editor.dev.x86_64.a bin/obj/modules/text_server_adv/libgraphite_builtin.linuxbsd.editor.dev.x86_64.a bin/obj/modules/text_server_adv/libicu_builtin.linuxbsd.editor.dev.x86_64.a -lrt -lglslang -lSPIRV -lglslang-default-resource-limits -lpthread -ldl
mold: error: undefined symbol: spvValidatorOptionsDestroy
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.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::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 SpvTools.cpp
>>>               /usr/lib64/libglslang.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 SpvTools.cpp
>>>               /usr/lib64/libglslang.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.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 SpvTools.cpp
>>>               /usr/lib64/libglslang.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::CreateLocalMultiStoreElimPass()
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.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::CreateLocalAccessChainConvertPass()
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.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::CreateWrapOpKillPass()
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.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: spvBinaryToText
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.a(SpvTools.cpp.o):(glslang::SpirvToolsDisassemble(std::ostream&, std::vector<unsigned int, std::allocator<unsigned int> > const&, spv_target_env))
mold: error: undefined symbol: spvValidatorOptionsSetWorkgroupScalarBlockLayout
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.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::CreateEliminateDeadInputComponentsSafePass()
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.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::SetTargetEnv(spv_target_env)
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.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 SpvTools.cpp
>>>               /usr/lib64/libglslang.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::CreateVectorDCEPass()
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.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::CreateInlineExhaustivePass()
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.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: spvValidatorOptionsSetRelaxBlockLayout
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.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::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 SpvTools.cpp
>>>               /usr/lib64/libglslang.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::CreateCompactIdsPass()
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.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::CreateInterpolateFixupPass()
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.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::CreateLocalSingleStoreElimPass()
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.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::PassToken::~PassToken()
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))
>>> referenced 34 more times
mold: error: undefined symbol: spvDiagnosticDestroy
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.a(SpvTools.cpp.o):(glslang::SpirvToolsDisassemble(std::ostream&, std::vector<unsigned int, std::allocator<unsigned int> > const&, spv_target_env))
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.a(SpvTools.cpp.o):(glslang::SpirvToolsValidate(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, bool))
mold: error: undefined symbol: spvValidateWithOptions
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.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::Optimizer::Run(unsigned int const*, unsigned long, std::vector<unsigned int, std::allocator<unsigned int> >*, spv_optimizer_options_t*) const
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.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 3 more times
mold: error: undefined symbol: spvtools::CreateBlockMergePass()
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.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::CreateScalarReplacementPass(unsigned int)
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.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::SetMessageConsumer(std::function<void (spv_message_level_t, char const*, spv_position_t const&, char const*)>)
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.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 3 more times
mold: error: undefined symbol: spvContextCreate
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.a(SpvTools.cpp.o):(glslang::SpirvToolsDisassemble(std::ostream&, std::vector<unsigned int, std::allocator<unsigned int> > const&, spv_target_env))
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.a(SpvTools.cpp.o):(glslang::SpirvToolsValidate(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, bool))
mold: error: undefined symbol: spvValidatorOptionsSetScalarBlockLayout
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.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::CreateEliminateDeadOutputComponentsPass()
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.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::CreateRedundancyEliminationPass()
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.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: spvOptimizerOptionsCreate
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.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 SpvTools.cpp
>>>               /usr/lib64/libglslang.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::CreateAggressiveDCEPass()
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.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: spvtools::CreateMergeReturnPass()
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.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: spvValidatorOptionsCreate
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.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::Optimizer::~Optimizer()
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.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 3 more times
mold: error: undefined symbol: spvtools::CreateIfConversionPass()
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.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::CreateLocalSingleBlockLoadStoreElimPass()
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.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::RegisterPass(spvtools::Optimizer::PassToken&&)
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))
>>> referenced 34 more times
mold: error: undefined symbol: spvDiagnosticPrint
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.a(SpvTools.cpp.o):(glslang::SpirvToolsDisassemble(std::ostream&, std::vector<unsigned int, std::allocator<unsigned int> > const&, spv_target_env))
mold: error: undefined symbol: spvValidatorOptionsSetAllowOffsetTextureOperand
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.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::CreateEliminateDeadInputComponentsPass()
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.a(SpvTools.cpp.o):(glslang::SpirvToolsEliminateDeadInputComponents(spv_target_env, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*))
mold: error: undefined symbol: spvtools::CreateStripDebugInfoPass()
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.a(SpvTools.cpp.o):(glslang::SpirvToolsStripDebugInfo(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*))
mold: error: undefined symbol: spvOptimizerOptionsSetRunValidator
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.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 SpvTools.cpp
>>>               /usr/lib64/libglslang.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::CreateDeadInsertElimPass()
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.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::CreateEliminateDeadFunctionsPass()
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.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 SpvTools.cpp
>>>               /usr/lib64/libglslang.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.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 3 more times
mold: error: undefined symbol: spvValidatorOptionsSetBeforeHlslLegalization
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.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::CreateAggressiveDCEPass(bool, bool)
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.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 SpvTools.cpp
>>>               /usr/lib64/libglslang.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: spvOptimizerOptionsSetMaxIdBound
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.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::CreateCFGCleanupPass()
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.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::CreateSimplificationPass()
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.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::CreateDeadBranchElimPass()
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.a(SpvTools.cpp.o):(glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*))
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.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: spvContextDestroy
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.a(SpvTools.cpp.o):(glslang::SpirvToolsDisassemble(std::ostream&, std::vector<unsigned int, std::allocator<unsigned int> > const&, spv_target_env))
>>> referenced by SpvTools.cpp
>>>               /usr/lib64/libglslang.a(SpvTools.cpp.o):(glslang::SpirvToolsValidate(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, bool))
collect2: error: ld returned 1 exit status
scons: *** [bin/godot.linuxbsd.editor.dev.x86_64] Error 1
scons: building terminated because of errors.
INFO: Time elapsed: 00:00:09.44

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.

@akien-mga
Copy link
Member

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 (.fix) bigger:

-rwxr-xr-x.  1 akien akien 885M Nov 18 23:14 godot.linuxbsd.editor.dev.x86_64
-rwxr-xr-x.  1 akien akien 905M Nov 18 23:14 godot.linuxbsd.editor.dev.x86_64.fix

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 builtin_glslang option. We don't allow unbundling other components of the Vulkan and D3D12 stacks, and since glslang really isn't designed to be used as a shared library, I think the option is counterproductive.

@sertonix
Copy link
Contributor Author

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.

@Zsar
Copy link

Zsar commented Dec 17, 2025

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=yes

works, changing to builtin_glslang=no breaks with

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.)

@Zsar
Copy link

Zsar commented Dec 20, 2025

FWIW:

  • Tried out the code change locally and it also resolves the issue on Arch.
  • The failing check seems to have been a connectivity issue:
    Error: fatal: unable to access 'https://github.com/godotengine/godot-cpp/': The requested URL returned error: 500
    and should pass on a rerun - I cannot see a way to re-run it though.

@Repiteo Repiteo modified the milestones: 4.6, 4.x Jan 26, 2026
@podiki
Copy link

podiki commented Feb 2, 2026

This also allows builtin_glslang=no on GNU Guix to compile successfully.

The `GetDefaultResource` function is in separate library file.
@sertonix
Copy link
Contributor Author

sertonix commented Feb 3, 2026

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

@sertonix
Copy link
Contributor Author

sertonix commented Feb 3, 2026

This would become a lot easier if upstream glslang would provide pkgconf files but unfortunately it doesn't (yet): KhronosGroup/glslang#1715

Copy link
Member

@akien-mga akien-mga left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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).

@akien-mga akien-mga added cherrypick:4.6 Considered for cherry-picking into a future 4.6.x release and removed cherrypick:4.3 Considered for cherry-picking into a future 4.3.x release cherrypick:4.4 Considered for cherry-picking into a future 4.4.x release cherrypick:4.5 Considered for cherry-picking into a future 4.5.x release labels Feb 3, 2026
@Repiteo Repiteo modified the milestones: 4.x, 4.7 Feb 4, 2026
@Repiteo Repiteo merged commit 92884a7 into godotengine:master Feb 4, 2026
20 checks passed
@Repiteo
Copy link
Contributor

Repiteo commented Feb 4, 2026

Thanks!

@podiki
Copy link

podiki commented Feb 4, 2026

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.

@Repiteo
Copy link
Contributor

Repiteo commented Feb 6, 2026

Cherry-picked for 4.6.1.

@Repiteo Repiteo removed the cherrypick:4.6 Considered for cherry-picking into a future 4.6.x release label Feb 6, 2026
rivie13 pushed a commit to rivie13/Phoenix-Agentic-Engine that referenced this pull request Feb 16, 2026
Fix missing lib with `builtin_glslang=false`
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants

X Tutup