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