]>
Dogcows Code - chaz/p5-File-KDBX-XS/blob - tomcrypt_cfg.h
994a084bd5d5c81cfc0bef8874122fe78f867c6e
1 /* LibTomCrypt, modular cryptographic library -- Tom St Denis */
2 /* SPDX-License-Identifier: Unlicense */
4 /* This is the build config file.
6 * With this you can setup what to inlcude/exclude automatically during any build. Just comment
7 * out the line that #define's the word for the thing you want to remove. phew!
10 #ifndef TOMCRYPT_CFG_H
11 #define TOMCRYPT_CFG_H
13 #if defined(_WIN32) || defined(_MSC_VER)
14 #define LTC_CALL __cdecl
15 #elif !defined(LTC_CALL)
23 /* certain platforms use macros for these, making the prototypes broken */
24 #ifndef LTC_NO_PROTOTYPES
26 /* you can change how memory allocation works ... */
27 LTC_EXPORT
void * LTC_CALL
XMALLOC(size_t n
);
28 LTC_EXPORT
void * LTC_CALL
XREALLOC(void *p
, size_t n
);
29 LTC_EXPORT
void * LTC_CALL
XCALLOC(size_t n
, size_t s
);
30 LTC_EXPORT
void LTC_CALL
XFREE(void *p
);
32 LTC_EXPORT
void LTC_CALL
XQSORT(void *base
, size_t nmemb
, size_t size
, int(*compar
)(const void *, const void *));
35 /* change the clock function too */
36 LTC_EXPORT
clock_t LTC_CALL
XCLOCK(void);
38 /* various other functions */
39 LTC_EXPORT
void * LTC_CALL
XMEMCPY(void *dest
, const void *src
, size_t n
);
40 LTC_EXPORT
int LTC_CALL
XMEMCMP(const void *s1
, const void *s2
, size_t n
);
41 LTC_EXPORT
void * LTC_CALL
XMEMSET(void *s
, int c
, size_t n
);
43 LTC_EXPORT
int LTC_CALL
XSTRCMP(const char *s1
, const char *s2
);
47 /* some compilers do not like "inline" (or maybe "static inline"), namely: HP cc, IBM xlc */
48 #if defined(__GNUC__) || defined(__xlc__)
49 #define LTC_INLINE __inline__
50 #elif defined(_MSC_VER) || defined(__HP_cc)
51 #define LTC_INLINE __inline
52 #elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
53 #define LTC_INLINE inline
58 #if defined(__clang__) || defined(__GNUC_MINOR__)
59 #define LTC_NORETURN __attribute__ ((noreturn))
60 #elif defined(_MSC_VER)
61 #define LTC_NORETURN __declspec(noreturn)
66 /* type of argument checking, 0=default, 1=fatal and 2=error+continue, 3=nothing */
76 /* Controls endianess and size of registers. Leave uncommented to get platform neutral [slower] code
78 * Note: in order to use the optimized macros your platform must support unaligned 32 and 64 bit read/writes.
79 * The x86 platforms allow this but some others [ARM for instance] do not. On those platforms you **MUST**
80 * use the portable [slower] macros.
82 /* detect x86/i386 32bit */
83 #if defined(__i386__) || defined(__i386) || defined(_M_IX86)
85 #define ENDIAN_32BITWORD
89 /* detect amd64/x64 */
90 #if defined(__x86_64__) || defined(_M_X64) || defined(_M_AMD64)
92 #define ENDIAN_64BITWORD
97 #if defined(LTC_PPC32)
99 #define ENDIAN_32BITWORD
103 /* detects MIPS R5900 processors (PS2) */
104 #if (defined(__R5900) || defined(R5900) || defined(__R5900__)) && (defined(_mips) || defined(__mips__) || defined(mips))
105 #define ENDIAN_64BITWORD
106 #if defined(_MIPSEB) || defined(__MIPSEB) || defined(__MIPSEB__)
109 #define ENDIAN_LITTLE
114 #if defined(_AIX) && defined(_BIG_ENDIAN)
116 #if defined(__LP64__) || defined(_ARCH_PPC64)
117 #define ENDIAN_64BITWORD
119 #define ENDIAN_32BITWORD
124 #if defined(__hpux) || defined(__hpux__)
126 #if defined(__ia64) || defined(__ia64__) || defined(__LP64__)
127 #define ENDIAN_64BITWORD
129 #define ENDIAN_32BITWORD
133 /* detect Apple OS X */
134 #if defined(__APPLE__) && defined(__MACH__)
135 #if defined(__LITTLE_ENDIAN__) || defined(__x86_64__)
136 #define ENDIAN_LITTLE
140 #if defined(__LP64__) || defined(__x86_64__)
141 #define ENDIAN_64BITWORD
143 #define ENDIAN_32BITWORD
147 /* detect SPARC and SPARC64 */
148 #if defined(__sparc__) || defined(__sparc)
150 #if defined(__arch64__) || defined(__sparcv9) || defined(__sparc_v9__)
151 #define ENDIAN_64BITWORD
153 #define ENDIAN_32BITWORD
157 /* detect IBM S390(x) */
158 #if defined(__s390x__) || defined(__s390__)
160 #if defined(__s390x__)
161 #define ENDIAN_64BITWORD
163 #define ENDIAN_32BITWORD
168 #if defined(__powerpc64__) || defined(__ppc64__) || defined(__PPC64__)
169 #define ENDIAN_64BITWORD
170 #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
172 #elif __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
173 #define ENDIAN_LITTLE
178 /* endianness fallback */
179 #if !defined(ENDIAN_BIG) && !defined(ENDIAN_LITTLE)
180 #if defined(_BYTE_ORDER) && _BYTE_ORDER == _BIG_ENDIAN || \
181 defined(__BYTE_ORDER) && __BYTE_ORDER == __BIG_ENDIAN || \
182 defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ || \
183 defined(__BIG_ENDIAN__) || \
184 defined(__ARMEB__) || defined(__THUMBEB__) || defined(__AARCH64EB__) || \
185 defined(_MIPSEB) || defined(__MIPSEB) || defined(__MIPSEB__) || \
188 #elif defined(_BYTE_ORDER) && _BYTE_ORDER == _LITTLE_ENDIAN || \
189 defined(__BYTE_ORDER) && __BYTE_ORDER == __LITTLE_ENDIAN || \
190 defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ || \
191 defined(__LITTLE_ENDIAN__) || \
192 defined(__ARMEL__) || defined(__THUMBEL__) || defined(__AARCH64EL__) || \
193 defined(_MIPSEL) || defined(__MIPSEL) || defined(__MIPSEL__)
194 #define ENDIAN_LITTLE
196 #error Cannot detect endianness
200 /* ulong64: 64-bit data type */
202 #define CONST64(n) n ## ui64
203 typedef unsigned __int64 ulong64
;
204 typedef __int64 long64
;
206 #define CONST64(n) n ## ULL
207 typedef unsigned long long ulong64
;
208 typedef long long long64
;
211 /* ulong32: "32-bit at least" data type */
212 #if defined(__x86_64__) || defined(_M_X64) || defined(_M_AMD64) || \
213 defined(__powerpc64__) || defined(__ppc64__) || defined(__PPC64__) || \
214 defined(__s390x__) || defined(__arch64__) || defined(__aarch64__) || \
215 defined(__sparcv9) || defined(__sparc_v9__) || defined(__sparc64__) || \
216 defined(__ia64) || defined(__ia64__) || defined(__itanium__) || defined(_M_IA64) || \
217 defined(__LP64__) || defined(_LP64) || defined(__64BIT__)
218 typedef unsigned ulong32
;
219 #if !defined(ENDIAN_64BITWORD) && !defined(ENDIAN_32BITWORD)
220 #define ENDIAN_64BITWORD
223 typedef unsigned long ulong32
;
224 #if !defined(ENDIAN_64BITWORD) && !defined(ENDIAN_32BITWORD)
225 #define ENDIAN_32BITWORD
229 #if defined(ENDIAN_64BITWORD) && !defined(_MSC_VER)
230 typedef unsigned long long ltc_mp_digit
;
232 typedef unsigned long ltc_mp_digit
;
235 /* No asm is a quick way to disable anything "not portable" */
237 #define ENDIAN_NEUTRAL
238 #undef ENDIAN_32BITWORD
239 #undef ENDIAN_64BITWORD
243 #define LTC_NO_ROTATE
246 /* No LTC_FAST if: explicitly disabled OR non-gcc/non-clang compiler OR old gcc OR using -ansi -std=c99 */
247 #if defined(LTC_NO_FAST) || (__GNUC__ < 4) || defined(__STRICT_ANSI__)
252 #define LTC_FAST_TYPE_PTR_CAST(x) ((LTC_FAST_TYPE*)(void*)(x))
253 #ifdef ENDIAN_64BITWORD
254 typedef ulong64
__attribute__((__may_alias__
)) LTC_FAST_TYPE
;
256 typedef ulong32
__attribute__((__may_alias__
)) LTC_FAST_TYPE
;
260 #if !defined(ENDIAN_NEUTRAL) && (defined(ENDIAN_BIG) || defined(ENDIAN_LITTLE)) && !(defined(ENDIAN_32BITWORD) || defined(ENDIAN_64BITWORD))
261 #error You must specify a word size as well as endianess in tomcrypt_cfg.h
264 #if !(defined(ENDIAN_BIG) || defined(ENDIAN_LITTLE))
265 #define ENDIAN_NEUTRAL
268 #if (defined(ENDIAN_32BITWORD) && defined(ENDIAN_64BITWORD))
269 #error Cannot be 32 and 64 bit words...
272 /* gcc 4.3 and up has a bswap builtin; detect it by gcc version.
273 * clang also supports the bswap builtin, and although clang pretends
274 * to be gcc (macro-wise, anyway), clang pretends to be a version
275 * prior to gcc 4.3, so we can't detect bswap that way. Instead,
276 * clang has a __has_builtin mechanism that can be used to check
278 * http://clang.llvm.org/docs/LanguageExtensions.html#feature_check */
279 #ifndef __has_builtin
280 #define __has_builtin(x) 0
282 #if !defined(LTC_NO_BSWAP) && defined(__GNUC__) && \
283 ((__GNUC__ * 100 + __GNUC_MINOR__ >= 403) || \
284 (__has_builtin(__builtin_bswap32) && __has_builtin(__builtin_bswap64)))
285 #define LTC_HAVE_BSWAP_BUILTIN
288 #if !defined(LTC_NO_ROTATE) && (__has_builtin(__builtin_rotateleft32) && __has_builtin(__builtin_rotateright32))
289 #define LTC_HAVE_ROTATE_BUILTIN
292 #if defined(__GNUC__)
293 #define LTC_ALIGN(n) __attribute__((aligned(n)))
298 #if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ >= 405)
299 # define LTC_DEPRECATED(s) __attribute__((deprecated("replaced by " #s)))
300 # define PRIVATE_LTC_DEPRECATED_PRAGMA(s) _Pragma(#s)
301 # define LTC_DEPRECATED_PRAGMA(s) PRIVATE_LTC_DEPRECATED_PRAGMA(GCC warning s)
302 #elif defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ >= 301)
303 # define LTC_DEPRECATED(s) __attribute__((deprecated))
304 # define LTC_DEPRECATED_PRAGMA(s)
305 #elif defined(_MSC_VER) && _MSC_VER >= 1500
306 /* supported since Visual Studio 2008 */
307 # define LTC_DEPRECATED(s) __declspec(deprecated("replaced by " #s))
308 # define LTC_DEPRECATED_PRAGMA(s) __pragma(message(s))
310 # define LTC_DEPRECATED(s)
311 # define LTC_DEPRECATED_PRAGMA(s)
314 #endif /* TOMCRYPT_CFG_H */
This page took 0.049349 seconds and 3 git commands to generate.