DPDK 25.03.0-rc0
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#ifndef ALLOW_EXPERIMENTAL_API
10
11#ifdef RTE_TOOLCHAIN_MSVC
12#define __rte_experimental
13#else
14#define __rte_experimental \
15__attribute__((deprecated("Symbol is not yet part of stable ABI"), \
16section(".text.experimental")))
17#endif
18
19#else
20
21#ifdef RTE_TOOLCHAIN_MSVC
22#define __rte_experimental
23#else
24#define __rte_experimental \
25__attribute__((section(".text.experimental")))
26#endif
27
28#endif
29
30#ifndef __has_attribute
31/* if no has_attribute assume no support for attribute too */
32#define __has_attribute(x) 0
33#endif
34
35#if !defined ALLOW_INTERNAL_API && __has_attribute(error) /* For GCC */
36
37#ifdef RTE_TOOLCHAIN_MSVC
38#define __rte_internal
39#else
40#define __rte_internal \
41__attribute__((error("Symbol is not public ABI"), \
42section(".text.internal")))
43#endif
44
45#elif !defined ALLOW_INTERNAL_API && __has_attribute(diagnose_if) /* For clang */
46
47#ifdef RTE_TOOLCHAIN_MSVC
48#define __rte_internal
49#else
50#define __rte_internal \
51_Pragma("GCC diagnostic push") \
52_Pragma("GCC diagnostic ignored \"-Wgcc-compat\"") \
53__attribute__((diagnose_if(1, "Symbol is not public ABI", "error"), \
54section(".text.internal"))) \
55_Pragma("GCC diagnostic pop")
56#endif
57
58#else
59
60#ifdef RTE_TOOLCHAIN_MSVC
61#define __rte_internal
62#else
63#define __rte_internal \
64__attribute__((section(".text.internal")))
65#endif
66
67#endif
68
69#endif /* _RTE_COMPAT_H_ */