xref: /aosp_15_r20/external/zstd/contrib/linux-kernel/zstd_deps.h (revision 01826a4963a0d8a59bc3812d29bdf0fb76416722)
1*01826a49SYabin Cui /* SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause */
2*01826a49SYabin Cui /*
3*01826a49SYabin Cui  * Copyright (c) Meta Platforms, Inc. and affiliates.
4*01826a49SYabin Cui  * All rights reserved.
5*01826a49SYabin Cui  *
6*01826a49SYabin Cui  * This source code is licensed under both the BSD-style license (found in the
7*01826a49SYabin Cui  * LICENSE file in the root directory of this source tree) and the GPLv2 (found
8*01826a49SYabin Cui  * in the COPYING file in the root directory of this source tree).
9*01826a49SYabin Cui  * You may select, at your option, one of the above-listed licenses.
10*01826a49SYabin Cui  */
11*01826a49SYabin Cui 
12*01826a49SYabin Cui /*
13*01826a49SYabin Cui  * This file provides common libc dependencies that zstd requires.
14*01826a49SYabin Cui  * The purpose is to allow replacing this file with a custom implementation
15*01826a49SYabin Cui  * to compile zstd without libc support.
16*01826a49SYabin Cui  */
17*01826a49SYabin Cui 
18*01826a49SYabin Cui /* Need:
19*01826a49SYabin Cui  * NULL
20*01826a49SYabin Cui  * INT_MAX
21*01826a49SYabin Cui  * UINT_MAX
22*01826a49SYabin Cui  * ZSTD_memcpy()
23*01826a49SYabin Cui  * ZSTD_memset()
24*01826a49SYabin Cui  * ZSTD_memmove()
25*01826a49SYabin Cui  */
26*01826a49SYabin Cui #ifndef ZSTD_DEPS_COMMON
27*01826a49SYabin Cui #define ZSTD_DEPS_COMMON
28*01826a49SYabin Cui 
29*01826a49SYabin Cui #include <linux/limits.h>
30*01826a49SYabin Cui #include <linux/stddef.h>
31*01826a49SYabin Cui 
32*01826a49SYabin Cui #define ZSTD_memcpy(d,s,n) __builtin_memcpy((d),(s),(n))
33*01826a49SYabin Cui #define ZSTD_memmove(d,s,n) __builtin_memmove((d),(s),(n))
34*01826a49SYabin Cui #define ZSTD_memset(d,s,n) __builtin_memset((d),(s),(n))
35*01826a49SYabin Cui 
36*01826a49SYabin Cui #endif /* ZSTD_DEPS_COMMON */
37*01826a49SYabin Cui 
38*01826a49SYabin Cui /*
39*01826a49SYabin Cui  * Define malloc as always failing. That means the user must
40*01826a49SYabin Cui  * either use ZSTD_customMem or statically allocate memory.
41*01826a49SYabin Cui  * Need:
42*01826a49SYabin Cui  * ZSTD_malloc()
43*01826a49SYabin Cui  * ZSTD_free()
44*01826a49SYabin Cui  * ZSTD_calloc()
45*01826a49SYabin Cui  */
46*01826a49SYabin Cui #ifdef ZSTD_DEPS_NEED_MALLOC
47*01826a49SYabin Cui #ifndef ZSTD_DEPS_MALLOC
48*01826a49SYabin Cui #define ZSTD_DEPS_MALLOC
49*01826a49SYabin Cui 
50*01826a49SYabin Cui #define ZSTD_malloc(s) ({ (void)(s); NULL; })
51*01826a49SYabin Cui #define ZSTD_free(p) ((void)(p))
52*01826a49SYabin Cui #define ZSTD_calloc(n,s) ({ (void)(n); (void)(s); NULL; })
53*01826a49SYabin Cui 
54*01826a49SYabin Cui #endif /* ZSTD_DEPS_MALLOC */
55*01826a49SYabin Cui #endif /* ZSTD_DEPS_NEED_MALLOC */
56*01826a49SYabin Cui 
57*01826a49SYabin Cui /*
58*01826a49SYabin Cui  * Provides 64-bit math support.
59*01826a49SYabin Cui  * Need:
60*01826a49SYabin Cui  * U64 ZSTD_div64(U64 dividend, U32 divisor)
61*01826a49SYabin Cui  */
62*01826a49SYabin Cui #ifdef ZSTD_DEPS_NEED_MATH64
63*01826a49SYabin Cui #ifndef ZSTD_DEPS_MATH64
64*01826a49SYabin Cui #define ZSTD_DEPS_MATH64
65*01826a49SYabin Cui 
66*01826a49SYabin Cui #include <linux/math64.h>
67*01826a49SYabin Cui 
ZSTD_div64(uint64_t dividend,uint32_t divisor)68*01826a49SYabin Cui static uint64_t ZSTD_div64(uint64_t dividend, uint32_t divisor) {
69*01826a49SYabin Cui   return div_u64(dividend, divisor);
70*01826a49SYabin Cui }
71*01826a49SYabin Cui 
72*01826a49SYabin Cui #endif /* ZSTD_DEPS_MATH64 */
73*01826a49SYabin Cui #endif /* ZSTD_DEPS_NEED_MATH64 */
74*01826a49SYabin Cui 
75*01826a49SYabin Cui /*
76*01826a49SYabin Cui  * This is only requested when DEBUGLEVEL >= 1, meaning
77*01826a49SYabin Cui  * it is disabled in production.
78*01826a49SYabin Cui  * Need:
79*01826a49SYabin Cui  * assert()
80*01826a49SYabin Cui  */
81*01826a49SYabin Cui #ifdef ZSTD_DEPS_NEED_ASSERT
82*01826a49SYabin Cui #ifndef ZSTD_DEPS_ASSERT
83*01826a49SYabin Cui #define ZSTD_DEPS_ASSERT
84*01826a49SYabin Cui 
85*01826a49SYabin Cui #include <linux/kernel.h>
86*01826a49SYabin Cui 
87*01826a49SYabin Cui #define assert(x) WARN_ON(!(x))
88*01826a49SYabin Cui 
89*01826a49SYabin Cui #endif /* ZSTD_DEPS_ASSERT */
90*01826a49SYabin Cui #endif /* ZSTD_DEPS_NEED_ASSERT */
91*01826a49SYabin Cui 
92*01826a49SYabin Cui /*
93*01826a49SYabin Cui  * This is only requested when DEBUGLEVEL >= 2, meaning
94*01826a49SYabin Cui  * it is disabled in production.
95*01826a49SYabin Cui  * Need:
96*01826a49SYabin Cui  * ZSTD_DEBUG_PRINT()
97*01826a49SYabin Cui  */
98*01826a49SYabin Cui #ifdef ZSTD_DEPS_NEED_IO
99*01826a49SYabin Cui #ifndef ZSTD_DEPS_IO
100*01826a49SYabin Cui #define ZSTD_DEPS_IO
101*01826a49SYabin Cui 
102*01826a49SYabin Cui #include <linux/printk.h>
103*01826a49SYabin Cui 
104*01826a49SYabin Cui #define ZSTD_DEBUG_PRINT(...) pr_debug(__VA_ARGS__)
105*01826a49SYabin Cui 
106*01826a49SYabin Cui #endif /* ZSTD_DEPS_IO */
107*01826a49SYabin Cui #endif /* ZSTD_DEPS_NEED_IO */
108*01826a49SYabin Cui 
109*01826a49SYabin Cui /*
110*01826a49SYabin Cui  * Only requested when MSAN is enabled.
111*01826a49SYabin Cui  * Need:
112*01826a49SYabin Cui  * intptr_t
113*01826a49SYabin Cui  */
114*01826a49SYabin Cui #ifdef ZSTD_DEPS_NEED_STDINT
115*01826a49SYabin Cui #ifndef ZSTD_DEPS_STDINT
116*01826a49SYabin Cui #define ZSTD_DEPS_STDINT
117*01826a49SYabin Cui 
118*01826a49SYabin Cui /* intptr_t already provided by ZSTD_DEPS_COMMON */
119*01826a49SYabin Cui 
120*01826a49SYabin Cui #endif /* ZSTD_DEPS_STDINT */
121*01826a49SYabin Cui #endif /* ZSTD_DEPS_NEED_STDINT */
122