diff options
-rw-r--r-- | libcxx/CMakeLists.txt | 13 | ||||
-rw-r--r-- | libcxx/docs/BuildingLibcxx.rst | 7 | ||||
-rw-r--r-- | libcxx/include/__config_site.in | 2 | ||||
-rw-r--r-- | libcxx/utils/libcxx/test/config.py | 2 |
4 files changed, 23 insertions, 1 deletions
diff --git a/libcxx/CMakeLists.txt b/libcxx/CMakeLists.txt index f2b7f83dd01..6b111a8717e 100644 --- a/libcxx/CMakeLists.txt +++ b/libcxx/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/libcxx/docs/BuildingLibcxx.rst b/libcxx/docs/BuildingLibcxx.rst index 81a7c234147..d983bbdfd0e 100644 --- a/libcxx/docs/BuildingLibcxx.rst +++ b/libcxx/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/libcxx/include/__config_site.in b/libcxx/include/__config_site.in index 667b4e94ccc..b8de0baf2f1 100644 --- a/libcxx/include/__config_site.in +++ b/libcxx/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/libcxx/utils/libcxx/test/config.py b/libcxx/utils/libcxx/test/config.py index 7a8fc4625a7..6f88a3540a1 100644 --- a/libcxx/utils/libcxx/test/config.py +++ b/libcxx/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 |