summaryrefslogtreecommitdiffstats
path: root/llvm/cmake/modules
diff options
context:
space:
mode:
authorDaniel Sanders <daniel_l_sanders@apple.com>2019-07-19 22:46:47 +0000
committerDaniel Sanders <daniel_l_sanders@apple.com>2019-07-19 22:46:47 +0000
commit578e8fa8337dd203f4c450bc7100bb40652ca429 (patch)
treeeae4f04d170036d74bf815adb7d09fed2c9d32c6 /llvm/cmake/modules
parentf3bfb85bcead8a53702e620f650a768f38ff6771 (diff)
downloadbcm5719-llvm-578e8fa8337dd203f4c450bc7100bb40652ca429.tar.gz
bcm5719-llvm-578e8fa8337dd203f4c450bc7100bb40652ca429.zip
Re-commit: r366610 and r366612: Expand pseudo-components before embedding in llvm-config
There were two main problems: * The 'nativecodegen' pseudo-component was unconditionally adding ${native_tgt}CodeGen even though it conditionally added ${native_tgt}Info and ${native_tgt}Desc. This has been fixed by making ${native_tgt}CodeGen conditional too * The 'all' pseudo-component was causing library names like LLVMLLVMDemangle as the expansion was to a library name and not a component. There doesn't seem to be a list of available components anywhere so this has been fixed by moving the expansion of 'all' back where it was before. This manifested in different ways on different builders but it was the same root cause llvm-svn: 366622
Diffstat (limited to 'llvm/cmake/modules')
-rw-r--r--llvm/cmake/modules/LLVM-Config.cmake161
1 files changed, 89 insertions, 72 deletions
diff --git a/llvm/cmake/modules/LLVM-Config.cmake b/llvm/cmake/modules/LLVM-Config.cmake
index be28ca4f052..823c79d667c 100644
--- a/llvm/cmake/modules/LLVM-Config.cmake
+++ b/llvm/cmake/modules/LLVM-Config.cmake
@@ -117,140 +117,157 @@ function(llvm_map_components_to_libraries OUT_VAR)
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. Also does not cover 'all' as we only have a list of the libnames
+# 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()
- 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")
+ 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${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
+ elseif( c STREQUAL "all" )
+ list(APPEND expanded_components ${LLVM_AVAILABLE_LIBS})
else( NOT idx LESS 0 )
# Canonize the component name:
string(TOUPPER "${c}" capitalized)
@@ -272,7 +289,7 @@ function(llvm_map_components_to_libnames out_libs)
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)
OpenPOWER on IntegriCloud