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