summaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
authorEric Fiselier <eric@efcs.ca>2016-09-26 22:19:41 +0000
committerEric Fiselier <eric@efcs.ca>2016-09-26 22:19:41 +0000
commit74c9857af9dee33a24b72a8583160fe4786161c6 (patch)
tree91f4503c8d02adfe9d0829723883509560c64b71 /CMakeLists.txt
parent3ba3ad4ea7387f1e09627a174aca9321cc968f2b (diff)
Expect DLL builds on Windows by default and require a custom __config for static
builds. On Windows the __declspec(dllimport) and __declspec(dllexport) attributes require linking to a DLL, not a static library. Previously these annotations were disabled by default unless _LIBCPP_DLL was defined. However the DLL configuration is probably the more common one, so it should be supported by default. This patch enables import/export attributes by default and adds a _LIBCPP_DISABLE_DLL_IMPORT_EXPORT macro which can be used to disable this behavior. If libc++ is built as a static library on Windows then a custom __config header will be generated that predefines this macro. This patch is based off work by Shoaib Meenai. git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@282449 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt10
1 files changed, 10 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a80349a11..5904c06dc 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -330,6 +330,8 @@ endif()
# headers
add_compile_flags_if_supported(-nostdinc++)
+# Let the library headers know they are currently being used to build the
+# library.
add_definitions(-D_LIBCPP_BUILDING_LIBRARY)
# Warning flags ===============================================================
@@ -455,6 +457,14 @@ config_define_if(LIBCXX_HAS_PTHREAD_API _LIBCPP_HAS_THREAD_API_PTHREAD)
config_define_if(LIBCXX_HAS_EXTERNAL_THREAD_API _LIBCPP_HAS_THREAD_API_EXTERNAL)
config_define_if(LIBCXX_HAS_MUSL_LIBC _LIBCPP_HAS_MUSL_LIBC)
+# By default libc++ on Windows expects to use a shared library, which requires
+# the headers to use DLL import/export semantics. However when building a
+# static library only we modify the headers to disable DLL import/export.
+if (DEFINED WIN32 AND LIBCXX_ENABLE_STATIC AND NOT LIBCXX_ENABLE_SHARED)
+ message(STATUS "Generating custom __config for non-DLL Windows build")
+ config_define(ON _LIBCPP_DISABLE_DLL_IMPORT_EXPORT)
+endif()
+
if (LIBCXX_NEEDS_SITE_CONFIG)
configure_file(
include/__config_site.in