[PATCH] D50359: Add a new library, libclang-cxx
kristina added a comment. To elaborate, consider a scenario where a customer wants to build the clang driver, `diagtool` and just for the sake of the argument `change-namespace` from extras. Clang tools do not provide nearly the same level of control as most LLVM tools, so in that scenario, you'd have to maintain your own CMakeLists.txt for clang `tools(/extra)` to neuter unwanted artifacts like clang-tidy or libclang.so (the C API re-exporter) etc. Unless I deeply misunderstand the functionality of toggles within LLVM's main build system, the only way of neutering those artifacts while still being able to use `libclang-cxx.so` would be surgery on several CMakeLists. Repository: rC Clang https://reviews.llvm.org/D50359 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D50359: Add a new library, libclang-cxx
kristina added a comment. I'm in support as long as it's a configuration option defaulting similar to LLVM's one. Should likely follow the same naming convention as LLVM, ie. `clang-shlib`. Clang has a lot of tools it ships with especially if you consider extras, I think this is one of the cases where an exception for `libClang-8.so` can be made as long as it's not a default. It would make builds of things like clang-tidy much faster without requiring a fully shared library build. Repository: rC Clang https://reviews.llvm.org/D50359 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D50359: Add a new library, libclang-cxx
lebedev.ri added a comment. > The motivation for this library is to > be used by Clang tools that use Clang's C++ api. They no longer need to > link against the individual static libraries. I would personally consider that to be a regression. It hides layering violations. Of course, in downstream one might not care. Repository: rC Clang https://reviews.llvm.org/D50359 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D50359: Add a new library, libclang-cxx
pirama added a comment. As I mentioned in the discussion, we decided to carry build rules for the proposed library in downstream. I've updated this to make it more general, and will leave it open in case there's more interest to revive it in the future. Repository: rC Clang https://reviews.llvm.org/D50359 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D50359: Add a new library, libclang-cxx
pirama updated this revision to Diff 165118. pirama added a comment. Herald added a subscriber: fedor.sergeev. Add empty source file to silence CMake warning. Support more platforms, similar to libLLVM.so Repository: rC Clang https://reviews.llvm.org/D50359 Files: CMakeLists.txt tools/CMakeLists.txt tools/libclang-cxx/CMakeLists.txt tools/libclang-cxx/libclang_cxx.cpp Index: tools/libclang-cxx/libclang_cxx.cpp === --- /dev/null +++ tools/libclang-cxx/libclang_cxx.cpp @@ -0,0 +1,8 @@ +//===- libclang_cxx.cpp - libclang_cxx Shared Library ---===// +//===--===// +// +// This file is empty and serves only the purpose of making CMake happy because +// you can't define a target with no sources. +// +//===--===// + Index: tools/libclang-cxx/CMakeLists.txt === --- /dev/null +++ tools/libclang-cxx/CMakeLists.txt @@ -0,0 +1,87 @@ +set(SOURCES + libclang_cxx.cpp + ) + +set(LIBS + clangBasic + clangCodeGen + clangDriver + clangFrontend + clangFrontendTool +) + +if (CLANG_ENABLE_ARCMT) + list(APPEND LIBS clangARCMigrate) +endif () + +if (TARGET clangTidyPlugin) + add_definitions(-DCLANG_TOOL_EXTRA_BUILD) + list(APPEND LIBS clangTidyPlugin) + list(APPEND LIBS clangIncludeFixerPlugin) + if(LLVM_ENABLE_MODULES) +list(APPEND LLVM_COMPILE_FLAGS "-fmodules-ignore-macro=CLANG_TOOL_EXTRA_BUILD") + endif() +endif () + +find_library(DL_LIBRARY_PATH dl) +if (DL_LIBRARY_PATH) + list(APPEND LIBS dl) +endif() + +if( LLVM_ENABLE_PIC ) + set(ENABLE_SHARED SHARED) +endif() + +if(NOT LLVM_ENABLE_PIC AND NOT WIN32) + set(ENABLE_STATIC STATIC) +endif() + +if(WIN32) + set(output_name "libclang_cxx") +else() + set(output_name "clang_cxx") +endif() + +if(("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux") OR (MINGW) OR (HAIKU) +OR ("${CMAKE_SYSTEM_NAME}" STREQUAL "FreeBSD") +OR ("${CMAKE_SYSTEM_NAME}" STREQUAL "OpenBSD") +OR ("${CMAKE_SYSTEM_NAME}" STREQUAL "Fuchsia") +OR ("${CMAKE_SYSTEM_NAME}" STREQUAL "DragonFly") +OR ("${CMAKE_SYSTEM_NAME}" STREQUAL "SunOS")) # FIXME: It should be "GNU ld for elf" + set(LIBS -Wl,--whole-archive ${LIBS} -Wl,--no-whole-archive) +elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin") + set(LIBS -Wl,-all_load ${LIBS}) +endif() + +add_clang_library(libclang_cxx ${ENABLE_SHARED} ${ENABLE_STATIC} + OUTPUT_NAME ${output_name} + ${SOURCES} + LINK_LIBS + ${LIBS} + ) + +if(ENABLE_SHARED) + if(WIN32) +set_target_properties(libclang_cxx + PROPERTIES + VERSION ${LIBCLANG_LIBRARY_VERSION} + DEFINE_SYMBOL _CINDEX_LIB_) + elseif(APPLE) + set(LIBCLANG_CXX_LINK_FLAGS " -Wl,-compatibility_version -Wl,1") + set(LIBCLANG_CXX_LINK_FLAGS "${LIBCLANG_CXX_LINK_FLAGS} -Wl,-current_version -Wl,${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}") + +set_property(TARGET libclang_cxx APPEND_STRING PROPERTY +LINK_FLAGS ${LIBCLANG_CXX_LINK_FLAGS}) + else() +set_target_properties(libclang_cxx + PROPERTIES + VERSION ${LIBCLANG_LIBRARY_VERSION} + DEFINE_SYMBOL _CINDEX_LIB_) +# FIXME: _CINDEX_LIB_ affects dllexport/dllimport on Win32. +if(LLVM_ENABLE_MODULES AND NOT WIN32) + target_compile_options(libclang_cxx PRIVATE +"-fmodules-ignore-macro=_CINDEX_LIB_" +) +endif() + endif() +endif() Index: tools/CMakeLists.txt === --- tools/CMakeLists.txt +++ tools/CMakeLists.txt @@ -35,3 +35,4 @@ # libclang may require clang-tidy in clang-tools-extra. add_clang_subdirectory(libclang) +add_clang_subdirectory(libclang-cxx) Index: CMakeLists.txt === --- CMakeLists.txt +++ CMakeLists.txt @@ -422,7 +422,7 @@ "Major version number that will be appended to the clang executable name") set(LIBCLANG_LIBRARY_VERSION "${CLANG_VERSION_MAJOR}" CACHE STRING -"Major version number that will be appended to the libclang library") +"Major version number that will be appended to the libclang, libclang_cxx libraries") mark_as_advanced(CLANG_EXECUTABLE_VERSION LIBCLANG_LIBRARY_VERSION) option(CLANG_INCLUDE_TESTS ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D50359: Add a new library, libclang-cxx
pirama added a comment. This implements the new library proposed in http://lists.llvm.org/pipermail/cfe-dev/2018-August/058736.html. Repository: rC Clang https://reviews.llvm.org/D50359 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D50359: Add a new library, libclang-cxx
pirama created this revision. Herald added a subscriber: mgorny. The current libclang.so exports only the symbols required for the stable C api. This is opposed to libLLVM.so, which exports all the symbols from the LLVM libraries, including those from the C++ API. This patch adds libclang-cxx.so that is similar to libLLVM.so and exports all symbols from the clang libraries. The motivation for this library is to be used by Clang tools that use Clang's C++ api. They no longer need to link against the individual static libraries. Repository: rC Clang https://reviews.llvm.org/D50359 Files: CMakeLists.txt tools/CMakeLists.txt tools/libclang-cxx/CMakeLists.txt Index: tools/libclang-cxx/CMakeLists.txt === --- /dev/null +++ tools/libclang-cxx/CMakeLists.txt @@ -0,0 +1,74 @@ +set(LIBS + clangBasic + clangCodeGen + clangDriver + clangFrontend + clangFrontendTool +) + +if (CLANG_ENABLE_ARCMT) + list(APPEND LIBS clangARCMigrate) +endif () + +if (TARGET clangTidyPlugin) + add_definitions(-DCLANG_TOOL_EXTRA_BUILD) + list(APPEND LIBS clangTidyPlugin) + list(APPEND LIBS clangIncludeFixerPlugin) + if(LLVM_ENABLE_MODULES) +list(APPEND LLVM_COMPILE_FLAGS "-fmodules-ignore-macro=CLANG_TOOL_EXTRA_BUILD") + endif() +endif () + +find_library(DL_LIBRARY_PATH dl) +if (DL_LIBRARY_PATH) + list(APPEND LIBS dl) +endif() + +if( LLVM_ENABLE_PIC ) + set(ENABLE_SHARED SHARED) +endif() + +if(NOT LLVM_ENABLE_PIC AND NOT WIN32) + set(ENABLE_STATIC STATIC) +endif() + +if(WIN32) + set(output_name "libclang_cxx") +else() + set(output_name "clang_cxx") +endif() + +set(LIBS -Wl,--whole-archive ${LIBS} -Wl,--no-whole-archive) + +add_clang_library(libclang_cxx ${ENABLE_SHARED} ${ENABLE_STATIC} + OUTPUT_NAME ${output_name} + + LINK_LIBS + ${LIBS} + ) + +if(ENABLE_SHARED) + if(WIN32) +set_target_properties(libclang_cxx + PROPERTIES + VERSION ${LIBCLANG_LIBRARY_VERSION} + DEFINE_SYMBOL _CINDEX_LIB_) + elseif(APPLE) + set(LIBCLANG_CXX_LINK_FLAGS " -Wl,-compatibility_version -Wl,1") + set(LIBCLANG_CXX_LINK_FLAGS "${LIBCLANG_CXX_LINK_FLAGS} -Wl,-current_version -Wl,${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}") + +set_property(TARGET libclang_cxx APPEND_STRING PROPERTY +LINK_FLAGS ${LIBCLANG_CXX_LINK_FLAGS}) + else() +set_target_properties(libclang_cxx + PROPERTIES + VERSION ${LIBCLANG_LIBRARY_VERSION} + DEFINE_SYMBOL _CINDEX_LIB_) +# FIXME: _CINDEX_LIB_ affects dllexport/dllimport on Win32. +if(LLVM_ENABLE_MODULES AND NOT WIN32) + target_compile_options(libclang_cxx PRIVATE +"-fmodules-ignore-macro=_CINDEX_LIB_" +) +endif() + endif() +endif() Index: tools/CMakeLists.txt === --- tools/CMakeLists.txt +++ tools/CMakeLists.txt @@ -35,3 +35,4 @@ # libclang may require clang-tidy in clang-tools-extra. add_clang_subdirectory(libclang) +add_clang_subdirectory(libclang-cxx) Index: CMakeLists.txt === --- CMakeLists.txt +++ CMakeLists.txt @@ -431,7 +431,7 @@ "Major version number that will be appended to the clang executable name") set(LIBCLANG_LIBRARY_VERSION "${CLANG_VERSION_MAJOR}" CACHE STRING -"Major version number that will be appended to the libclang library") +"Major version number that will be appended to the libclang, libclang_cxx libraries") mark_as_advanced(CLANG_EXECUTABLE_VERSION LIBCLANG_LIBRARY_VERSION) option(CLANG_INCLUDE_TESTS ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits