xref: /dpdk/lib/eal/include/rte_compat.h (revision 719834a6849e1daf4a70ff7742bbcc3ae7e25607)
199a2dd95SBruce Richardson /* SPDX-License-Identifier: BSD-3-Clause
299a2dd95SBruce Richardson  * Copyright(c) 2015 Neil Horman <nhorman@tuxdriver.com>.
399a2dd95SBruce Richardson  * All rights reserved.
499a2dd95SBruce Richardson  */
599a2dd95SBruce Richardson 
699a2dd95SBruce Richardson #ifndef _RTE_COMPAT_H_
799a2dd95SBruce Richardson #define _RTE_COMPAT_H_
899a2dd95SBruce Richardson 
999a2dd95SBruce Richardson #ifndef ALLOW_EXPERIMENTAL_API
1099a2dd95SBruce Richardson 
11*51574a4fSTyler Retzlaff #ifdef RTE_TOOLCHAIN_MSVC
12*51574a4fSTyler Retzlaff #define __rte_experimental
13*51574a4fSTyler Retzlaff #else
1499a2dd95SBruce Richardson #define __rte_experimental \
1599a2dd95SBruce Richardson __attribute__((deprecated("Symbol is not yet part of stable ABI"), \
1699a2dd95SBruce Richardson section(".text.experimental")))
17*51574a4fSTyler Retzlaff #endif
1899a2dd95SBruce Richardson 
1999a2dd95SBruce Richardson #else
2099a2dd95SBruce Richardson 
21*51574a4fSTyler Retzlaff #ifdef RTE_TOOLCHAIN_MSVC
22*51574a4fSTyler Retzlaff #define __rte_experimental
23*51574a4fSTyler Retzlaff #else
2499a2dd95SBruce Richardson #define __rte_experimental \
2599a2dd95SBruce Richardson __attribute__((section(".text.experimental")))
26*51574a4fSTyler Retzlaff #endif
2799a2dd95SBruce Richardson 
2899a2dd95SBruce Richardson #endif
2999a2dd95SBruce Richardson 
3099a2dd95SBruce Richardson #ifndef __has_attribute
3199a2dd95SBruce Richardson /* if no has_attribute assume no support for attribute too */
3299a2dd95SBruce Richardson #define __has_attribute(x) 0
3399a2dd95SBruce Richardson #endif
3499a2dd95SBruce Richardson 
3599a2dd95SBruce Richardson #if !defined ALLOW_INTERNAL_API && __has_attribute(error) /* For GCC */
3699a2dd95SBruce Richardson 
37*51574a4fSTyler Retzlaff #ifdef RTE_TOOLCHAIN_MSVC
38*51574a4fSTyler Retzlaff #define __rte_internal
39*51574a4fSTyler Retzlaff #else
4099a2dd95SBruce Richardson #define __rte_internal \
4199a2dd95SBruce Richardson __attribute__((error("Symbol is not public ABI"), \
4299a2dd95SBruce Richardson section(".text.internal")))
43*51574a4fSTyler Retzlaff #endif
4499a2dd95SBruce Richardson 
4599a2dd95SBruce Richardson #elif !defined ALLOW_INTERNAL_API && __has_attribute(diagnose_if) /* For clang */
4699a2dd95SBruce Richardson 
47*51574a4fSTyler Retzlaff #ifdef RTE_TOOLCHAIN_MSVC
48*51574a4fSTyler Retzlaff #define __rte_internal
49*51574a4fSTyler Retzlaff #else
5099a2dd95SBruce Richardson #define __rte_internal \
51ed57d08dSMichael Barker _Pragma("GCC diagnostic push") \
52ed57d08dSMichael Barker _Pragma("GCC diagnostic ignored \"-Wgcc-compat\"") \
5399a2dd95SBruce Richardson __attribute__((diagnose_if(1, "Symbol is not public ABI", "error"), \
54ed57d08dSMichael Barker section(".text.internal"))) \
55ed57d08dSMichael Barker _Pragma("GCC diagnostic pop")
56*51574a4fSTyler Retzlaff #endif
5799a2dd95SBruce Richardson 
5899a2dd95SBruce Richardson #else
5999a2dd95SBruce Richardson 
60*51574a4fSTyler Retzlaff #ifdef RTE_TOOLCHAIN_MSVC
61*51574a4fSTyler Retzlaff #define __rte_internal
62*51574a4fSTyler Retzlaff #else
6399a2dd95SBruce Richardson #define __rte_internal \
6499a2dd95SBruce Richardson __attribute__((section(".text.internal")))
65*51574a4fSTyler Retzlaff #endif
6699a2dd95SBruce Richardson 
6799a2dd95SBruce Richardson #endif
6899a2dd95SBruce Richardson 
6999a2dd95SBruce Richardson #endif /* _RTE_COMPAT_H_ */
70