diff --git a/clang/tools/libclang/CMakeLists.txt b/clang/tools/libclang/CMakeLists.txt index ac7a9a8db37c0..852c9d10ccedd 100644 --- a/clang/tools/libclang/CMakeLists.txt +++ b/clang/tools/libclang/CMakeLists.txt @@ -157,15 +157,22 @@ if(ENABLE_STATIC) endif() if(ENABLE_SHARED) - if(WIN32) + if(WIN32 OR CYGWIN) set_target_properties(libclang PROPERTIES VERSION ${LIBCLANG_LIBRARY_VERSION} DEFINE_SYMBOL _CINDEX_LIB_) - # Avoid declaring clang c++ symbols that are statically linked into libclang as dllimport'ed. - # If llvm/libclang-cpp dll is also being built for windows clang c++ symbols will still be - # implicitly be exported from libclang. - target_compile_definitions(libclang PRIVATE CLANG_BUILD_STATIC) + if (CYGWIN) + # We need cygclang.dll in build-tree additional to installed-tree for testsuite of python bindings. + set(plain_name "$/$clang$") + add_custom_command(TARGET libclang POST_BUILD + COMMAND ${CMAKE_COMMAND} -E create_symlink "$" "${plain_name}") + install(FILES "${plain_name}" DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT libclang) + endif() + # Avoid declaring clang c++ symbols that are statically linked into libclang as dllimport'ed. + # If llvm/libclang-cpp dll is also being built for windows clang c++ symbols will still be + # implicitly be exported from libclang. + target_compile_definitions(libclang PRIVATE CLANG_BUILD_STATIC) elseif(APPLE) set(LIBCLANG_LINK_FLAGS " -Wl,-compatibility_version -Wl,1") set(LIBCLANG_LINK_FLAGS "${LIBCLANG_LINK_FLAGS} -Wl,-current_version -Wl,${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}") diff --git a/llvm/cmake/modules/AddLLVM.cmake b/llvm/cmake/modules/AddLLVM.cmake index 83772ed8d2b13..60ec7ea178e66 100644 --- a/llvm/cmake/modules/AddLLVM.cmake +++ b/llvm/cmake/modules/AddLLVM.cmake @@ -750,12 +750,20 @@ function(llvm_add_library name) set(library_name ${output_name}-${LLVM_VERSION_MAJOR}${LLVM_VERSION_SUFFIX}) set(api_name ${output_name}-${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}${LLVM_VERSION_SUFFIX}) set_target_properties(${name} PROPERTIES OUTPUT_NAME ${library_name}) - if(UNIX AND NOT CYGWIN) + if(UNIX) llvm_install_library_symlink(${api_name} ${library_name} SHARED COMPONENT ${name}) llvm_install_library_symlink(${output_name} ${library_name} SHARED COMPONENT ${name}) endif() + elseif(CYGWIN) + get_target_property(output_name ${name} OUTPUT_NAME) + if(${output_name} STREQUAL "output_name-NOTFOUND") + set(output_name ${name}) + endif() + set(library_name ${output_name}-${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}${LLVM_VERSION_SUFFIX}) + llvm_install_library_symlink(${output_name} ${library_name} SHARED + COMPONENT ${name}) endif() endif() diff --git a/llvm/tools/llvm-shlib/CMakeLists.txt b/llvm/tools/llvm-shlib/CMakeLists.txt index 9a2015f61f2bf..14a0957f67138 100644 --- a/llvm/tools/llvm-shlib/CMakeLists.txt +++ b/llvm/tools/llvm-shlib/CMakeLists.txt @@ -33,8 +33,12 @@ if(LLVM_BUILD_LLVM_DYLIB) if (LLVM_LINK_LLVM_DYLIB) set(INSTALL_WITH_TOOLCHAIN INSTALL_WITH_TOOLCHAIN) endif() - if (WIN32 OR CYGWIN) + if (WIN32) add_llvm_library(LLVM SHARED DISABLE_LLVM_LINK_LLVM_DYLIB SONAME ${INSTALL_WITH_TOOLCHAIN} ${SOURCES}) + elseif(CYGWIN) + add_llvm_library(LLVM SHARED DISABLE_LLVM_LINK_LLVM_DYLIB SONAME ${INSTALL_WITH_TOOLCHAIN} ${SOURCES}) + llvm_install_library_symlink(LLVM-${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}${LLVM_VERSION_SUFFIX} $ SHARED FULL_DEST COMPONENT LLVM) + llvm_install_library_symlink(LLVM $ IMPORT FULL_DEST COMPONENT LLVM) else() add_llvm_library(LLVM SHARED DISABLE_LLVM_LINK_LLVM_DYLIB OUTPUT_NAME LLVM ${INSTALL_WITH_TOOLCHAIN} ${SOURCES}) # Add symlink for backwards compatibility with old library name