zstd_deps.h (2850B)
1/* SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause */ 2/* 3 * Copyright (c) Facebook, Inc. 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/* Need: 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 /* ZSTD_DEPS_COMMON */ 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 /* ZSTD_DEPS_MALLOC */ 55#endif /* ZSTD_DEPS_NEED_MALLOC */ 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 68static uint64_t ZSTD_div64(uint64_t dividend, uint32_t divisor) { 69 return div_u64(dividend, divisor); 70} 71 72#endif /* ZSTD_DEPS_MATH64 */ 73#endif /* ZSTD_DEPS_NEED_MATH64 */ 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 /* ZSTD_DEPS_ASSERT */ 90#endif /* ZSTD_DEPS_NEED_ASSERT */ 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 /* ZSTD_DEPS_IO */ 107#endif /* ZSTD_DEPS_NEED_IO */ 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 * The Linux Kernel doesn't provide intptr_t, only uintptr_t, which 120 * is an unsigned long. 121 */ 122typedef long intptr_t; 123 124#endif /* ZSTD_DEPS_STDINT */ 125#endif /* ZSTD_DEPS_NEED_STDINT */