1*8f1d5724Srobert //===----------------------------------------------------------------------===//
279c2e3e6Spatrick //
379c2e3e6Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
479c2e3e6Spatrick // See https://llvm.org/LICENSE.txt for license information.
579c2e3e6Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
679c2e3e6Spatrick //
779c2e3e6Spatrick //===----------------------------------------------------------------------===//
879c2e3e6Spatrick 
979c2e3e6Spatrick #ifndef ____CXXABI_CONFIG_H
1079c2e3e6Spatrick #define ____CXXABI_CONFIG_H
1179c2e3e6Spatrick 
1279c2e3e6Spatrick #if defined(__arm__) && !defined(__USING_SJLJ_EXCEPTIONS__) &&                 \
13*8f1d5724Srobert     !defined(__ARM_DWARF_EH__) && !defined(__SEH__)
1479c2e3e6Spatrick #define _LIBCXXABI_ARM_EHABI
1579c2e3e6Spatrick #endif
1679c2e3e6Spatrick 
1779c2e3e6Spatrick #if !defined(__has_attribute)
1879c2e3e6Spatrick #define __has_attribute(_attribute_) 0
1979c2e3e6Spatrick #endif
2079c2e3e6Spatrick 
214e0cc08cSpatrick #if defined(__clang__)
224e0cc08cSpatrick #  define _LIBCXXABI_COMPILER_CLANG
234e0cc08cSpatrick #  ifndef __apple_build_version__
244e0cc08cSpatrick #    define _LIBCXXABI_CLANG_VER (__clang_major__ * 100 + __clang_minor__)
254e0cc08cSpatrick #  endif
264e0cc08cSpatrick #elif defined(__GNUC__)
274e0cc08cSpatrick #  define _LIBCXXABI_COMPILER_GCC
284e0cc08cSpatrick #elif defined(_MSC_VER)
294e0cc08cSpatrick #  define _LIBCXXABI_COMPILER_MSVC
304e0cc08cSpatrick #elif defined(__IBMCPP__)
314e0cc08cSpatrick #  define _LIBCXXABI_COMPILER_IBM
324e0cc08cSpatrick #endif
334e0cc08cSpatrick 
3479c2e3e6Spatrick #if defined(_WIN32)
3579c2e3e6Spatrick  #if defined(_LIBCXXABI_DISABLE_VISIBILITY_ANNOTATIONS)
3679c2e3e6Spatrick   #define _LIBCXXABI_HIDDEN
3779c2e3e6Spatrick   #define _LIBCXXABI_DATA_VIS
3879c2e3e6Spatrick   #define _LIBCXXABI_FUNC_VIS
3979c2e3e6Spatrick   #define _LIBCXXABI_TYPE_VIS
4079c2e3e6Spatrick  #elif defined(_LIBCXXABI_BUILDING_LIBRARY)
4179c2e3e6Spatrick   #define _LIBCXXABI_HIDDEN
4279c2e3e6Spatrick   #define _LIBCXXABI_DATA_VIS __declspec(dllexport)
4379c2e3e6Spatrick   #define _LIBCXXABI_FUNC_VIS __declspec(dllexport)
4479c2e3e6Spatrick   #define _LIBCXXABI_TYPE_VIS __declspec(dllexport)
4579c2e3e6Spatrick  #else
4679c2e3e6Spatrick   #define _LIBCXXABI_HIDDEN
4779c2e3e6Spatrick   #define _LIBCXXABI_DATA_VIS __declspec(dllimport)
4879c2e3e6Spatrick   #define _LIBCXXABI_FUNC_VIS __declspec(dllimport)
4979c2e3e6Spatrick   #define _LIBCXXABI_TYPE_VIS __declspec(dllimport)
5079c2e3e6Spatrick  #endif
5179c2e3e6Spatrick #else
5279c2e3e6Spatrick  #if !defined(_LIBCXXABI_DISABLE_VISIBILITY_ANNOTATIONS)
5379c2e3e6Spatrick   #define _LIBCXXABI_HIDDEN __attribute__((__visibility__("hidden")))
5479c2e3e6Spatrick   #define _LIBCXXABI_DATA_VIS __attribute__((__visibility__("default")))
5579c2e3e6Spatrick   #define _LIBCXXABI_FUNC_VIS __attribute__((__visibility__("default")))
5679c2e3e6Spatrick   #if __has_attribute(__type_visibility__)
5779c2e3e6Spatrick    #define _LIBCXXABI_TYPE_VIS __attribute__((__type_visibility__("default")))
5879c2e3e6Spatrick   #else
5979c2e3e6Spatrick    #define _LIBCXXABI_TYPE_VIS __attribute__((__visibility__("default")))
6079c2e3e6Spatrick   #endif
6179c2e3e6Spatrick  #else
6279c2e3e6Spatrick   #define _LIBCXXABI_HIDDEN
6379c2e3e6Spatrick   #define _LIBCXXABI_DATA_VIS
6479c2e3e6Spatrick   #define _LIBCXXABI_FUNC_VIS
6579c2e3e6Spatrick   #define _LIBCXXABI_TYPE_VIS
6679c2e3e6Spatrick  #endif
6779c2e3e6Spatrick #endif
6879c2e3e6Spatrick 
694e0cc08cSpatrick #if defined(_LIBCXXABI_COMPILER_MSVC)
7079c2e3e6Spatrick #define _LIBCXXABI_WEAK
7179c2e3e6Spatrick #else
7279c2e3e6Spatrick #define _LIBCXXABI_WEAK __attribute__((__weak__))
7379c2e3e6Spatrick #endif
7479c2e3e6Spatrick 
7579c2e3e6Spatrick #if defined(__clang__)
7679c2e3e6Spatrick #define _LIBCXXABI_COMPILER_CLANG
7779c2e3e6Spatrick #elif defined(__GNUC__)
7879c2e3e6Spatrick #define _LIBCXXABI_COMPILER_GCC
7979c2e3e6Spatrick #endif
8079c2e3e6Spatrick 
8179c2e3e6Spatrick #if __has_attribute(__no_sanitize__) && defined(_LIBCXXABI_COMPILER_CLANG)
8279c2e3e6Spatrick #define _LIBCXXABI_NO_CFI __attribute__((__no_sanitize__("cfi")))
8379c2e3e6Spatrick #else
8479c2e3e6Spatrick #define _LIBCXXABI_NO_CFI
8579c2e3e6Spatrick #endif
8679c2e3e6Spatrick 
8779c2e3e6Spatrick // wasm32 follows the arm32 ABI convention of using 32-bit guard.
884e0cc08cSpatrick #if defined(__arm__) || defined(__wasm32__) || defined(__ARM64_ARCH_8_32__)
8979c2e3e6Spatrick #  define _LIBCXXABI_GUARD_ABI_ARM
9079c2e3e6Spatrick #endif
9179c2e3e6Spatrick 
92fb9c2e6cSpatrick #if defined(_LIBCXXABI_COMPILER_CLANG)
93fb9c2e6cSpatrick #  if !__has_feature(cxx_exceptions)
94fb9c2e6cSpatrick #    define _LIBCXXABI_NO_EXCEPTIONS
95fb9c2e6cSpatrick #  endif
96*8f1d5724Srobert #elif defined(_LIBCXXABI_COMPILER_GCC) && !defined(__EXCEPTIONS)
97fb9c2e6cSpatrick #  define _LIBCXXABI_NO_EXCEPTIONS
98fb9c2e6cSpatrick #endif
99fb9c2e6cSpatrick 
100*8f1d5724Srobert #if defined(_WIN32)
101*8f1d5724Srobert #define _LIBCXXABI_DTOR_FUNC __thiscall
102*8f1d5724Srobert #else
103*8f1d5724Srobert #define _LIBCXXABI_DTOR_FUNC
104*8f1d5724Srobert #endif
105*8f1d5724Srobert 
10679c2e3e6Spatrick #endif // ____CXXABI_CONFIG_H
107