CMake: Forces linking of the rest of architecture targets and its
authorOscar Fuentes <ofv@wanadoo.es>
Sat, 15 Nov 2008 22:51:03 +0000 (22:51 +0000)
committerOscar Fuentes <ofv@wanadoo.es>
Sat, 15 Nov 2008 22:51:03 +0000 (22:51 +0000)
respective asm printers on MSVC.

Based on a patch by Scott Graham.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@59379 91177308-0d34-0410-b5e6-96231b3b80d8

CMakeLists.txt
cmake/modules/LLVMConfig.cmake

index 05c5895796953d9ec96255375089e33b80f203c7..6ef79b91deb6e2f1c37030ce03d5ff68a6a6b70d 100644 (file)
@@ -38,6 +38,10 @@ set(LLVM_ALL_TARGETS
   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 )
   set(LLVM_TARGETS_TO_BUILD X86
     CACHE STRING "Semicolon-separated list of targets to build, or \"all\".")
index 813c0f0d50a84576a1fd03d4ffd5d57357e37a37..3d5e3bc55a4659c2784d2df0378acf40514d0c00 100755 (executable)
@@ -10,19 +10,40 @@ endmacro(llvm_config executable link_components)
 function(msvc_llvm_config executable link_components)
   foreach(c ${link_components})
     if( c STREQUAL "jit" )
-      set_target_properties(${executable}
-       PROPERTIES
-       LINK_FLAGS "/INCLUDE:_X86TargetMachineModule")
+      set(lfgs "${lfgs} /INCLUDE:_X86TargetMachineModule")
     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)
+
   msvc_map_components_to_libraries(${link_components} LIBRARIES)
   target_link_libraries(${executable} ${LIBRARIES})
+
+  if( lfgs )
+    set_target_properties(${executable}
+      PROPERTIES
+      LINK_FLAGS ${lfgs})
+  endif()
 endfunction(msvc_llvm_config executable link_components)
 
 
 function(msvc_map_components_to_libraries link_components out_libs)
   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
       # component instead. Do nothing, as in llvm-config script.
     elseif( c STREQUAL "nativecodegen" )
@@ -33,15 +54,11 @@ function(msvc_map_components_to_libraries link_components out_libs)
     elseif( c STREQUAL "engine" )
       # TODO: as we assume we are on X86, this is `jit'.
       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" )
       list(APPEND expanded_components ${llvm_libs})
-    else( c STREQUAL "native" )
+    else( NOT idx LESS 0 )
       list(APPEND expanded_components LLVM${c})
-    endif( c STREQUAL "native" )
+    endif( NOT idx LESS 0 )
   endforeach(c)
   # We must match capitalization.
   string(TOUPPER "${llvm_libs}" capitalized_libs)