r360946 - Add Clang shared library with C++ exports

Nico Weber via cfe-commits cfe-commits at lists.llvm.org
Thu May 16 18:40:25 PDT 2019


To not keep the build broken over night, and since it's a small change that
should be easy to reland, I've reverted this for now in r360973.

On Thu, May 16, 2019 at 8:52 PM Nico Weber <thakis at chromium.org> wrote:

> Hello,
>
> this breaks building with -DLLVM_ENABLE_PIC=OFF. Maybe the new target
> shouldn't be build in those builds?
>
>
> Also, if I read this right, this makes static libraries for clang always
> be object libraries. Is that correct? If so, this likely makes the normal
> clang binary larger and less efficient than before: Normal static libraries
> only get referenced .o files in them loaded, while all files in object
> libraries are loaded by the linker. In theory, --gc-sections should drop
> the ones that aren't needed, but due to static initializers and so on that
> doesn't always work. (When we moved Chrome's build to GN, the thinking was
> for a long time that we'd use object libraries instead of static libraries
> everywhere. Turns out that made the binary 10% larger and slower and we had
> to paddle back.)
>
>
>
> [2523/2887] Linking CXX shared library lib/libclang_shared.so.9svn
> FAILED: lib/libclang_shared.so.9svn
> ...
> /usr/bin/ld:
> tools/clang/lib/Basic/CMakeFiles/obj.clangBasic.dir/Attributes.cpp.o:
> relocation R_X86_64_32 against
> `.rodata._ZZNR4llvm15optional_detail15OptionalStorageIiLb1EE8getValueEvE19__PRETTY_FUNCTION__'
> can not be used when making a shared object; recompile with -fPIC
> tools/clang/lib/Basic/CMakeFiles/obj.clangBasic.dir/Attributes.cpp.o:
> error adding symbols: Bad value
> collect2: error: ld returned 1 exit status
>
> On Thu, May 16, 2019 at 6:03 PM Chris Bieneman via cfe-commits <
> cfe-commits at lists.llvm.org> wrote:
>
>> 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 at lists.llvm.org
>> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20190516/fc4faaa1/attachment.html>


More information about the cfe-commits mailing list