Author: cbieneman Date: Thu May 16 15:06:07 2019 New Revision: 360946 URL: http://llvm.org/viewvc/llvm-project?rev=360946&view=rev Log: 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. Reviewers: tstellar, winksaville Subscribers: mgorny, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D61909 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=360946&r1=360945&r2=360946&view=diff ============================================================================== --- cfe/trunk/cmake/modules/AddClang.cmake (original) +++ cfe/trunk/cmake/modules/AddClang.cmake Thu May 16 15:06:07 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=360946&r1=360945&r2=360946&view=diff ============================================================================== --- cfe/trunk/tools/CMakeLists.txt (original) +++ cfe/trunk/tools/CMakeLists.txt Thu May 16 15:06:07 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=360946&view=auto ============================================================================== --- cfe/trunk/tools/clang-shlib/CMakeLists.txt (added) +++ cfe/trunk/tools/clang-shlib/CMakeLists.txt Thu May 16 15:06:07 2019 @@ -0,0 +1,13 @@ +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=360946&view=auto ============================================================================== --- cfe/trunk/tools/clang-shlib/clang-shlib.cpp (added) +++ cfe/trunk/tools/clang-shlib/clang-shlib.cpp Thu May 16 15:06:07 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