[llvm] 0b5cb41 - [CMake] Look up target subcomponents in LLVM_AVAILABLE_LIBS

Aaron Puchert via llvm-commits llvm-commits at lists.llvm.org
Sun Jan 22 12:39:24 PST 2023


Author: Aaron Puchert
Date: 2023-01-22T21:36:26+01:00
New Revision: 0b5cb41dd07cc7cde9330d6098ebd74387f3df7f

URL: https://github.com/llvm/llvm-project/commit/0b5cb41dd07cc7cde9330d6098ebd74387f3df7f
DIFF: https://github.com/llvm/llvm-project/commit/0b5cb41dd07cc7cde9330d6098ebd74387f3df7f.diff

LOG: [CMake] Look up target subcomponents in LLVM_AVAILABLE_LIBS

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

Added: 
    

Modified: 
    llvm/cmake/modules/LLVM-Config.cmake

Removed: 
    


################################################################################
diff  --git a/llvm/cmake/modules/LLVM-Config.cmake b/llvm/cmake/modules/LLVM-Config.cmake
index 9f85d8b629fb1..7ef8a8aa808bc 100644
--- a/llvm/cmake/modules/LLVM-Config.cmake
+++ b/llvm/cmake/modules/LLVM-Config.cmake
@@ -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})
@@ -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)


        


More information about the llvm-commits mailing list