Fixed the build of Clang's unit tests on MinGW. Also removed some
authorOscar Fuentes <ofv@wanadoo.es>
Tue, 29 Mar 2011 20:51:08 +0000 (20:51 +0000)
committerOscar Fuentes <ofv@wanadoo.es>
Tue, 29 Mar 2011 20:51:08 +0000 (20:51 +0000)
unnecesary conditionals and introduced a new convenience function.

The problem was that the list of libraries for Clang's unit tests was
<clang libraries> <system libraries> <llvm libraries>. As the llvm
libraries references symbols defined on the system libraries, those
were reported as undefined.

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

cmake/modules/AddLLVM.cmake
cmake/modules/LLVMConfig.cmake

index f0dc106d3ab5eb4ef7fc293edf00ab5d48e2eb51..df739b411995bb45bb5e3ff322ab940088790419 100755 (executable)
@@ -11,10 +11,12 @@ macro(add_llvm_library name)
 
   if( BUILD_SHARED_LIBS )
     llvm_config( ${name} ${LLVM_LINK_COMPONENTS} )
-    get_system_libs(sl)
-    target_link_libraries( ${name} ${sl} )
   endif()
 
+  # Ensure that the system libraries always comes last on the
+  # list. Without this, linking the unit tests on MinGW fails.
+  link_system_libs( ${name} )
+
   install(TARGETS ${name}
     LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
     ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX})
@@ -47,8 +49,7 @@ ${name} ignored.")
     set_target_properties( ${name} PROPERTIES PREFIX "" )
 
     llvm_config( ${name} ${LLVM_LINK_COMPONENTS} )
-    get_system_libs(sl)
-    target_link_libraries( ${name} ${sl} )
+    link_system_libs( ${name} )
 
     if (APPLE)
       # Darwin-specific linker flags for loadable modules.
@@ -73,21 +74,12 @@ macro(add_llvm_executable name)
     add_executable(${name} ${ALL_FILES})
   endif()
   set(EXCLUDE_FROM_ALL OFF)
-  if( LLVM_USED_LIBS )
-    foreach(lib ${LLVM_USED_LIBS})
-      target_link_libraries( ${name} ${lib} )
-    endforeach(lib)
-  endif( LLVM_USED_LIBS )
-  if( LLVM_LINK_COMPONENTS )
-    llvm_config(${name} ${LLVM_LINK_COMPONENTS})
-  endif( LLVM_LINK_COMPONENTS )
+  target_link_libraries( ${name} ${LLVM_USED_LIBS} )
+  llvm_config( ${name} ${LLVM_LINK_COMPONENTS} )
   if( LLVM_COMMON_DEPENDS )
     add_dependencies( ${name} ${LLVM_COMMON_DEPENDS} )
   endif( LLVM_COMMON_DEPENDS )
-  get_system_libs(llvm_system_libs)
-  if( llvm_system_libs )
-    target_link_libraries(${name} ${llvm_system_libs})
-  endif()
+  link_system_libs( ${name} )
 endmacro(add_llvm_executable name)
 
 
index fd1cfa8690e5faddb8670a831650245f71ddcaec..bd6a7a2c55356f42feea3f3c4f144d610669f12a 100755 (executable)
@@ -16,6 +16,12 @@ function(get_system_libs return_var)
 endfunction(get_system_libs)
 
 
+function(link_system_libs target)
+  get_system_libs(llvm_system_libs)
+  target_link_libraries(${target} ${llvm_system_libs})
+endfunction(link_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.