1 /* 2 * Copyright (c) 2021 Intel Corporation. 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 7 #ifndef ZEPHYR_INCLUDE_TOOLCHAIN_LLVM_H_ 8 #define ZEPHYR_INCLUDE_TOOLCHAIN_LLVM_H_ 9 10 #ifndef ZEPHYR_INCLUDE_TOOLCHAIN_H_ 11 #error Please do not include toolchain-specific headers directly, use <zephyr/toolchain.h> instead 12 #endif 13 14 #define __no_optimization __attribute__((optnone)) 15 16 #if __clang_major__ >= 10 17 #define __fallthrough __attribute__((fallthrough)) 18 #endif 19 20 #define TOOLCHAIN_CLANG_VERSION \ 21 ((__clang_major__ * 10000) + (__clang_minor__ * 100) + \ 22 __clang_patchlevel__) 23 24 #define TOOLCHAIN_HAS_PRAGMA_DIAG 1 25 26 #if TOOLCHAIN_CLANG_VERSION >= 30800 27 #define TOOLCHAIN_HAS_C_GENERIC 1 28 #define TOOLCHAIN_HAS_C_AUTO_TYPE 1 29 #endif 30 31 #include <zephyr/toolchain/gcc.h> 32 33 /* 34 * Provide these definitions only when minimal libc is used. 35 * Avoid collision with defines from include/zephyr/toolchain/zephyr_stdint.h 36 */ 37 #ifdef CONFIG_MINIMAL_LIBC 38 39 #define __int_c(v, suffix) v ## suffix 40 #define int_c(v, suffix) __int_c(v, suffix) 41 #define uint_c(v, suffix) __int_c(v ## U, suffix) 42 43 #ifndef CONFIG_ENFORCE_ZEPHYR_STDINT 44 45 #ifdef __INT64_TYPE__ 46 #undef __int_least64_c_suffix__ 47 #undef __int_least32_c_suffix__ 48 #undef __int_least16_c_suffix__ 49 #undef __int_least8_c_suffix__ 50 #ifdef __INT64_C_SUFFIX__ 51 #define __int_least64_c_suffix__ __INT64_C_SUFFIX__ 52 #define __int_least32_c_suffix__ __INT64_C_SUFFIX__ 53 #define __int_least16_c_suffix__ __INT64_C_SUFFIX__ 54 #define __int_least8_c_suffix__ __INT64_C_SUFFIX__ 55 #endif /* __INT64_C_SUFFIX__ */ 56 #endif /* __INT64_TYPE__ */ 57 58 #ifdef __INT_LEAST64_TYPE__ 59 #ifdef __int_least64_c_suffix__ 60 #define __INT64_C(x) int_c(x, __int_least64_c_suffix__) 61 #define __UINT64_C(x) uint_c(x, __int_least64_c_suffix__) 62 #else 63 #define __INT64_C(x) x 64 #define __UINT64_C(x) x ## U 65 #endif /* __int_least64_c_suffix__ */ 66 #endif /* __INT_LEAST64_TYPE__ */ 67 68 #ifdef __INT32_TYPE__ 69 #undef __int_least32_c_suffix__ 70 #undef __int_least16_c_suffix__ 71 #undef __int_least8_c_suffix__ 72 #ifdef __INT32_C_SUFFIX__ 73 #define __int_least32_c_suffix__ __INT32_C_SUFFIX__ 74 #define __int_least16_c_suffix__ __INT32_C_SUFFIX__ 75 #define __int_least8_c_suffix__ __INT32_C_SUFFIX__ 76 #endif /* __INT32_C_SUFFIX__ */ 77 #endif /* __INT32_TYPE__ */ 78 79 #ifdef __INT_LEAST32_TYPE__ 80 #ifdef __int_least32_c_suffix__ 81 #define __INT32_C(x) int_c(x, __int_least32_c_suffix__) 82 #define __UINT32_C(x) uint_c(x, __int_least32_c_suffix__) 83 #else 84 #define __INT32_C(x) x 85 #define __UINT32_C(x) x ## U 86 #endif /* __int_least32_c_suffix__ */ 87 #endif /* __INT_LEAST32_TYPE__ */ 88 89 #endif /* !CONFIG_ENFORCE_ZEPHYR_STDINT */ 90 91 #ifdef __INT16_TYPE__ 92 #undef __int_least16_c_suffix__ 93 #undef __int_least8_c_suffix__ 94 #ifdef __INT16_C_SUFFIX__ 95 #define __int_least16_c_suffix__ __INT16_C_SUFFIX__ 96 #define __int_least8_c_suffix__ __INT16_C_SUFFIX__ 97 #endif /* __INT16_C_SUFFIX__ */ 98 #endif /* __INT16_TYPE__ */ 99 100 #ifdef __INT_LEAST16_TYPE__ 101 #ifdef __int_least16_c_suffix__ 102 #define __INT16_C(x) int_c(x, __int_least16_c_suffix__) 103 #define __UINT16_C(x) uint_c(x, __int_least16_c_suffix__) 104 #else 105 #define __INT16_C(x) x 106 #define __UINT16_C(x) x ## U 107 #endif /* __int_least16_c_suffix__ */ 108 #endif /* __INT_LEAST16_TYPE__ */ 109 110 #ifdef __INT8_TYPE__ 111 #undef __int_least8_c_suffix__ 112 #ifdef __INT8_C_SUFFIX__ 113 #define __int_least8_c_suffix__ __INT8_C_SUFFIX__ 114 #endif /* __INT8_C_SUFFIX__ */ 115 #endif /* __INT8_TYPE__ */ 116 117 #ifdef __INT_LEAST8_TYPE__ 118 #ifdef __int_least8_c_suffix__ 119 #define __INT8_C(x) int_c(x, __int_least8_c_suffix__) 120 #define __UINT8_C(x) uint_c(x, __int_least8_c_suffix__) 121 #else 122 #define __INT8_C(x) x 123 #define __UINT8_C(x) x ## U 124 #endif /* __int_least8_c_suffix__ */ 125 #endif /* __INT_LEAST8_TYPE__ */ 126 127 #define __INTMAX_C(x) int_c(x, __INTMAX_C_SUFFIX__) 128 #define __UINTMAX_C(x) int_c(x, __UINTMAX_C_SUFFIX__) 129 130 #endif /* CONFIG_MINIMAL_LIBC */ 131 132 #endif /* ZEPHYR_INCLUDE_TOOLCHAIN_LLVM_H_ */ 133