1*01826a49SYabin Cui /* 2*01826a49SYabin Cui * Copyright (c) Meta Platforms, Inc. and affiliates. 3*01826a49SYabin Cui * All rights reserved. 4*01826a49SYabin Cui * 5*01826a49SYabin Cui * This source code is licensed under both the BSD-style license (found in the 6*01826a49SYabin Cui * LICENSE file in the root directory of this source tree) and the GPLv2 (found 7*01826a49SYabin Cui * in the COPYING file in the root directory of this source tree). 8*01826a49SYabin Cui * You may select, at your option, one of the above-listed licenses. 9*01826a49SYabin Cui */ 10*01826a49SYabin Cui 11*01826a49SYabin Cui /* This file provides common libc dependencies that zstd requires. 12*01826a49SYabin Cui * The purpose is to allow replacing this file with a custom implementation 13*01826a49SYabin Cui * to compile zstd without libc support. 14*01826a49SYabin Cui */ 15*01826a49SYabin Cui 16*01826a49SYabin Cui /* Need: 17*01826a49SYabin Cui * NULL 18*01826a49SYabin Cui * INT_MAX 19*01826a49SYabin Cui * UINT_MAX 20*01826a49SYabin Cui * ZSTD_memcpy() 21*01826a49SYabin Cui * ZSTD_memset() 22*01826a49SYabin Cui * ZSTD_memmove() 23*01826a49SYabin Cui */ 24*01826a49SYabin Cui #ifndef ZSTD_DEPS_COMMON 25*01826a49SYabin Cui #define ZSTD_DEPS_COMMON 26*01826a49SYabin Cui 27*01826a49SYabin Cui #include <limits.h> 28*01826a49SYabin Cui #include <stddef.h> 29*01826a49SYabin Cui #include <string.h> 30*01826a49SYabin Cui 31*01826a49SYabin Cui #if defined(__GNUC__) && __GNUC__ >= 4 32*01826a49SYabin Cui # define ZSTD_memcpy(d,s,l) __builtin_memcpy((d),(s),(l)) 33*01826a49SYabin Cui # define ZSTD_memmove(d,s,l) __builtin_memmove((d),(s),(l)) 34*01826a49SYabin Cui # define ZSTD_memset(p,v,l) __builtin_memset((p),(v),(l)) 35*01826a49SYabin Cui #else 36*01826a49SYabin Cui # define ZSTD_memcpy(d,s,l) memcpy((d),(s),(l)) 37*01826a49SYabin Cui # define ZSTD_memmove(d,s,l) memmove((d),(s),(l)) 38*01826a49SYabin Cui # define ZSTD_memset(p,v,l) memset((p),(v),(l)) 39*01826a49SYabin Cui #endif 40*01826a49SYabin Cui 41*01826a49SYabin Cui #endif /* ZSTD_DEPS_COMMON */ 42*01826a49SYabin Cui 43*01826a49SYabin Cui /* Need: 44*01826a49SYabin Cui * ZSTD_malloc() 45*01826a49SYabin Cui * ZSTD_free() 46*01826a49SYabin Cui * ZSTD_calloc() 47*01826a49SYabin Cui */ 48*01826a49SYabin Cui #ifdef ZSTD_DEPS_NEED_MALLOC 49*01826a49SYabin Cui #ifndef ZSTD_DEPS_MALLOC 50*01826a49SYabin Cui #define ZSTD_DEPS_MALLOC 51*01826a49SYabin Cui 52*01826a49SYabin Cui #include <stdlib.h> 53*01826a49SYabin Cui 54*01826a49SYabin Cui #define ZSTD_malloc(s) malloc(s) 55*01826a49SYabin Cui #define ZSTD_calloc(n,s) calloc((n), (s)) 56*01826a49SYabin Cui #define ZSTD_free(p) free((p)) 57*01826a49SYabin Cui 58*01826a49SYabin Cui #endif /* ZSTD_DEPS_MALLOC */ 59*01826a49SYabin Cui #endif /* ZSTD_DEPS_NEED_MALLOC */ 60*01826a49SYabin Cui 61*01826a49SYabin Cui /* 62*01826a49SYabin Cui * Provides 64-bit math support. 63*01826a49SYabin Cui * Need: 64*01826a49SYabin Cui * U64 ZSTD_div64(U64 dividend, U32 divisor) 65*01826a49SYabin Cui */ 66*01826a49SYabin Cui #ifdef ZSTD_DEPS_NEED_MATH64 67*01826a49SYabin Cui #ifndef ZSTD_DEPS_MATH64 68*01826a49SYabin Cui #define ZSTD_DEPS_MATH64 69*01826a49SYabin Cui 70*01826a49SYabin Cui #define ZSTD_div64(dividend, divisor) ((dividend) / (divisor)) 71*01826a49SYabin Cui 72*01826a49SYabin Cui #endif /* ZSTD_DEPS_MATH64 */ 73*01826a49SYabin Cui #endif /* ZSTD_DEPS_NEED_MATH64 */ 74*01826a49SYabin Cui 75*01826a49SYabin Cui /* Need: 76*01826a49SYabin Cui * assert() 77*01826a49SYabin Cui */ 78*01826a49SYabin Cui #ifdef ZSTD_DEPS_NEED_ASSERT 79*01826a49SYabin Cui #ifndef ZSTD_DEPS_ASSERT 80*01826a49SYabin Cui #define ZSTD_DEPS_ASSERT 81*01826a49SYabin Cui 82*01826a49SYabin Cui #include <assert.h> 83*01826a49SYabin Cui 84*01826a49SYabin Cui #endif /* ZSTD_DEPS_ASSERT */ 85*01826a49SYabin Cui #endif /* ZSTD_DEPS_NEED_ASSERT */ 86*01826a49SYabin Cui 87*01826a49SYabin Cui /* Need: 88*01826a49SYabin Cui * ZSTD_DEBUG_PRINT() 89*01826a49SYabin Cui */ 90*01826a49SYabin Cui #ifdef ZSTD_DEPS_NEED_IO 91*01826a49SYabin Cui #ifndef ZSTD_DEPS_IO 92*01826a49SYabin Cui #define ZSTD_DEPS_IO 93*01826a49SYabin Cui 94*01826a49SYabin Cui #include <stdio.h> 95*01826a49SYabin Cui #define ZSTD_DEBUG_PRINT(...) fprintf(stderr, __VA_ARGS__) 96*01826a49SYabin Cui 97*01826a49SYabin Cui #endif /* ZSTD_DEPS_IO */ 98*01826a49SYabin Cui #endif /* ZSTD_DEPS_NEED_IO */ 99*01826a49SYabin Cui 100*01826a49SYabin Cui /* Only requested when <stdint.h> is known to be present. 101*01826a49SYabin Cui * Need: 102*01826a49SYabin Cui * intptr_t 103*01826a49SYabin Cui */ 104*01826a49SYabin Cui #ifdef ZSTD_DEPS_NEED_STDINT 105*01826a49SYabin Cui #ifndef ZSTD_DEPS_STDINT 106*01826a49SYabin Cui #define ZSTD_DEPS_STDINT 107*01826a49SYabin Cui 108*01826a49SYabin Cui #include <stdint.h> 109*01826a49SYabin Cui 110*01826a49SYabin Cui #endif /* ZSTD_DEPS_STDINT */ 111*01826a49SYabin Cui #endif /* ZSTD_DEPS_NEED_STDINT */ 112