forked from OSchip/llvm-project
[libcxxabi] Fix cmake order dependency wrt dllexporting
If LIBCXX_ENABLE_SHARED isn't explicitly set on the cmake command line, isn't set in the cache, and the libcxxabi project is configured before libcxx, then LIBCXX_ENABLE_SHARED isn't defined yet. Once the libcxx cmake project has been parsed, LIBCXX_ENABLE_SHARED would have been set to its default value of ON. This makes sure that the symbols are properly dllexported in such a configuration scenario. Differential Revision: https://reviews.llvm.org/D120982
This commit is contained in:
parent
bed3240bf7
commit
ebde6fc23b
|
@ -93,3 +93,8 @@ Build System Changes
|
|||
``{LIBCXX,LIBCXXABI,LIBUNWIND}_GCC_TOOLCHAIN`` CMake variables have been removed. Instead, please
|
||||
use the ``CMAKE_CXX_COMPILER_TARGET``, ``CMAKE_SYSROOT`` and ``CMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN``
|
||||
variables provided by CMake.
|
||||
|
||||
- When building for Windows, vendors who want to avoid dll-exporting symbols from the static libc++abi
|
||||
library should set ``LIBCXXABI_HERMETIC_STATIC_LIBRARY=ON`` when configuring CMake. The current
|
||||
behavior, which tries to guess the correct dll-export semantics based on whether we're building
|
||||
the libc++ shared library, will be removed in LLVM 16.
|
||||
|
|
|
@ -302,13 +302,20 @@ add_definitions(-D_LIBCPP_BUILDING_LIBRARY)
|
|||
|
||||
# Disable DLL annotations on Windows for static builds.
|
||||
if (WIN32 AND LIBCXXABI_ENABLE_STATIC AND NOT LIBCXXABI_ENABLE_SHARED)
|
||||
if (LIBCXX_ENABLE_SHARED AND LIBCXX_ENABLE_STATIC_ABI_LIBRARY)
|
||||
# If LIBCXX_ENABLE_SHARED isn't set (by the user on the cmake command
|
||||
# line or via a cache file), use its expected default value (enabled).
|
||||
if ((LIBCXX_ENABLE_SHARED OR NOT DEFINED LIBCXX_ENABLE_SHARED) AND LIBCXX_ENABLE_STATIC_ABI_LIBRARY)
|
||||
# Building libcxxabi statically, but intending for it to be statically
|
||||
# linked into a shared libcxx; keep dllexport enabled within libcxxabi,
|
||||
# as the symbols will need to be exported from libcxx.
|
||||
else()
|
||||
# Regular static build; disable dllexports.
|
||||
add_definitions(-D_LIBCXXABI_DISABLE_VISIBILITY_ANNOTATIONS)
|
||||
if (NOT LIBCXXABI_HERMETIC_STATIC_LIBRARY)
|
||||
# TODO: Enable this warning message as soon as we're sure this is the solution.
|
||||
# message(WARNING "Implicitly disabling dllexport on Win32 is not supported anymore. Please build with "
|
||||
# "LIBCXXABI_HERMETIC_STATIC_LIBRARY=ON instead. This will become an error in LLVM 16.")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
|
Loading…
Reference in New Issue