CMake: Forces linking of the rest of architecture targets and its

respective asm printers on MSVC.

Based on a patch by Scott Graham.

llvm-svn: 59379
This commit is contained in:
Oscar Fuentes 2008-11-15 22:51:03 +00:00
parent 42942c0bc5
commit 9e15bc331b
2 changed files with 31 additions and 10 deletions

View File

@ -38,6 +38,10 @@ set(LLVM_ALL_TARGETS
XCore XCore
) )
# List of targets whose asmprinters need to be forced to link
# into executables on some platforms (i.e. Windows):
set(LLVM_ASMPRINTERS_FORCE_LINK X86 PowerPC)
if( MSVC ) if( MSVC )
set(LLVM_TARGETS_TO_BUILD X86 set(LLVM_TARGETS_TO_BUILD X86
CACHE STRING "Semicolon-separated list of targets to build, or \"all\".") CACHE STRING "Semicolon-separated list of targets to build, or \"all\".")

View File

@ -10,19 +10,40 @@ endmacro(llvm_config executable link_components)
function(msvc_llvm_config executable link_components) function(msvc_llvm_config executable link_components)
foreach(c ${link_components}) foreach(c ${link_components})
if( c STREQUAL "jit" ) if( c STREQUAL "jit" )
set_target_properties(${executable} set(lfgs "${lfgs} /INCLUDE:_X86TargetMachineModule")
PROPERTIES
LINK_FLAGS "/INCLUDE:_X86TargetMachineModule")
endif( c STREQUAL "jit" ) endif( c STREQUAL "jit" )
list(FIND LLVM_TARGETS_TO_BUILD ${c} idx)
if( NOT idx LESS 0 )
set(lfgs "${lfgs} /INCLUDE:_${c}TargetMachineModule")
list(FIND LLVM_ASMPRINTERS_FORCE_LINK ${c} idx)
if( NOT idx LESS 0 )
set(lfgs "${lfgs} /INCLUDE:_${c}AsmPrinterForceLink")
endif()
endif()
endforeach(c) endforeach(c)
msvc_map_components_to_libraries(${link_components} LIBRARIES) msvc_map_components_to_libraries(${link_components} LIBRARIES)
target_link_libraries(${executable} ${LIBRARIES}) target_link_libraries(${executable} ${LIBRARIES})
if( lfgs )
set_target_properties(${executable}
PROPERTIES
LINK_FLAGS ${lfgs})
endif()
endfunction(msvc_llvm_config executable link_components) endfunction(msvc_llvm_config executable link_components)
function(msvc_map_components_to_libraries link_components out_libs) function(msvc_map_components_to_libraries link_components out_libs)
foreach(c ${link_components}) foreach(c ${link_components})
if( c STREQUAL "native" ) # add codegen/asmprinter
list(FIND LLVM_TARGETS_TO_BUILD ${c} idx)
if( NOT idx LESS 0 )
list(APPEND expanded_components "LLVM${c}CodeGen")
list(FIND llvm_libs "LLVM${c}AsmPrinter" asmidx)
if( NOT asmidx LESS 0 )
list(APPEND expanded_components "LLVM${c}AsmPrinter")
endif()
elseif( c STREQUAL "native" )
# TODO: we assume ARCH is X86. In this case, we must use nativecodegen # TODO: we assume ARCH is X86. In this case, we must use nativecodegen
# component instead. Do nothing, as in llvm-config script. # component instead. Do nothing, as in llvm-config script.
elseif( c STREQUAL "nativecodegen" ) elseif( c STREQUAL "nativecodegen" )
@ -33,15 +54,11 @@ function(msvc_map_components_to_libraries link_components out_libs)
elseif( c STREQUAL "engine" ) elseif( c STREQUAL "engine" )
# TODO: as we assume we are on X86, this is `jit'. # TODO: as we assume we are on X86, this is `jit'.
list(APPEND expanded_components "LLVMJIT") list(APPEND expanded_components "LLVMJIT")
elseif( c STREQUAL "X86" )
# TODO: we assume we are on X86.
list(APPEND expanded_components "LLVMX86CodeGen")
list(APPEND expanded_components "LLVMX86AsmPrinter")
elseif( c STREQUAL "all" ) elseif( c STREQUAL "all" )
list(APPEND expanded_components ${llvm_libs}) list(APPEND expanded_components ${llvm_libs})
else( c STREQUAL "native" ) else( NOT idx LESS 0 )
list(APPEND expanded_components LLVM${c}) list(APPEND expanded_components LLVM${c})
endif( c STREQUAL "native" ) endif( NOT idx LESS 0 )
endforeach(c) endforeach(c)
# We must match capitalization. # We must match capitalization.
string(TOUPPER "${llvm_libs}" capitalized_libs) string(TOUPPER "${llvm_libs}" capitalized_libs)