From 9ac47c51c59f03be1631a337ef73605a1f30a606 Mon Sep 17 00:00:00 2001
From: Oscar Fuentes <ofv@wanadoo.es>
Date: Mon, 2 Aug 2010 20:48:01 +0000
Subject: [PATCH] explicit_map_components_to_libraries now does not complain
 when there is a dependence on an LLVM target that is not included on the
 build.

When LLVM_TARGETS_TO_BUILD didn't include all the targets, the
function emitted an error like

"Library LLVMArmParser not found in list of llvm libraries."


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110060 91177308-0d34-0410-b5e6-96231b3b80d8
---
 cmake/modules/LLVMConfig.cmake | 26 +++++++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)

diff --git a/cmake/modules/LLVMConfig.cmake b/cmake/modules/LLVMConfig.cmake
index 0744b50d648..03a5c371b44 100755
--- a/cmake/modules/LLVMConfig.cmake
+++ b/cmake/modules/LLVMConfig.cmake
@@ -16,6 +16,24 @@ function(get_system_libs return_var)
 endfunction(get_system_libs)
 
 
+function(is_llvm_target_library library return_var)
+  # Sets variable `return_var' to ON if `library' corresponds to a
+  # LLVM supported target. To OFF if it doesn't.
+  set(${return_var} OFF PARENT_SCOPE)
+  string(TOUPPER "${library}" capitalized_lib)
+  string(TOUPPER "${LLVM_ALL_TARGETS}" targets)
+  foreach(t ${targets})
+    if( capitalized_lib STREQUAL "LLVM${t}CODEGEN" OR
+	capitalized_lib STREQUAL "LLVM${t}ASMPARSER" OR
+	capitalized_lib STREQUAL "LLVM${t}DISASSEMBLER" OR
+	capitalized_lib STREQUAL "LLVM${t}INFO" )
+      set(${return_var} ON PARENT_SCOPE)
+      break()
+    endif()
+  endforeach()
+endfunction(is_llvm_target_library)
+
+
 macro(llvm_config executable)
   explicit_llvm_config(${executable} ${ARGN})
 endmacro(llvm_config)
@@ -87,7 +105,13 @@ function(explicit_map_components_to_libraries out_libs)
     string(TOUPPER "${c}" capitalized)
     list(FIND capitalized_libs ${capitalized} idx)
     if( idx LESS 0 )
-      message(FATAL_ERROR "Library ${c} not found in list of llvm libraries.")
+      # The library is unkown. Maybe is an ommitted target?
+      is_llvm_target_library(${c} iltl_result)
+      if( iltl_result )
+	break()
+      else()
+	message(FATAL_ERROR "Library ${c} not found in list of llvm libraries.")
+      endif()
     endif( idx LESS 0 )
     list(GET llvm_libs ${idx} canonical_lib)
     list(REMOVE_ITEM result ${canonical_lib})