| # Copyright 2021 The Fuchsia Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import("//build/host.gni") |
| import("//build/zircon/migrated_targets.gni") |
| |
| zstd_common_sources = [ |
| "src/lib/common/bitstream.h", |
| "src/lib/common/compiler.h", |
| "src/lib/common/cpu.h", |
| "src/lib/common/debug.c", |
| "src/lib/common/debug.h", |
| "src/lib/common/entropy_common.c", |
| "src/lib/common/error_private.c", |
| "src/lib/common/error_private.h", |
| "src/lib/common/fse.h", |
| "src/lib/common/fse_decompress.c", |
| "src/lib/common/huf.h", |
| "src/lib/common/mem.h", |
| "src/lib/common/pool.c", |
| "src/lib/common/pool.h", |
| "src/lib/common/threading.c", |
| "src/lib/common/threading.h", |
| "src/lib/common/xxhash.c", |
| "src/lib/common/xxhash.h", |
| "src/lib/common/zstd_common.c", |
| "src/lib/common/zstd_deps.h", |
| "src/lib/common/zstd_errors.h", |
| "src/lib/common/zstd_internal.h", |
| "src/lib/zstd.h", |
| ] |
| |
| zstd_compress_sources = [ |
| "src/lib/compress/fse_compress.c", |
| "src/lib/compress/hist.c", |
| "src/lib/compress/hist.h", |
| "src/lib/compress/huf_compress.c", |
| "src/lib/compress/zstd_compress.c", |
| "src/lib/compress/zstd_compress_internal.h", |
| "src/lib/compress/zstd_compress_literals.c", |
| "src/lib/compress/zstd_compress_literals.h", |
| "src/lib/compress/zstd_compress_sequences.c", |
| "src/lib/compress/zstd_compress_sequences.h", |
| "src/lib/compress/zstd_compress_superblock.c", |
| "src/lib/compress/zstd_compress_superblock.h", |
| "src/lib/compress/zstd_cwksp.h", |
| "src/lib/compress/zstd_double_fast.c", |
| "src/lib/compress/zstd_double_fast.h", |
| "src/lib/compress/zstd_fast.c", |
| "src/lib/compress/zstd_fast.h", |
| "src/lib/compress/zstd_lazy.c", |
| "src/lib/compress/zstd_lazy.h", |
| "src/lib/compress/zstd_ldm.c", |
| "src/lib/compress/zstd_ldm.h", |
| "src/lib/compress/zstd_opt.c", |
| "src/lib/compress/zstd_opt.h", |
| "src/lib/compress/zstdmt_compress.c", |
| "src/lib/compress/zstdmt_compress.h", |
| "src/lib/dictBuilder/cover.c", |
| "src/lib/dictBuilder/cover.h", |
| "src/lib/dictBuilder/divsufsort.c", |
| "src/lib/dictBuilder/divsufsort.h", |
| "src/lib/dictBuilder/fastcover.c", |
| "src/lib/dictBuilder/zdict.c", |
| "src/lib/dictBuilder/zdict.h", |
| ] |
| |
| zstd_decompress_sources = [ |
| "src/lib/decompress/huf_decompress.c", |
| "src/lib/decompress/huf_decompress_amd64.S", |
| "src/lib/decompress/zstd_ddict.c", |
| "src/lib/decompress/zstd_ddict.h", |
| "src/lib/decompress/zstd_decompress.c", |
| "src/lib/decompress/zstd_decompress_block.c", |
| "src/lib/decompress/zstd_decompress_block.h", |
| "src/lib/decompress/zstd_decompress_internal.h", |
| ] |
| |
| static_library("zstd") { |
| public_configs = [ ":public.config" ] |
| |
| public = [ |
| "include/zstd.h", |
| "include/zstd_errors.h", |
| ] |
| |
| sources = |
| zstd_common_sources + zstd_compress_sources + zstd_decompress_sources |
| |
| configs += [ ":internal.config" ] |
| |
| # zstd is slow when compiled with optimize=none or optimize=debug (-O0 |
| # currently); enable default optimizations for just this library on both host |
| # and target. |
| # |
| # On the host blobfs uses zstd to compress blobs during build, which we want |
| # to be fast (https://fxbug.dev/55297). On the target blobfs uses zstd to |
| # compress blobs during package resolution which is often in the critical |
| # path of engineers running tests, which we also want to be fast |
| # (https://fxbug.dev/65962). |
| configs -= [ "//build/config:default_optimize" ] |
| configs += [ "//build/config:optimize_speed" ] |
| } |
| |
| config("public.config") { |
| visibility = [ ":*" ] |
| |
| include_dirs = [ "include" ] |
| } |
| |
| config("internal.config") { |
| visibility = [ ":*" ] |
| |
| include_dirs = [ |
| "src/lib", |
| "src/lib/common", |
| "src/lib/compress", |
| "src/lib/dictBuilder", |
| ] |
| |
| defines = [ |
| "XXH_NAMESPACE=ZSTD_", |
| "ZDICTLIB_VISIBILITY=", |
| "ZSTDERRORLIB_VISIBILITY=", |
| "ZSTDLIB_HIDDEN=", |
| "ZSTDLIB_VISIBILITY=", |
| "ZSTDLIB_VISIBLE=", |
| ] |
| |
| if (!is_fuchsia && !is_kernel) { |
| defines += [ "ZSTD_MULTITHREAD" ] |
| } |
| |
| # Suppress warnings the zstd code doesn't comply with. |
| configs = [ |
| "//build/config:Wno-conversion", |
| "//build/config:Wno-unused-but-set-variable", |
| "//build/config:Wno-bitwise-instead-of-logical", |
| ] |
| |
| cflags = [ "-Wno-implicit-fallthrough" ] |
| if (is_gcc) { |
| cflags += [ "-Wno-incompatible-pointer-types" ] |
| } |
| } |
| |
| # The standalone varaint of this library supports only decompression and does |
| # not depend malloc or free so it is suitable for use in userboot and physboot. |
| static_library("zstd-decompress-standalone") { |
| public_configs = [ ":public.config" ] |
| |
| sources = zstd_common_sources + zstd_decompress_sources |
| |
| configs += [ ":internal.config" ] |
| |
| defines = [ |
| # The dynamic dispatch between the two implementations creates writable |
| # data, which is incompatible with being linked into userboot or physboot. |
| "HUF_FORCE_DECOMPRESS_X2", |
| |
| # Removes some dead code that was causing the library to attempt to link |
| # against malloc and free. |
| "ZSTD_DEPS_MALLOC", |
| "ZSTD_malloc(s)=((void)(s),NULL)", |
| "ZSTD_calloc(n,s)=((void)((n)*(s)),NULL)", |
| "ZSTD_free(p)=(void)(p)", |
| |
| # Avoids some weak symbol references that require GOT slots. |
| "ZSTD_NO_TRACE", |
| ] |
| |
| if (is_kernel) { |
| deps = [ "//zircon/kernel/lib/libc" ] |
| } |
| } |
| |
| # This provides a superset of the zstd API with additional features. |
| static_library("zstdseek") { |
| public_deps = [ ":zstd" ] |
| public_configs = [ ":zstdseek.config" ] |
| |
| public = [ "include/zstd/zstd_seekable.h" ] |
| sources = [ |
| "src/contrib/seekable_format/zstdseek_compress.c", |
| "src/contrib/seekable_format/zstdseek_decompress.c", |
| "src/contrib/seekable_format/zstdseek_seekable.h", |
| ] |
| |
| configs += [ ":zstdseek.internal.config" ] |
| } |
| |
| config("zstdseek.internal.config") { |
| visibility = [ ":*" ] |
| configs = [ ":internal.config" ] |
| |
| # TODO(markdittmer): Upstream fixes to uninitialized variables in zstd. |
| if (is_gcc) { |
| cflags = [ "-Wno-maybe-uninitialized" ] |
| } else { |
| cflags = [ "-Wno-sometimes-uninitialized" ] |
| } |
| } |
| |
| config("zstdseek.config") { |
| # The public <zstd/zstd_seekable.h> header does `#include "zstd.h"`. |
| include_dirs = [ "include/zstd" ] |
| } |
| |
| if (!is_kernel) { |
| if (current_toolchain == host_toolchain) { |
| install_host_tools("host-tools") { |
| deps = [ ":zstdcli" ] |
| outputs = [ "zstd" ] |
| } |
| } |
| |
| executable("zstdcli") { |
| output_name = "zstd" |
| sources = [ |
| "src/programs/benchfn.c", |
| "src/programs/benchzstd.c", |
| "src/programs/datagen.c", |
| "src/programs/dibio.c", |
| "src/programs/fileio.c", |
| "src/programs/timefn.c", |
| "src/programs/util.c", |
| "src/programs/zstdcli.c", |
| ] |
| configs += [ ":internal.config" ] |
| deps = [ ":zstd" ] |
| } |
| } |