Skip to content

Commit

Permalink
[CMake] Look up target subcomponents in LLVM_AVAILABLE_LIBS
Browse files Browse the repository at this point in the history
In an installation using the all-contained libLLVM.so, individual
components are not available as targets, so we have to look them up in
LLVM_AVAILABLE_LIBS just like llvm_map_components_to_libnames does it.
Here I don't think we need the capitalized names though because we know
the right capitalization. But I might be wrong.

This is required by dragonffi, who call llvm_map_components_to_libnames
on a list containing ${LLVM_NATIVE_ARCH}. Downstream bug report:
https://bugzilla.opensuse.org/show_bug.cgi?id=1180748.

Differential Revision: https://reviews.llvm.org/D96670
  • Loading branch information
aaronpuchert committed Jan 22, 2023
1 parent 0cdf030 commit 0b5cb41
Showing 1 changed file with 28 additions and 33 deletions.
61 changes: 28 additions & 33 deletions llvm/cmake/modules/LLVM-Config.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -125,47 +125,38 @@ endfunction(llvm_map_components_to_libraries)
# 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})
Expand All @@ -176,28 +167,32 @@ function(llvm_expand_pseudo_components out_components)
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)
Expand Down

0 comments on commit 0b5cb41

Please sign in to comment.