skia2/third_party/zlib/BUILD.gn
Derek Sollenberger abae40299c Reland "Update zlib DEPS"
This is a reland of 6fb3687413

Original change's description:
> Update zlib DEPS
> 
> Pull latest zlib into Skia and updated its BUILD files to build some
> SIMD variants.
> 
> Bug: skia:10391
> Change-Id: Ic1a660c8f5f7e5f94440787779fd74b7192ab6d5
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/296720
> Auto-Submit: Derek Sollenberger <djsollen@google.com>
> Reviewed-by: Ben Wagner <bungeman@google.com>
> Commit-Queue: Derek Sollenberger <djsollen@google.com>

Bug: skia:10391
Change-Id: I4d38a526f2785e70ef9fa134c681fd3dc4d57c44
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/297020
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Derek Sollenberger <djsollen@google.com>
2020-06-17 17:27:15 +00:00

205 lines
5.7 KiB
Plaintext

# Copyright 2016 Google Inc.
#
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
declare_args() {
skia_use_system_zlib = is_official_build
}
import("../third_party.gni")
if (skia_use_system_zlib) {
system("zlib") {
libs = [ "z" ]
}
} else {
# ARM optimizations disabled for Windows on Arm MSVC builds, see http://crbug.com/v8/10012.
use_arm_neon_optimizations =
(current_cpu == "arm" || current_cpu == "arm64") && !(is_win && !is_clang)
use_x86_x64_optimizations =
(current_cpu == "x86" || current_cpu == "x64") && !is_ios
config("zlib_simd_config") {
defines = []
if (use_x86_x64_optimizations) {
if (is_win) {
defines += [ "X86_WINDOWS" ]
} else {
defines += [ "X86_NOT_WINDOWS" ]
}
defines += [ "ADLER32_SIMD_SSSE3" ] # Strangely this is needed for
# cpu_features.c
}
if (use_arm_neon_optimizations) {
if (is_android) {
defines += [ "ARMV8_OS_ANDROID" ] # also compatible with v7
} else if (is_linux || is_chromeos) {
defines += [ "ARMV8_OS_LINUX" ]
} else if (is_fuchsia) {
defines += [ "ARMV8_OS_FUCHSIA" ]
} else if (is_win) {
defines += [ "ARMV8_OS_WINDOWS" ]
} else if (is_ios) {
# iOS@ARM is a special case where we always have NEON but don't check
# for crypto extensions.
defines += [ "ARM_OS_IOS" ]
} else {
assert(false, "Unsupported ARM OS")
}
}
# Warnings are just noise if we're not maintaining the code.
if (is_win) {
cflags = [ "/w" ]
} else {
cflags = [ "-w" ]
}
}
source_set("zlib_adler32_simd") {
visibility = [ ":*" ]
configs += [ ":zlib_simd_config" ]
if (use_x86_x64_optimizations) {
defines = [ "ADLER32_SIMD_SSSE3" ]
if (!is_win || is_clang) {
cflags = [ "-mssse3" ]
}
}
if (use_arm_neon_optimizations) {
defines = [ "ADLER32_SIMD_NEON" ]
}
sources = [ "../externals/zlib/adler32_simd.c" ]
}
source_set("zlib_crc32_simd") {
visibility = [ ":*" ]
configs += [ ":zlib_simd_config" ]
# Disabled for iPhone, as described in DDI0487C_a_armv8_arm:
# "All implementations of the ARMv8.1 architecture are required to
# implement the CRC32* instructions. These are optional in ARMv8.0."
if (!is_ios && use_arm_neon_optimizations) {
defines = [ "CRC32_ARMV8_CRC32" ]
# An ARMv7 GCC build will fail to compile without building this target
# for ARMv8-a+crc and letting runtime cpu detection select the correct
# function.
if (!is_win && !is_clang) {
cflags_c = [ "-march=armv8-a+crc" ]
}
}
if (use_x86_x64_optimizations) {
defines = [ "CRC32_SIMD_SSE42_PCLMUL" ]
if (!is_win || is_clang) {
cflags = [
"-msse4.2",
"-mpclmul",
]
}
}
sources = [ "../externals/zlib/crc32_simd.c" ]
}
source_set("zlib_inflate_chunk_simd") {
visibility = [ ":*" ]
configs += [ ":zlib_simd_config" ]
if (use_x86_x64_optimizations) {
defines = [ "INFLATE_CHUNK_SIMD_SSE2" ]
if (current_cpu == "x64") {
defines += [ "INFLATE_CHUNK_READ_64LE" ]
}
}
if (use_arm_neon_optimizations) {
defines = [ "INFLATE_CHUNK_SIMD_NEON" ]
if (current_cpu == "arm64") {
defines += [ "INFLATE_CHUNK_READ_64LE" ]
}
}
if (use_x86_x64_optimizations || use_arm_neon_optimizations) {
include_dirs = [
"../externals/zlib/",
"../externals/zlib/contrib/optimizations/",
]
sources = [
"../externals/zlib/contrib/optimizations/inffast_chunk.c",
"../externals/zlib/contrib/optimizations/inflate.c",
]
}
}
source_set("zlib_x86_x64_simd") {
visibility = [ ":*" ]
configs += [ ":zlib_simd_config" ]
if (use_x86_x64_optimizations) {
defines = [
"CRC32_SIMD_SSE42_PCLMUL",
"DEFLATE_FILL_WINDOW_SSE2",
]
if (!is_win || is_clang) {
cflags = [
"-msse4.2",
"-mpclmul",
]
}
sources = [
"../externals/zlib/crc_folding.c",
"../externals/zlib/fill_window_sse.c",
]
}
}
third_party("zlib") {
public_include_dirs = [ "../externals/zlib" ]
defines = [ "ZLIB_IMPLEMENTATION" ]
deps = []
sources = [
"../externals/zlib/adler32.c",
"../externals/zlib/compress.c",
"../externals/zlib/cpu_features.c",
"../externals/zlib/crc32.c",
"../externals/zlib/deflate.c",
"../externals/zlib/gzclose.c",
"../externals/zlib/gzlib.c",
"../externals/zlib/gzread.c",
"../externals/zlib/gzwrite.c",
"../externals/zlib/infback.c",
"../externals/zlib/inffast.c",
"../externals/zlib/inftrees.c",
"../externals/zlib/trees.c",
"../externals/zlib/uncompr.c",
"../externals/zlib/zutil.c",
]
if (is_android) {
deps += [ "//third_party/cpu-features" ]
}
if (!use_x86_x64_optimizations && !use_arm_neon_optimizations) {
defines += [ "CPU_NO_SIMD" ]
sources += [ "../externals/zlib/inflate.c" ]
} else {
configs += [ ":zlib_simd_config" ]
deps += [
":zlib_adler32_simd",
":zlib_crc32_simd",
":zlib_inflate_chunk_simd",
":zlib_x86_x64_simd",
]
}
}
}
third_party("compression_utils_portable") {
visibility = [ "//third_party/angle2" ]
public_include_dirs = [ "../externals/zlib/google" ]
include_dirs = [ "../externals/zlib" ]
sources = [
"../externals/zlib/google/compression_utils_portable.cc",
"../externals/zlib/google/compression_utils_portable.h",
]
}