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