/* SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause *//* * Copyright (c) Meta Platforms, Inc. and affiliates. * All rights reserved. * * This source code is licensed under both the BSD-style license (found in the * LICENSE file in the root directory of this source tree) and the GPLv2 (found * in the COPYING file in the root directory of this source tree). * You may select, at your option, one of the above-listed licenses. *//* * This file provides common libc dependencies that zstd requires. * The purpose is to allow replacing this file with a custom implementation * to compile zstd without libc support. *//* Need: * NULL * INT_MAX * UINT_MAX * ZSTD_memcpy() * ZSTD_memset() * ZSTD_memmove() */#ifndef ZSTD_DEPS_COMMON#define ZSTD_DEPS_COMMON#include <linux/limits.h>#include <linux/stddef.h>#define ZSTD_memcpy(d,s,n) __builtin_memcpy((d),(s),(n))#define ZSTD_memmove(d,s,n) __builtin_memmove((d),(s),(n))#define ZSTD_memset(d,s,n) __builtin_memset((d),(s),(n))#endif /* ZSTD_DEPS_COMMON *//* * Define malloc as always failing. That means the user must * either use ZSTD_customMem or statically allocate memory. * Need: * ZSTD_malloc() * ZSTD_free() * ZSTD_calloc() */#ifdef ZSTD_DEPS_NEED_MALLOC#ifndef ZSTD_DEPS_MALLOC#define ZSTD_DEPS_MALLOC#define ZSTD_malloc(s) ({ (void)(s); NULL; })#define ZSTD_free(p) ((void)(p))#define ZSTD_calloc(n,s) ({ (void)(n); (void)(s); NULL; })#endif /* ZSTD_DEPS_MALLOC */#endif /* ZSTD_DEPS_NEED_MALLOC *//* * Provides 64-bit math support. * Need: * U64 ZSTD_div64(U64 dividend, U32 divisor) */#ifdef ZSTD_DEPS_NEED_MATH64#ifndef ZSTD_DEPS_MATH64#define ZSTD_DEPS_MATH64#include <linux/math64.h>static uint64_t ZSTD_div64(uint64_t dividend, uint32_t divisor) { return div_u64(dividend, divisor);}#endif /* ZSTD_DEPS_MATH64 */#endif /* ZSTD_DEPS_NEED_MATH64 *//* * This is only requested when DEBUGLEVEL >= 1, meaning * it is disabled in production. * Need: * assert() */#ifdef ZSTD_DEPS_NEED_ASSERT#ifndef ZSTD_DEPS_ASSERT#define ZSTD_DEPS_ASSERT#include <linux/kernel.h>#define assert(x) WARN_ON(!(x))#endif /* ZSTD_DEPS_ASSERT */#endif /* ZSTD_DEPS_NEED_ASSERT *//* * This is only requested when DEBUGLEVEL >= 2, meaning * it is disabled in production. * Need: * ZSTD_DEBUG_PRINT() */#ifdef ZSTD_DEPS_NEED_IO#ifndef ZSTD_DEPS_IO#define ZSTD_DEPS_IO#include <linux/printk.h>#define ZSTD_DEBUG_PRINT(...) pr_debug(__VA_ARGS__)#endif /* ZSTD_DEPS_IO */#endif /* ZSTD_DEPS_NEED_IO *//* * Only requested when MSAN is enabled. * Need: * intptr_t */#ifdef ZSTD_DEPS_NEED_STDINT#ifndef ZSTD_DEPS_STDINT#define ZSTD_DEPS_STDINT/* intptr_t already provided by ZSTD_DEPS_COMMON */#endif /* ZSTD_DEPS_STDINT */#endif /* ZSTD_DEPS_NEED_STDINT */
/* SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause */
/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
* LICENSE file in the root directory of this source tree) and the GPLv2 (found
* in the COPYING file in the root directory of this source tree).
* You may select, at your option, one of the above-listed licenses.
*/
/*
* This file provides common libc dependencies that zstd requires.
* The purpose is to allow replacing this file with a custom implementation
* to compile zstd without libc support.
*/
/* Need:
* NULL
* INT_MAX
* UINT_MAX
* ZSTD_memcpy()
* ZSTD_memset()
* ZSTD_memmove()
*/
#ifndef ZSTD_DEPS_COMMON
#define ZSTD_DEPS_COMMON
#include <linux/limits.h>
#include <linux/stddef.h>
#define ZSTD_memcpy(d,s,n) __builtin_memcpy((d),(s),(n))
#define ZSTD_memmove(d,s,n) __builtin_memmove((d),(s),(n))
#define ZSTD_memset(d,s,n) __builtin_memset((d),(s),(n))
#endif /* ZSTD_DEPS_COMMON */
/*
* Define malloc as always failing. That means the user must
* either use ZSTD_customMem or statically allocate memory.
* Need:
* ZSTD_malloc()
* ZSTD_free()
* ZSTD_calloc()
*/
#ifdef ZSTD_DEPS_NEED_MALLOC
#ifndef ZSTD_DEPS_MALLOC
#define ZSTD_DEPS_MALLOC
#define ZSTD_malloc(s) ({ (void)(s); NULL; })
#define ZSTD_free(p) ((void)(p))
#define ZSTD_calloc(n,s) ({ (void)(n); (void)(s); NULL; })
#endif /* ZSTD_DEPS_MALLOC */
#endif /* ZSTD_DEPS_NEED_MALLOC */
/*
* Provides 64-bit math support.
* Need:
* U64 ZSTD_div64(U64 dividend, U32 divisor)
*/
#ifdef ZSTD_DEPS_NEED_MATH64
#ifndef ZSTD_DEPS_MATH64
#define ZSTD_DEPS_MATH64
#include <linux/math64.h>
static uint64_t ZSTD_div64(uint64_t dividend, uint32_t divisor) {
return div_u64(dividend, divisor);
}
#endif /* ZSTD_DEPS_MATH64 */
#endif /* ZSTD_DEPS_NEED_MATH64 */
/*
* This is only requested when DEBUGLEVEL >= 1, meaning
* it is disabled in production.
* Need:
* assert()
*/
#ifdef ZSTD_DEPS_NEED_ASSERT
#ifndef ZSTD_DEPS_ASSERT
#define ZSTD_DEPS_ASSERT
#include <linux/kernel.h>
#define assert(x) WARN_ON(!(x))
#endif /* ZSTD_DEPS_ASSERT */
#endif /* ZSTD_DEPS_NEED_ASSERT */
/*
* This is only requested when DEBUGLEVEL >= 2, meaning
* it is disabled in production.
* Need:
* ZSTD_DEBUG_PRINT()
*/
#ifdef ZSTD_DEPS_NEED_IO
#ifndef ZSTD_DEPS_IO
#define ZSTD_DEPS_IO
#include <linux/printk.h>
#define ZSTD_DEBUG_PRINT(...) pr_debug(__VA_ARGS__)
#endif /* ZSTD_DEPS_IO */
#endif /* ZSTD_DEPS_NEED_IO */
/*
* Only requested when MSAN is enabled.
* Need:
* intptr_t
*/
#ifdef ZSTD_DEPS_NEED_STDINT
#ifndef ZSTD_DEPS_STDINT
#define ZSTD_DEPS_STDINT
/* intptr_t already provided by ZSTD_DEPS_COMMON */
#endif /* ZSTD_DEPS_STDINT */
#endif /* ZSTD_DEPS_NEED_STDINT */