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 <tha...@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@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@lists.llvm.org >> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >> >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits