set( ${OUT_VAR} ${result} ${sys_result} PARENT_SCOPE )
endfunction(llvm_map_components_to_libraries)
-# 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)
+# 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:
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 "${c}CodeGen")
+ list(APPEND expanded_components "LLVM${c}CodeGen")
else()
if( TARGET LLVM${c} )
- list(APPEND expanded_components "${c}")
+ list(APPEND expanded_components "LLVM${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")
+ list(APPEND expanded_components "LLVM${c}AsmParser")
+ endif()
+ if( TARGET LLVM${c}AsmPrinter )
+ list(APPEND expanded_components "LLVM${c}AsmPrinter")
endif()
if( TARGET LLVM${c}Desc )
- list(APPEND expanded_components "${c}Desc")
+ list(APPEND expanded_components "LLVM${c}Desc")
endif()
if( TARGET LLVM${c}Disassembler )
- list(APPEND expanded_components "${c}Disassembler")
+ list(APPEND expanded_components "LLVM${c}Disassembler")
endif()
if( TARGET LLVM${c}Info )
- list(APPEND expanded_components "${c}Info")
+ list(APPEND expanded_components "LLVM${c}Info")
endif()
if( TARGET LLVM${c}Utils )
- list(APPEND expanded_components "${c}Utils")
+ list(APPEND expanded_components "LLVM${c}Utils")
endif()
+ elseif( c STREQUAL "native" )
+ # already processed
elseif( c STREQUAL "nativecodegen" )
- if( TARGET LLVM${LLVM_NATIVE_ARCH}CodeGen )
- list(APPEND expanded_components "${LLVM_NATIVE_ARCH}CodeGen")
- endif()
+ list(APPEND expanded_components "LLVM${LLVM_NATIVE_ARCH}CodeGen")
if( TARGET LLVM${LLVM_NATIVE_ARCH}Desc )
- list(APPEND expanded_components "${LLVM_NATIVE_ARCH}Desc")
+ list(APPEND expanded_components "LLVM${LLVM_NATIVE_ARCH}Desc")
endif()
if( TARGET LLVM${LLVM_NATIVE_ARCH}Info )
- list(APPEND expanded_components "${LLVM_NATIVE_ARCH}Info")
+ list(APPEND expanded_components "LLVM${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 "${t}CodeGen")
+ list(APPEND expanded_components "LLVM${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 "${t}AsmPrinter")
+ list(APPEND expanded_components "LLVM${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 "${t}AsmParser")
+ list(APPEND expanded_components "LLVM${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 "${t}Desc")
+ list(APPEND expanded_components "LLVM${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 "${t}Disassembler")
+ list(APPEND expanded_components "LLVM${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 "${t}Info")
+ list(APPEND expanded_components "LLVM${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)
list(GET LLVM_AVAILABLE_LIBS ${lib_idx} canonical_lib)
list(APPEND expanded_components ${canonical_lib})
endif( lib_idx LESS 0 )
- endif( c STREQUAL "native" )
+ endif( NOT idx LESS 0 )
endforeach(c)
set(${out_libs} ${expanded_components} PARENT_SCOPE)