Thanks! Bots are happy with the reland. Thanks for taking the time to explain the object library stuff!
*From: *Chris Bieneman <chris.biene...@me.com> *Date: *Thu, May 16, 2019 at 11:24 PM *To: *Nico Weber *Cc: *cfe-commits I’ll re-land disabling if PIC is off. > > This doesn’t replace the static libraries with object libraries, it just > creates an object library target (named obj.${name}) for each static > library. That allows the objects to be referenced separately from the > archives, so we don’t have to do the -load-all/—whole-archive stuff we do > for libLLVM. > > -Chris > > On May 16, 2019, at 6:40 PM, Nico Weber <tha...@chromium.org> wrote: > > 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