1/* Copyright 2017 The TensorFlow Authors. All Rights Reserved.
2
3Licensed under the Apache License, Version 2.0 (the "License");
4you may not use this file except in compliance with the License.
5You may obtain a copy of the License at
6
7 http://www.apache.org/licenses/LICENSE-2.0
8
9Unless required by applicable law or agreed to in writing, software
10distributed under the License is distributed on an "AS IS" BASIS,
11WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12See the License for the specific language governing permissions and
13limitations under the License.
14==============================================================================*/
15#ifndef TENSORFLOW_LITE_KERNELS_INTERNAL_COMPATIBILITY_H_
16#define TENSORFLOW_LITE_KERNELS_INTERNAL_COMPATIBILITY_H_
17
18#include <cstdint>
19
20#include "tensorflow/lite/kernels/op_macros.h"
21
22#ifndef TFLITE_DCHECK
23#define TFLITE_DCHECK(condition) (condition) ? (void)0 : TFLITE_ASSERT_FALSE
24#endif
25
26#ifndef TFLITE_DCHECK_EQ
27#define TFLITE_DCHECK_EQ(x, y) ((x) == (y)) ? (void)0 : TFLITE_ASSERT_FALSE
28#endif
29
30#ifndef TFLITE_DCHECK_NE
31#define TFLITE_DCHECK_NE(x, y) ((x) != (y)) ? (void)0 : TFLITE_ASSERT_FALSE
32#endif
33
34#ifndef TFLITE_DCHECK_GE
35#define TFLITE_DCHECK_GE(x, y) ((x) >= (y)) ? (void)0 : TFLITE_ASSERT_FALSE
36#endif
37
38#ifndef TFLITE_DCHECK_GT
39#define TFLITE_DCHECK_GT(x, y) ((x) > (y)) ? (void)0 : TFLITE_ASSERT_FALSE
40#endif
41
42#ifndef TFLITE_DCHECK_LE
43#define TFLITE_DCHECK_LE(x, y) ((x) <= (y)) ? (void)0 : TFLITE_ASSERT_FALSE
44#endif
45
46#ifndef TFLITE_DCHECK_LT
47#define TFLITE_DCHECK_LT(x, y) ((x) < (y)) ? (void)0 : TFLITE_ASSERT_FALSE
48#endif
49
50// TODO(ahentz): Clean up: We should stick to the DCHECK versions.
51#ifndef TFLITE_CHECK
52#define TFLITE_CHECK(condition) (condition) ? (void)0 : TFLITE_ABORT
53#endif
54
55#ifndef TFLITE_CHECK_EQ
56#define TFLITE_CHECK_EQ(x, y) ((x) == (y)) ? (void)0 : TFLITE_ABORT
57#endif
58
59#ifndef TFLITE_CHECK_NE
60#define TFLITE_CHECK_NE(x, y) ((x) != (y)) ? (void)0 : TFLITE_ABORT
61#endif
62
63#ifndef TFLITE_CHECK_GE
64#define TFLITE_CHECK_GE(x, y) ((x) >= (y)) ? (void)0 : TFLITE_ABORT
65#endif
66
67#ifndef TFLITE_CHECK_GT
68#define TFLITE_CHECK_GT(x, y) ((x) > (y)) ? (void)0 : TFLITE_ABORT
69#endif
70
71#ifndef TFLITE_CHECK_LE
72#define TFLITE_CHECK_LE(x, y) ((x) <= (y)) ? (void)0 : TFLITE_ABORT
73#endif
74
75#ifndef TFLITE_CHECK_LT
76#define TFLITE_CHECK_LT(x, y) ((x) < (y)) ? (void)0 : TFLITE_ABORT
77#endif
78
79#ifndef TF_LITE_STATIC_MEMORY
80// TODO(b/162019032): Consider removing these type-aliases.
81using int8 = std::int8_t;
82using uint8 = std::uint8_t;
83using int16 = std::int16_t;
84using uint16 = std::uint16_t;
85using int32 = std::int32_t;
86using uint32 = std::uint32_t;
87#endif // !defined(TF_LITE_STATIC_MEMORY)
88
89// Allow for cross-compiler usage of function signatures - currently used for
90// specifying named RUY profiler regions in templated methods.
91#if defined(_MSC_VER)
92#define TFLITE_PRETTY_FUNCTION __FUNCSIG__
93#elif defined(__GNUC__)
94#define TFLITE_PRETTY_FUNCTION __PRETTY_FUNCTION__
95#else
96#define TFLITE_PRETTY_FUNCTION __func__
97#endif
98
99// TFLITE_DEPRECATED()
100//
101// Duplicated from absl/base/macros.h to avoid pulling in that library.
102// Marks a deprecated class, struct, enum, function, method and variable
103// declarations. The macro argument is used as a custom diagnostic message (e.g.
104// suggestion of a better alternative).
105//
106// Example:
107//
108// class TFLITE_DEPRECATED("Use Bar instead") Foo {...};
109// TFLITE_DEPRECATED("Use Baz instead") void Bar() {...}
110//
111// Every usage of a deprecated entity will trigger a warning when compiled with
112// clang's `-Wdeprecated-declarations` option. This option is turned off by
113// default, but the warnings will be reported by clang-tidy.
114#if defined(__clang__) && __cplusplus >= 201103L
115#define TFLITE_DEPRECATED(message) __attribute__((deprecated(message)))
116#endif
117
118#ifndef TFLITE_DEPRECATED
119#define TFLITE_DEPRECATED(message)
120#endif
121
122#endif // TENSORFLOW_LITE_KERNELS_INTERNAL_COMPATIBILITY_H_
123