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