[GH-ISSUE #2800] [BUILD BUG]: SPIRV not being linked on Debian #905

Closed
opened 2026-02-27 21:08:49 +03:00 by kerem · 4 comments
Owner

Originally created by @knuxyl on GitHub (Apr 17, 2025).
Original GitHub issue: https://github.com/shadps4-emu/shadPS4/issues/2800

Checklist

  • I have searched for a similar issue in this repository and did not find one.
  • I am using an official build obtained from releases or updated one of those builds using its in-app updater.

Describe the Bug

Debian testing does not seem to ship glslang with spirv linking so during linking phase it fails with tons of undefined references from glslang to spv functions. Same issue with clang and gcc.
Maybe linking spirv can be added manually?

[100%] Linking CXX executable shadps4
/usr/bin/ld: /usr/lib/x86_64-linux-gnu/libglslang.a(SpvTools.cpp.o): in function glslang::SpirvToolsDisassemble(std::ostream&, std::vector<unsigned int, std::allocator<unsigned int> > const&, spv_target_env)': (.text+0x423): undefined reference to spvContextCreate'
/usr/bin/ld: (.text+0x455): undefined reference to spvBinaryToText' /usr/bin/ld: (.text+0x464): undefined reference to spvDiagnosticPrint'
/usr/bin/ld: (.text+0x46e): undefined reference to spvDiagnosticDestroy' /usr/bin/ld: (.text+0x476): undefined reference to spvContextDestroy'
/usr/bin/ld: /usr/lib/x86_64-linux-gnu/libglslang.a(SpvTools.cpp.o): in function glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*)': (.text+0x862): undefined reference to spvOptimizerOptionsCreate'
/usr/bin/ld: (.text+0x893): undefined reference to spvOptimizerOptionsSetRunValidator' /usr/bin/ld: (.text+0x8d2): undefined reference to spvOptimizerOptionsDestroy'
/usr/bin/ld: (.text+0x9b9): undefined reference to spvOptimizerOptionsSetMaxIdBound' /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libglslang.a(SpvTools.cpp.o): in function glslang::SpirvToolsAnalyzeDeadOutputStores(spv_target_env, std::vector<unsigned int, std::allocator >&, std::unordered_set<unsigned int, std::hash, std::equal_to, std::allocator >, std::unordered_set<unsigned int, std::hash, std::equal_to, std::allocator >, spv::SpvBuildLogger*)':
(.text+0xaeb): undefined reference to spvOptimizerOptionsCreate' /usr/bin/ld: (.text+0xb03): undefined reference to spvOptimizerOptionsSetRunValidator'
/usr/bin/ld: (.text+0xb2c): undefined reference to spvOptimizerOptionsDestroy' /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libglslang.a(SpvTools.cpp.o): in function glslang::SpirvToolsEliminateDeadOutputStores(spv_target_env, std::vector<unsigned int, std::allocator >&, std::unordered_set<unsigned int, std::hash, std::equal_to, std::allocator >, std::unordered_set<unsigned int, std::hash, std::equal_to, std::allocator >, spv::SpvBuildLogger*)':
(.text+0xc7a): undefined reference to spvOptimizerOptionsCreate' /usr/bin/ld: (.text+0xc92): undefined reference to spvOptimizerOptionsSetRunValidator'
/usr/bin/ld: (.text+0xcb8): undefined reference to spvOptimizerOptionsDestroy' /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libglslang.a(SpvTools.cpp.o): in function glslang::SpirvToolsEliminateDeadInputComponents(spv_target_env, std::vector<unsigned int, std::allocator >&, spv::SpvBuildLogger*)':
(.text+0xdb6): undefined reference to spvOptimizerOptionsCreate' /usr/bin/ld: (.text+0xdce): undefined reference to spvOptimizerOptionsSetRunValidator'
/usr/bin/ld: (.text+0xdf4): undefined reference to spvOptimizerOptionsDestroy' /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libglslang.a(SpvTools.cpp.o): in function glslang::SpirvToolsStripDebugInfo(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator >&, spv::SpvBuildLogger*)':
(.text+0xedc): undefined reference to spvOptimizerOptionsCreate' /usr/bin/ld: (.text+0xefe): undefined reference to spvOptimizerOptionsSetRunValidator'
/usr/bin/ld: (.text+0xf24): undefined reference to spvOptimizerOptionsDestroy' /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libglslang.a(SpvTools.cpp.o): in function glslang::SpirvToolsValidate(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator >&, spv::SpvBuildLogger*, bool)':
(.text+0xfa7): undefined reference to spvContextCreate' /usr/bin/ld: (.text+0xfd5): undefined reference to spvValidatorOptionsCreate'
/usr/bin/ld: (.text+0xfed): undefined reference to spvValidatorOptionsSetRelaxBlockLayout' /usr/bin/ld: (.text+0xffe): undefined reference to spvValidatorOptionsSetBeforeHlslLegalization'
/usr/bin/ld: (.text+0x1186): undefined reference to spvValidatorOptionsSetScalarBlockLayout' /usr/bin/ld: (.text+0x1302): undefined reference to spvValidatorOptionsSetWorkgroupScalarBlockLayout'
/usr/bin/ld: (.text+0x1482): undefined reference to spvValidatorOptionsSetAllowOffsetTextureOperand' /usr/bin/ld: (.text+0x1499): undefined reference to spvValidateWithOptions'
/usr/bin/ld: (.text+0x163d): undefined reference to spvValidatorOptionsDestroy' /usr/bin/ld: (.text+0x1647): undefined reference to spvDiagnosticDestroy'
/usr/bin/ld: (.text+0x1651): undefined reference to spvContextDestroy' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(optimizer.cpp.o): in function spvtools::Optimizer::RegisterPassFromFlag(std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&, bool) [clone .part.0]':
(.text+0x84db): undefined reference to spvtools::utils::SplitFlagArgs(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(optimizer.cpp.o): in function spvtools::Optimizer::Run(unsigned int const*, unsigned long, std::vector<unsigned int, std::allocator >, spv_optimizer_options_t) const':
(.text+0xa325): undefined reference to spvtools::SpirvTools::SpirvTools(spv_target_env)' /usr/bin/ld: (.text+0xa371): undefined reference to spvtools::SpirvTools::SetMessageConsumer(std::function<void (spv_message_level_t, char const*, spv_position_t const&, char const*)>)'
/usr/bin/ld: (.text+0xa3a2): undefined reference to spvtools::SpirvTools::Validate(unsigned int const*, unsigned long, spv_validator_options_t*) const' /usr/bin/ld: (.text+0xa4c4): undefined reference to spvtools::SpirvTools::~SpirvTools()'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(optimizer.cpp.o): in function spvtools::Optimizer::Run(unsigned int const*, unsigned long, std::vector<unsigned int, std::allocator<unsigned int> >*) const': (.text+0xa509): undefined reference to spvOptimizerOptionsCreate'
/usr/bin/ld: (.text+0xa52a): undefined reference to spvOptimizerOptionsDestroy' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(optimizer.cpp.o): in function spvtools::Optimizer::Run(unsigned int const*, unsigned long, std::vector<unsigned int, std::allocator >, spvtools::ValidatorOptions const&, bool) const':
(.text+0xa56a): undefined reference to spvOptimizerOptionsCreate' /usr/bin/ld: (.text+0xa578): undefined reference to spvOptimizerOptionsSetRunValidator'
/usr/bin/ld: (.text+0xa588): undefined reference to spvOptimizerOptionsSetValidatorOptions' /usr/bin/ld: (.text+0xa5a6): undefined reference to spvOptimizerOptionsDestroy'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(optimizer.cpp.o): in function spvtools::opt::IRContext::~IRContext()': (.text._ZN8spvtools3opt9IRContextD2Ev[_ZN8spvtools3opt9IRContextD5Ev]+0x19): undefined reference to spvContextDestroy'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(pass_manager.cpp.o): in function spvtools::opt::PassManager::Run(spvtools::opt::IRContext*)::{lambda(char const*, spvtools::opt::Pass*)#1}::operator()(char const*, spvtools::opt::Pass*) const [clone .part.0]': (.text+0x6f): undefined reference to spvtools::SpirvTools::SpirvTools(spv_target_env)'
/usr/bin/ld: (.text+0xc6): undefined reference to spvtools::SpirvTools::SetMessageConsumer(std::function<void (spv_message_level_t, char const*, spv_position_t const&, char const*)>)' /usr/bin/ld: (.text+0x1a0): undefined reference to spvtools::SpirvTools::Disassemble(std::vector<unsigned int, std::allocator > const&, std::__cxx11::basic_string<char, std::char_traits, std::allocator >
, unsigned int) const'
/usr/bin/ld: (.text+0x292): undefined reference to spvtools::SpirvTools::~SpirvTools()' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(pass_manager.cpp.o): in function spvtools::opt::PassManager::Run(spvtools::opt::IRContext*)':
(.text+0x5fd): undefined reference to spvtools::utils::PrintTimerDescription(std::ostream*, bool)' /usr/bin/ld: (.text+0x626): undefined reference to vtable for spvtools::utils::Timer'
/usr/bin/ld: (.text+0x663): undefined reference to spvtools::utils::Timer::Report(char const*)' /usr/bin/ld: (.text+0x6e4): undefined reference to spvtools::utils::Timer::Start()'
/usr/bin/ld: (.text+0x724): undefined reference to spvtools::SpirvTools::SpirvTools(spv_target_env)' /usr/bin/ld: (.text+0x788): undefined reference to spvtools::SpirvTools::SetMessageConsumer(std::function<void (spv_message_level_t, char const*, spv_position_t const&, char const*)>)'
/usr/bin/ld: (.text+0x7ec): undefined reference to spvtools::SpirvTools::Validate(unsigned int const*, unsigned long, spv_validator_options_t*) const' /usr/bin/ld: (.text+0x80f): undefined reference to spvtools::SpirvTools::~SpirvTools()'
/usr/bin/ld: (.text+0x985): undefined reference to spvtools::SpirvTools::~SpirvTools()' /usr/bin/ld: (.text+0x99c): undefined reference to spvtools::utils::Timer::Report(char const*)'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(pass_manager.cpp.o): in function spvtools::utils::ScopedTimer<spvtools::utils::Timer>::~ScopedTimer()': (.text._ZN8spvtools5utils11ScopedTimerINS0_5TimerEED2Ev[_ZN8spvtools5utils11ScopedTimerINS0_5TimerEED5Ev]+0x29): undefined reference to spvtools::utils::Timer::Report(char const*)'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(pass_manager.cpp.o): in function spvtools::utils::ScopedTimer<spvtools::utils::Timer>::~ScopedTimer()': (.text._ZN8spvtools5utils11ScopedTimerINS0_5TimerEED0Ev[_ZN8spvtools5utils11ScopedTimerINS0_5TimerEED5Ev]+0x29): undefined reference to spvtools::utils::Timer::Report(char const*)'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(private_to_local_pass.cpp.o): in function spvtools::opt::PrivateToLocalPass::IsValidUse(spvtools::opt::Instruction const*) const': (.text+0x13c3): undefined reference to spvOpcodeIsDecoration(spv::Op)'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(remove_duplicates_pass.cpp.o): in function spvtools::opt::RemoveDuplicatesPass::RemoveDuplicateTypes() const': (.text+0x1288): undefined reference to spvOpcodeGeneratesType(spv::Op)'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(remove_unused_interface_variables_pass.cpp.o): in function spvtools::opt::RemoveUnusedInterfaceVariablesContext::processFunction(spvtools::opt::Function*)': (.text._ZN8spvtools3opt37RemoveUnusedInterfaceVariablesContext15processFunctionEPNS0_8FunctionE[_ZN8spvtools3opt37RemoveUnusedInterfaceVariablesContext15processFunctionEPNS0_8FunctionE]+0x125): undefined reference to spvIsInIdType(spv_operand_type_t)'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(replace_desc_array_access_using_var_index.cpp.o): in function spvtools::opt::ReplaceDescArrayAccessUsingVarIndex::UseNewIdsInBlock(spvtools::opt::BasicBlock*, std::unordered_map<unsigned int, unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int> > > const&) const': (.text+0x1645): undefined reference to spvIsInIdType(spv_operand_type_t)'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(replace_desc_array_access_using_var_index.cpp.o): in function spvtools::opt::ReplaceDescArrayAccessUsingVarIndex::CollectRequiredImageAndAccessInsts(spvtools::opt::Instruction*) const': (.text+0x9153): undefined reference to spvIsInIdType(spv_operand_type_t)'
/usr/bin/ld: (.text+0x92ea): undefined reference to spvIsInIdType(spv_operand_type_t)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(replace_invalid_opc.cpp.o): in function spvtools::opt::ReplaceInvalidOpcodePass::BuildWarningMessageabi:cxx11':
(.text+0x12ec): undefined reference to spvtools::AssemblyGrammar::lookupOpcode(spv::Op, spv_opcode_desc_t const**) const' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(scalar_replacement_pass.cpp.o): in function spvtools::opt::ScalarReplacementPass::IsSpecConstant(unsigned int) const':
(.text+0x154f): undefined reference to spvOpcodeIsSpecConstant(spv::Op)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(scalar_replacement_pass.cpp.o): in function spvtools::opt::ScalarReplacementPass::GetOrCreateInitialValue(spvtools::opt::Instruction*, unsigned int, spvtools::opt::Instruction*) [clone .part.0]':
(.text+0x4b49): undefined reference to spvOpcodeIsSpecConstant(spv::Op)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(set_spec_constant_default_value_pass.cpp.o): in function spvtools::opt::SetSpecConstantDefaultValuePass::Process()':
(.text+0x1109): undefined reference to spvtools::utils::ParseAndEncodeNumber(char const*, spvtools::utils::NumberType const&, std::function<void (unsigned int)>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(simplification_pass.cpp.o): in function std::_Function_handler<bool (spvtools::opt::Instruction*), spvtools::opt::SimplificationPass::SimplifyFunction(spvtools::opt::Function*)::{lambda(spvtools::opt::Instruction*)#2}>::_M_invoke(std::_Any_data const&, spvtools::opt::Instruction*&&)':
(.text+0x4de): undefined reference to spvOpcodeIsDebug(spv::Op)' /usr/bin/ld: (.text+0x4f3): undefined reference to spvOpcodeIsDecoration(spv::Op)'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(simplification_pass.cpp.o): in function std::_Function_handler<bool (spvtools::opt::Instruction*), spvtools::opt::SimplificationPass::SimplifyFunction(spvtools::opt::Function*)::{lambda(spvtools::opt::BasicBlock*)#1}::operator()(spvtools::opt::BasicBlock*) const::{lambda(spvtools::opt::Instruction*)#2}>::_M_invoke(std::_Any_data const&, spvtools::opt::Instruction*&&)': (.text+0x50e): undefined reference to spvOpcodeIsDebug(spv::Op)'
/usr/bin/ld: (.text+0x523): undefined reference to spvOpcodeIsDecoration(spv::Op)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(simplification_pass.cpp.o): in function spvtools::opt::SimplificationPass::AddNewOperands(spvtools::opt::Instruction*, std::unordered_set<spvtools::opt::Instruction*, std::hashspvtools::opt::Instruction*, std::equal_tospvtools::opt::Instruction*, std::allocatorspvtools::opt::Instruction* >, std::vector<spvtools::opt::Instruction, std::allocatorspvtools::opt::Instruction* >)':
(.text+0x13e0): undefined reference to spvIsInIdType(spv_operand_type_t)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(simplification_pass.cpp.o): in function std::_Function_handler<void (spvtools::opt::Instruction
), spvtools::opt::SimplificationPass::SimplifyFunction(spvtools::opt::Function*)::{lambda(spvtools::opt::Instruction*)#1}>::_M_invoke(std::_Any_data const&, spvtools::opt::Instruction*&&)':
(.text+0x2c08): undefined reference to spvOpcodeIsDecoration(spv::Op)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(strip_nonsemantic_info_pass.cpp.o): in function std::_Function_handler<void (spvtools::opt::Instruction*), spvtools::opt::StripNonSemanticInfoPass::Process()::{lambda(spvtools::opt::Instruction*)#1}>::_M_invoke(std::_Any_data const&, spvtools::opt::Instruction*&&)':
(.text+0x5c): undefined reference to spvIsExtendedInstruction(spv::Op)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(trim_capabilities_pass.cpp.o): in function spvtools::opt::TrimCapabilitiesPass::addInstructionRequirementsForOpcode(spv::Op, spvtools::EnumSetspv::Capability, spvtools::EnumSetspvtools::Extension) const':
(.text+0xe22): undefined reference to spvtools::AssemblyGrammar::lookupOpcode(spv::Op, spv_opcode_desc_t const**) const' /usr/bin/ld: (.text+0x1049): undefined reference to spvVersionForTargetEnv(spv_target_env)'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(trim_capabilities_pass.cpp.o): in function spvtools::opt::TrimCapabilitiesPass::addInstructionRequirementsForOperand(spvtools::opt::Operand const&, spvtools::EnumSet<spv::Capability>*, spvtools::EnumSet<spvtools::Extension>*) const': (.text+0x15d9): undefined reference to spvOperandIsConcreteMask'
/usr/bin/ld: (.text+0x1641): undefined reference to spvtools::AssemblyGrammar::lookupOperand(spv_operand_type_t, unsigned int, spv_operand_desc_t const**) const' /usr/bin/ld: (.text+0x1869): undefined reference to spvVersionForTargetEnv(spv_target_env)'
/usr/bin/ld: (.text+0x1a14): undefined reference to spvtools::AssemblyGrammar::lookupOperand(spv_operand_type_t, unsigned int, spv_operand_desc_t const**) const' /usr/bin/ld: (.text+0x2084): undefined reference to spvVersionForTargetEnv(spv_target_env)'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(trim_capabilities_pass.cpp.o): in function spvtools::opt::TrimCapabilitiesPass::addInstructionRequirementsForExtInst(spvtools::opt::Instruction*, spvtools::EnumSet<spv::Capability>*) const': (.text+0x2aa6): undefined reference to spvExtInstImportTypeGet(char const*)'
/usr/bin/ld: (.text+0x2ae1): undefined reference to spvtools::AssemblyGrammar::lookupExtInst(spv_ext_inst_type_t, unsigned int, spv_ext_inst_desc_t const**) const' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(trim_capabilities_pass.cpp.o): in function spvtools::opt::TrimCapabilitiesPass::AddExtensionsForOperand(spv_operand_type_t, unsigned int, spvtools::EnumSetspvtools::Extension) const':
(.text+0x379d): undefined reference to spvtools::AssemblyGrammar::lookupOperand(spv_operand_type_t, unsigned int, spv_operand_desc_t const**) const' /usr/bin/ld: (.text+0x37e3): undefined reference to spvVersionForTargetEnv(spv_target_env)'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(trim_capabilities_pass.cpp.o): in function spvtools::opt::TrimCapabilitiesPass::TrimUnrequiredExtensions(spvtools::EnumSet<spvtools::Extension> const&) const': (.text+0x46b5): undefined reference to spvtools::AssemblyGrammar::lookupOperand(spv_operand_type_t, unsigned int, spv_operand_desc_t const**) const'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(type_manager.cpp.o): in function spvtools::opt::analysis::TypeManager::RecordIfTypeDefinition(spvtools::opt::Instruction const&)': (.text+0x4726): undefined reference to spvOpcodeGeneratesType(spv::Op)'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(upgrade_memory_model.cpp.o): in function std::_Function_handler<void (spvtools::opt::Instruction*), spvtools::opt::UpgradeMemoryModel::UpgradeBarriers()::{lambda(spvtools::opt::Function*)#1}::operator()(spvtools::opt::Function*) const::{lambda(spvtools::opt::Instruction*)#1}>::_M_invoke(std::_Any_data const&, spvtools::opt::Instruction*&&)': (.text+0x1bf0): undefined reference to spvIsInIdType(spv_operand_type_t)'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(upgrade_memory_model.cpp.o): in function std::_Function_handler<void (spvtools::opt::Instruction*), spvtools::opt::UpgradeMemoryModel::UpgradeMemoryScope()::{lambda(spvtools::opt::Instruction*)#1}>::_M_invoke(std::_Any_data const&, spvtools::opt::Instruction*&&)': (.text+0x4fe6): undefined reference to spvOpcodeIsAtomicOp(spv::Op)'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(upgrade_memory_model.cpp.o): in function spvtools::opt::UpgradeMemoryModel::CheckAllTypes(spvtools::opt::Instruction const*)': (.text+0x5a79): undefined reference to spvOpcodeIsComposite(spv::Op)'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(upgrade_memory_model.cpp.o): in function spvtools::opt::UpgradeMemoryModel::TraceInstruction(spvtools::opt::Instruction*, 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> >*)': (.text+0x7a7f): undefined reference to spvIsInIdType(spv_operand_type_t)'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(upgrade_memory_model.cpp.o): in function std::_Function_handler<void (spvtools::opt::Instruction*), spvtools::opt::UpgradeMemoryModel::UpgradeAtomics()::{lambda(spvtools::opt::Instruction*)#1}>::_M_invoke(std::_Any_data const&, spvtools::opt::Instruction*&&)': (.text+0x82f4): undefined reference to spvOpcodeIsAtomicOp(spv::Op)'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(value_number_table.cpp.o): in function spvtools::opt::ValueNumberTable::AssignValueNumber(spvtools::opt::Instruction*) [clone .part.0]': (.text+0xfd1): undefined reference to spvOpcodeIsLoad(spv::Op)'
/usr/bin/ld: (.text+0x113d): undefined reference to spvIsIdType(spv_operand_type_t)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(vector_dce.cpp.o): in function spvtools::opt::VectorDCE::MarkUsesAsLive(spvtools::opt::Instruction
, spvtools::utils::BitVector const&, std::unordered_map<unsigned int, spvtools::utils::BitVector, std::hash, std::equal_to, std::allocator<std::pair<unsigned int const, spvtools::utils::BitVector> > >, std::vector<spvtools::opt::VectorDCE::WorkListItem, std::allocatorspvtools::opt::VectorDCE::WorkListItem >)':
(.text+0xb50): undefined reference to spvIsInIdType(spv_operand_type_t)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(vector_dce.cpp.o): in function spvtools::opt::VectorDCE::AddItemToWorkListIfNeeded(spvtools::opt::VectorDCE::WorkListItem, std::unordered_map<unsigned int, spvtools::utils::BitVector, std::hash, std::equal_to, std::allocator<std::pair<unsigned int const, spvtools::utils::BitVector> > >, std::vector<spvtools::opt::VectorDCE::WorkListItem, std::allocatorspvtools::opt::VectorDCE::WorkListItem >)':
(.text+0x265a): undefined reference to spvtools::utils::BitVector::Or(spvtools::utils::BitVector const&)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(aggressive_dead_code_elim_pass.cpp.o): in function spvtools::opt::AggressiveDCEPass::GetLoadedVariablesFromFunctionCall(spvtools::opt::Instruction const*)':
(.text+0x3170): undefined reference to spvIsInIdType(spv_operand_type_t)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(aggressive_dead_code_elim_pass.cpp.o): in function spvtools::opt::AggressiveDCEPass::GetLoadedVariableFromNonFunctionCalls(spvtools::opt::Instruction*)':
(.text+0x561c): undefined reference to spvOpcodeIsAtomicWithLoad(spv::Op)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(aggressive_dead_code_elim_pass.cpp.o): in function std::_Function_handler<void (spvtools::opt::Instruction*), spvtools::opt::AggressiveDCEPass::AddBreaksAndContinuesToWorklist(spvtools::opt::Instruction*)::{lambda(spvtools::opt::Instruction*)#1}>::_M_invoke(std::_Any_data const&, spvtools::opt::Instruction*&&)':
(.text+0x6170): undefined reference to spvOpcodeIsBranch(spv::Op)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(aggressive_dead_code_elim_pass.cpp.o): in function spvtools::opt::AggressiveDCEPass::AddOperandsToWorkList(spvtools::opt::Instruction const*)':
(.text+0x6a70): undefined reference to spvIsInIdType(spv_operand_type_t)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(aggressive_dead_code_elim_pass.cpp.o): in function spvtools::opt::AggressiveDCEPass::InitializeModuleScopeLiveInstructions()':
(.text+0x7781): undefined reference to spvIsInIdType(spv_operand_type_t)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(aggressive_dead_code_elim_pass.cpp.o): in function spvtools::opt::AggressiveDCEPass::InitializeWorkList(spvtools::opt::Function*, std::__cxx11::list<spvtools::opt::BasicBlock*, std::allocatorspvtools::opt::BasicBlock* >&)':
(.text+0x90b2): undefined reference to spvOpcodeIsBranch(spv::Op)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(basic_block.cpp.o): in function std::_Function_handler<void (spvtools::opt::Instruction const*), spvtools::opt::BasicBlock::PrettyPrint[abi:cxx11](unsigned int) const::{lambda(spvtools::opt::Instruction const*)#1}>::_M_invoke(std::_Any_data const&, spvtools::opt::Instruction const*&&)':
(.text+0x602): undefined reference to spvOpcodeIsBlockTerminator(spv::Op)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(basic_block.cpp.o): in function spvtools::opt::BasicBlock::WhileEachSuccessorLabel(std::function<bool (unsigned int)> const&) const':
(.text+0x16f2): undefined reference to spvIsInIdType(spv_operand_type_t)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(basic_block.cpp.o): in function spvtools::opt::BasicBlock::ForEachSuccessorLabel(std::function<void (unsigned int*)> const&)':
(.text+0x19d8): undefined reference to spvIsInIdType(spv_operand_type_t)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(basic_block.cpp.o): in function spvtools::opt::BasicBlock::ForMergeAndContinueLabel(std::function<void (unsigned int)> const&)':
(.text+0x1ee0): undefined reference to spvIsInIdType(spv_operand_type_t)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(ccp_pass.cpp.o): in function spvtools::opt::CCPPass::VisitAssignment(spvtools::opt::Instruction*)':
(.text+0x2cce): undefined reference to spvIsInIdType(spv_operand_type_t)' /usr/bin/ld: (.text+0x2f0f): undefined reference to spvIsInIdType(spv_operand_type_t)'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(ccp_pass.cpp.o): in function spvtools::opt::CCPPass::VisitInstruction(spvtools::opt::Instruction*, spvtools::opt::BasicBlock**)': (.text+0x2f84): undefined reference to spvOpcodeIsBranch(spv::Op)'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(ccp_pass.cpp.o): in function spvtools::opt::CCPPass::Initialize()': (.text+0x30b6): undefined reference to spvOpcodeIsConstant(spv::Op)'
/usr/bin/ld: (.text+0x30c2): undefined reference to spvOpcodeIsSpecConstant(spv::Op)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(code_sink.cpp.o): in function spvtools::opt::CodeSinkingPass::ReferencesMutableMemory(spvtools::opt::Instruction*)':
(.text+0xcd2): undefined reference to spvOpcodeIsLoad(spv::Op)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(convert_to_half_pass.cpp.o): in function spvtools::opt::ConvertToHalfPass::ProcessPhi(spvtools::opt::Instruction*, unsigned int, unsigned int)':
(.text+0x55c1): undefined reference to spvIsInIdType(spv_operand_type_t)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(convert_to_half_pass.cpp.o): in function spvtools::opt::ConvertToHalfPass::ProcessDefault(spvtools::opt::Instruction*)':
(.text+0x5c78): undefined reference to spvIsInIdType(spv_operand_type_t)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(convert_to_half_pass.cpp.o): in function spvtools::opt::ConvertToHalfPass::GenHalfArith(spvtools::opt::Instruction*)':
(.text+0x6099): undefined reference to spvIsInIdType(spv_operand_type_t)' /usr/bin/ld: (.text+0x6371): undefined reference to spvIsInIdType(spv_operand_type_t)'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(convert_to_half_pass.cpp.o): in function spvtools::opt::ConvertToHalfPass::CloseRelaxInst(spvtools::opt::Instruction*)': (.text+0x6a81): undefined reference to spvIsInIdType(spv_operand_type_t)'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(copy_prop_arrays.cpp.o): in function std::_Function_handler<bool (spvtools::opt::Instruction*), spvtools::opt::CopyPropagateArrays::HasNoStores(spvtools::opt::Instruction*)::{lambda(spvtools::opt::Instruction*)#1}>::_M_invoke(std::_Any_data const&, spvtools::opt::Instruction*&&)': (.text+0x207e): undefined reference to spvOpcodeIsDecoration(spv::Op)'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(copy_prop_arrays.cpp.o): in function std::_Function_handler<bool (spvtools::opt::Instruction*), spvtools::opt::CopyPropagateArrays::HasValidReferencesOnly(spvtools::opt::Instruction*, spvtools::opt::Instruction*)::{lambda(spvtools::opt::Instruction*)#1}>::_M_invoke(std::_Any_data const&, spvtools::opt::Instruction*&&)': (.text+0x212d): undefined reference to spvOpcodeIsDecoration(spv::Op)'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(copy_prop_arrays.cpp.o): in function std::_Function_handler<bool (spvtools::opt::Instruction*, unsigned int), spvtools::opt::CopyPropagateArrays::CanUpdateUses(spvtools::opt::Instruction*, unsigned int)::{lambda(spvtools::opt::Instruction*, unsigned int)#1}>::_M_invoke(std::_Any_data const&, spvtools::opt::Instruction*&&, unsigned int&&)': (.text+0x5b43): undefined reference to spvOpcodeIsDecoration(spv::Op)'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(dead_branch_elim_pass.cpp.o): in function std::_Function_handler<bool (spvtools::opt::Instruction*), spvtools::opt::DeadBranchElimPass::SwitchHasNestedBreak(unsigned int)::{lambda(spvtools::opt::Instruction*)#1}>::_M_invoke(std::_Any_data const&, spvtools::opt::Instruction*&&)': (.text+0xbb0): undefined reference to spvOpcodeIsBranch(spv::Op)'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(dead_insert_elim_pass.cpp.o): in function spvtools::opt::DeadInsertElimPass::EliminateDeadInsertsOnePass(spvtools::opt::Function*)': (.text+0x1474): undefined reference to spvOpcodeIsComposite(spv::Op)'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(def_use_manager.cpp.o): in function spvtools::opt::analysis::DefUseManager::WhileEachUse(spvtools::opt::Instruction const*, std::function<bool (spvtools::opt::Instruction*, unsigned int)> const&) const': (.text+0xa4d): undefined reference to spvIsIdType(spv_operand_type_t)'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(desc_sroa.cpp.o): in function std::_Function_handler<bool (spvtools::opt::Instruction*), spvtools::opt::DescriptorScalarReplacement::ReplaceCandidate(spvtools::opt::Instruction*)::{lambda(spvtools::opt::Instruction*)#1}>::_M_invoke(std::_Any_data const&, spvtools::opt::Instruction*&&)': (.text+0x1703): undefined reference to spvOpcodeIsDecoration(spv::Op)'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(dominator_tree.cpp.o): in function spvtools::opt::DominatorTree::GetDominatorEdges(spvtools::opt::Function const*, spvtools::opt::BasicBlock const*, std::vector<std::pair<spvtools::opt::BasicBlock*, spvtools::opt::BasicBlock*>, std::allocator<std::pair<spvtools::opt::BasicBlock*, spvtools::opt::BasicBlock*> > >*)': (.text+0x1f73): undefined reference to spvOpcodeIsBranch(spv::Op)'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(eliminate_dead_members_pass.cpp.o): in function spvtools::opt::EliminateDeadMembersPass::MarkStructOperandsAsFullyUsed(spvtools::opt::Instruction const*)': (.text+0x2740): undefined reference to spvIsInIdType(spv_operand_type_t)'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(feature_manager.cpp.o): in function spvtools::opt::FeatureManager::AddExtension(spvtools::opt::Instruction*)': (.text+0x1b6): undefined reference to spvtools::GetExtensionFromString(char const*, spvtools::Extension*)'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(feature_manager.cpp.o): in function spvtools::opt::FeatureManager::AddCapability(spv::Capability) [clone .localalias]': (.text+0xa45): undefined reference to spvtools::AssemblyGrammar::lookupOperand(spv_operand_type_t, unsigned int, spv_operand_desc_t const**) const'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(fold.cpp.o): in function spvtools::opt::InstructionFolder::FoldInstructionToConstant(spvtools::opt::Instruction*, std::function<unsigned int (unsigned int)>) const': (.text+0x250d): undefined reference to spvIsInIdType(spv_operand_type_t)'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(function.cpp.o): in function spvtools::opt::Function::HasEarlyReturn() const': (.text+0x13b2): undefined reference to spvOpcodeIsReturn(spv::Op)'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(graphics_robust_access_pass.cpp.o): in function spvtools::opt::GraphicsRobustAccessPass::Fail()': (.text+0x816): undefined reference to spvtools::DiagnosticStream::DiagnosticStream(spvtools::DiagnosticStream&&)'
/usr/bin/ld: (.text+0x81e): undefined reference to spvtools::DiagnosticStream::~DiagnosticStream()' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(graphics_robust_access_pass.cpp.o): in function spvtools::opt::GraphicsRobustAccessPass::IsCompatibleModule()':
(.text+0xb0d): undefined reference to spvtools::DiagnosticStream::~DiagnosticStream()' /usr/bin/ld: (.text+0xb47): undefined reference to spvtools::DiagnosticStream::~DiagnosticStream()'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(graphics_robust_access_pass.cpp.o): in function spvtools::opt::GraphicsRobustAccessPass::ClampIndicesForAccessChain(spvtools::opt::Instruction*)::{lambda(unsigned int, unsigned long)#1}::operator()(unsigned int, unsigned long) const [clone .isra.0]': (.text+0x4a13): undefined reference to spvtools::DiagnosticStream::~DiagnosticStream()'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(graphics_robust_access_pass.cpp.o): in function spvtools::opt::GraphicsRobustAccessPass::MakeRuntimeArrayLengthInst(spvtools::opt::Instruction*, unsigned int)': (.text+0x59c3): undefined reference to spvtools::DiagnosticStream::~DiagnosticStream()'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(graphics_robust_access_pass.cpp.o):(.text+0x8138): more undefined references to spvtools::DiagnosticStream::~DiagnosticStream()' follow /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(if_conversion.cpp.o): in function spvtools::opt::IfConversion::CheckType(unsigned int)':
(.text+0xa81): undefined reference to spvOpcodeIsScalarType(spv::Op)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(if_conversion.cpp.o): in function spvtools::opt::IfConversion::CanHoistInstruction(spvtools::opt::Instruction*, spvtools::opt::BasicBlock*, spvtools::opt::DominatorAnalysis*)':
(.text+0x16c1): undefined reference to spvIsInIdType(spv_operand_type_t)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(if_conversion.cpp.o): in function spvtools::opt::IfConversion::HoistInstruction(spvtools::opt::Instruction*, spvtools::opt::BasicBlock*, spvtools::opt::DominatorAnalysis*)':
(.text+0x440b): undefined reference to spvIsInIdType(spv_operand_type_t)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(inline_opaque_pass.cpp.o): in function spvtools::opt::InlineOpaquePass::IsOpaqueType(unsigned int)':
(.text+0x5b9): undefined reference to spvIsInIdType(spv_operand_type_t)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(inline_opaque_pass.cpp.o): in function spvtools::opt::InlineOpaquePass::HasOpaqueArgsOrReturn(spvtools::opt::Instruction const*)':
(.text+0x9e8): undefined reference to spvIsInIdType(spv_operand_type_t)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(inline_pass.cpp.o): in function std::_Function_handler<bool (spvtools::opt::Instruction*), spvtools::opt::InlinePass::ContainsAbortOtherThanUnreachable(spvtools::opt::Function*) const::{lambda(spvtools::opt::Instruction*)#1}>::_M_invoke(std::_Any_data const&, spvtools::opt::Instruction*&&)':
(.text+0x85): undefined reference to spvOpcodeIsAbort(spv::Op)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(inline_pass.cpp.o): in function std::_Function_handler<void (spvtools::opt::Instruction*), spvtools::opt::InlinePass::UpdateSucceedingPhis(std::vector<std::unique_ptr<spvtools::opt::BasicBlock, std::default_deletespvtools::opt::BasicBlock >, std::allocator<std::unique_ptr<spvtools::opt::BasicBlock, std::default_deletespvtools::opt::BasicBlock > > >&)::{lambda(unsigned int)#1}::operator()(unsigned int) const::{lambda(spvtools::opt::Instruction*)#1}>::_M_invoke(std::_Any_data const&, spvtools::opt::Instruction*&&)':
(.text+0x758): undefined reference to spvIsInIdType(spv_operand_type_t)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(inline_pass.cpp.o): in function spvtools::opt::InlinePass::CloneSameBlockOps(std::unique_ptr<spvtools::opt::Instruction, std::default_deletespvtools::opt::Instruction >, std::unordered_map<unsigned int, unsigned int, std::hash, std::equal_to, std::allocator<std::pair<unsigned int const, unsigned int> > >, std::unordered_map<unsigned int, spvtools::opt::Instruction*, std::hash, std::equal_to, std::allocator<std::pair<unsigned int const, spvtools::opt::Instruction*> > >, std::unique_ptr<spvtools::opt::BasicBlock, std::default_deletespvtools::opt::BasicBlock >)':
(.text+0x2802): undefined reference to spvIsInIdType(spv_operand_type_t)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(inline_pass.cpp.o): in function spvtools::opt::InlinePass::HasNoReturnInLoop(spvtools::opt::Function*)':
(.text+0x2df6): undefined reference to spvOpcodeIsReturn(spv::Op)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(inline_pass.cpp.o): in function spvtools::opt::InlinePass::InlineSingleInstruction(std::unordered_map<unsigned int, unsigned int, std::hash, std::equal_to, std::allocator<std::pair<unsigned int const, unsigned int> > > const&, spvtools::opt::BasicBlock*, spvtools::opt::Instruction const*, unsigned int)':
(.text+0x379a): undefined reference to spvIsInIdType(spv_operand_type_t)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(inline_pass.cpp.o): in function spvtools::opt::InlinePass::AnalyzeReturns(spvtools::opt::Function*)':
(.text+0x47ac): undefined reference to spvOpcodeIsReturn(spv::Op)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(inline_pass.cpp.o): in function spvtools::opt::InlinePass::InlineReturn(std::unordered_map<unsigned int, unsigned int, std::hash, std::equal_to, std::allocator<std::pair<unsigned int const, unsigned int> > > const&, std::vector<std::unique_ptr<spvtools::opt::BasicBlock, std::default_deletespvtools::opt::BasicBlock >, std::allocator<std::unique_ptr<spvtools::opt::BasicBlock, std::default_deletespvtools::opt::BasicBlock > > >, std::unique_ptr<spvtools::opt::BasicBlock, std::default_deletespvtools::opt::BasicBlock >, spvtools::opt::analysis::DebugInlinedAtContext, spvtools::opt::Function*, spvtools::opt::Instruction const*, unsigned int)':
(.text+0xafbf): undefined reference to spvOpcodeIsAbort(spv::Op)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(instruction.cpp.o): in function spvtools::opt::Instruction::IsScalarizable() const':
(.text+0x51a5): undefined reference to spvOpcodeIsScalarizable(spv::Op)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(instruction.cpp.o): in function spvtools::opt::Instruction::IsReadOnlyLoad() const':
(.text+0x7fe3): undefined reference to spvOpcodeIsLoad(spv::Op)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(instruction.cpp.o): in function spvtools::opt::Instruction::PrettyPrint[abi:cxx11](unsigned int) const':
(.text+0x9808): undefined reference to spvtools::spvInstructionBinaryToText[abi:cxx11](spv_target_env, unsigned int const*, unsigned long, unsigned int const*, unsigned long, unsigned int)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(instruction.cpp.o): in function spvtools::opt::Instruction::IsOpaqueType() const':
(.text+0x46a7): undefined reference to spvOpcodeIsBaseOpaqueType(spv::Op)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(interface_var_sroa.cpp.o): in function spvtools::opt::InterfaceVariableScalarReplacement::ReplaceInterfaceVarInEntryPoint(spvtools::opt::Instruction*, spvtools::opt::Instruction*, unsigned int)':
(.text+0x52bf): undefined reference to spvIsInIdType(spv_operand_type_t)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(invocation_interlock_placement_pass.cpp.o): in function spvtools::opt::InvocationInterlockPlacementPass::hasSingleNextBlock(unsigned int, bool)':
(.text+0x1ee8): undefined reference to spvOpcodeIsReturnOrAbort(spv::Op)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(invocation_interlock_placement_pass.cpp.o): in function spvtools::opt::InvocationInterlockPlacementPass::splitEdge(spvtools::opt::BasicBlock*, unsigned int)':
(.text+0x3689): undefined reference to spvIsInIdType(spv_operand_type_t)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(ir_context.cpp.o): in function spvtools::opt::IRContext::ForgetUses(spvtools::opt::Instruction*)':
(.text+0x5d67): undefined reference to spvOpcodeIsDecoration(spv::Op)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(ir_context.cpp.o): in function spvtools::opt::IRContext::AnalyzeUses(spvtools::opt::Instruction*)':
(.text+0x5f54): undefined reference to spvOpcodeIsDecoration(spv::Op)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(ir_context.cpp.o): in function spvtools::opt::IRContext::KillOperandFromDebugInstructions(spvtools::opt::Instruction*)':
(.text+0x7c45): undefined reference to spvOpcodeIsConstant(spv::Op)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(ir_context.cpp.o): in function spvtools::opt::IRContext::KillInst(spvtools::opt::Instruction*)':
(.text+0x83e0): undefined reference to spvOpcodeGeneratesType(spv::Op)' /usr/bin/ld: (.text+0x8425): undefined reference to spvOpcodeIsConstant(spv::Op)'
/usr/bin/ld: (.text+0x8794): undefined reference to spvOpcodeIsDecoration(spv::Op)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(ir_context.cpp.o): in function spvtools::opt::IRContext::RemoveExtension(spvtools::Extension)':
(.text+0x8eba): undefined reference to spvtools::ExtensionToString(spvtools::Extension)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(ir_loader.cpp.o): in function spvtools::opt::IsLineInst(spv_parsed_instruction_t const*)':
(.text+0x91): undefined reference to spvIsExtendedInstruction(spv::Op)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(ir_loader.cpp.o): in function spvtools::opt::IrLoader::AddInstruction(spv_parsed_instruction_t const*)':
(.text+0xed9): undefined reference to spvIsExtendedInstruction(spv::Op)' /usr/bin/ld: (.text+0xeea): undefined reference to spvExtInstIsDebugInfo(spv_ext_inst_type_t)'
/usr/bin/ld: (.text+0x1c0a): undefined reference to spvOpcodeIsBlockTerminator(spv::Op)' /usr/bin/ld: (.text+0x233b): undefined reference to spvIsExtendedInstruction(spv::Op)'
/usr/bin/ld: (.text+0x2dba): undefined reference to spvOpcodeGeneratesType(spv::Op)' /usr/bin/ld: (.text+0x2de3): undefined reference to spvOpcodeIsConstant(spv::Op)'
/usr/bin/ld: (.text+0x2e73): undefined reference to spvExtInstIsDebugInfo(spv_ext_inst_type_t)' /usr/bin/ld: (.text+0x36e9): undefined reference to spvIsExtendedInstruction(spv::Op)'
/usr/bin/ld: (.text+0x36ff): undefined reference to spvExtInstIsDebugInfo(spv_ext_inst_type_t)' /usr/bin/ld: (.text+0x3766): undefined reference to spvIsExtendedInstruction(spv::Op)'
/usr/bin/ld: (.text+0x3780): undefined reference to spvExtInstIsNonSemantic(spv_ext_inst_type_t)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(local_access_chain_convert_pass.cpp.o): in function spvtools::opt::LocalAccessChainConvertPass::AppendConstantOperands(spvtools::opt::Instruction const*, std::vector<spvtools::opt::Operand, std::allocatorspvtools::opt::Operand >)':
(.text+0x1320): undefined reference to spvIsInIdType(spv_operand_type_t)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(local_access_chain_convert_pass.cpp.o): in function spvtools::opt::LocalAccessChainConvertPass::Is32BitConstantIndexAccessChain(spvtools::opt::Instruction const
) const':
(.text+0x1442): undefined reference to spvIsInIdType(spv_operand_type_t)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(local_single_store_elim_pass.cpp.o): in function spvtools::opt::LocalSingleStoreElimPass::FindSingleStoreAndCheckUses(spvtools::opt::Instruction*, std::vector<spvtools::opt::Instruction*, std::allocatorspvtools::opt::Instruction* > const&) const':
(.text+0x3766): undefined reference to spvOpcodeIsDecoration(spv::Op)' /usr/bin/ld: (.text+0x379d): undefined reference to spvOpcodeIsDecoration(spv::Op)'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(local_single_store_elim_pass.cpp.o): in function std::_Function_handler<bool (spvtools::opt::Instruction*), spvtools::opt::LocalSingleStoreElimPass::FeedsAStore(spvtools::opt::Instruction*) const::{lambda(spvtools::opt::Instruction*)#1}>::_M_invoke(std::_Any_data const&, spvtools::opt::Instruction*&&)': (.text+0x3806): undefined reference to spvOpcodeIsDecoration(spv::Op)'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(loop_descriptor.cpp.o): in function spvtools::opt::Loop::AreAllOperandsOutsideLoop(spvtools::opt::Instruction const&) const': (.text+0x1672): undefined reference to spvIsInIdType(spv_operand_type_t)'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(loop_descriptor.cpp.o): in function spvtools::opt::Loop::ShouldHoistInstruction(spvtools::opt::Instruction const&) const': (.text+0x1945): undefined reference to spvOpcodeIsLoad(spv::Op)'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(loop_descriptor.cpp.o): in function spvtools::opt::Loop::IsSafeToClone() const': (.text+0x9d91): undefined reference to spvOpcodeIsBranch(spv::Op)'
/usr/bin/ld: (.text+0xa181): undefined reference to spvOpcodeIsBranch(spv::Op)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(loop_fission.cpp.o): in function spvtools::opt::LoopFissionImpl::GroupInstructionsByUseDef()':
(.text+0x12bc): undefined reference to spvOpcodeIsBranch(spv::Op)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(loop_peeling.cpp.o): in function spvtools::opt::LoopPeeling::GetIteratorUpdateOperations(spvtools::opt::Loop const*, spvtools::opt::Instruction*, std::unordered_set<spvtools::opt::Instruction*, std::hashspvtools::opt::Instruction*, std::equal_tospvtools::opt::Instruction*, std::allocatorspvtools::opt::Instruction* >)':
(.text+0x1b20): undefined reference to spvIsInIdType(spv_operand_type_t)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(loop_peeling.cpp.o): in function std::_Function_handler<bool (spvtools::opt::Instruction
), spvtools::opt::LoopPeeling::IsConditionCheckSideEffectFree() const::{lambda(spvtools::opt::Instruction*)#1}>::_M_invoke(std::_Any_data const&, spvtools::opt::Instruction*&&)':
(.text+0x4dd2): undefined reference to spvOpcodeIsBranch(spv::Op)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(loop_peeling.cpp.o): in function spvtools::opt::LoopPeeling::CreateBlockBefore(spvtools::opt::BasicBlock*)':
(.text+0x642b): undefined reference to spvIsInIdType(spv_operand_type_t)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(loop_utils.cpp.o): in function spvtools::opt::LoopUtils::CloneLoop(spvtools::opt::LoopUtils::LoopCloningResult*, std::vector<spvtools::opt::BasicBlock*, std::allocatorspvtools::opt::BasicBlock* > const&) const':
(.text+0x4398): undefined reference to spvIsInIdType(spv_operand_type_t)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(loop_unroller.cpp.o): in function spvtools::opt::(anonymous namespace)::LoopUnrollerUtilsImpl::RemapOperands(spvtools::opt::Instruction*)':
(.text+0x3d0): undefined reference to spvIsInIdType(spv_operand_type_t)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(loop_unswitch_pass.cpp.o): in function std::_Function_handler<void (spvtools::opt::Instruction*), spvtools::opt::(anonymous namespace)::LoopUnswitch::PerformUnswitch()::{lambda(spvtools::opt::Instruction*)#2}>::_M_invoke(std::_Any_data const&, spvtools::opt::Instruction*&&)':
(.text+0xc88): undefined reference to spvIsInIdType(spv_operand_type_t)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(loop_unswitch_pass.cpp.o): in function spvtools::opt::(anonymous namespace)::LoopUnswitch::IsDynamicallyUniform(spvtools::opt::Instruction*, spvtools::opt::BasicBlock const*, spvtools::opt::DominatorTree const&)':
(.text+0x56d9): undefined reference to spvIsInIdType(spv_operand_type_t)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(loop_unswitch_pass.cpp.o): in function spvtools::opt::LoopUnswitchPass::ProcessFunction(spvtools::opt::Function*)':
(.text+0xa78f): undefined reference to spvOpcodeIsBranch(spv::Op)' /usr/bin/ld: (.text+0xa7ed): undefined reference to spvOpcodeIsConstant(spv::Op)'
/usr/bin/ld: (.text+0xab5c): undefined reference to spvOpcodeIsSpecConstant(spv::Op)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(mem_pass.cpp.o): in function spvtools::opt::MemPass::IsTargetType(spvtools::opt::Instruction const*) const [clone .localalias]':
(.text+0xd6b): undefined reference to spvIsInIdType(spv_operand_type_t)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(mem_pass.cpp.o): in function spvtools::opt::MemPass::DCEInst(spvtools::opt::Instruction*, std::function<void (spvtools::opt::Instruction*)> const&)':
(.text+0x6979): undefined reference to spvIsInIdType(spv_operand_type_t)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(merge_return_pass.cpp.o): in function spvtools::opt::MergeReturnPass::CreatePhiNodesForInst(spvtools::opt::BasicBlock*, spvtools::opt::Instruction&)':
(.text+0x5cc5): undefined reference to spvIsInIdType(spv_operand_type_t)' /usr/bin/ld: (.text+0x6260): undefined reference to spvIsInIdType(spv_operand_type_t)'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(module.cpp.o): in function std::_Function_handler<void (spvtools::opt::Instruction const*), spvtools::opt::Module::ComputeIdBound() const::{lambda(spvtools::opt::Instruction const*)#1}>::_M_invoke(std::_Any_data const&, spvtools::opt::Instruction const*&&)': (.text+0x63): undefined reference to spvIsIdType(spv_operand_type_t)'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(module.cpp.o): in function spvtools::opt::Module::GetConstants()': (.text+0x3145): undefined reference to spvOpcodeIsConstant(spv::Op)'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(module.cpp.o): in function spvtools::opt::Module::GetTypes()': (.text+0x321c): undefined reference to spvOpcodeGeneratesType(spv::Op)'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(module.cpp.o): in function spvtools::opt::Module::GetConstants() const': (.text+0x32d5): undefined reference to spvOpcodeIsConstant(spv::Op)'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(module.cpp.o): in function spvtools::opt::Module::GetTypes() const': (.text+0x33ac): undefined reference to spvOpcodeGeneratesType(spv::Op)'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(module.cpp.o): in function std::_Function_handler<void (spvtools::opt::Instruction const*), spvtools::opt::Module::ToBinary(std::vector<unsigned int, std::allocator<unsigned int> >*, bool) const::{lambda(spvtools::opt::Instruction const*)#1}>::_M_invoke(std::_Any_data const&, spvtools::opt::Instruction const*&&)': (.text+0x35b5): undefined reference to spvOpcodeIsBlockTerminator(spv::Op)'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(propagator.cpp.o): in function spvtools::opt::SSAPropagator::Simulate(spvtools::opt::Instruction*)': (.text+0x2b5d): undefined reference to spvIsInIdType(spv_operand_type_t)'
/usr/bin/ld: (.text+0x2cb4): undefined reference to spvOpcodeIsBlockTerminator(spv::Op)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(propagator.cpp.o): in function spvtools::opt::SSAPropagator::Initialize(spvtools::opt::Function*)':
(.text+0x3bfa): undefined reference to spvOpcodeIsReturnOrAbort(spv::Op)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(register_pressure.cpp.o): in function std::_Function_handler<void (unsigned int*), spvtools::opt::RegisterLiveness::SimulateFission(spvtools::opt::Loop const&, std::unordered_set<spvtools::opt::Instruction*, std::hashspvtools::opt::Instruction*, std::equal_tospvtools::opt::Instruction*, std::allocatorspvtools::opt::Instruction* > const&, std::unordered_set<spvtools::opt::Instruction*, std::hashspvtools::opt::Instruction*, std::equal_tospvtools::opt::Instruction*, std::allocatorspvtools::opt::Instruction* > const&, spvtools::opt::RegisterLiveness::RegionRegisterLiveness*, spvtools::opt::RegisterLiveness::RegionRegisterLiveness*) const::{lambda(unsigned int*)#1}>::_M_invoke(std::_Any_data const&, unsigned int*&&)':
(.text+0x217b): undefined reference to spvOpcodeIsConstant(spv::Op)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(register_pressure.cpp.o): in function std::_Function_handler<void (unsigned int*), spvtools::opt::(anonymous namespace)::ComputeRegisterLiveness::EvaluateRegisterRequirements()::{lambda(unsigned int*)#1}>::_M_invoke(std::_Any_data const&, unsigned int*&&)':
(.text+0x2537): undefined reference to spvOpcodeIsConstant(spv::Op)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(register_pressure.cpp.o): in function std::_Function_handler<void (spvtools::opt::BasicBlock*), spvtools::opt::(anonymous namespace)::ComputeRegisterLiveness::Compute()::{lambda(spvtools::opt::BasicBlock*)#1}>::_M_invoke(std::_Any_data const&, spvtools::opt::BasicBlock*&&)':
(.text+0x29ec): undefined reference to spvIsInIdType(spv_operand_type_t)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(register_pressure.cpp.o): in function spvtools::opt::RegisterLiveness::ComputeLoopRegisterPressure(spvtools::opt::Loop const&, spvtools::opt::RegisterLiveness::RegionRegisterLiveness*) const':
(.text+0x32c7): undefined reference to spvOpcodeIsConstant(spv::Op)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(register_pressure.cpp.o): in function std::_Function_handler<void (spvtools::opt::Instruction*), spvtools::opt::(anonymous namespace)::ComputeRegisterLiveness::ComputePhiUses(spvtools::opt::BasicBlock const&, std::unordered_set<spvtools::opt::Instruction*, std::hashspvtools::opt::Instruction*, std::equal_tospvtools::opt::Instruction*, std::allocatorspvtools::opt::Instruction* >)::{lambda(unsigned int)#1}::operator()(unsigned int) const::{lambda(spvtools::opt::Instruction const)#1}>::_M_invoke(std::_Any_data const&, spvtools::opt::Instruction*&&)':
(.text+0x37b9): undefined reference to spvOpcodeIsConstant(spv::Op)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(register_pressure.cpp.o): in function std::_Function_handler<void (unsigned int*), spvtools::opt::(anonymous namespace)::ComputeRegisterLiveness::ComputePartialLiveness(spvtools::opt::BasicBlock*)::{lambda(unsigned int*)#1}>::_M_invoke(std::_Any_data const&, unsigned int*&&)':
(.text+0x3843): undefined reference to spvOpcodeIsConstant(spv::Op)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(register_pressure.cpp.o): in function spvtools::opt::RegisterLiveness::SimulateFusion(spvtools::opt::Loop const&, spvtools::opt::Loop const&, spvtools::opt::RegisterLiveness::RegionRegisterLiveness*) const':
(.text+0x4223): undefined reference to spvOpcodeIsConstant(spv::Op)' /usr/bin/ld: (.text+0x4967): undefined reference to spvOpcodeIsConstant(spv::Op)'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(register_pressure.cpp.o): in function spvtools::opt::RegisterLiveness::SimulateFission(spvtools::opt::Loop const&, std::unordered_set<spvtools::opt::Instruction*, std::hash<spvtools::opt::Instruction*>, std::equal_to<spvtools::opt::Instruction*>, std::allocator<spvtools::opt::Instruction*> > const&, std::unordered_set<spvtools::opt::Instruction*, std::hash<spvtools::opt::Instruction*>, std::equal_to<spvtools::opt::Instruction*>, std::allocator<spvtools::opt::Instruction*> > const&, spvtools::opt::RegisterLiveness::RegionRegisterLiveness*, spvtools::opt::RegisterLiveness::RegionRegisterLiveness*) const': (.text+0x6951): undefined reference to spvIsInIdType(spv_operand_type_t)'
/usr/bin/ld: (.text+0x6bbc): undefined reference to spvOpcodeIsConstant(spv::Op)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(register_pressure.cpp.o): in function spvtools::opt::RegisterLiveness::Analyze(spvtools::opt::Function*)':
(.text+0x959a): undefined reference to spvIsInIdType(spv_operand_type_t)' /usr/bin/ld: (.text+0x961c): undefined reference to spvOpcodeIsConstant(spv::Op)'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(strip_debug_info_pass.cpp.o): in function std::_Function_handler<bool (spvtools::opt::Instruction*), spvtools::opt::StripDebugInfoPass::Process()::{lambda(spvtools::opt::Instruction*)#1}>::_M_invoke(std::_Any_data const&, spvtools::opt::Instruction*&&)': (.text+0x51a): undefined reference to spvIsExtendedInstruction(spv::Op)'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(build_module.cpp.o): in function spvtools::BuildModule(spv_target_env, std::function<void (spv_message_level_t, char const*, spv_position_t const&, char const*)>, unsigned int const*, unsigned long, bool)': (.text+0xc46): undefined reference to spvContextCreate'
/usr/bin/ld: (.text+0xc9b): undefined reference to spvtools::SetContextMessageConsumer(spv_context_t*, std::function<void (spv_message_level_t, char const*, spv_position_t const&, char const*)>)' /usr/bin/ld: (.text+0xd0d): undefined reference to spvBinaryParse'
/usr/bin/ld: (.text+0xd1f): undefined reference to spvContextDestroy' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(build_module.cpp.o): in function spvtools::BuildModule(spv_target_env, std::function<void (spv_message_level_t, char const*, spv_position_t const&, char const*)>, std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&, unsigned int)':
(.text+0x203f): undefined reference to spvtools::SpirvTools::SpirvTools(spv_target_env)' /usr/bin/ld: (.text+0x2085): undefined reference to spvtools::SpirvTools::SetMessageConsumer(std::function<void (spv_message_level_t, char const*, spv_position_t const&, char const*)>)'
/usr/bin/ld: (.text+0x20c3): undefined reference to spvtools::SpirvTools::Assemble(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned int, std::allocator<unsigned int> >*, unsigned int) const' /usr/bin/ld: (.text+0x20ee): undefined reference to spvtools::SpirvTools::~SpirvTools()'
/usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(build_module.cpp.o): in function std::unique_ptr<spvtools::opt::IRContext, std::default_delete<spvtools::opt::IRContext> > spvtools::MakeUnique<spvtools::opt::IRContext, spv_target_env&, std::function<void (spv_message_level_t, char const*, spv_position_t const&, char const*)>&>(spv_target_env&, std::function<void (spv_message_level_t, char const*, spv_position_t const&, char const*)>&)': (.text._ZN8spvtools10MakeUniqueINS_3opt9IRContextEJR14spv_target_envRSt8functionIFv19spv_message_level_tPKcRK14spv_position_tS8_EEEEESt10unique_ptrIT_St14default_deleteISG_EEDpOT0_[_ZN8spvtools10MakeUniqueINS_3opt9IRContextEJR14spv_target_envRSt8functionIFv19spv_message_level_tPKcRK14spv_position_tS8_EEEEESt10unique_ptrIT_St14default_deleteISG_EEDpOT0_]+0xad): undefined reference to spvContextCreate'
/usr/bin/ld: (.text.ZN8spvtools10MakeUniqueINS_3opt9IRContextEJR14spv_target_envRSt8functionIFv19spv_message_level_tPKcRK14spv_position_tS8_EEEEESt10unique_ptrIT_St14default_deleteISG_EEDpOT0[ZN8spvtools10MakeUniqueINS_3opt9IRContextEJR14spv_target_envRSt8functionIFv19spv_message_level_tPKcRK14spv_position_tS8_EEEEESt10unique_ptrIT_St14default_deleteISG_EEDpOT0]+0x814): undefined reference to spvtools::SetContextMessageConsumer(spv_context_t*, std::function<void (spv_message_level_t, char const*, spv_position_t const&, char const*)>)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(compact_ids_pass.cpp.o): in function std::_Function_handler<void (spvtools::opt::Instruction*), spvtools::opt::CompactIdsPass::Process()::{lambda(spvtools::opt::Instruction*)#1}>::_M_invoke(std::_Any_data const&, spvtools::opt::Instruction*&&)':
(.text+0x5a7): undefined reference to spvIsIdType(spv_operand_type_t)' /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(opextinst_forward_ref_fixup_pass.cpp.o): in function spvtools::opt::OpExtInstWithForwardReferenceFixupPass::Process()':
(.text+0x486): undefined reference to `spvIsIdType(spv_operand_type_t)'
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [CMakeFiles/shadps4.dir/build.make:5067: shadps4] Error 1
make[1]: *** [CMakeFiles/Makefile2:453: CMakeFiles/shadps4.dir/all] Error 2
make: *** [Makefile:136: all] Error 2

Reproduction Steps

Install debian testing with dependencies. I have included many that were not in the docs, although some fail due to being too new or too old.
sudo apt install build-essential clang git cmake libasound2-dev libpulse-dev libopenal-dev libssl-dev zlib1g-dev libedit-dev libudev-dev libevdev-dev libsdl2-dev libjack-dev libsndio-dev qt6-base-dev qt6-tools-dev qt6-multimedia-dev libvulkan-dev vulkan-validationlayers libpng-dev glslang-dev libsdl3-dev libsdl3-image-dev libsdl3-ttf-dev libvulkan-memory-allocator-dev libavcodec-dev libboost-all-dev glslang-tools spirv-headers libfmt-dev libhalf-dev libmagicenum-dev libstb-dev libtoml11-dev libxbyak-dev libxxhash-dev libzydis-dev libusb-1.0-0-dev -y

cmake ../ -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DENABLE_QT_GUI=ON -DENABLE_UPDATER=OFF -DENABLE_DISCORD_RPC=OFF

Expected Behavior

I believe linking spirv should be handled by glslang's library but it doesn't seem to do that. There was a bug in 2020 specifically for this but was allegedly fixed. They may have just broke it again. It would be simpler to just manually link spirv when linking glslang.

Specify OS Version

Debian Testing - Kernel 6.12.21

CPU

Ryzen 9 7950X3D

GPU

Radeon Pro W6600

Amount of RAM in GB

96GB

Originally created by @knuxyl on GitHub (Apr 17, 2025). Original GitHub issue: https://github.com/shadps4-emu/shadPS4/issues/2800 ### Checklist - [x] I have searched for a similar issue in this repository and did not find one. - [x] I am using an official build obtained from [releases](https://github.com/shadps4-emu/shadPS4/releases) or updated one of those builds using its in-app updater. ### Describe the Bug Debian testing does not seem to ship glslang with spirv linking so during linking phase it fails with tons of undefined references from glslang to spv functions. Same issue with clang and gcc. Maybe linking spirv can be added manually? > [100%] Linking CXX executable shadps4 > /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libglslang.a(SpvTools.cpp.o): in function `glslang::SpirvToolsDisassemble(std::ostream&, std::vector<unsigned int, std::allocator<unsigned int> > const&, spv_target_env)': > (.text+0x423): undefined reference to `spvContextCreate' > /usr/bin/ld: (.text+0x455): undefined reference to `spvBinaryToText' > /usr/bin/ld: (.text+0x464): undefined reference to `spvDiagnosticPrint' > /usr/bin/ld: (.text+0x46e): undefined reference to `spvDiagnosticDestroy' > /usr/bin/ld: (.text+0x476): undefined reference to `spvContextDestroy' > /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libglslang.a(SpvTools.cpp.o): in function `glslang::SpirvToolsTransform(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, glslang::SpvOptions const*)': > (.text+0x862): undefined reference to `spvOptimizerOptionsCreate' > /usr/bin/ld: (.text+0x893): undefined reference to `spvOptimizerOptionsSetRunValidator' > /usr/bin/ld: (.text+0x8d2): undefined reference to `spvOptimizerOptionsDestroy' > /usr/bin/ld: (.text+0x9b9): undefined reference to `spvOptimizerOptionsSetMaxIdBound' > /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libglslang.a(SpvTools.cpp.o): in function `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*)': > (.text+0xaeb): undefined reference to `spvOptimizerOptionsCreate' > /usr/bin/ld: (.text+0xb03): undefined reference to `spvOptimizerOptionsSetRunValidator' > /usr/bin/ld: (.text+0xb2c): undefined reference to `spvOptimizerOptionsDestroy' > /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libglslang.a(SpvTools.cpp.o): in function `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*)': > (.text+0xc7a): undefined reference to `spvOptimizerOptionsCreate' > /usr/bin/ld: (.text+0xc92): undefined reference to `spvOptimizerOptionsSetRunValidator' > /usr/bin/ld: (.text+0xcb8): undefined reference to `spvOptimizerOptionsDestroy' > /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libglslang.a(SpvTools.cpp.o): in function `glslang::SpirvToolsEliminateDeadInputComponents(spv_target_env, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*)': > (.text+0xdb6): undefined reference to `spvOptimizerOptionsCreate' > /usr/bin/ld: (.text+0xdce): undefined reference to `spvOptimizerOptionsSetRunValidator' > /usr/bin/ld: (.text+0xdf4): undefined reference to `spvOptimizerOptionsDestroy' > /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libglslang.a(SpvTools.cpp.o): in function `glslang::SpirvToolsStripDebugInfo(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*)': > (.text+0xedc): undefined reference to `spvOptimizerOptionsCreate' > /usr/bin/ld: (.text+0xefe): undefined reference to `spvOptimizerOptionsSetRunValidator' > /usr/bin/ld: (.text+0xf24): undefined reference to `spvOptimizerOptionsDestroy' > /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libglslang.a(SpvTools.cpp.o): in function `glslang::SpirvToolsValidate(glslang::TIntermediate const&, std::vector<unsigned int, std::allocator<unsigned int> >&, spv::SpvBuildLogger*, bool)': > (.text+0xfa7): undefined reference to `spvContextCreate' > /usr/bin/ld: (.text+0xfd5): undefined reference to `spvValidatorOptionsCreate' > /usr/bin/ld: (.text+0xfed): undefined reference to `spvValidatorOptionsSetRelaxBlockLayout' > /usr/bin/ld: (.text+0xffe): undefined reference to `spvValidatorOptionsSetBeforeHlslLegalization' > /usr/bin/ld: (.text+0x1186): undefined reference to `spvValidatorOptionsSetScalarBlockLayout' > /usr/bin/ld: (.text+0x1302): undefined reference to `spvValidatorOptionsSetWorkgroupScalarBlockLayout' > /usr/bin/ld: (.text+0x1482): undefined reference to `spvValidatorOptionsSetAllowOffsetTextureOperand' > /usr/bin/ld: (.text+0x1499): undefined reference to `spvValidateWithOptions' > /usr/bin/ld: (.text+0x163d): undefined reference to `spvValidatorOptionsDestroy' > /usr/bin/ld: (.text+0x1647): undefined reference to `spvDiagnosticDestroy' > /usr/bin/ld: (.text+0x1651): undefined reference to `spvContextDestroy' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(optimizer.cpp.o): in function `spvtools::Optimizer::RegisterPassFromFlag(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool) [clone .part.0]': > (.text+0x84db): undefined reference to `spvtools::utils::SplitFlagArgs(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(optimizer.cpp.o): in function `spvtools::Optimizer::Run(unsigned int const*, unsigned long, std::vector<unsigned int, std::allocator<unsigned int> >*, spv_optimizer_options_t*) const': > (.text+0xa325): undefined reference to `spvtools::SpirvTools::SpirvTools(spv_target_env)' > /usr/bin/ld: (.text+0xa371): undefined reference to `spvtools::SpirvTools::SetMessageConsumer(std::function<void (spv_message_level_t, char const*, spv_position_t const&, char const*)>)' > /usr/bin/ld: (.text+0xa3a2): undefined reference to `spvtools::SpirvTools::Validate(unsigned int const*, unsigned long, spv_validator_options_t*) const' > /usr/bin/ld: (.text+0xa4c4): undefined reference to `spvtools::SpirvTools::~SpirvTools()' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(optimizer.cpp.o): in function `spvtools::Optimizer::Run(unsigned int const*, unsigned long, std::vector<unsigned int, std::allocator<unsigned int> >*) const': > (.text+0xa509): undefined reference to `spvOptimizerOptionsCreate' > /usr/bin/ld: (.text+0xa52a): undefined reference to `spvOptimizerOptionsDestroy' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(optimizer.cpp.o): in function `spvtools::Optimizer::Run(unsigned int const*, unsigned long, std::vector<unsigned int, std::allocator<unsigned int> >*, spvtools::ValidatorOptions const&, bool) const': > (.text+0xa56a): undefined reference to `spvOptimizerOptionsCreate' > /usr/bin/ld: (.text+0xa578): undefined reference to `spvOptimizerOptionsSetRunValidator' > /usr/bin/ld: (.text+0xa588): undefined reference to `spvOptimizerOptionsSetValidatorOptions' > /usr/bin/ld: (.text+0xa5a6): undefined reference to `spvOptimizerOptionsDestroy' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(optimizer.cpp.o): in function `spvtools::opt::IRContext::~IRContext()': > (.text._ZN8spvtools3opt9IRContextD2Ev[_ZN8spvtools3opt9IRContextD5Ev]+0x19): undefined reference to `spvContextDestroy' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(pass_manager.cpp.o): in function `spvtools::opt::PassManager::Run(spvtools::opt::IRContext*)::{lambda(char const*, spvtools::opt::Pass*)#1}::operator()(char const*, spvtools::opt::Pass*) const [clone .part.0]': > (.text+0x6f): undefined reference to `spvtools::SpirvTools::SpirvTools(spv_target_env)' > /usr/bin/ld: (.text+0xc6): undefined reference to `spvtools::SpirvTools::SetMessageConsumer(std::function<void (spv_message_level_t, char const*, spv_position_t const&, char const*)>)' > /usr/bin/ld: (.text+0x1a0): undefined reference to `spvtools::SpirvTools::Disassemble(std::vector<unsigned int, std::allocator<unsigned int> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, unsigned int) const' > /usr/bin/ld: (.text+0x292): undefined reference to `spvtools::SpirvTools::~SpirvTools()' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(pass_manager.cpp.o): in function `spvtools::opt::PassManager::Run(spvtools::opt::IRContext*)': > (.text+0x5fd): undefined reference to `spvtools::utils::PrintTimerDescription(std::ostream*, bool)' > /usr/bin/ld: (.text+0x626): undefined reference to `vtable for spvtools::utils::Timer' > /usr/bin/ld: (.text+0x663): undefined reference to `spvtools::utils::Timer::Report(char const*)' > /usr/bin/ld: (.text+0x6e4): undefined reference to `spvtools::utils::Timer::Start()' > /usr/bin/ld: (.text+0x724): undefined reference to `spvtools::SpirvTools::SpirvTools(spv_target_env)' > /usr/bin/ld: (.text+0x788): undefined reference to `spvtools::SpirvTools::SetMessageConsumer(std::function<void (spv_message_level_t, char const*, spv_position_t const&, char const*)>)' > /usr/bin/ld: (.text+0x7ec): undefined reference to `spvtools::SpirvTools::Validate(unsigned int const*, unsigned long, spv_validator_options_t*) const' > /usr/bin/ld: (.text+0x80f): undefined reference to `spvtools::SpirvTools::~SpirvTools()' > /usr/bin/ld: (.text+0x985): undefined reference to `spvtools::SpirvTools::~SpirvTools()' > /usr/bin/ld: (.text+0x99c): undefined reference to `spvtools::utils::Timer::Report(char const*)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(pass_manager.cpp.o): in function `spvtools::utils::ScopedTimer<spvtools::utils::Timer>::~ScopedTimer()': > (.text._ZN8spvtools5utils11ScopedTimerINS0_5TimerEED2Ev[_ZN8spvtools5utils11ScopedTimerINS0_5TimerEED5Ev]+0x29): undefined reference to `spvtools::utils::Timer::Report(char const*)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(pass_manager.cpp.o): in function `spvtools::utils::ScopedTimer<spvtools::utils::Timer>::~ScopedTimer()': > (.text._ZN8spvtools5utils11ScopedTimerINS0_5TimerEED0Ev[_ZN8spvtools5utils11ScopedTimerINS0_5TimerEED5Ev]+0x29): undefined reference to `spvtools::utils::Timer::Report(char const*)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(private_to_local_pass.cpp.o): in function `spvtools::opt::PrivateToLocalPass::IsValidUse(spvtools::opt::Instruction const*) const': > (.text+0x13c3): undefined reference to `spvOpcodeIsDecoration(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(remove_duplicates_pass.cpp.o): in function `spvtools::opt::RemoveDuplicatesPass::RemoveDuplicateTypes() const': > (.text+0x1288): undefined reference to `spvOpcodeGeneratesType(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(remove_unused_interface_variables_pass.cpp.o): in function `spvtools::opt::RemoveUnusedInterfaceVariablesContext::processFunction(spvtools::opt::Function*)': > (.text._ZN8spvtools3opt37RemoveUnusedInterfaceVariablesContext15processFunctionEPNS0_8FunctionE[_ZN8spvtools3opt37RemoveUnusedInterfaceVariablesContext15processFunctionEPNS0_8FunctionE]+0x125): undefined reference to `spvIsInIdType(spv_operand_type_t)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(replace_desc_array_access_using_var_index.cpp.o): in function `spvtools::opt::ReplaceDescArrayAccessUsingVarIndex::UseNewIdsInBlock(spvtools::opt::BasicBlock*, std::unordered_map<unsigned int, unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int> > > const&) const': > (.text+0x1645): undefined reference to `spvIsInIdType(spv_operand_type_t)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(replace_desc_array_access_using_var_index.cpp.o): in function `spvtools::opt::ReplaceDescArrayAccessUsingVarIndex::CollectRequiredImageAndAccessInsts(spvtools::opt::Instruction*) const': > (.text+0x9153): undefined reference to `spvIsInIdType(spv_operand_type_t)' > /usr/bin/ld: (.text+0x92ea): undefined reference to `spvIsInIdType(spv_operand_type_t)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(replace_invalid_opc.cpp.o): in function `spvtools::opt::ReplaceInvalidOpcodePass::BuildWarningMessage[abi:cxx11](spv::Op)': > (.text+0x12ec): undefined reference to `spvtools::AssemblyGrammar::lookupOpcode(spv::Op, spv_opcode_desc_t const**) const' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(scalar_replacement_pass.cpp.o): in function `spvtools::opt::ScalarReplacementPass::IsSpecConstant(unsigned int) const': > (.text+0x154f): undefined reference to `spvOpcodeIsSpecConstant(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(scalar_replacement_pass.cpp.o): in function `spvtools::opt::ScalarReplacementPass::GetOrCreateInitialValue(spvtools::opt::Instruction*, unsigned int, spvtools::opt::Instruction*) [clone .part.0]': > (.text+0x4b49): undefined reference to `spvOpcodeIsSpecConstant(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(set_spec_constant_default_value_pass.cpp.o): in function `spvtools::opt::SetSpecConstantDefaultValuePass::Process()': > (.text+0x1109): undefined reference to `spvtools::utils::ParseAndEncodeNumber(char const*, spvtools::utils::NumberType const&, std::function<void (unsigned int)>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(simplification_pass.cpp.o): in function `std::_Function_handler<bool (spvtools::opt::Instruction*), spvtools::opt::SimplificationPass::SimplifyFunction(spvtools::opt::Function*)::{lambda(spvtools::opt::Instruction*)#2}>::_M_invoke(std::_Any_data const&, spvtools::opt::Instruction*&&)': > (.text+0x4de): undefined reference to `spvOpcodeIsDebug(spv::Op)' > /usr/bin/ld: (.text+0x4f3): undefined reference to `spvOpcodeIsDecoration(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(simplification_pass.cpp.o): in function `std::_Function_handler<bool (spvtools::opt::Instruction*), spvtools::opt::SimplificationPass::SimplifyFunction(spvtools::opt::Function*)::{lambda(spvtools::opt::BasicBlock*)#1}::operator()(spvtools::opt::BasicBlock*) const::{lambda(spvtools::opt::Instruction*)#2}>::_M_invoke(std::_Any_data const&, spvtools::opt::Instruction*&&)': > (.text+0x50e): undefined reference to `spvOpcodeIsDebug(spv::Op)' > /usr/bin/ld: (.text+0x523): undefined reference to `spvOpcodeIsDecoration(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(simplification_pass.cpp.o): in function `spvtools::opt::SimplificationPass::AddNewOperands(spvtools::opt::Instruction*, std::unordered_set<spvtools::opt::Instruction*, std::hash<spvtools::opt::Instruction*>, std::equal_to<spvtools::opt::Instruction*>, std::allocator<spvtools::opt::Instruction*> >*, std::vector<spvtools::opt::Instruction*, std::allocator<spvtools::opt::Instruction*> >*)': > (.text+0x13e0): undefined reference to `spvIsInIdType(spv_operand_type_t)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(simplification_pass.cpp.o): in function `std::_Function_handler<void (spvtools::opt::Instruction*), spvtools::opt::SimplificationPass::SimplifyFunction(spvtools::opt::Function*)::{lambda(spvtools::opt::Instruction*)#1}>::_M_invoke(std::_Any_data const&, spvtools::opt::Instruction*&&)': > (.text+0x2c08): undefined reference to `spvOpcodeIsDecoration(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(strip_nonsemantic_info_pass.cpp.o): in function `std::_Function_handler<void (spvtools::opt::Instruction*), spvtools::opt::StripNonSemanticInfoPass::Process()::{lambda(spvtools::opt::Instruction*)#1}>::_M_invoke(std::_Any_data const&, spvtools::opt::Instruction*&&)': > (.text+0x5c): undefined reference to `spvIsExtendedInstruction(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(trim_capabilities_pass.cpp.o): in function `spvtools::opt::TrimCapabilitiesPass::addInstructionRequirementsForOpcode(spv::Op, spvtools::EnumSet<spv::Capability>*, spvtools::EnumSet<spvtools::Extension>*) const': > (.text+0xe22): undefined reference to `spvtools::AssemblyGrammar::lookupOpcode(spv::Op, spv_opcode_desc_t const**) const' > /usr/bin/ld: (.text+0x1049): undefined reference to `spvVersionForTargetEnv(spv_target_env)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(trim_capabilities_pass.cpp.o): in function `spvtools::opt::TrimCapabilitiesPass::addInstructionRequirementsForOperand(spvtools::opt::Operand const&, spvtools::EnumSet<spv::Capability>*, spvtools::EnumSet<spvtools::Extension>*) const': > (.text+0x15d9): undefined reference to `spvOperandIsConcreteMask' > /usr/bin/ld: (.text+0x1641): undefined reference to `spvtools::AssemblyGrammar::lookupOperand(spv_operand_type_t, unsigned int, spv_operand_desc_t const**) const' > /usr/bin/ld: (.text+0x1869): undefined reference to `spvVersionForTargetEnv(spv_target_env)' > /usr/bin/ld: (.text+0x1a14): undefined reference to `spvtools::AssemblyGrammar::lookupOperand(spv_operand_type_t, unsigned int, spv_operand_desc_t const**) const' > /usr/bin/ld: (.text+0x2084): undefined reference to `spvVersionForTargetEnv(spv_target_env)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(trim_capabilities_pass.cpp.o): in function `spvtools::opt::TrimCapabilitiesPass::addInstructionRequirementsForExtInst(spvtools::opt::Instruction*, spvtools::EnumSet<spv::Capability>*) const': > (.text+0x2aa6): undefined reference to `spvExtInstImportTypeGet(char const*)' > /usr/bin/ld: (.text+0x2ae1): undefined reference to `spvtools::AssemblyGrammar::lookupExtInst(spv_ext_inst_type_t, unsigned int, spv_ext_inst_desc_t const**) const' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(trim_capabilities_pass.cpp.o): in function `spvtools::opt::TrimCapabilitiesPass::AddExtensionsForOperand(spv_operand_type_t, unsigned int, spvtools::EnumSet<spvtools::Extension>*) const': > (.text+0x379d): undefined reference to `spvtools::AssemblyGrammar::lookupOperand(spv_operand_type_t, unsigned int, spv_operand_desc_t const**) const' > /usr/bin/ld: (.text+0x37e3): undefined reference to `spvVersionForTargetEnv(spv_target_env)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(trim_capabilities_pass.cpp.o): in function `spvtools::opt::TrimCapabilitiesPass::TrimUnrequiredExtensions(spvtools::EnumSet<spvtools::Extension> const&) const': > (.text+0x46b5): undefined reference to `spvtools::AssemblyGrammar::lookupOperand(spv_operand_type_t, unsigned int, spv_operand_desc_t const**) const' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(type_manager.cpp.o): in function `spvtools::opt::analysis::TypeManager::RecordIfTypeDefinition(spvtools::opt::Instruction const&)': > (.text+0x4726): undefined reference to `spvOpcodeGeneratesType(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(upgrade_memory_model.cpp.o): in function `std::_Function_handler<void (spvtools::opt::Instruction*), spvtools::opt::UpgradeMemoryModel::UpgradeBarriers()::{lambda(spvtools::opt::Function*)#1}::operator()(spvtools::opt::Function*) const::{lambda(spvtools::opt::Instruction*)#1}>::_M_invoke(std::_Any_data const&, spvtools::opt::Instruction*&&)': > (.text+0x1bf0): undefined reference to `spvIsInIdType(spv_operand_type_t)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(upgrade_memory_model.cpp.o): in function `std::_Function_handler<void (spvtools::opt::Instruction*), spvtools::opt::UpgradeMemoryModel::UpgradeMemoryScope()::{lambda(spvtools::opt::Instruction*)#1}>::_M_invoke(std::_Any_data const&, spvtools::opt::Instruction*&&)': > (.text+0x4fe6): undefined reference to `spvOpcodeIsAtomicOp(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(upgrade_memory_model.cpp.o): in function `spvtools::opt::UpgradeMemoryModel::CheckAllTypes(spvtools::opt::Instruction const*)': > (.text+0x5a79): undefined reference to `spvOpcodeIsComposite(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(upgrade_memory_model.cpp.o): in function `spvtools::opt::UpgradeMemoryModel::TraceInstruction(spvtools::opt::Instruction*, 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> >*)': > (.text+0x7a7f): undefined reference to `spvIsInIdType(spv_operand_type_t)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(upgrade_memory_model.cpp.o): in function `std::_Function_handler<void (spvtools::opt::Instruction*), spvtools::opt::UpgradeMemoryModel::UpgradeAtomics()::{lambda(spvtools::opt::Instruction*)#1}>::_M_invoke(std::_Any_data const&, spvtools::opt::Instruction*&&)': > (.text+0x82f4): undefined reference to `spvOpcodeIsAtomicOp(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(value_number_table.cpp.o): in function `spvtools::opt::ValueNumberTable::AssignValueNumber(spvtools::opt::Instruction*) [clone .part.0]': > (.text+0xfd1): undefined reference to `spvOpcodeIsLoad(spv::Op)' > /usr/bin/ld: (.text+0x113d): undefined reference to `spvIsIdType(spv_operand_type_t)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(vector_dce.cpp.o): in function `spvtools::opt::VectorDCE::MarkUsesAsLive(spvtools::opt::Instruction*, spvtools::utils::BitVector const&, std::unordered_map<unsigned int, spvtools::utils::BitVector, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<std::pair<unsigned int const, spvtools::utils::BitVector> > >*, std::vector<spvtools::opt::VectorDCE::WorkListItem, std::allocator<spvtools::opt::VectorDCE::WorkListItem> >*)': > (.text+0xb50): undefined reference to `spvIsInIdType(spv_operand_type_t)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(vector_dce.cpp.o): in function `spvtools::opt::VectorDCE::AddItemToWorkListIfNeeded(spvtools::opt::VectorDCE::WorkListItem, std::unordered_map<unsigned int, spvtools::utils::BitVector, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<std::pair<unsigned int const, spvtools::utils::BitVector> > >*, std::vector<spvtools::opt::VectorDCE::WorkListItem, std::allocator<spvtools::opt::VectorDCE::WorkListItem> >*)': > (.text+0x265a): undefined reference to `spvtools::utils::BitVector::Or(spvtools::utils::BitVector const&)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(aggressive_dead_code_elim_pass.cpp.o): in function `spvtools::opt::AggressiveDCEPass::GetLoadedVariablesFromFunctionCall(spvtools::opt::Instruction const*)': > (.text+0x3170): undefined reference to `spvIsInIdType(spv_operand_type_t)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(aggressive_dead_code_elim_pass.cpp.o): in function `spvtools::opt::AggressiveDCEPass::GetLoadedVariableFromNonFunctionCalls(spvtools::opt::Instruction*)': > (.text+0x561c): undefined reference to `spvOpcodeIsAtomicWithLoad(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(aggressive_dead_code_elim_pass.cpp.o): in function `std::_Function_handler<void (spvtools::opt::Instruction*), spvtools::opt::AggressiveDCEPass::AddBreaksAndContinuesToWorklist(spvtools::opt::Instruction*)::{lambda(spvtools::opt::Instruction*)#1}>::_M_invoke(std::_Any_data const&, spvtools::opt::Instruction*&&)': > (.text+0x6170): undefined reference to `spvOpcodeIsBranch(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(aggressive_dead_code_elim_pass.cpp.o): in function `spvtools::opt::AggressiveDCEPass::AddOperandsToWorkList(spvtools::opt::Instruction const*)': > (.text+0x6a70): undefined reference to `spvIsInIdType(spv_operand_type_t)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(aggressive_dead_code_elim_pass.cpp.o): in function `spvtools::opt::AggressiveDCEPass::InitializeModuleScopeLiveInstructions()': > (.text+0x7781): undefined reference to `spvIsInIdType(spv_operand_type_t)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(aggressive_dead_code_elim_pass.cpp.o): in function `spvtools::opt::AggressiveDCEPass::InitializeWorkList(spvtools::opt::Function*, std::__cxx11::list<spvtools::opt::BasicBlock*, std::allocator<spvtools::opt::BasicBlock*> >&)': > (.text+0x90b2): undefined reference to `spvOpcodeIsBranch(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(basic_block.cpp.o): in function `std::_Function_handler<void (spvtools::opt::Instruction const*), spvtools::opt::BasicBlock::PrettyPrint[abi:cxx11](unsigned int) const::{lambda(spvtools::opt::Instruction const*)#1}>::_M_invoke(std::_Any_data const&, spvtools::opt::Instruction const*&&)': > (.text+0x602): undefined reference to `spvOpcodeIsBlockTerminator(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(basic_block.cpp.o): in function `spvtools::opt::BasicBlock::WhileEachSuccessorLabel(std::function<bool (unsigned int)> const&) const': > (.text+0x16f2): undefined reference to `spvIsInIdType(spv_operand_type_t)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(basic_block.cpp.o): in function `spvtools::opt::BasicBlock::ForEachSuccessorLabel(std::function<void (unsigned int*)> const&)': > (.text+0x19d8): undefined reference to `spvIsInIdType(spv_operand_type_t)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(basic_block.cpp.o): in function `spvtools::opt::BasicBlock::ForMergeAndContinueLabel(std::function<void (unsigned int)> const&)': > (.text+0x1ee0): undefined reference to `spvIsInIdType(spv_operand_type_t)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(ccp_pass.cpp.o): in function `spvtools::opt::CCPPass::VisitAssignment(spvtools::opt::Instruction*)': > (.text+0x2cce): undefined reference to `spvIsInIdType(spv_operand_type_t)' > /usr/bin/ld: (.text+0x2f0f): undefined reference to `spvIsInIdType(spv_operand_type_t)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(ccp_pass.cpp.o): in function `spvtools::opt::CCPPass::VisitInstruction(spvtools::opt::Instruction*, spvtools::opt::BasicBlock**)': > (.text+0x2f84): undefined reference to `spvOpcodeIsBranch(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(ccp_pass.cpp.o): in function `spvtools::opt::CCPPass::Initialize()': > (.text+0x30b6): undefined reference to `spvOpcodeIsConstant(spv::Op)' > /usr/bin/ld: (.text+0x30c2): undefined reference to `spvOpcodeIsSpecConstant(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(code_sink.cpp.o): in function `spvtools::opt::CodeSinkingPass::ReferencesMutableMemory(spvtools::opt::Instruction*)': > (.text+0xcd2): undefined reference to `spvOpcodeIsLoad(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(convert_to_half_pass.cpp.o): in function `spvtools::opt::ConvertToHalfPass::ProcessPhi(spvtools::opt::Instruction*, unsigned int, unsigned int)': > (.text+0x55c1): undefined reference to `spvIsInIdType(spv_operand_type_t)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(convert_to_half_pass.cpp.o): in function `spvtools::opt::ConvertToHalfPass::ProcessDefault(spvtools::opt::Instruction*)': > (.text+0x5c78): undefined reference to `spvIsInIdType(spv_operand_type_t)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(convert_to_half_pass.cpp.o): in function `spvtools::opt::ConvertToHalfPass::GenHalfArith(spvtools::opt::Instruction*)': > (.text+0x6099): undefined reference to `spvIsInIdType(spv_operand_type_t)' > /usr/bin/ld: (.text+0x6371): undefined reference to `spvIsInIdType(spv_operand_type_t)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(convert_to_half_pass.cpp.o): in function `spvtools::opt::ConvertToHalfPass::CloseRelaxInst(spvtools::opt::Instruction*)': > (.text+0x6a81): undefined reference to `spvIsInIdType(spv_operand_type_t)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(copy_prop_arrays.cpp.o): in function `std::_Function_handler<bool (spvtools::opt::Instruction*), spvtools::opt::CopyPropagateArrays::HasNoStores(spvtools::opt::Instruction*)::{lambda(spvtools::opt::Instruction*)#1}>::_M_invoke(std::_Any_data const&, spvtools::opt::Instruction*&&)': > (.text+0x207e): undefined reference to `spvOpcodeIsDecoration(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(copy_prop_arrays.cpp.o): in function `std::_Function_handler<bool (spvtools::opt::Instruction*), spvtools::opt::CopyPropagateArrays::HasValidReferencesOnly(spvtools::opt::Instruction*, spvtools::opt::Instruction*)::{lambda(spvtools::opt::Instruction*)#1}>::_M_invoke(std::_Any_data const&, spvtools::opt::Instruction*&&)': > (.text+0x212d): undefined reference to `spvOpcodeIsDecoration(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(copy_prop_arrays.cpp.o): in function `std::_Function_handler<bool (spvtools::opt::Instruction*, unsigned int), spvtools::opt::CopyPropagateArrays::CanUpdateUses(spvtools::opt::Instruction*, unsigned int)::{lambda(spvtools::opt::Instruction*, unsigned int)#1}>::_M_invoke(std::_Any_data const&, spvtools::opt::Instruction*&&, unsigned int&&)': > (.text+0x5b43): undefined reference to `spvOpcodeIsDecoration(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(dead_branch_elim_pass.cpp.o): in function `std::_Function_handler<bool (spvtools::opt::Instruction*), spvtools::opt::DeadBranchElimPass::SwitchHasNestedBreak(unsigned int)::{lambda(spvtools::opt::Instruction*)#1}>::_M_invoke(std::_Any_data const&, spvtools::opt::Instruction*&&)': > (.text+0xbb0): undefined reference to `spvOpcodeIsBranch(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(dead_insert_elim_pass.cpp.o): in function `spvtools::opt::DeadInsertElimPass::EliminateDeadInsertsOnePass(spvtools::opt::Function*)': > (.text+0x1474): undefined reference to `spvOpcodeIsComposite(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(def_use_manager.cpp.o): in function `spvtools::opt::analysis::DefUseManager::WhileEachUse(spvtools::opt::Instruction const*, std::function<bool (spvtools::opt::Instruction*, unsigned int)> const&) const': > (.text+0xa4d): undefined reference to `spvIsIdType(spv_operand_type_t)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(desc_sroa.cpp.o): in function `std::_Function_handler<bool (spvtools::opt::Instruction*), spvtools::opt::DescriptorScalarReplacement::ReplaceCandidate(spvtools::opt::Instruction*)::{lambda(spvtools::opt::Instruction*)#1}>::_M_invoke(std::_Any_data const&, spvtools::opt::Instruction*&&)': > (.text+0x1703): undefined reference to `spvOpcodeIsDecoration(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(dominator_tree.cpp.o): in function `spvtools::opt::DominatorTree::GetDominatorEdges(spvtools::opt::Function const*, spvtools::opt::BasicBlock const*, std::vector<std::pair<spvtools::opt::BasicBlock*, spvtools::opt::BasicBlock*>, std::allocator<std::pair<spvtools::opt::BasicBlock*, spvtools::opt::BasicBlock*> > >*)': > (.text+0x1f73): undefined reference to `spvOpcodeIsBranch(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(eliminate_dead_members_pass.cpp.o): in function `spvtools::opt::EliminateDeadMembersPass::MarkStructOperandsAsFullyUsed(spvtools::opt::Instruction const*)': > (.text+0x2740): undefined reference to `spvIsInIdType(spv_operand_type_t)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(feature_manager.cpp.o): in function `spvtools::opt::FeatureManager::AddExtension(spvtools::opt::Instruction*)': > (.text+0x1b6): undefined reference to `spvtools::GetExtensionFromString(char const*, spvtools::Extension*)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(feature_manager.cpp.o): in function `spvtools::opt::FeatureManager::AddCapability(spv::Capability) [clone .localalias]': > (.text+0xa45): undefined reference to `spvtools::AssemblyGrammar::lookupOperand(spv_operand_type_t, unsigned int, spv_operand_desc_t const**) const' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(fold.cpp.o): in function `spvtools::opt::InstructionFolder::FoldInstructionToConstant(spvtools::opt::Instruction*, std::function<unsigned int (unsigned int)>) const': > (.text+0x250d): undefined reference to `spvIsInIdType(spv_operand_type_t)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(function.cpp.o): in function `spvtools::opt::Function::HasEarlyReturn() const': > (.text+0x13b2): undefined reference to `spvOpcodeIsReturn(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(graphics_robust_access_pass.cpp.o): in function `spvtools::opt::GraphicsRobustAccessPass::Fail()': > (.text+0x816): undefined reference to `spvtools::DiagnosticStream::DiagnosticStream(spvtools::DiagnosticStream&&)' > /usr/bin/ld: (.text+0x81e): undefined reference to `spvtools::DiagnosticStream::~DiagnosticStream()' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(graphics_robust_access_pass.cpp.o): in function `spvtools::opt::GraphicsRobustAccessPass::IsCompatibleModule()': > (.text+0xb0d): undefined reference to `spvtools::DiagnosticStream::~DiagnosticStream()' > /usr/bin/ld: (.text+0xb47): undefined reference to `spvtools::DiagnosticStream::~DiagnosticStream()' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(graphics_robust_access_pass.cpp.o): in function `spvtools::opt::GraphicsRobustAccessPass::ClampIndicesForAccessChain(spvtools::opt::Instruction*)::{lambda(unsigned int, unsigned long)#1}::operator()(unsigned int, unsigned long) const [clone .isra.0]': > (.text+0x4a13): undefined reference to `spvtools::DiagnosticStream::~DiagnosticStream()' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(graphics_robust_access_pass.cpp.o): in function `spvtools::opt::GraphicsRobustAccessPass::MakeRuntimeArrayLengthInst(spvtools::opt::Instruction*, unsigned int)': > (.text+0x59c3): undefined reference to `spvtools::DiagnosticStream::~DiagnosticStream()' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(graphics_robust_access_pass.cpp.o):(.text+0x8138): more undefined references to `spvtools::DiagnosticStream::~DiagnosticStream()' follow > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(if_conversion.cpp.o): in function `spvtools::opt::IfConversion::CheckType(unsigned int)': > (.text+0xa81): undefined reference to `spvOpcodeIsScalarType(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(if_conversion.cpp.o): in function `spvtools::opt::IfConversion::CanHoistInstruction(spvtools::opt::Instruction*, spvtools::opt::BasicBlock*, spvtools::opt::DominatorAnalysis*)': > (.text+0x16c1): undefined reference to `spvIsInIdType(spv_operand_type_t)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(if_conversion.cpp.o): in function `spvtools::opt::IfConversion::HoistInstruction(spvtools::opt::Instruction*, spvtools::opt::BasicBlock*, spvtools::opt::DominatorAnalysis*)': > (.text+0x440b): undefined reference to `spvIsInIdType(spv_operand_type_t)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(inline_opaque_pass.cpp.o): in function `spvtools::opt::InlineOpaquePass::IsOpaqueType(unsigned int)': > (.text+0x5b9): undefined reference to `spvIsInIdType(spv_operand_type_t)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(inline_opaque_pass.cpp.o): in function `spvtools::opt::InlineOpaquePass::HasOpaqueArgsOrReturn(spvtools::opt::Instruction const*)': > (.text+0x9e8): undefined reference to `spvIsInIdType(spv_operand_type_t)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(inline_pass.cpp.o): in function `std::_Function_handler<bool (spvtools::opt::Instruction*), spvtools::opt::InlinePass::ContainsAbortOtherThanUnreachable(spvtools::opt::Function*) const::{lambda(spvtools::opt::Instruction*)#1}>::_M_invoke(std::_Any_data const&, spvtools::opt::Instruction*&&)': > (.text+0x85): undefined reference to `spvOpcodeIsAbort(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(inline_pass.cpp.o): in function `std::_Function_handler<void (spvtools::opt::Instruction*), spvtools::opt::InlinePass::UpdateSucceedingPhis(std::vector<std::unique_ptr<spvtools::opt::BasicBlock, std::default_delete<spvtools::opt::BasicBlock> >, std::allocator<std::unique_ptr<spvtools::opt::BasicBlock, std::default_delete<spvtools::opt::BasicBlock> > > >&)::{lambda(unsigned int)#1}::operator()(unsigned int) const::{lambda(spvtools::opt::Instruction*)#1}>::_M_invoke(std::_Any_data const&, spvtools::opt::Instruction*&&)': > (.text+0x758): undefined reference to `spvIsInIdType(spv_operand_type_t)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(inline_pass.cpp.o): in function `spvtools::opt::InlinePass::CloneSameBlockOps(std::unique_ptr<spvtools::opt::Instruction, std::default_delete<spvtools::opt::Instruction> >*, std::unordered_map<unsigned int, unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int> > >*, std::unordered_map<unsigned int, spvtools::opt::Instruction*, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<std::pair<unsigned int const, spvtools::opt::Instruction*> > >*, std::unique_ptr<spvtools::opt::BasicBlock, std::default_delete<spvtools::opt::BasicBlock> >*)': > (.text+0x2802): undefined reference to `spvIsInIdType(spv_operand_type_t)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(inline_pass.cpp.o): in function `spvtools::opt::InlinePass::HasNoReturnInLoop(spvtools::opt::Function*)': > (.text+0x2df6): undefined reference to `spvOpcodeIsReturn(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(inline_pass.cpp.o): in function `spvtools::opt::InlinePass::InlineSingleInstruction(std::unordered_map<unsigned int, unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int> > > const&, spvtools::opt::BasicBlock*, spvtools::opt::Instruction const*, unsigned int)': > (.text+0x379a): undefined reference to `spvIsInIdType(spv_operand_type_t)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(inline_pass.cpp.o): in function `spvtools::opt::InlinePass::AnalyzeReturns(spvtools::opt::Function*)': > (.text+0x47ac): undefined reference to `spvOpcodeIsReturn(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(inline_pass.cpp.o): in function `spvtools::opt::InlinePass::InlineReturn(std::unordered_map<unsigned int, unsigned int, std::hash<unsigned int>, std::equal_to<unsigned int>, std::allocator<std::pair<unsigned int const, unsigned int> > > const&, std::vector<std::unique_ptr<spvtools::opt::BasicBlock, std::default_delete<spvtools::opt::BasicBlock> >, std::allocator<std::unique_ptr<spvtools::opt::BasicBlock, std::default_delete<spvtools::opt::BasicBlock> > > >*, std::unique_ptr<spvtools::opt::BasicBlock, std::default_delete<spvtools::opt::BasicBlock> >, spvtools::opt::analysis::DebugInlinedAtContext*, spvtools::opt::Function*, spvtools::opt::Instruction const*, unsigned int)': > (.text+0xafbf): undefined reference to `spvOpcodeIsAbort(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(instruction.cpp.o): in function `spvtools::opt::Instruction::IsScalarizable() const': > (.text+0x51a5): undefined reference to `spvOpcodeIsScalarizable(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(instruction.cpp.o): in function `spvtools::opt::Instruction::IsReadOnlyLoad() const': > (.text+0x7fe3): undefined reference to `spvOpcodeIsLoad(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(instruction.cpp.o): in function `spvtools::opt::Instruction::PrettyPrint[abi:cxx11](unsigned int) const': > (.text+0x9808): undefined reference to `spvtools::spvInstructionBinaryToText[abi:cxx11](spv_target_env, unsigned int const*, unsigned long, unsigned int const*, unsigned long, unsigned int)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(instruction.cpp.o): in function `spvtools::opt::Instruction::IsOpaqueType() const': > (.text+0x46a7): undefined reference to `spvOpcodeIsBaseOpaqueType(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(interface_var_sroa.cpp.o): in function `spvtools::opt::InterfaceVariableScalarReplacement::ReplaceInterfaceVarInEntryPoint(spvtools::opt::Instruction*, spvtools::opt::Instruction*, unsigned int)': > (.text+0x52bf): undefined reference to `spvIsInIdType(spv_operand_type_t)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(invocation_interlock_placement_pass.cpp.o): in function `spvtools::opt::InvocationInterlockPlacementPass::hasSingleNextBlock(unsigned int, bool)': > (.text+0x1ee8): undefined reference to `spvOpcodeIsReturnOrAbort(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(invocation_interlock_placement_pass.cpp.o): in function `spvtools::opt::InvocationInterlockPlacementPass::splitEdge(spvtools::opt::BasicBlock*, unsigned int)': > (.text+0x3689): undefined reference to `spvIsInIdType(spv_operand_type_t)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(ir_context.cpp.o): in function `spvtools::opt::IRContext::ForgetUses(spvtools::opt::Instruction*)': > (.text+0x5d67): undefined reference to `spvOpcodeIsDecoration(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(ir_context.cpp.o): in function `spvtools::opt::IRContext::AnalyzeUses(spvtools::opt::Instruction*)': > (.text+0x5f54): undefined reference to `spvOpcodeIsDecoration(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(ir_context.cpp.o): in function `spvtools::opt::IRContext::KillOperandFromDebugInstructions(spvtools::opt::Instruction*)': > (.text+0x7c45): undefined reference to `spvOpcodeIsConstant(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(ir_context.cpp.o): in function `spvtools::opt::IRContext::KillInst(spvtools::opt::Instruction*)': > (.text+0x83e0): undefined reference to `spvOpcodeGeneratesType(spv::Op)' > /usr/bin/ld: (.text+0x8425): undefined reference to `spvOpcodeIsConstant(spv::Op)' > /usr/bin/ld: (.text+0x8794): undefined reference to `spvOpcodeIsDecoration(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(ir_context.cpp.o): in function `spvtools::opt::IRContext::RemoveExtension(spvtools::Extension)': > (.text+0x8eba): undefined reference to `spvtools::ExtensionToString(spvtools::Extension)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(ir_loader.cpp.o): in function `spvtools::opt::IsLineInst(spv_parsed_instruction_t const*)': > (.text+0x91): undefined reference to `spvIsExtendedInstruction(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(ir_loader.cpp.o): in function `spvtools::opt::IrLoader::AddInstruction(spv_parsed_instruction_t const*)': > (.text+0xed9): undefined reference to `spvIsExtendedInstruction(spv::Op)' > /usr/bin/ld: (.text+0xeea): undefined reference to `spvExtInstIsDebugInfo(spv_ext_inst_type_t)' > /usr/bin/ld: (.text+0x1c0a): undefined reference to `spvOpcodeIsBlockTerminator(spv::Op)' > /usr/bin/ld: (.text+0x233b): undefined reference to `spvIsExtendedInstruction(spv::Op)' > /usr/bin/ld: (.text+0x2dba): undefined reference to `spvOpcodeGeneratesType(spv::Op)' > /usr/bin/ld: (.text+0x2de3): undefined reference to `spvOpcodeIsConstant(spv::Op)' > /usr/bin/ld: (.text+0x2e73): undefined reference to `spvExtInstIsDebugInfo(spv_ext_inst_type_t)' > /usr/bin/ld: (.text+0x36e9): undefined reference to `spvIsExtendedInstruction(spv::Op)' > /usr/bin/ld: (.text+0x36ff): undefined reference to `spvExtInstIsDebugInfo(spv_ext_inst_type_t)' > /usr/bin/ld: (.text+0x3766): undefined reference to `spvIsExtendedInstruction(spv::Op)' > /usr/bin/ld: (.text+0x3780): undefined reference to `spvExtInstIsNonSemantic(spv_ext_inst_type_t)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(local_access_chain_convert_pass.cpp.o): in function `spvtools::opt::LocalAccessChainConvertPass::AppendConstantOperands(spvtools::opt::Instruction const*, std::vector<spvtools::opt::Operand, std::allocator<spvtools::opt::Operand> >*)': > (.text+0x1320): undefined reference to `spvIsInIdType(spv_operand_type_t)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(local_access_chain_convert_pass.cpp.o): in function `spvtools::opt::LocalAccessChainConvertPass::Is32BitConstantIndexAccessChain(spvtools::opt::Instruction const*) const': > (.text+0x1442): undefined reference to `spvIsInIdType(spv_operand_type_t)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(local_single_store_elim_pass.cpp.o): in function `spvtools::opt::LocalSingleStoreElimPass::FindSingleStoreAndCheckUses(spvtools::opt::Instruction*, std::vector<spvtools::opt::Instruction*, std::allocator<spvtools::opt::Instruction*> > const&) const': > (.text+0x3766): undefined reference to `spvOpcodeIsDecoration(spv::Op)' > /usr/bin/ld: (.text+0x379d): undefined reference to `spvOpcodeIsDecoration(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(local_single_store_elim_pass.cpp.o): in function `std::_Function_handler<bool (spvtools::opt::Instruction*), spvtools::opt::LocalSingleStoreElimPass::FeedsAStore(spvtools::opt::Instruction*) const::{lambda(spvtools::opt::Instruction*)#1}>::_M_invoke(std::_Any_data const&, spvtools::opt::Instruction*&&)': > (.text+0x3806): undefined reference to `spvOpcodeIsDecoration(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(loop_descriptor.cpp.o): in function `spvtools::opt::Loop::AreAllOperandsOutsideLoop(spvtools::opt::Instruction const&) const': > (.text+0x1672): undefined reference to `spvIsInIdType(spv_operand_type_t)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(loop_descriptor.cpp.o): in function `spvtools::opt::Loop::ShouldHoistInstruction(spvtools::opt::Instruction const&) const': > (.text+0x1945): undefined reference to `spvOpcodeIsLoad(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(loop_descriptor.cpp.o): in function `spvtools::opt::Loop::IsSafeToClone() const': > (.text+0x9d91): undefined reference to `spvOpcodeIsBranch(spv::Op)' > /usr/bin/ld: (.text+0xa181): undefined reference to `spvOpcodeIsBranch(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(loop_fission.cpp.o): in function `spvtools::opt::LoopFissionImpl::GroupInstructionsByUseDef()': > (.text+0x12bc): undefined reference to `spvOpcodeIsBranch(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(loop_peeling.cpp.o): in function `spvtools::opt::LoopPeeling::GetIteratorUpdateOperations(spvtools::opt::Loop const*, spvtools::opt::Instruction*, std::unordered_set<spvtools::opt::Instruction*, std::hash<spvtools::opt::Instruction*>, std::equal_to<spvtools::opt::Instruction*>, std::allocator<spvtools::opt::Instruction*> >*)': > (.text+0x1b20): undefined reference to `spvIsInIdType(spv_operand_type_t)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(loop_peeling.cpp.o): in function `std::_Function_handler<bool (spvtools::opt::Instruction*), spvtools::opt::LoopPeeling::IsConditionCheckSideEffectFree() const::{lambda(spvtools::opt::Instruction*)#1}>::_M_invoke(std::_Any_data const&, spvtools::opt::Instruction*&&)': > (.text+0x4dd2): undefined reference to `spvOpcodeIsBranch(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(loop_peeling.cpp.o): in function `spvtools::opt::LoopPeeling::CreateBlockBefore(spvtools::opt::BasicBlock*)': > (.text+0x642b): undefined reference to `spvIsInIdType(spv_operand_type_t)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(loop_utils.cpp.o): in function `spvtools::opt::LoopUtils::CloneLoop(spvtools::opt::LoopUtils::LoopCloningResult*, std::vector<spvtools::opt::BasicBlock*, std::allocator<spvtools::opt::BasicBlock*> > const&) const': > (.text+0x4398): undefined reference to `spvIsInIdType(spv_operand_type_t)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(loop_unroller.cpp.o): in function `spvtools::opt::(anonymous namespace)::LoopUnrollerUtilsImpl::RemapOperands(spvtools::opt::Instruction*)': > (.text+0x3d0): undefined reference to `spvIsInIdType(spv_operand_type_t)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(loop_unswitch_pass.cpp.o): in function `std::_Function_handler<void (spvtools::opt::Instruction*), spvtools::opt::(anonymous namespace)::LoopUnswitch::PerformUnswitch()::{lambda(spvtools::opt::Instruction*)#2}>::_M_invoke(std::_Any_data const&, spvtools::opt::Instruction*&&)': > (.text+0xc88): undefined reference to `spvIsInIdType(spv_operand_type_t)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(loop_unswitch_pass.cpp.o): in function `spvtools::opt::(anonymous namespace)::LoopUnswitch::IsDynamicallyUniform(spvtools::opt::Instruction*, spvtools::opt::BasicBlock const*, spvtools::opt::DominatorTree const&)': > (.text+0x56d9): undefined reference to `spvIsInIdType(spv_operand_type_t)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(loop_unswitch_pass.cpp.o): in function `spvtools::opt::LoopUnswitchPass::ProcessFunction(spvtools::opt::Function*)': > (.text+0xa78f): undefined reference to `spvOpcodeIsBranch(spv::Op)' > /usr/bin/ld: (.text+0xa7ed): undefined reference to `spvOpcodeIsConstant(spv::Op)' > /usr/bin/ld: (.text+0xab5c): undefined reference to `spvOpcodeIsSpecConstant(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(mem_pass.cpp.o): in function `spvtools::opt::MemPass::IsTargetType(spvtools::opt::Instruction const*) const [clone .localalias]': > (.text+0xd6b): undefined reference to `spvIsInIdType(spv_operand_type_t)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(mem_pass.cpp.o): in function `spvtools::opt::MemPass::DCEInst(spvtools::opt::Instruction*, std::function<void (spvtools::opt::Instruction*)> const&)': > (.text+0x6979): undefined reference to `spvIsInIdType(spv_operand_type_t)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(merge_return_pass.cpp.o): in function `spvtools::opt::MergeReturnPass::CreatePhiNodesForInst(spvtools::opt::BasicBlock*, spvtools::opt::Instruction&)': > (.text+0x5cc5): undefined reference to `spvIsInIdType(spv_operand_type_t)' > /usr/bin/ld: (.text+0x6260): undefined reference to `spvIsInIdType(spv_operand_type_t)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(module.cpp.o): in function `std::_Function_handler<void (spvtools::opt::Instruction const*), spvtools::opt::Module::ComputeIdBound() const::{lambda(spvtools::opt::Instruction const*)#1}>::_M_invoke(std::_Any_data const&, spvtools::opt::Instruction const*&&)': > (.text+0x63): undefined reference to `spvIsIdType(spv_operand_type_t)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(module.cpp.o): in function `spvtools::opt::Module::GetConstants()': > (.text+0x3145): undefined reference to `spvOpcodeIsConstant(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(module.cpp.o): in function `spvtools::opt::Module::GetTypes()': > (.text+0x321c): undefined reference to `spvOpcodeGeneratesType(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(module.cpp.o): in function `spvtools::opt::Module::GetConstants() const': > (.text+0x32d5): undefined reference to `spvOpcodeIsConstant(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(module.cpp.o): in function `spvtools::opt::Module::GetTypes() const': > (.text+0x33ac): undefined reference to `spvOpcodeGeneratesType(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(module.cpp.o): in function `std::_Function_handler<void (spvtools::opt::Instruction const*), spvtools::opt::Module::ToBinary(std::vector<unsigned int, std::allocator<unsigned int> >*, bool) const::{lambda(spvtools::opt::Instruction const*)#1}>::_M_invoke(std::_Any_data const&, spvtools::opt::Instruction const*&&)': > (.text+0x35b5): undefined reference to `spvOpcodeIsBlockTerminator(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(propagator.cpp.o): in function `spvtools::opt::SSAPropagator::Simulate(spvtools::opt::Instruction*)': > (.text+0x2b5d): undefined reference to `spvIsInIdType(spv_operand_type_t)' > /usr/bin/ld: (.text+0x2cb4): undefined reference to `spvOpcodeIsBlockTerminator(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(propagator.cpp.o): in function `spvtools::opt::SSAPropagator::Initialize(spvtools::opt::Function*)': > (.text+0x3bfa): undefined reference to `spvOpcodeIsReturnOrAbort(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(register_pressure.cpp.o): in function `std::_Function_handler<void (unsigned int*), spvtools::opt::RegisterLiveness::SimulateFission(spvtools::opt::Loop const&, std::unordered_set<spvtools::opt::Instruction*, std::hash<spvtools::opt::Instruction*>, std::equal_to<spvtools::opt::Instruction*>, std::allocator<spvtools::opt::Instruction*> > const&, std::unordered_set<spvtools::opt::Instruction*, std::hash<spvtools::opt::Instruction*>, std::equal_to<spvtools::opt::Instruction*>, std::allocator<spvtools::opt::Instruction*> > const&, spvtools::opt::RegisterLiveness::RegionRegisterLiveness*, spvtools::opt::RegisterLiveness::RegionRegisterLiveness*) const::{lambda(unsigned int*)#1}>::_M_invoke(std::_Any_data const&, unsigned int*&&)': > (.text+0x217b): undefined reference to `spvOpcodeIsConstant(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(register_pressure.cpp.o): in function `std::_Function_handler<void (unsigned int*), spvtools::opt::(anonymous namespace)::ComputeRegisterLiveness::EvaluateRegisterRequirements()::{lambda(unsigned int*)#1}>::_M_invoke(std::_Any_data const&, unsigned int*&&)': > (.text+0x2537): undefined reference to `spvOpcodeIsConstant(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(register_pressure.cpp.o): in function `std::_Function_handler<void (spvtools::opt::BasicBlock*), spvtools::opt::(anonymous namespace)::ComputeRegisterLiveness::Compute()::{lambda(spvtools::opt::BasicBlock*)#1}>::_M_invoke(std::_Any_data const&, spvtools::opt::BasicBlock*&&)': > (.text+0x29ec): undefined reference to `spvIsInIdType(spv_operand_type_t)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(register_pressure.cpp.o): in function `spvtools::opt::RegisterLiveness::ComputeLoopRegisterPressure(spvtools::opt::Loop const&, spvtools::opt::RegisterLiveness::RegionRegisterLiveness*) const': > (.text+0x32c7): undefined reference to `spvOpcodeIsConstant(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(register_pressure.cpp.o): in function `std::_Function_handler<void (spvtools::opt::Instruction*), spvtools::opt::(anonymous namespace)::ComputeRegisterLiveness::ComputePhiUses(spvtools::opt::BasicBlock const&, std::unordered_set<spvtools::opt::Instruction*, std::hash<spvtools::opt::Instruction*>, std::equal_to<spvtools::opt::Instruction*>, std::allocator<spvtools::opt::Instruction*> >*)::{lambda(unsigned int)#1}::operator()(unsigned int) const::{lambda(spvtools::opt::Instruction const*)#1}>::_M_invoke(std::_Any_data const&, spvtools::opt::Instruction*&&)': > (.text+0x37b9): undefined reference to `spvOpcodeIsConstant(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(register_pressure.cpp.o): in function `std::_Function_handler<void (unsigned int*), spvtools::opt::(anonymous namespace)::ComputeRegisterLiveness::ComputePartialLiveness(spvtools::opt::BasicBlock*)::{lambda(unsigned int*)#1}>::_M_invoke(std::_Any_data const&, unsigned int*&&)': > (.text+0x3843): undefined reference to `spvOpcodeIsConstant(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(register_pressure.cpp.o): in function `spvtools::opt::RegisterLiveness::SimulateFusion(spvtools::opt::Loop const&, spvtools::opt::Loop const&, spvtools::opt::RegisterLiveness::RegionRegisterLiveness*) const': > (.text+0x4223): undefined reference to `spvOpcodeIsConstant(spv::Op)' > /usr/bin/ld: (.text+0x4967): undefined reference to `spvOpcodeIsConstant(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(register_pressure.cpp.o): in function `spvtools::opt::RegisterLiveness::SimulateFission(spvtools::opt::Loop const&, std::unordered_set<spvtools::opt::Instruction*, std::hash<spvtools::opt::Instruction*>, std::equal_to<spvtools::opt::Instruction*>, std::allocator<spvtools::opt::Instruction*> > const&, std::unordered_set<spvtools::opt::Instruction*, std::hash<spvtools::opt::Instruction*>, std::equal_to<spvtools::opt::Instruction*>, std::allocator<spvtools::opt::Instruction*> > const&, spvtools::opt::RegisterLiveness::RegionRegisterLiveness*, spvtools::opt::RegisterLiveness::RegionRegisterLiveness*) const': > (.text+0x6951): undefined reference to `spvIsInIdType(spv_operand_type_t)' > /usr/bin/ld: (.text+0x6bbc): undefined reference to `spvOpcodeIsConstant(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(register_pressure.cpp.o): in function `spvtools::opt::RegisterLiveness::Analyze(spvtools::opt::Function*)': > (.text+0x959a): undefined reference to `spvIsInIdType(spv_operand_type_t)' > /usr/bin/ld: (.text+0x961c): undefined reference to `spvOpcodeIsConstant(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(strip_debug_info_pass.cpp.o): in function `std::_Function_handler<bool (spvtools::opt::Instruction*), spvtools::opt::StripDebugInfoPass::Process()::{lambda(spvtools::opt::Instruction*)#1}>::_M_invoke(std::_Any_data const&, spvtools::opt::Instruction*&&)': > (.text+0x51a): undefined reference to `spvIsExtendedInstruction(spv::Op)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(build_module.cpp.o): in function `spvtools::BuildModule(spv_target_env, std::function<void (spv_message_level_t, char const*, spv_position_t const&, char const*)>, unsigned int const*, unsigned long, bool)': > (.text+0xc46): undefined reference to `spvContextCreate' > /usr/bin/ld: (.text+0xc9b): undefined reference to `spvtools::SetContextMessageConsumer(spv_context_t*, std::function<void (spv_message_level_t, char const*, spv_position_t const&, char const*)>)' > /usr/bin/ld: (.text+0xd0d): undefined reference to `spvBinaryParse' > /usr/bin/ld: (.text+0xd1f): undefined reference to `spvContextDestroy' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(build_module.cpp.o): in function `spvtools::BuildModule(spv_target_env, std::function<void (spv_message_level_t, char const*, spv_position_t const&, char const*)>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)': > (.text+0x203f): undefined reference to `spvtools::SpirvTools::SpirvTools(spv_target_env)' > /usr/bin/ld: (.text+0x2085): undefined reference to `spvtools::SpirvTools::SetMessageConsumer(std::function<void (spv_message_level_t, char const*, spv_position_t const&, char const*)>)' > /usr/bin/ld: (.text+0x20c3): undefined reference to `spvtools::SpirvTools::Assemble(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned int, std::allocator<unsigned int> >*, unsigned int) const' > /usr/bin/ld: (.text+0x20ee): undefined reference to `spvtools::SpirvTools::~SpirvTools()' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(build_module.cpp.o): in function `std::unique_ptr<spvtools::opt::IRContext, std::default_delete<spvtools::opt::IRContext> > spvtools::MakeUnique<spvtools::opt::IRContext, spv_target_env&, std::function<void (spv_message_level_t, char const*, spv_position_t const&, char const*)>&>(spv_target_env&, std::function<void (spv_message_level_t, char const*, spv_position_t const&, char const*)>&)': > (.text._ZN8spvtools10MakeUniqueINS_3opt9IRContextEJR14spv_target_envRSt8functionIFv19spv_message_level_tPKcRK14spv_position_tS8_EEEEESt10unique_ptrIT_St14default_deleteISG_EEDpOT0_[_ZN8spvtools10MakeUniqueINS_3opt9IRContextEJR14spv_target_envRSt8functionIFv19spv_message_level_tPKcRK14spv_position_tS8_EEEEESt10unique_ptrIT_St14default_deleteISG_EEDpOT0_]+0xad): undefined reference to `spvContextCreate' > /usr/bin/ld: (.text._ZN8spvtools10MakeUniqueINS_3opt9IRContextEJR14spv_target_envRSt8functionIFv19spv_message_level_tPKcRK14spv_position_tS8_EEEEESt10unique_ptrIT_St14default_deleteISG_EEDpOT0_[_ZN8spvtools10MakeUniqueINS_3opt9IRContextEJR14spv_target_envRSt8functionIFv19spv_message_level_tPKcRK14spv_position_tS8_EEEEESt10unique_ptrIT_St14default_deleteISG_EEDpOT0_]+0x814): undefined reference to `spvtools::SetContextMessageConsumer(spv_context_t*, std::function<void (spv_message_level_t, char const*, spv_position_t const&, char const*)>)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(compact_ids_pass.cpp.o): in function `std::_Function_handler<void (spvtools::opt::Instruction*), spvtools::opt::CompactIdsPass::Process()::{lambda(spvtools::opt::Instruction*)#1}>::_M_invoke(std::_Any_data const&, spvtools::opt::Instruction*&&)': > (.text+0x5a7): undefined reference to `spvIsIdType(spv_operand_type_t)' > /usr/bin/ld: /lib/x86_64-linux-gnu/libSPIRV-Tools-opt.a(opextinst_forward_ref_fixup_pass.cpp.o): in function `spvtools::opt::OpExtInstWithForwardReferenceFixupPass::Process()': > (.text+0x486): undefined reference to `spvIsIdType(spv_operand_type_t)' > clang++: error: linker command failed with exit code 1 (use -v to see invocation) > make[2]: *** [CMakeFiles/shadps4.dir/build.make:5067: shadps4] Error 1 > make[1]: *** [CMakeFiles/Makefile2:453: CMakeFiles/shadps4.dir/all] Error 2 > make: *** [Makefile:136: all] Error 2 ### Reproduction Steps Install debian testing with dependencies. I have included many that were not in the docs, although some fail due to being too new or too old. `sudo apt install build-essential clang git cmake libasound2-dev libpulse-dev libopenal-dev libssl-dev zlib1g-dev libedit-dev libudev-dev libevdev-dev libsdl2-dev libjack-dev libsndio-dev qt6-base-dev qt6-tools-dev qt6-multimedia-dev libvulkan-dev vulkan-validationlayers libpng-dev glslang-dev libsdl3-dev libsdl3-image-dev libsdl3-ttf-dev libvulkan-memory-allocator-dev libavcodec-dev libboost-all-dev glslang-tools spirv-headers libfmt-dev libhalf-dev libmagicenum-dev libstb-dev libtoml11-dev libxbyak-dev libxxhash-dev libzydis-dev libusb-1.0-0-dev -y` `cmake ../ -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DENABLE_QT_GUI=ON -DENABLE_UPDATER=OFF -DENABLE_DISCORD_RPC=OFF` ### Expected Behavior I believe linking spirv should be handled by glslang's library but it doesn't seem to do that. There was a bug in 2020 specifically for this but was allegedly fixed. They may have just broke it again. It would be simpler to just manually link spirv when linking glslang. ### Specify OS Version Debian Testing - Kernel 6.12.21 ### CPU Ryzen 9 7950X3D ### GPU Radeon Pro W6600 ### Amount of RAM in GB 96GB
kerem closed this issue 2026-02-27 21:08:49 +03:00
Author
Owner

@jardon commented on GitHub (Apr 19, 2025):

i would think it should link against the submodule, but the linking directories will likely need to be configured differently.

<!-- gh-comment-id:2816813760 --> @jardon commented on GitHub (Apr 19, 2025): i would think it should link against the submodule, but the linking directories will likely need to be configured differently.
Author
Owner

@knuxyl commented on GitHub (Apr 20, 2025):

I'm not 100% sure what to make of it but I do know the foundational problem is debian developers not properly building glslang... it's becoming habitual. Once I built it manually and installed it shadps4 would build (although would not run anything at all). I'm just hoping shadps4's build system could be updated to include an option to use external glslang or system in the cmake.

<!-- gh-comment-id:2817098045 --> @knuxyl commented on GitHub (Apr 20, 2025): I'm not 100% sure what to make of it but I do know the foundational problem is debian developers not properly building glslang... it's becoming habitual. Once I built it manually and installed it shadps4 would build (although would not run anything at all). I'm just hoping shadps4's build system could be updated to include an option to use external glslang or system in the cmake.
Author
Owner

@abouvier commented on GitHub (Apr 20, 2025):

I'm not 100% sure what to make of it but I do know the foundational problem is debian developers not properly building glslang... it's becoming habitual. Once I built it manually and installed it shadps4 would build (although would not run anything at all). I'm just hoping shadps4's build system could be updated to include an option to use external glslang or system in the cmake.

You can use -D CMAKE_DISABLE_FIND_PACKAGE_glslang=ON to force building with externals/glslang.

<!-- gh-comment-id:2817170437 --> @abouvier commented on GitHub (Apr 20, 2025): > I'm not 100% sure what to make of it but I do know the foundational problem is debian developers not properly building glslang... it's becoming habitual. Once I built it manually and installed it shadps4 would build (although would not run anything at all). I'm just hoping shadps4's build system could be updated to include an option to use external glslang or system in the cmake. You can use `-D CMAKE_DISABLE_FIND_PACKAGE_glslang=ON` to force building with `externals/glslang`.
Author
Owner

@knuxyl commented on GitHub (Apr 21, 2025):

I reinstalled debian's glslang and used the addition you gave and it worked. I'm guessing this disable find package is a builtin cmake function i didn't know existed. thank you. shad built but I'm still getting error change every run that I don't get with the prebuilt provided by releases. my problem was solved, thank you @abouvier

<!-- gh-comment-id:2818269816 --> @knuxyl commented on GitHub (Apr 21, 2025): I reinstalled debian's glslang and used the addition you gave and it worked. I'm guessing this disable find package is a builtin cmake function i didn't know existed. thank you. shad built but I'm still getting error change every run that I don't get with the prebuilt provided by releases. my problem was solved, thank you @abouvier
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/shadPS4#905
No description provided.