| # Copyright 2016 Google Inc. |
| # |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import("../third_party.gni") |
| import("zlib.gni") |
| |
| if (skia_use_system_zlib) { |
| system("zlib") { |
| libs = [ "z" ] |
| } |
| } else { |
| config("zlib_internal_config") { |
| defines = [ "ZLIB_IMPLEMENTATION" ] |
| } |
| source_set("zlib_common_headers") { |
| visibility = [ ":*" ] |
| sources = [ |
| "../externals/zlib/chromeconf.h", |
| "../externals/zlib/deflate.h", |
| "../externals/zlib/inffast.h", |
| "../externals/zlib/inffixed.h", |
| "../externals/zlib/inflate.h", |
| "../externals/zlib/inftrees.h", |
| "../externals/zlib/zconf.h", |
| "../externals/zlib/zlib.h", |
| "../externals/zlib/zutil.h", |
| ] |
| } |
| |
| use_arm_neon_optimizations = |
| (current_cpu == "arm" || current_cpu == "arm64") && (is_clang || !is_win) |
| use_x86_x64_optimizations = |
| (current_cpu == "x86" || current_cpu == "x64") && !is_ios |
| |
| config("zlib_adler32_simd_config") { |
| if (use_x86_x64_optimizations) { |
| defines = [ "ADLER32_SIMD_SSSE3" ] |
| if (is_win) { |
| defines += [ "X86_WINDOWS" ] |
| } else { |
| defines += [ "X86_NOT_WINDOWS" ] |
| } |
| } |
| |
| if (use_arm_neon_optimizations) { |
| defines = [ "ADLER32_SIMD_NEON" ] |
| } |
| } |
| |
| source_set("zlib_adler32_simd") { |
| visibility = [ ":*" ] |
| |
| if (use_x86_x64_optimizations) { |
| sources = [ |
| "../externals/zlib/adler32_simd.c", |
| "../externals/zlib/adler32_simd.h", |
| ] |
| |
| if (!is_win || is_clang) { |
| cflags = [ "-mssse3" ] |
| } |
| } |
| |
| if (use_arm_neon_optimizations) { |
| sources = [ |
| "../externals/zlib/adler32_simd.c", |
| "../externals/zlib/adler32_simd.h", |
| ] |
| } |
| |
| configs += [ ":zlib_internal_config" ] |
| |
| public_configs = [ ":zlib_adler32_simd_config" ] |
| |
| public_deps = [ ":zlib_common_headers" ] |
| } |
| |
| if (use_arm_neon_optimizations) { |
| config("zlib_arm_crc32_config") { |
| defines = [ "CRC32_ARMV8_CRC32" ] |
| if (is_android) { |
| defines += [ "ARMV8_OS_ANDROID" ] |
| } else if (is_linux || is_chromeos) { |
| defines += [ "ARMV8_OS_LINUX" ] |
| } else if (is_mac) { |
| defines += [ "ARMV8_OS_MACOS" ] |
| } else if (is_ios) { |
| defines += [ "ARMV8_OS_IOS" ] |
| } else if (is_fuchsia) { |
| defines += [ "ARMV8_OS_FUCHSIA" ] |
| } else if (is_win) { |
| defines += [ "ARMV8_OS_WINDOWS" ] |
| } else { |
| assert(false, "Unsupported ARM OS") |
| } |
| } |
| |
| source_set("zlib_arm_crc32") { |
| visibility = [ ":*" ] |
| |
| include_dirs = [ |
| "../externals/zlib/", |
| "../externals/zlib/contrib/optimizations/", |
| ] |
| |
| if (!is_win && !is_clang) { |
| cflags_c = [ "-march=armv8-a+aes+crc" ] |
| } |
| |
| sources = [ |
| "../externals/zlib/crc32_simd.c", |
| "../externals/zlib/crc32_simd.h", |
| ] |
| |
| configs += [ ":zlib_internal_config" ] |
| |
| public_configs = [ ":zlib_arm_crc32_config" ] |
| |
| public_deps = [ ":zlib_common_headers" ] |
| } |
| } |
| |
| config("zlib_inflate_chunk_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" ] |
| } |
| } |
| } |
| |
| source_set("zlib_inflate_chunk_simd") { |
| visibility = [ ":*" ] |
| |
| if (use_x86_x64_optimizations || use_arm_neon_optimizations) { |
| include_dirs = [ |
| "../externals/zlib/", |
| "../externals/zlib/contrib/optimizations/", |
| ] |
| sources = [ |
| "../externals/zlib/contrib/optimizations/chunkcopy.h", |
| "../externals/zlib/contrib/optimizations/inffast_chunk.c", |
| "../externals/zlib/contrib/optimizations/inffast_chunk.h", |
| "../externals/zlib/contrib/optimizations/inflate.c", |
| ] |
| } |
| |
| configs += [ ":zlib_internal_config" ] |
| configs += [ ":zlib_warnings" ] |
| |
| public_configs = [ ":zlib_inflate_chunk_simd_config" ] |
| |
| public_deps = [ ":zlib_common_headers" ] |
| } |
| |
| config("zlib_crc32_simd_config") { |
| if (use_x86_x64_optimizations) { |
| defines = [ "CRC32_SIMD_SSE42_PCLMUL" ] |
| } |
| } |
| |
| source_set("zlib_crc32_simd") { |
| visibility = [ ":*" ] |
| |
| if (use_x86_x64_optimizations) { |
| sources = [ |
| "../externals/zlib/crc32_simd.c", |
| "../externals/zlib/crc32_simd.h", |
| "../externals/zlib/crc_folding.c", |
| ] |
| |
| if (!is_win || is_clang) { |
| cflags = [ |
| "-msse4.2", |
| "-mpclmul", |
| ] |
| } |
| } |
| |
| configs += [ ":zlib_internal_config" ] |
| |
| public_configs = [ ":zlib_crc32_simd_config" ] |
| |
| public_deps = [ ":zlib_common_headers" ] |
| } |
| |
| config("zlib_slide_hash_simd_config") { |
| if (use_x86_x64_optimizations) { |
| defines = [ "DEFLATE_SLIDE_HASH_SSE2" ] |
| } |
| |
| if (use_arm_neon_optimizations) { |
| defines = [ "DEFLATE_SLIDE_HASH_NEON" ] |
| } |
| } |
| |
| source_set("zlib_slide_hash_simd") { |
| visibility = [ ":*" ] |
| |
| if (use_x86_x64_optimizations) { |
| sources = [ "../externals/zlib/slide_hash_simd.h" ] |
| } |
| |
| if (use_arm_neon_optimizations) { |
| sources = [ "../externals/zlib/slide_hash_simd.h" ] |
| } |
| |
| configs += [ ":zlib_internal_config" ] |
| |
| public_configs = [ ":zlib_slide_hash_simd_config" ] |
| |
| public_deps = [ ":zlib_common_headers" ] |
| } |
| |
| config("zlib_warnings") { |
| if (is_clang) { |
| cflags = [ |
| "-Wno-incompatible-pointer-types", |
| "-Wunused-variable", |
| ] |
| } |
| } |
| |
| third_party("zlib") { |
| public_include_dirs = [ "../externals/zlib" ] |
| defines = [] |
| deps = [] |
| configs = [] |
| |
| sources = [ |
| "../externals/zlib/adler32.c", |
| "../externals/zlib/chromeconf.h", |
| "../externals/zlib/compress.c", |
| "../externals/zlib/contrib/optimizations/insert_string.h", |
| "../externals/zlib/cpu_features.c", |
| "../externals/zlib/cpu_features.h", |
| "../externals/zlib/crc32.c", |
| "../externals/zlib/crc32.h", |
| "../externals/zlib/deflate.c", |
| "../externals/zlib/deflate.h", |
| "../externals/zlib/gzclose.c", |
| "../externals/zlib/gzguts.h", |
| "../externals/zlib/gzlib.c", |
| "../externals/zlib/gzread.c", |
| "../externals/zlib/gzwrite.c", |
| "../externals/zlib/infback.c", |
| "../externals/zlib/inffast.c", |
| "../externals/zlib/inffast.h", |
| "../externals/zlib/inffixed.h", |
| "../externals/zlib/inflate.h", |
| "../externals/zlib/inftrees.c", |
| "../externals/zlib/inftrees.h", |
| "../externals/zlib/trees.c", |
| "../externals/zlib/trees.h", |
| "../externals/zlib/uncompr.c", |
| "../externals/zlib/zconf.h", |
| "../externals/zlib/zlib.h", |
| "../externals/zlib/zutil.c", |
| "../externals/zlib/zutil.h", |
| ] |
| |
| if (is_android) { |
| deps += [ "//third_party/cpu-features" ] |
| } |
| |
| if (!use_x86_x64_optimizations && !use_arm_neon_optimizations) { |
| defines += [ "CPU_NO_SIMD" ] |
| } |
| |
| if (use_x86_x64_optimizations || use_arm_neon_optimizations) { |
| deps += [ |
| ":zlib_adler32_simd", |
| ":zlib_inflate_chunk_simd", |
| ":zlib_slide_hash_simd", |
| ] |
| |
| if (use_x86_x64_optimizations) { |
| deps += [ ":zlib_crc32_simd" ] |
| } else if (use_arm_neon_optimizations) { |
| deps += [ ":zlib_arm_crc32" ] |
| } |
| } else { |
| sources += [ "../externals/zlib/inflate.c" ] |
| } |
| |
| configs += [ |
| ":zlib_internal_config", |
| ":zlib_warnings", |
| ] |
| |
| allow_circular_includes_from = deps |
| } |
| } |
| |
| config("zlib_config") { |
| } |
| |
| third_party("compression_utils_portable") { |
| visibility = [ "//third_party/externals/angle2:*" ] |
| public_include_dirs = [ "../externals/zlib/google" ] |
| sources = [ |
| "../externals/zlib/google/compression_utils_portable.cc", |
| "../externals/zlib/google/compression_utils_portable.h", |
| ] |
| public_deps = [ ":zlib" ] # either system or from source |
| } |