1 //===-------------------------- __cxxabi_config.h -------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #ifndef ____CXXABI_CONFIG_H 10 #define ____CXXABI_CONFIG_H 11 12 #if defined(__arm__) && !defined(__USING_SJLJ_EXCEPTIONS__) && \ 13 !defined(__ARM_DWARF_EH__) 14 #define _LIBCXXABI_ARM_EHABI 15 #endif 16 17 #if !defined(__has_attribute) 18 #define __has_attribute(_attribute_) 0 19 #endif 20 21 #if defined(__clang__) 22 # define _LIBCXXABI_COMPILER_CLANG 23 # ifndef __apple_build_version__ 24 # define _LIBCXXABI_CLANG_VER (__clang_major__ * 100 + __clang_minor__) 25 # endif 26 #elif defined(__GNUC__) 27 # define _LIBCXXABI_COMPILER_GCC 28 #elif defined(_MSC_VER) 29 # define _LIBCXXABI_COMPILER_MSVC 30 #elif defined(__IBMCPP__) 31 # define _LIBCXXABI_COMPILER_IBM 32 #endif 33 34 #if defined(_WIN32) 35 #if defined(_LIBCXXABI_DISABLE_VISIBILITY_ANNOTATIONS) 36 #define _LIBCXXABI_HIDDEN 37 #define _LIBCXXABI_DATA_VIS 38 #define _LIBCXXABI_FUNC_VIS 39 #define _LIBCXXABI_TYPE_VIS 40 #elif defined(_LIBCXXABI_BUILDING_LIBRARY) 41 #define _LIBCXXABI_HIDDEN 42 #define _LIBCXXABI_DATA_VIS __declspec(dllexport) 43 #define _LIBCXXABI_FUNC_VIS __declspec(dllexport) 44 #define _LIBCXXABI_TYPE_VIS __declspec(dllexport) 45 #else 46 #define _LIBCXXABI_HIDDEN 47 #define _LIBCXXABI_DATA_VIS __declspec(dllimport) 48 #define _LIBCXXABI_FUNC_VIS __declspec(dllimport) 49 #define _LIBCXXABI_TYPE_VIS __declspec(dllimport) 50 #endif 51 #else 52 #if !defined(_LIBCXXABI_DISABLE_VISIBILITY_ANNOTATIONS) 53 #define _LIBCXXABI_HIDDEN __attribute__((__visibility__("hidden"))) 54 #define _LIBCXXABI_DATA_VIS __attribute__((__visibility__("default"))) 55 #define _LIBCXXABI_FUNC_VIS __attribute__((__visibility__("default"))) 56 #if __has_attribute(__type_visibility__) 57 #define _LIBCXXABI_TYPE_VIS __attribute__((__type_visibility__("default"))) 58 #else 59 #define _LIBCXXABI_TYPE_VIS __attribute__((__visibility__("default"))) 60 #endif 61 #else 62 #define _LIBCXXABI_HIDDEN 63 #define _LIBCXXABI_DATA_VIS 64 #define _LIBCXXABI_FUNC_VIS 65 #define _LIBCXXABI_TYPE_VIS 66 #endif 67 #endif 68 69 #if defined(_LIBCXXABI_COMPILER_MSVC) 70 #define _LIBCXXABI_WEAK 71 #else 72 #define _LIBCXXABI_WEAK __attribute__((__weak__)) 73 #endif 74 75 #if defined(__clang__) 76 #define _LIBCXXABI_COMPILER_CLANG 77 #elif defined(__GNUC__) 78 #define _LIBCXXABI_COMPILER_GCC 79 #endif 80 81 #if __has_attribute(__no_sanitize__) && defined(_LIBCXXABI_COMPILER_CLANG) 82 #define _LIBCXXABI_NO_CFI __attribute__((__no_sanitize__("cfi"))) 83 #else 84 #define _LIBCXXABI_NO_CFI 85 #endif 86 87 // wasm32 follows the arm32 ABI convention of using 32-bit guard. 88 #if defined(__arm__) || defined(__wasm32__) || defined(__ARM64_ARCH_8_32__) 89 # define _LIBCXXABI_GUARD_ABI_ARM 90 #endif 91 92 #if defined(_LIBCXXABI_COMPILER_CLANG) 93 # if !__has_feature(cxx_exceptions) 94 # define _LIBCXXABI_NO_EXCEPTIONS 95 # endif 96 #elif defined(_LIBCXXABI_COMPILER_GCC) && !__EXCEPTIONS 97 # define _LIBCXXABI_NO_EXCEPTIONS 98 #endif 99 100 #endif // ____CXXABI_CONFIG_H 101