diff --git a/llvm/cmake/modules/LLVM-Config.cmake b/llvm/cmake/modules/LLVM-Config.cmake --- a/llvm/cmake/modules/LLVM-Config.cmake +++ b/llvm/cmake/modules/LLVM-Config.cmake @@ -125,47 +125,38 @@ # available and not a list of the components. function(llvm_expand_pseudo_components out_components) set( link_components ${ARGN} ) + if(NOT LLVM_AVAILABLE_LIBS) + # Inside LLVM itself available libs are in a global property. + get_property(LLVM_AVAILABLE_LIBS GLOBAL PROPERTY LLVM_LIBS) + endif() foreach(c ${link_components}) # add codegen, asmprinter, asmparser, disassembler list(FIND LLVM_TARGETS_TO_BUILD ${c} idx) if( NOT idx LESS 0 ) - if( TARGET LLVM${c}CodeGen ) + list(FIND LLVM_AVAILABLE_LIBS LLVM${c}CodeGen lib_idx) + if( lib_idx GREATER_EQUAL 0 ) list(APPEND expanded_components "${c}CodeGen") else() - if( TARGET LLVM${c} ) + list(FIND LLVM_AVAILABLE_LIBS LLVM${c} lib_idx) + if( lib_idx GREATER_EQUAL 0 ) list(APPEND expanded_components "${c}") else() message(FATAL_ERROR "Target ${c} is not in the set of libraries.") endif() endif() - if( TARGET LLVM${c}AsmPrinter ) - list(APPEND expanded_components "${c}AsmPrinter") - endif() - if( TARGET LLVM${c}AsmParser ) - list(APPEND expanded_components "${c}AsmParser") - endif() - if( TARGET LLVM${c}Desc ) - list(APPEND expanded_components "${c}Desc") - endif() - if( TARGET LLVM${c}Disassembler ) - list(APPEND expanded_components "${c}Disassembler") - endif() - if( TARGET LLVM${c}Info ) - list(APPEND expanded_components "${c}Info") - endif() - if( TARGET LLVM${c}Utils ) - list(APPEND expanded_components "${c}Utils") - endif() + foreach(subcomponent IN ITEMS AsmPrinter AsmParser Desc Disassembler Info Utils) + list(FIND LLVM_AVAILABLE_LIBS LLVM${c}${subcomponent} lib_idx) + if( lib_idx GREATER_EQUAL 0 ) + list(APPEND expanded_components "${c}${subcomponent}") + endif() + endforeach() elseif( c STREQUAL "nativecodegen" ) - if( TARGET LLVM${LLVM_NATIVE_ARCH}CodeGen ) - list(APPEND expanded_components "${LLVM_NATIVE_ARCH}CodeGen") - endif() - if( TARGET LLVM${LLVM_NATIVE_ARCH}Desc ) - list(APPEND expanded_components "${LLVM_NATIVE_ARCH}Desc") - endif() - if( TARGET LLVM${LLVM_NATIVE_ARCH}Info ) - list(APPEND expanded_components "${LLVM_NATIVE_ARCH}Info") - endif() + foreach(subcomponent IN ITEMS CodeGen Desc Info) + list(FIND LLVM_AVAILABLE_LIBS LLVM${LLVM_NATIVE_ARCH}${subcomponent} lib_idx) + if( lib_idx GREATER_EQUAL 0 ) + list(APPEND expanded_components "${LLVM_NATIVE_ARCH}${subcomponent}") + endif() + endforeach() elseif( c STREQUAL "AllTargetsCodeGens" ) # Link all the codegens from all the targets foreach(t ${LLVM_TARGETS_TO_BUILD}) @@ -176,28 +167,32 @@ elseif( c STREQUAL "AllTargetsAsmParsers" ) # Link all the asm parsers from all the targets foreach(t ${LLVM_TARGETS_TO_BUILD}) - if( TARGET LLVM${t}AsmParser ) + list(FIND LLVM_AVAILABLE_LIBS LLVM${t}AsmParser lib_idx) + if( lib_idx GREATER_EQUAL 0 ) list(APPEND expanded_components "${t}AsmParser") endif() endforeach(t) elseif( c STREQUAL "AllTargetsDescs" ) # Link all the descs from all the targets foreach(t ${LLVM_TARGETS_TO_BUILD}) - if( TARGET LLVM${t}Desc ) + list(FIND LLVM_AVAILABLE_LIBS LLVM${t}Desc lib_idx) + if( lib_idx GREATER_EQUAL 0 ) list(APPEND expanded_components "${t}Desc") endif() endforeach(t) elseif( c STREQUAL "AllTargetsDisassemblers" ) # Link all the disassemblers from all the targets foreach(t ${LLVM_TARGETS_TO_BUILD}) - if( TARGET LLVM${t}Disassembler ) + list(FIND LLVM_AVAILABLE_LIBS LLVM${t}Disassembler lib_idx) + if( lib_idx GREATER_EQUAL 0 ) list(APPEND expanded_components "${t}Disassembler") endif() endforeach(t) elseif( c STREQUAL "AllTargetsInfos" ) # Link all the infos from all the targets foreach(t ${LLVM_TARGETS_TO_BUILD}) - if( TARGET LLVM${t}Info ) + list(FIND LLVM_AVAILABLE_LIBS LLVM${t}Info lib_idx) + if( lib_idx GREATER_EQUAL 0 ) list(APPEND expanded_components "${t}Info") endif() endforeach(t)