xref: /freebsd/sys/contrib/zstd/lib/common/zstd_deps.h (revision 5ff13fbc199bdf5f0572845351c68ee5ca828e71)
1f7cd7fe5SConrad Meyer /*
2*5ff13fbcSAllan Jude  * Copyright (c) Facebook, Inc.
3f7cd7fe5SConrad Meyer  * All rights reserved.
4f7cd7fe5SConrad Meyer  *
5f7cd7fe5SConrad Meyer  * This source code is licensed under both the BSD-style license (found in the
6f7cd7fe5SConrad Meyer  * LICENSE file in the root directory of this source tree) and the GPLv2 (found
7f7cd7fe5SConrad Meyer  * in the COPYING file in the root directory of this source tree).
8f7cd7fe5SConrad Meyer  * You may select, at your option, one of the above-listed licenses.
9f7cd7fe5SConrad Meyer  */
10f7cd7fe5SConrad Meyer 
11f7cd7fe5SConrad Meyer /* This file provides common libc dependencies that zstd requires.
12f7cd7fe5SConrad Meyer  * The purpose is to allow replacing this file with a custom implementation
13f7cd7fe5SConrad Meyer  * to compile zstd without libc support.
14f7cd7fe5SConrad Meyer  */
15f7cd7fe5SConrad Meyer 
16f7cd7fe5SConrad Meyer /* Need:
17f7cd7fe5SConrad Meyer  * NULL
18f7cd7fe5SConrad Meyer  * INT_MAX
19f7cd7fe5SConrad Meyer  * UINT_MAX
20f7cd7fe5SConrad Meyer  * ZSTD_memcpy()
21f7cd7fe5SConrad Meyer  * ZSTD_memset()
22f7cd7fe5SConrad Meyer  * ZSTD_memmove()
23f7cd7fe5SConrad Meyer  */
24f7cd7fe5SConrad Meyer #ifndef ZSTD_DEPS_COMMON
25f7cd7fe5SConrad Meyer #define ZSTD_DEPS_COMMON
26f7cd7fe5SConrad Meyer 
27f7cd7fe5SConrad Meyer #include <limits.h>
28f7cd7fe5SConrad Meyer #include <stddef.h>
29f7cd7fe5SConrad Meyer #include <string.h>
30f7cd7fe5SConrad Meyer 
31f7cd7fe5SConrad Meyer #if defined(__GNUC__) && __GNUC__ >= 4
32f7cd7fe5SConrad Meyer # define ZSTD_memcpy(d,s,l) __builtin_memcpy((d),(s),(l))
33f7cd7fe5SConrad Meyer # define ZSTD_memmove(d,s,l) __builtin_memmove((d),(s),(l))
34f7cd7fe5SConrad Meyer # define ZSTD_memset(p,v,l) __builtin_memset((p),(v),(l))
35f7cd7fe5SConrad Meyer #else
36f7cd7fe5SConrad Meyer # define ZSTD_memcpy(d,s,l) memcpy((d),(s),(l))
37f7cd7fe5SConrad Meyer # define ZSTD_memmove(d,s,l) memmove((d),(s),(l))
38f7cd7fe5SConrad Meyer # define ZSTD_memset(p,v,l) memset((p),(v),(l))
39f7cd7fe5SConrad Meyer #endif
40f7cd7fe5SConrad Meyer 
41f7cd7fe5SConrad Meyer #endif /* ZSTD_DEPS_COMMON */
42f7cd7fe5SConrad Meyer 
43f7cd7fe5SConrad Meyer /* Need:
44f7cd7fe5SConrad Meyer  * ZSTD_malloc()
45f7cd7fe5SConrad Meyer  * ZSTD_free()
46f7cd7fe5SConrad Meyer  * ZSTD_calloc()
47f7cd7fe5SConrad Meyer  */
48f7cd7fe5SConrad Meyer #ifdef ZSTD_DEPS_NEED_MALLOC
49f7cd7fe5SConrad Meyer #ifndef ZSTD_DEPS_MALLOC
50f7cd7fe5SConrad Meyer #define ZSTD_DEPS_MALLOC
51f7cd7fe5SConrad Meyer 
52f7cd7fe5SConrad Meyer #include <stdlib.h>
53f7cd7fe5SConrad Meyer 
54f7cd7fe5SConrad Meyer #define ZSTD_malloc(s) malloc(s)
55f7cd7fe5SConrad Meyer #define ZSTD_calloc(n,s) calloc((n), (s))
56f7cd7fe5SConrad Meyer #define ZSTD_free(p) free((p))
57f7cd7fe5SConrad Meyer 
58f7cd7fe5SConrad Meyer #endif /* ZSTD_DEPS_MALLOC */
59f7cd7fe5SConrad Meyer #endif /* ZSTD_DEPS_NEED_MALLOC */
60f7cd7fe5SConrad Meyer 
61f7cd7fe5SConrad Meyer /*
62f7cd7fe5SConrad Meyer  * Provides 64-bit math support.
63f7cd7fe5SConrad Meyer  * Need:
64f7cd7fe5SConrad Meyer  * U64 ZSTD_div64(U64 dividend, U32 divisor)
65f7cd7fe5SConrad Meyer  */
66f7cd7fe5SConrad Meyer #ifdef ZSTD_DEPS_NEED_MATH64
67f7cd7fe5SConrad Meyer #ifndef ZSTD_DEPS_MATH64
68f7cd7fe5SConrad Meyer #define ZSTD_DEPS_MATH64
69f7cd7fe5SConrad Meyer 
70f7cd7fe5SConrad Meyer #define ZSTD_div64(dividend, divisor) ((dividend) / (divisor))
71f7cd7fe5SConrad Meyer 
72f7cd7fe5SConrad Meyer #endif /* ZSTD_DEPS_MATH64 */
73f7cd7fe5SConrad Meyer #endif /* ZSTD_DEPS_NEED_MATH64 */
74f7cd7fe5SConrad Meyer 
75f7cd7fe5SConrad Meyer /* Need:
76f7cd7fe5SConrad Meyer  * assert()
77f7cd7fe5SConrad Meyer  */
78f7cd7fe5SConrad Meyer #ifdef ZSTD_DEPS_NEED_ASSERT
79f7cd7fe5SConrad Meyer #ifndef ZSTD_DEPS_ASSERT
80f7cd7fe5SConrad Meyer #define ZSTD_DEPS_ASSERT
81f7cd7fe5SConrad Meyer 
82f7cd7fe5SConrad Meyer #include <assert.h>
83f7cd7fe5SConrad Meyer 
84f7cd7fe5SConrad Meyer #endif /* ZSTD_DEPS_ASSERT */
85f7cd7fe5SConrad Meyer #endif /* ZSTD_DEPS_NEED_ASSERT */
86f7cd7fe5SConrad Meyer 
87f7cd7fe5SConrad Meyer /* Need:
88f7cd7fe5SConrad Meyer  * ZSTD_DEBUG_PRINT()
89f7cd7fe5SConrad Meyer  */
90f7cd7fe5SConrad Meyer #ifdef ZSTD_DEPS_NEED_IO
91f7cd7fe5SConrad Meyer #ifndef ZSTD_DEPS_IO
92f7cd7fe5SConrad Meyer #define ZSTD_DEPS_IO
93f7cd7fe5SConrad Meyer 
94f7cd7fe5SConrad Meyer #include <stdio.h>
95f7cd7fe5SConrad Meyer #define ZSTD_DEBUG_PRINT(...) fprintf(stderr, __VA_ARGS__)
96f7cd7fe5SConrad Meyer 
97f7cd7fe5SConrad Meyer #endif /* ZSTD_DEPS_IO */
98f7cd7fe5SConrad Meyer #endif /* ZSTD_DEPS_NEED_IO */
99f7cd7fe5SConrad Meyer 
100f7cd7fe5SConrad Meyer /* Only requested when <stdint.h> is known to be present.
101f7cd7fe5SConrad Meyer  * Need:
102f7cd7fe5SConrad Meyer  * intptr_t
103f7cd7fe5SConrad Meyer  */
104f7cd7fe5SConrad Meyer #ifdef ZSTD_DEPS_NEED_STDINT
105f7cd7fe5SConrad Meyer #ifndef ZSTD_DEPS_STDINT
106f7cd7fe5SConrad Meyer #define ZSTD_DEPS_STDINT
107f7cd7fe5SConrad Meyer 
108f7cd7fe5SConrad Meyer #include <stdint.h>
109f7cd7fe5SConrad Meyer 
110f7cd7fe5SConrad Meyer #endif /* ZSTD_DEPS_STDINT */
111f7cd7fe5SConrad Meyer #endif /* ZSTD_DEPS_NEED_STDINT */
112