option(LIBCXX_CONFIGURE_IDE "Configure libcxx for use within an IDE"
${LIBCXX_CONFIGURE_IDE_DEFAULT})
+set(LIBCXX_HERMETIC_STATIC_LIBRARY_DEFAULT OFF)
+if (WIN32)
+ set(LIBCXX_HERMETIC_STATIC_LIBRARY_DEFAULT ON)
+endif()
option(LIBCXX_HERMETIC_STATIC_LIBRARY
- "Do not export any symbols from the static library." OFF)
+ "Do not export any symbols from the static library." ${LIBCXX_HERMETIC_STATIC_LIBRARY_DEFAULT})
#===============================================================================
# Check option configurations
append_flags_if_supported(CXX_STATIC_LIBRARY_FLAGS -fvisibility-global-new-delete-hidden)
endif()
target_compile_options(cxx_static PRIVATE ${CXX_STATIC_LIBRARY_FLAGS})
- target_compile_definitions(cxx_static PRIVATE _LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS)
+ # _LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS can be defined in __config_site
+ # too. Define it in the same way here, to avoid redefinition conflicts.
+ target_compile_definitions(cxx_static PRIVATE _LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS=)
endif()
list(APPEND LIBCXX_BUILD_TARGETS "cxx_static")
// directives in clang-cl builds.
// RUN: llvm-readobj --coff-directives "%{lib}/libc++.lib" | not grep -i "export:" > /dev/null
-
-// It's a known issue, that when building a shared library at the same time
-// as the static library, the generated static library does contain dllexport
-// directives.
-// XFAIL: windows-dll
// directives in MinGW builds.
// RUN: llvm-readobj --coff-directives "%{lib}/libc++.a" | not grep -i "export:" > /dev/null
-
-// It's a known issue, that when building a shared library at the same time
-// as the static library, the generated static library does contain dllexport
-// directives.
-// XFAIL: windows-dll
set(LIBCXXABI_LIBCXX_INCLUDES "" CACHE PATH
"Specify path to libc++ includes.")
+set(LIBCXXABI_HERMETIC_STATIC_LIBRARY_DEFAULT OFF)
+if (WIN32)
+ set(LIBCXXABI_HERMETIC_STATIC_LIBRARY_DEFAULT ON)
+endif()
option(LIBCXXABI_HERMETIC_STATIC_LIBRARY
- "Do not export any symbols from the static library." OFF)
+ "Do not export any symbols from the static library." ${LIBCXXABI_HERMETIC_STATIC_LIBRARY_DEFAULT})
set(LIBCXXABI_TEST_CONFIG "${CMAKE_CURRENT_SOURCE_DIR}/test/lit.site.cfg.in" CACHE STRING
"The path to the Lit testing configuration to use when running the tests.
# it is being built as part of libcxx.
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 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()
-
add_compile_flags_if_supported(-Werror=return-type)
# Get warning flags
if (LIBCXXABI_ENABLE_NEW_DELETE_DEFINITIONS)
target_add_compile_flags_if_supported(cxxabi_static_objects PRIVATE -fvisibility-global-new-delete-hidden)
endif()
+ # _LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS can be defined in libcxx's
+ # __config_site too. Define it in the same way here, to avoid redefinition
+ # conflicts.
target_compile_definitions(cxxabi_static_objects
PRIVATE
_LIBCXXABI_DISABLE_VISIBILITY_ANNOTATIONS
- _LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS)
+ _LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS=)
endif()
if (LIBCXXABI_ENABLE_STATIC)
message(FATAL_ERROR "libunwind CET support is not available for MSVC!")
endif()
+if (WIN32)
+ set(LIBUNWIND_DEFAULT_HIDE_SYMBOLS TRUE)
+else()
+ set(LIBUNWIND_DEFAULT_HIDE_SYMBOLS FALSE)
+endif()
option(LIBUNWIND_HIDE_SYMBOLS
- "Do not export any symbols from the static library." OFF)
+ "Do not export any symbols from the static library." ${LIBUNWIND_DEFAULT_HIDE_SYMBOLS})
#===============================================================================
# Configure System
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
endif()
-# Disable DLL annotations on Windows for static builds.
-if (WIN32 AND LIBUNWIND_ENABLE_STATIC AND NOT LIBUNWIND_ENABLE_SHARED)
- add_definitions(-D_LIBUNWIND_HIDE_SYMBOLS)
-endif()
-
if (C_SUPPORTS_COMMENT_LIB_PRAGMA)
if (LIBUNWIND_HAS_DL_LIB)
add_definitions(-D_LIBUNWIND_LINK_DL_LIB)