DPDK 23.11.0
Loading...
Searching...
No Matches
rte_compat.h
1/* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2015 Neil Horman <nhorman@tuxdriver.com>.
3 * All rights reserved.
4 */
5
6#ifndef _RTE_COMPAT_H_
7#define _RTE_COMPAT_H_
8
9#ifdef __cplusplus
10extern "C" {
11#endif
12
13#ifndef ALLOW_EXPERIMENTAL_API
14
15#ifdef RTE_TOOLCHAIN_MSVC
16#define __rte_experimental
17#else
18#define __rte_experimental \
19__attribute__((deprecated("Symbol is not yet part of stable ABI"), \
20section(".text.experimental")))
21#endif
22
23#else
24
25#ifdef RTE_TOOLCHAIN_MSVC
26#define __rte_experimental
27#else
28#define __rte_experimental \
29__attribute__((section(".text.experimental")))
30#endif
31
32#endif
33
34#ifndef __has_attribute
35/* if no has_attribute assume no support for attribute too */
36#define __has_attribute(x) 0
37#endif
38
39#if !defined ALLOW_INTERNAL_API && __has_attribute(error) /* For GCC */
40
41#ifdef RTE_TOOLCHAIN_MSVC
42#define __rte_internal
43#else
44#define __rte_internal \
45__attribute__((error("Symbol is not public ABI"), \
46section(".text.internal")))
47#endif
48
49#elif !defined ALLOW_INTERNAL_API && __has_attribute(diagnose_if) /* For clang */
50
51#ifdef RTE_TOOLCHAIN_MSVC
52#define __rte_internal
53#else
54#define __rte_internal \
55_Pragma("GCC diagnostic push") \
56_Pragma("GCC diagnostic ignored \"-Wgcc-compat\"") \
57__attribute__((diagnose_if(1, "Symbol is not public ABI", "error"), \
58section(".text.internal"))) \
59_Pragma("GCC diagnostic pop")
60#endif
61
62#else
63
64#ifdef RTE_TOOLCHAIN_MSVC
65#define __rte_internal
66#else
67#define __rte_internal \
68__attribute__((section(".text.internal")))
69#endif
70
71#endif
72
73#ifdef __cplusplus
74}
75#endif
76
77#endif /* _RTE_COMPAT_H_ */