summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShoaib Meenai <smeenai@fb.com>2017-10-04 23:17:12 +0000
committerShoaib Meenai <smeenai@fb.com>2017-10-04 23:17:12 +0000
commit2bba98eea026b7bee9d6e4932a76a5173b3907da (patch)
treef8344b43af355c090cd78a7248742c53bbb2e86c
parent29ae2ba6563a9b74bedc9dfd0c5214722e008caa (diff)
[libc++] Add site config option for ABI macros
Some ABI macros affect headers, so it's nice to have a site config option for them. Add a LIBCXX_ABI_DEFINES cmake macro to allow specifying a list of ABI macros to define in the site config. The primary design constraint (as discussed with Eric on IRC a while back) was to not have to repeat the ABI macro names in cmake, which only leaves a free-form cmake list as an option. A somewhat unfortunate consequence is that we can't verify that the ABI macros being defined actually exist, though we can at least perform some basic sanity checking, since all the ABI macros begin with _LIBCPP_ABI_. Differential Revision: https://reviews.llvm.org/D36719 git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@314946 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--CMakeLists.txt13
-rw-r--r--docs/BuildingLibcxx.rst7
-rw-r--r--include/__config_site.in2
-rw-r--r--utils/libcxx/test/config.py2
4 files changed, 23 insertions, 1 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f2b7f83dd..6b111a871 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -607,6 +607,19 @@ config_define_if(LIBCXX_HAS_EXTERNAL_THREAD_API _LIBCPP_HAS_THREAD_API_EXTERNAL)
config_define_if(LIBCXX_BUILD_EXTERNAL_THREAD_LIBRARY _LIBCPP_HAS_THREAD_LIBRARY_EXTERNAL)
config_define_if(LIBCXX_HAS_MUSL_LIBC _LIBCPP_HAS_MUSL_LIBC)
+set(LIBCXX_ABI_DEFINES "" CACHE STRING "A semicolon separated list of ABI macros to define in the site config header")
+if (LIBCXX_ABI_DEFINES)
+ set(abi_defines)
+ foreach (abi_define ${LIBCXX_ABI_DEFINES})
+ if (NOT abi_define MATCHES "^_LIBCPP_ABI_")
+ message(SEND_ERROR "Invalid ABI macro ${abi_define} in LIBCXX_ABI_DEFINES")
+ endif()
+ list(APPEND abi_defines "#define ${abi_define}")
+ endforeach()
+ string(REPLACE ";" "\n" abi_defines "${abi_defines}")
+ config_define(${abi_defines} _LIBCPP_ABI_DEFINES)
+endif()
+
# 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.
diff --git a/docs/BuildingLibcxx.rst b/docs/BuildingLibcxx.rst
index 81a7c2341..d983bbdfd 100644
--- a/docs/BuildingLibcxx.rst
+++ b/docs/BuildingLibcxx.rst
@@ -347,6 +347,13 @@ The following options allow building libc++ for a different ABI version.
Build the "unstable" ABI version of libc++. Includes all ABI changing features
on top of the current stable version.
+.. option:: LIBCXX_ABI_DEFINES:STRING
+
+ **Default**: ``""``
+
+ A semicolon-separated list of ABI macros to persist in the site config header.
+ See ``include/__config`` for the list of ABI macros.
+
.. _LLVM-specific variables:
LLVM-specific options
diff --git a/include/__config_site.in b/include/__config_site.in
index 667b4e94c..b8de0baf2 100644
--- a/include/__config_site.in
+++ b/include/__config_site.in
@@ -24,4 +24,6 @@
#cmakedefine _LIBCPP_HAS_THREAD_LIBRARY_EXTERNAL
#cmakedefine _LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS
+@_LIBCPP_ABI_DEFINES@
+
#endif // _LIBCPP_CONFIG_SITE
diff --git a/utils/libcxx/test/config.py b/utils/libcxx/test/config.py
index 7a8fc4625..6f88a3540 100644
--- a/utils/libcxx/test/config.py
+++ b/utils/libcxx/test/config.py
@@ -668,7 +668,7 @@ class Configuration(object):
self.config.available_features.add('libcpp-abi-version-v%s'
% feature_macros[m])
continue
- assert m.startswith('_LIBCPP_HAS_') or m == '_LIBCPP_ABI_UNSTABLE'
+ assert m.startswith('_LIBCPP_HAS_') or m.startswith('_LIBCPP_ABI_')
m = m.lower()[1:].replace('_', '-')
self.config.available_features.add(m)
return feature_macros