1cb93a386Sopenharmony_ci# Copyright 2016 Google Inc. 2cb93a386Sopenharmony_ci# 3cb93a386Sopenharmony_ci# Use of this source code is governed by a BSD-style license that can be 4cb93a386Sopenharmony_ci# found in the LICENSE file. 5cb93a386Sopenharmony_ci 6cb93a386Sopenharmony_cideclare_args() { 7cb93a386Sopenharmony_ci skia_use_system_zlib = is_official_build 8cb93a386Sopenharmony_ci} 9cb93a386Sopenharmony_ci 10cb93a386Sopenharmony_ciimport("../third_party.gni") 11cb93a386Sopenharmony_ci 12cb93a386Sopenharmony_ciif (skia_use_system_zlib) { 13cb93a386Sopenharmony_ci system("zlib") { 14cb93a386Sopenharmony_ci libs = [ "z" ] 15cb93a386Sopenharmony_ci } 16cb93a386Sopenharmony_ci} else { 17cb93a386Sopenharmony_ci # ARM optimizations disabled for Windows on Arm MSVC builds, see http://crbug.com/v8/10012. 18cb93a386Sopenharmony_ci use_arm_neon_optimizations = current_cpu == "arm64" && !(is_win && !is_clang) 19cb93a386Sopenharmony_ci use_x86_x64_optimizations = 20cb93a386Sopenharmony_ci (current_cpu == "x86" || current_cpu == "x64") && !is_ios 21cb93a386Sopenharmony_ci 22cb93a386Sopenharmony_ci config("zlib_simd_config") { 23cb93a386Sopenharmony_ci defines = [] 24cb93a386Sopenharmony_ci if (use_x86_x64_optimizations) { 25cb93a386Sopenharmony_ci if (is_win) { 26cb93a386Sopenharmony_ci defines += [ "X86_WINDOWS" ] 27cb93a386Sopenharmony_ci } else { 28cb93a386Sopenharmony_ci defines += [ "X86_NOT_WINDOWS" ] 29cb93a386Sopenharmony_ci } 30cb93a386Sopenharmony_ci defines += [ "ADLER32_SIMD_SSSE3" ] # Strangely this is needed for 31cb93a386Sopenharmony_ci # cpu_features.c 32cb93a386Sopenharmony_ci } 33cb93a386Sopenharmony_ci if (use_arm_neon_optimizations) { 34cb93a386Sopenharmony_ci if (is_android) { 35cb93a386Sopenharmony_ci defines += [ "ARMV8_OS_ANDROID" ] # also compatible with v7 36cb93a386Sopenharmony_ci } else if (is_linux || is_chromeos) { 37cb93a386Sopenharmony_ci defines += [ "ARMV8_OS_LINUX" ] 38cb93a386Sopenharmony_ci } else if (is_fuchsia) { 39cb93a386Sopenharmony_ci defines += [ "ARMV8_OS_FUCHSIA" ] 40cb93a386Sopenharmony_ci } else if (is_win) { 41cb93a386Sopenharmony_ci defines += [ "ARMV8_OS_WINDOWS" ] 42cb93a386Sopenharmony_ci } else if (is_ios || is_mac) { 43cb93a386Sopenharmony_ci # iOS@ARM is a special case where we always have NEON but don't check 44cb93a386Sopenharmony_ci # for crypto extensions. 45cb93a386Sopenharmony_ci defines += [ "ARM_OS_IOS" ] 46cb93a386Sopenharmony_ci } # else { 47cb93a386Sopenharmony_ci # assert(false, "Unsupported ARM OS") 48cb93a386Sopenharmony_ci # } 49cb93a386Sopenharmony_ci } 50cb93a386Sopenharmony_ci 51cb93a386Sopenharmony_ci # Warnings are just noise if we're not maintaining the code. 52cb93a386Sopenharmony_ci if (is_win) { 53cb93a386Sopenharmony_ci cflags = [ "/w" ] 54cb93a386Sopenharmony_ci } else { 55cb93a386Sopenharmony_ci cflags = [ "-w" ] 56cb93a386Sopenharmony_ci } 57cb93a386Sopenharmony_ci } 58cb93a386Sopenharmony_ci 59cb93a386Sopenharmony_ci source_set("zlib_adler32_simd") { 60cb93a386Sopenharmony_ci visibility = [ ":*" ] 61cb93a386Sopenharmony_ci configs += [ ":zlib_simd_config" ] 62cb93a386Sopenharmony_ci if (use_x86_x64_optimizations) { 63cb93a386Sopenharmony_ci defines = [ "ADLER32_SIMD_SSSE3" ] 64cb93a386Sopenharmony_ci if (!is_win || is_clang) { 65cb93a386Sopenharmony_ci cflags = [ "-mssse3" ] 66cb93a386Sopenharmony_ci } 67cb93a386Sopenharmony_ci } 68cb93a386Sopenharmony_ci if (use_arm_neon_optimizations) { 69cb93a386Sopenharmony_ci defines = [ "ADLER32_SIMD_NEON" ] 70cb93a386Sopenharmony_ci } 71cb93a386Sopenharmony_ci sources = [ "../externals/zlib/adler32_simd.c" ] 72cb93a386Sopenharmony_ci } 73cb93a386Sopenharmony_ci 74cb93a386Sopenharmony_ci source_set("zlib_crc32_simd") { 75cb93a386Sopenharmony_ci visibility = [ ":*" ] 76cb93a386Sopenharmony_ci configs += [ ":zlib_simd_config" ] 77cb93a386Sopenharmony_ci 78cb93a386Sopenharmony_ci # Disabled for iPhone, as described in DDI0487C_a_armv8_arm: 79cb93a386Sopenharmony_ci # "All implementations of the ARMv8.1 architecture are required to 80cb93a386Sopenharmony_ci # implement the CRC32* instructions. These are optional in ARMv8.0." 81cb93a386Sopenharmony_ci if (!is_ios && use_arm_neon_optimizations) { 82cb93a386Sopenharmony_ci defines = [ "CRC32_ARMV8_CRC32" ] 83cb93a386Sopenharmony_ci 84cb93a386Sopenharmony_ci # An ARMv7 GCC build will fail to compile without building this target 85cb93a386Sopenharmony_ci # for ARMv8-a+crc and letting runtime cpu detection select the correct 86cb93a386Sopenharmony_ci # function. 87cb93a386Sopenharmony_ci if (!is_win && !is_clang) { 88cb93a386Sopenharmony_ci cflags_c = [ "-march=armv8-a+crc" ] 89cb93a386Sopenharmony_ci } 90cb93a386Sopenharmony_ci } 91cb93a386Sopenharmony_ci 92cb93a386Sopenharmony_ci if (use_x86_x64_optimizations) { 93cb93a386Sopenharmony_ci defines = [ "CRC32_SIMD_SSE42_PCLMUL" ] 94cb93a386Sopenharmony_ci if (!is_win || is_clang) { 95cb93a386Sopenharmony_ci cflags = [ 96cb93a386Sopenharmony_ci "-msse4.2", 97cb93a386Sopenharmony_ci "-mpclmul", 98cb93a386Sopenharmony_ci ] 99cb93a386Sopenharmony_ci } 100cb93a386Sopenharmony_ci } 101cb93a386Sopenharmony_ci 102cb93a386Sopenharmony_ci sources = [ "../externals/zlib/crc32_simd.c" ] 103cb93a386Sopenharmony_ci } 104cb93a386Sopenharmony_ci 105cb93a386Sopenharmony_ci source_set("zlib_inflate_chunk_simd") { 106cb93a386Sopenharmony_ci visibility = [ ":*" ] 107cb93a386Sopenharmony_ci configs += [ ":zlib_simd_config" ] 108cb93a386Sopenharmony_ci if (use_x86_x64_optimizations) { 109cb93a386Sopenharmony_ci defines = [ "INFLATE_CHUNK_SIMD_SSE2" ] 110cb93a386Sopenharmony_ci if (current_cpu == "x64") { 111cb93a386Sopenharmony_ci defines += [ "INFLATE_CHUNK_READ_64LE" ] 112cb93a386Sopenharmony_ci } 113cb93a386Sopenharmony_ci } 114cb93a386Sopenharmony_ci if (use_arm_neon_optimizations) { 115cb93a386Sopenharmony_ci defines = [ "INFLATE_CHUNK_SIMD_NEON" ] 116cb93a386Sopenharmony_ci if (current_cpu == "arm64") { 117cb93a386Sopenharmony_ci defines += [ "INFLATE_CHUNK_READ_64LE" ] 118cb93a386Sopenharmony_ci } 119cb93a386Sopenharmony_ci } 120cb93a386Sopenharmony_ci if (use_x86_x64_optimizations || use_arm_neon_optimizations) { 121cb93a386Sopenharmony_ci include_dirs = [ 122cb93a386Sopenharmony_ci "../externals/zlib/", 123cb93a386Sopenharmony_ci "../externals/zlib/contrib/optimizations/", 124cb93a386Sopenharmony_ci ] 125cb93a386Sopenharmony_ci sources = [ 126cb93a386Sopenharmony_ci "../externals/zlib/contrib/optimizations/inffast_chunk.c", 127cb93a386Sopenharmony_ci "../externals/zlib/contrib/optimizations/inflate.c", 128cb93a386Sopenharmony_ci ] 129cb93a386Sopenharmony_ci } 130cb93a386Sopenharmony_ci } 131cb93a386Sopenharmony_ci 132cb93a386Sopenharmony_ci source_set("zlib_x86_x64_simd") { 133cb93a386Sopenharmony_ci visibility = [ ":*" ] 134cb93a386Sopenharmony_ci configs += [ ":zlib_simd_config" ] 135cb93a386Sopenharmony_ci if (use_x86_x64_optimizations) { 136cb93a386Sopenharmony_ci defines = [ 137cb93a386Sopenharmony_ci "CRC32_SIMD_SSE42_PCLMUL", 138cb93a386Sopenharmony_ci "DEFLATE_FILL_WINDOW_SSE2", 139cb93a386Sopenharmony_ci ] 140cb93a386Sopenharmony_ci if (!is_win || is_clang) { 141cb93a386Sopenharmony_ci cflags = [ 142cb93a386Sopenharmony_ci "-msse4.2", 143cb93a386Sopenharmony_ci "-mpclmul", 144cb93a386Sopenharmony_ci ] 145cb93a386Sopenharmony_ci } 146cb93a386Sopenharmony_ci sources = [ 147cb93a386Sopenharmony_ci "../externals/zlib/crc_folding.c", 148cb93a386Sopenharmony_ci "../externals/zlib/fill_window_sse.c", 149cb93a386Sopenharmony_ci ] 150cb93a386Sopenharmony_ci } 151cb93a386Sopenharmony_ci } 152cb93a386Sopenharmony_ci 153cb93a386Sopenharmony_ci third_party("zlib") { 154cb93a386Sopenharmony_ci public_include_dirs = [ "../externals/zlib" ] 155cb93a386Sopenharmony_ci defines = [ "ZLIB_IMPLEMENTATION" ] 156cb93a386Sopenharmony_ci deps = [] 157cb93a386Sopenharmony_ci configs = [] 158cb93a386Sopenharmony_ci 159cb93a386Sopenharmony_ci sources = [ 160cb93a386Sopenharmony_ci "../externals/zlib/adler32.c", 161cb93a386Sopenharmony_ci "../externals/zlib/compress.c", 162cb93a386Sopenharmony_ci "../externals/zlib/cpu_features.c", 163cb93a386Sopenharmony_ci "../externals/zlib/crc32.c", 164cb93a386Sopenharmony_ci "../externals/zlib/deflate.c", 165cb93a386Sopenharmony_ci "../externals/zlib/gzclose.c", 166cb93a386Sopenharmony_ci "../externals/zlib/gzlib.c", 167cb93a386Sopenharmony_ci "../externals/zlib/gzread.c", 168cb93a386Sopenharmony_ci "../externals/zlib/gzwrite.c", 169cb93a386Sopenharmony_ci "../externals/zlib/infback.c", 170cb93a386Sopenharmony_ci "../externals/zlib/inffast.c", 171cb93a386Sopenharmony_ci "../externals/zlib/inftrees.c", 172cb93a386Sopenharmony_ci "../externals/zlib/trees.c", 173cb93a386Sopenharmony_ci "../externals/zlib/uncompr.c", 174cb93a386Sopenharmony_ci "../externals/zlib/zutil.c", 175cb93a386Sopenharmony_ci ] 176cb93a386Sopenharmony_ci 177cb93a386Sopenharmony_ci if (is_android) { 178cb93a386Sopenharmony_ci deps += [ "${skia_third_party_dir}/cpu-features" ] 179cb93a386Sopenharmony_ci } 180cb93a386Sopenharmony_ci 181cb93a386Sopenharmony_ci if (!use_x86_x64_optimizations && !use_arm_neon_optimizations) { 182cb93a386Sopenharmony_ci defines += [ "CPU_NO_SIMD" ] 183cb93a386Sopenharmony_ci sources += [ "../externals/zlib/inflate.c" ] 184cb93a386Sopenharmony_ci } else { 185cb93a386Sopenharmony_ci defines += [ "ADLER32_SIMD_NEON" ] 186cb93a386Sopenharmony_ci configs += [ ":zlib_simd_config" ] 187cb93a386Sopenharmony_ci deps += [ 188cb93a386Sopenharmony_ci ":zlib_adler32_simd", 189cb93a386Sopenharmony_ci ":zlib_crc32_simd", 190cb93a386Sopenharmony_ci ":zlib_inflate_chunk_simd", 191cb93a386Sopenharmony_ci ":zlib_x86_x64_simd", 192cb93a386Sopenharmony_ci ] 193cb93a386Sopenharmony_ci } 194cb93a386Sopenharmony_ci } 195cb93a386Sopenharmony_ci} 196cb93a386Sopenharmony_ci 197cb93a386Sopenharmony_ciconfig("zlib_config") { 198cb93a386Sopenharmony_ci} 199cb93a386Sopenharmony_ci 200cb93a386Sopenharmony_cithird_party("compression_utils_portable") { 201cb93a386Sopenharmony_ci visibility = [ "${skia_third_party_dir}/externals/angle2:*" ] 202cb93a386Sopenharmony_ci public_include_dirs = [ "../externals/zlib/google" ] 203cb93a386Sopenharmony_ci sources = [ 204cb93a386Sopenharmony_ci "../externals/zlib/google/compression_utils_portable.cc", 205cb93a386Sopenharmony_ci "../externals/zlib/google/compression_utils_portable.h", 206cb93a386Sopenharmony_ci ] 207cb93a386Sopenharmony_ci public_deps = [ ":zlib" ] # either system or from source 208cb93a386Sopenharmony_ci} 209