[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
GitOrigin-RevId: ebde6fc23bc0ee9d022fcd26b52bc82dfb7c8468
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a7e8444..bf9f112 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -302,13 +302,20 @@
# 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()