[LLVM][Cygwin] Enable dynamic linking of libLLVM (#146440)

These changes allow to link everything to shared LLVM library with
MSYS2 "Cygwin" toolchain.
This commit is contained in:
Mateusz Mikuła
2025-07-02 07:30:12 +02:00
committed by GitHub
parent 984c78f27d
commit 2723a6d992
4 changed files with 6 additions and 6 deletions

View File

@@ -137,7 +137,7 @@ function(add_llvm_symbol_exports target_name export_file)
set_property(TARGET ${target_name} APPEND_STRING PROPERTY set_property(TARGET ${target_name} APPEND_STRING PROPERTY
LINK_FLAGS " -Wl,--version-script,\"${CMAKE_CURRENT_BINARY_DIR}/${native_export_file}\"") LINK_FLAGS " -Wl,--version-script,\"${CMAKE_CURRENT_BINARY_DIR}/${native_export_file}\"")
endif() endif()
elseif(WIN32) elseif(WIN32 OR CYGWIN)
set(native_export_file "${target_name}.def") set(native_export_file "${target_name}.def")
add_custom_command(OUTPUT ${native_export_file} add_custom_command(OUTPUT ${native_export_file}
@@ -153,7 +153,7 @@ function(add_llvm_symbol_exports target_name export_file)
elseif(CMAKE_CXX_SIMULATE_ID STREQUAL "MSVC") elseif(CMAKE_CXX_SIMULATE_ID STREQUAL "MSVC")
# clang in msvc mode, calling a link.exe/lld-link style linker # clang in msvc mode, calling a link.exe/lld-link style linker
set(export_file_linker_flag "-Wl,/DEF:${export_file_linker_flag}") set(export_file_linker_flag "-Wl,/DEF:${export_file_linker_flag}")
elseif(MINGW) elseif(MINGW OR CYGWIN)
# ${export_file_linker_flag}, which is the plain file name, works as is # ${export_file_linker_flag}, which is the plain file name, works as is
# when passed to the compiler driver, which then passes it on to the # when passed to the compiler driver, which then passes it on to the
# linker as an input file. # linker as an input file.
@@ -666,7 +666,7 @@ function(llvm_add_library name)
# When building shared objects for each target there are some internal APIs # When building shared objects for each target there are some internal APIs
# that are used across shared objects which we can't hide. # that are used across shared objects which we can't hide.
if (LLVM_BUILD_LLVM_DYLIB_VIS AND NOT BUILD_SHARED_LIBS AND NOT APPLE AND if (LLVM_BUILD_LLVM_DYLIB_VIS AND NOT BUILD_SHARED_LIBS AND NOT APPLE AND
(NOT (WIN32 OR CYGWIN) OR (MINGW AND CMAKE_CXX_COMPILER_ID MATCHES "Clang")) AND (NOT (WIN32 OR CYGWIN) OR ((MINGW OR CYGWIN) AND CMAKE_CXX_COMPILER_ID MATCHES "Clang")) AND
NOT (${CMAKE_SYSTEM_NAME} MATCHES "AIX") AND NOT (${CMAKE_SYSTEM_NAME} MATCHES "AIX") AND
NOT DEFINED CMAKE_CXX_VISIBILITY_PRESET) NOT DEFINED CMAKE_CXX_VISIBILITY_PRESET)

View File

@@ -465,7 +465,7 @@ if( LLVM_ENABLE_PIC )
endif() endif()
if((NOT (${CMAKE_SYSTEM_NAME} MATCHES "AIX")) AND if((NOT (${CMAKE_SYSTEM_NAME} MATCHES "AIX")) AND
(NOT (WIN32 OR CYGWIN) OR (MINGW AND CMAKE_CXX_COMPILER_ID MATCHES "Clang"))) (NOT (WIN32 OR CYGWIN) OR ((MINGW OR CYGWIN) AND CMAKE_CXX_COMPILER_ID MATCHES "Clang")))
# GCC for MinGW does nothing about -fvisibility-inlines-hidden, but warns # GCC for MinGW does nothing about -fvisibility-inlines-hidden, but warns
# about use of the attributes. As long as we don't use the attributes (to # about use of the attributes. As long as we don't use the attributes (to
# override the default) we shouldn't set the command line options either. # override the default) we shouldn't set the command line options either.

View File

@@ -133,7 +133,7 @@
#endif #endif
#if (!(defined(_WIN32) || defined(__CYGWIN__)) || \ #if (!(defined(_WIN32) || defined(__CYGWIN__)) || \
(defined(__MINGW32__) && defined(__clang__))) ((defined(__MINGW32__) || defined(__CYGWIN__)) && defined(__clang__)))
#define LLVM_LIBRARY_VISIBILITY LLVM_ATTRIBUTE_VISIBILITY_HIDDEN #define LLVM_LIBRARY_VISIBILITY LLVM_ATTRIBUTE_VISIBILITY_HIDDEN
// Clang compilers older then 15 do not support gnu style attributes on // Clang compilers older then 15 do not support gnu style attributes on
// namespaces. // namespaces.

View File

@@ -22,7 +22,7 @@ add_llvm_component_library(LLVMTarget
# When building shared objects for each target there are some internal APIs # When building shared objects for each target there are some internal APIs
# that are used across shared objects which we can't hide. # that are used across shared objects which we can't hide.
if (NOT BUILD_SHARED_LIBS AND NOT APPLE AND if (NOT BUILD_SHARED_LIBS AND NOT APPLE AND
(NOT (WIN32 OR CYGWIN) OR (MINGW AND CMAKE_CXX_COMPILER_ID MATCHES "Clang")) AND (NOT (WIN32 OR CYGWIN) OR ((MINGW OR CYGWIN) AND CMAKE_CXX_COMPILER_ID MATCHES "Clang")) AND
NOT (${CMAKE_SYSTEM_NAME} MATCHES "AIX") AND NOT (${CMAKE_SYSTEM_NAME} MATCHES "AIX") AND
NOT DEFINED CMAKE_CXX_VISIBILITY_PRESET) NOT DEFINED CMAKE_CXX_VISIBILITY_PRESET)
# Set default visibility to hidden, so we don't export all the Target classes # Set default visibility to hidden, so we don't export all the Target classes