]> granicus.if.org Git - clang/commitdiff
[CMake] Clang: Don't use object libraries with Xcode
authorJordan Rose <jordan_rose@apple.com>
Fri, 4 Oct 2019 18:17:58 +0000 (18:17 +0000)
committerJordan Rose <jordan_rose@apple.com>
Fri, 4 Oct 2019 18:17:58 +0000 (18:17 +0000)
Undoes some of the effects of r360946 when using the Xcode CMake
generator---it doesn't handle object libraries correctly at all.
Attempts to still honor BUILD_SHARED_LIBS for Xcode, but I didn't
actually test it. Should have no effect on non-Xcode generators.

https://reviews.llvm.org/D68430

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

cmake/modules/AddClang.cmake
tools/clang-shlib/CMakeLists.txt

index cbd618e18afba196694601b459603d4f4272ec50..5a1b5cd03b53338aef03743df76d642d48f97386 100644 (file)
@@ -86,9 +86,13 @@ macro(add_clang_library name)
     # llvm_add_library ignores BUILD_SHARED_LIBS if STATIC is explicitly set,
     # so we need to handle it here.
     if(BUILD_SHARED_LIBS)
-      set(LIBTYPE SHARED OBJECT)
+      set(LIBTYPE SHARED)
     else()
-      set(LIBTYPE STATIC OBJECT)
+      set(LIBTYPE STATIC)
+    endif()
+    if(NOT XCODE)
+      # The Xcode generator doesn't handle object libraries correctly.
+      list(APPEND LIBTYPE OBJECT)
     endif()
     set_property(GLOBAL APPEND PROPERTY CLANG_STATIC_LIBS ${name})
   endif()
index 4e9e8c1fa3b00ca9015bb998a4fde85d555f8598..a0fc8f6bfbdeebedc97f1ac8c25320af78a540ce 100644 (file)
@@ -6,7 +6,13 @@ endif()
 get_property(clang_libs GLOBAL PROPERTY CLANG_STATIC_LIBS)
 
 foreach (lib ${clang_libs})
-  list(APPEND _OBJECTS $<TARGET_OBJECTS:obj.${lib}>)
+  if(XCODE)
+    # Xcode doesn't support object libraries, so we have to trick it into
+    # linking the static libraries instead.
+    list(APPEND _DEPS "-force_load" ${lib})
+  else()
+    list(APPEND _OBJECTS $<TARGET_OBJECTS:obj.${lib}>)
+  endif()
   list(APPEND _DEPS $<TARGET_PROPERTY:${lib},INTERFACE_LINK_LIBRARIES>)
   list(APPEND _DEPS $<TARGET_PROPERTY:${lib},LINK_LIBRARIES>)
 endforeach ()