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