[llvm] r366610 - Expand pseudo-components before embedding in llvm-config

Daniel Sanders via llvm-commits llvm-commits at lists.llvm.org
Fri Jul 19 13:38:05 PDT 2019


Author: dsanders
Date: Fri Jul 19 13:38:05 2019
New Revision: 366610

URL: http://llvm.org/viewvc/llvm-project?rev=366610&view=rev
Log:
Expand pseudo-components before embedding in llvm-config

Summary:
If you use pseudo-targets like AllTargetsCodeGens in LLVM_DYLIB_COMPONENTS
then a test will fail because `./bin/llvm-config --shared-mode` can't
handle these targets. We can fix this by expanding them before embedding
the string into llvm-config

Reviewers: bogner

Reviewed By: bogner

Subscribers: mgorny, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D65011

Modified:
    llvm/trunk/cmake/modules/LLVM-Config.cmake
    llvm/trunk/tools/llvm-config/BuildVariables.inc.in
    llvm/trunk/tools/llvm-config/CMakeLists.txt

Modified: llvm/trunk/cmake/modules/LLVM-Config.cmake
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/modules/LLVM-Config.cmake?rev=366610&r1=366609&r2=366610&view=diff
==============================================================================
--- llvm/trunk/cmake/modules/LLVM-Config.cmake (original)
+++ llvm/trunk/cmake/modules/LLVM-Config.cmake Fri Jul 19 13:38:05 2019
@@ -117,140 +117,154 @@ function(llvm_map_components_to_librarie
   set( ${OUT_VAR} ${result} ${sys_result} PARENT_SCOPE )
 endfunction(llvm_map_components_to_libraries)
 
-# This is a variant intended for the final user:
-# Map LINK_COMPONENTS to actual libnames.
-function(llvm_map_components_to_libnames out_libs)
+# Expand pseudo-components into real components.
+# Does not cover 'native', 'backend', or 'engine' as these require special
+# handling.
+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()
-  string(TOUPPER "${LLVM_AVAILABLE_LIBS}" capitalized_libs)
-
-  get_property(LLVM_TARGETS_CONFIGURED GLOBAL PROPERTY LLVM_TARGETS_CONFIGURED)
-
-  # Generally in our build system we avoid order-dependence. Unfortunately since
-  # not all targets create the same set of libraries we actually need to ensure
-  # that all build targets associated with a target are added before we can
-  # process target dependencies.
-  if(NOT LLVM_TARGETS_CONFIGURED)
-    foreach(c ${link_components})
-      is_llvm_target_specifier(${c} iltl_result ALL_TARGETS)
-      if(iltl_result)
-        message(FATAL_ERROR "Specified target library before target registration is complete.")
-      endif()
-    endforeach()
-  endif()
-
-  # Expand some keywords:
-  list(FIND LLVM_TARGETS_TO_BUILD "${LLVM_NATIVE_ARCH}" have_native_backend)
-  list(FIND link_components "engine" engine_required)
-  if( NOT engine_required EQUAL -1 )
-    list(FIND LLVM_TARGETS_WITH_JIT "${LLVM_NATIVE_ARCH}" have_jit)
-    if( NOT have_native_backend EQUAL -1 AND NOT have_jit EQUAL -1 )
-      list(APPEND link_components "jit")
-      list(APPEND link_components "native")
-    else()
-      list(APPEND link_components "interpreter")
-    endif()
-  endif()
-  list(FIND link_components "native" native_required)
-  if( NOT native_required EQUAL -1 )
-    if( NOT have_native_backend EQUAL -1 )
-      list(APPEND link_components ${LLVM_NATIVE_ARCH})
-    endif()
-  endif()
-
-  # Translate symbolic component names to real libraries:
   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(APPEND expanded_components "LLVM${c}CodeGen")
+        list(APPEND expanded_components "${c}CodeGen")
       else()
         if( TARGET LLVM${c} )
-          list(APPEND expanded_components "LLVM${c}")
+          list(APPEND expanded_components "${c}")
         else()
           message(FATAL_ERROR "Target ${c} is not in the set of libraries.")
         endif()
       endif()
-      if( TARGET LLVM${c}AsmParser )
-        list(APPEND expanded_components "LLVM${c}AsmParser")
-      endif()
       if( TARGET LLVM${c}AsmPrinter )
-        list(APPEND expanded_components "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 "LLVM${c}Desc")
+        list(APPEND expanded_components "${c}Desc")
       endif()
       if( TARGET LLVM${c}Disassembler )
-        list(APPEND expanded_components "LLVM${c}Disassembler")
+        list(APPEND expanded_components "${c}Disassembler")
       endif()
       if( TARGET LLVM${c}Info )
-        list(APPEND expanded_components "LLVM${c}Info")
+        list(APPEND expanded_components "${c}Info")
       endif()
       if( TARGET LLVM${c}Utils )
-        list(APPEND expanded_components "LLVM${c}Utils")
+        list(APPEND expanded_components "${c}Utils")
       endif()
-    elseif( c STREQUAL "native" )
-      # already processed
     elseif( c STREQUAL "nativecodegen" )
-      list(APPEND expanded_components "LLVM${LLVM_NATIVE_ARCH}CodeGen")
+      list(APPEND expanded_components "${LLVM_NATIVE_ARCH}CodeGen")
       if( TARGET LLVM${LLVM_NATIVE_ARCH}Desc )
-        list(APPEND expanded_components "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${LLVM_NATIVE_ARCH}Info")
+        list(APPEND expanded_components "${LLVM_NATIVE_ARCH}Info")
       endif()
-    elseif( c STREQUAL "backend" )
-      # same case as in `native'.
-    elseif( c STREQUAL "engine" )
-      # already processed
     elseif( c STREQUAL "all" )
       list(APPEND expanded_components ${LLVM_AVAILABLE_LIBS})
     elseif( c STREQUAL "AllTargetsCodeGens" )
       # Link all the codegens from all the targets
       foreach(t ${LLVM_TARGETS_TO_BUILD})
         if( TARGET LLVM${t}CodeGen)
-          list(APPEND expanded_components "LLVM${t}CodeGen")
+          list(APPEND expanded_components "${t}CodeGen")
         endif()
       endforeach(t)
     elseif( c STREQUAL "AllTargetsAsmPrinters" )
       # Link all the asm printers from all the targets
       foreach(t ${LLVM_TARGETS_TO_BUILD})
         if( TARGET LLVM${t}AsmPrinter )
-          list(APPEND expanded_components "LLVM${t}AsmPrinter")
+          list(APPEND expanded_components "${t}AsmPrinter")
         endif()
       endforeach(t)
     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(APPEND expanded_components "LLVM${t}AsmParser")
+          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(APPEND expanded_components "LLVM${t}Desc")
+          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(APPEND expanded_components "LLVM${t}Disassembler")
+          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(APPEND expanded_components "LLVM${t}Info")
+          list(APPEND expanded_components "${t}Info")
         endif()
       endforeach(t)
+    else()
+      list(APPEND expanded_components "${c}")
+    endif()
+  endforeach()
+  set(${out_components} ${expanded_components} PARENT_SCOPE)
+endfunction(llvm_expand_pseudo_components out_components)
+
+# This is a variant intended for the final user:
+# Map LINK_COMPONENTS to actual libnames.
+function(llvm_map_components_to_libnames out_libs)
+  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()
+  string(TOUPPER "${LLVM_AVAILABLE_LIBS}" capitalized_libs)
+
+  get_property(LLVM_TARGETS_CONFIGURED GLOBAL PROPERTY LLVM_TARGETS_CONFIGURED)
+
+  # Generally in our build system we avoid order-dependence. Unfortunately since
+  # not all targets create the same set of libraries we actually need to ensure
+  # that all build targets associated with a target are added before we can
+  # process target dependencies.
+  if(NOT LLVM_TARGETS_CONFIGURED)
+    foreach(c ${link_components})
+      is_llvm_target_specifier(${c} iltl_result ALL_TARGETS)
+      if(iltl_result)
+        message(FATAL_ERROR "Specified target library before target registration is complete.")
+      endif()
+    endforeach()
+  endif()
+
+  # Expand some keywords:
+  list(FIND LLVM_TARGETS_TO_BUILD "${LLVM_NATIVE_ARCH}" have_native_backend)
+  list(FIND link_components "engine" engine_required)
+  if( NOT engine_required EQUAL -1 )
+    list(FIND LLVM_TARGETS_WITH_JIT "${LLVM_NATIVE_ARCH}" have_jit)
+    if( NOT have_native_backend EQUAL -1 AND NOT have_jit EQUAL -1 )
+      list(APPEND link_components "jit")
+      list(APPEND link_components "native")
+    else()
+      list(APPEND link_components "interpreter")
+    endif()
+  endif()
+  list(FIND link_components "native" native_required)
+  if( NOT native_required EQUAL -1 )
+    if( NOT have_native_backend EQUAL -1 )
+      list(APPEND link_components ${LLVM_NATIVE_ARCH})
+    endif()
+  endif()
+
+  # Translate symbolic component names to real libraries:
+  llvm_expand_pseudo_components(link_components ${link_components})
+  foreach(c ${link_components})
+    if( c STREQUAL "native" )
+      # already processed
+    elseif( c STREQUAL "backend" )
+      # same case as in `native'.
+    elseif( c STREQUAL "engine" )
+      # already processed
     else( NOT idx LESS 0 )
       # Canonize the component name:
       string(TOUPPER "${c}" capitalized)
@@ -272,7 +286,7 @@ function(llvm_map_components_to_libnames
         list(GET LLVM_AVAILABLE_LIBS ${lib_idx} canonical_lib)
         list(APPEND expanded_components ${canonical_lib})
       endif( lib_idx LESS 0 )
-    endif( NOT idx LESS 0 )
+    endif( c STREQUAL "native" )
   endforeach(c)
 
   set(${out_libs} ${expanded_components} PARENT_SCOPE)

Modified: llvm/trunk/tools/llvm-config/BuildVariables.inc.in
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-config/BuildVariables.inc.in?rev=366610&r1=366609&r2=366610&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-config/BuildVariables.inc.in (original)
+++ llvm/trunk/tools/llvm-config/BuildVariables.inc.in Fri Jul 19 13:38:05 2019
@@ -30,7 +30,7 @@
 #define LLVM_ENABLE_DYLIB @LLVM_BUILD_LLVM_DYLIB@
 #define LLVM_LINK_DYLIB @LLVM_LINK_LLVM_DYLIB@
 #define LLVM_ENABLE_SHARED @BUILD_SHARED_LIBS@
-#define LLVM_DYLIB_COMPONENTS "@LLVM_DYLIB_COMPONENTS@"
+#define LLVM_DYLIB_COMPONENTS "@LLVM_DYLIB_COMPONENTS_expanded@"
 #define LLVM_DYLIB_VERSION "@LLVM_DYLIB_VERSION@"
 #define LLVM_HAS_GLOBAL_ISEL @LLVM_HAS_GLOBAL_ISEL@
 #define LLVM_TOOLS_INSTALL_DIR "@LLVM_TOOLS_INSTALL_DIR@"

Modified: llvm/trunk/tools/llvm-config/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-config/CMakeLists.txt?rev=366610&r1=366609&r2=366610&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-config/CMakeLists.txt (original)
+++ llvm/trunk/tools/llvm-config/CMakeLists.txt Fri Jul 19 13:38:05 2019
@@ -60,6 +60,7 @@ llvm_canonicalize_cmake_booleans(
   LLVM_HAS_RTTI
   LLVM_HAS_GLOBAL_ISEL
   BUILD_SHARED_LIBS)
+llvm_expand_pseudo_components(LLVM_DYLIB_COMPONENTS_expanded "${LLVM_DYLIB_COMPONENTS}")
 configure_file(${BUILDVARIABLES_SRCPATH} ${BUILDVARIABLES_OBJPATH} @ONLY)
 
 # Set build-time environment(s).




More information about the llvm-commits mailing list