Author: cbieneman
Date: Thu May 16 21:20:01 2019
New Revision: 360985

URL: http://llvm.org/viewvc/llvm-project?rev=360985&view=rev
Log:
Re-land: Add Clang shared library with C++ exports

Summary:
This patch adds a libClang_shared library on *nix systems which exports the 
entire C++ API. In order to support this on Windows we should really refactor 
llvm-shlib and share code between the two.

This also uses a slightly different method for generating the shared library, 
which I should back-port to llvm-shlib. Instead of linking the static archives 
and passing linker flags to force loading the whole libraries, this patch 
creates object libraries for every library (which has no cost in the build 
system), and link the object libraries.

Added:
    cfe/trunk/tools/clang-shlib/
    cfe/trunk/tools/clang-shlib/CMakeLists.txt
    cfe/trunk/tools/clang-shlib/clang-shlib.cpp
Modified:
    cfe/trunk/cmake/modules/AddClang.cmake
    cfe/trunk/tools/CMakeLists.txt

Modified: cfe/trunk/cmake/modules/AddClang.cmake
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/cmake/modules/AddClang.cmake?rev=360985&r1=360984&r2=360985&view=diff
==============================================================================
--- cfe/trunk/cmake/modules/AddClang.cmake (original)
+++ cfe/trunk/cmake/modules/AddClang.cmake Thu May 16 21:20:01 2019
@@ -81,9 +81,12 @@ macro(add_clang_library name)
       )
   endif()
   if(ARG_SHARED)
-    set(ARG_ENABLE_SHARED SHARED)
+    set(LIBTYPE SHARED)
+  else()
+    set(LIBTYPE STATIC OBJECT)
+    set_property(GLOBAL APPEND PROPERTY CLANG_STATIC_LIBS ${name})
   endif()
-  llvm_add_library(${name} ${ARG_ENABLE_SHARED} ${ARG_UNPARSED_ARGUMENTS} 
${srcs})
+  llvm_add_library(${name} ${LIBTYPE} ${ARG_UNPARSED_ARGUMENTS} ${srcs})
 
   if(TARGET ${name})
     target_link_libraries(${name} INTERFACE ${LLVM_COMMON_LIBS})

Modified: cfe/trunk/tools/CMakeLists.txt
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/CMakeLists.txt?rev=360985&r1=360984&r2=360985&view=diff
==============================================================================
--- cfe/trunk/tools/CMakeLists.txt (original)
+++ cfe/trunk/tools/CMakeLists.txt Thu May 16 21:20:01 2019
@@ -13,6 +13,9 @@ add_clang_subdirectory(c-index-test)
 
 add_clang_subdirectory(clang-rename)
 add_clang_subdirectory(clang-refactor)
+if(UNIX)
+  add_clang_subdirectory(clang-shlib)
+endif()
 
 if(CLANG_ENABLE_ARCMT)
   add_clang_subdirectory(arcmt-test)

Added: cfe/trunk/tools/clang-shlib/CMakeLists.txt
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/clang-shlib/CMakeLists.txt?rev=360985&view=auto
==============================================================================
--- cfe/trunk/tools/clang-shlib/CMakeLists.txt (added)
+++ cfe/trunk/tools/clang-shlib/CMakeLists.txt Thu May 16 21:20:01 2019
@@ -0,0 +1,18 @@
+# Building libclang_shared.so fails if LLVM_ENABLE_PIC=Off
+if (NOT LLVM_ENABLE_PIC)
+  return()
+endif()
+
+get_property(clang_libs GLOBAL PROPERTY CLANG_STATIC_LIBS)
+
+foreach (lib ${clang_libs})
+  list(APPEND _OBJECTS $<TARGET_OBJECTS:obj.${lib}>)
+  list(APPEND _DEPS $<TARGET_PROPERTY:${lib},INTERFACE_LINK_LIBRARIES>)
+endforeach ()
+
+add_clang_library(clang_shared
+                  SHARED
+                  clang-shlib.cpp
+                  ${_OBJECTS}
+                  LINK_LIBS
+                  ${_DEPS})

Added: cfe/trunk/tools/clang-shlib/clang-shlib.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/clang-shlib/clang-shlib.cpp?rev=360985&view=auto
==============================================================================
--- cfe/trunk/tools/clang-shlib/clang-shlib.cpp (added)
+++ cfe/trunk/tools/clang-shlib/clang-shlib.cpp Thu May 16 21:20:01 2019
@@ -0,0 +1 @@
+// Intentionally empty source file to make CMake happy


_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to