1# Copyright 2016 Google Inc. 2# 3# Use of this source code is governed by a BSD-style license that can be 4# found in the LICENSE file. 5 6import("../third_party.gni") 7import("zlib.gni") 8 9if (skia_use_system_zlib) { 10 system("zlib") { 11 libs = [ "z" ] 12 } 13} else { 14 config("zlib_internal_config") { 15 defines = [ "ZLIB_IMPLEMENTATION" ] 16 } 17 source_set("zlib_common_headers") { 18 visibility = [ ":*" ] 19 sources = [ 20 "../externals/zlib/chromeconf.h", 21 "../externals/zlib/deflate.h", 22 "../externals/zlib/inffast.h", 23 "../externals/zlib/inffixed.h", 24 "../externals/zlib/inflate.h", 25 "../externals/zlib/inftrees.h", 26 "../externals/zlib/zconf.h", 27 "../externals/zlib/zlib.h", 28 "../externals/zlib/zutil.h", 29 ] 30 } 31 32 use_arm_neon_optimizations = 33 (current_cpu == "arm" || current_cpu == "arm64") && (is_clang || !is_win) 34 use_x86_x64_optimizations = 35 (current_cpu == "x86" || current_cpu == "x64") && !is_ios 36 37 config("zlib_adler32_simd_config") { 38 if (use_x86_x64_optimizations) { 39 defines = [ "ADLER32_SIMD_SSSE3" ] 40 if (is_win) { 41 defines += [ "X86_WINDOWS" ] 42 } else { 43 defines += [ "X86_NOT_WINDOWS" ] 44 } 45 } 46 47 if (use_arm_neon_optimizations) { 48 defines = [ "ADLER32_SIMD_NEON" ] 49 } 50 } 51 52 source_set("zlib_adler32_simd") { 53 visibility = [ ":*" ] 54 55 if (use_x86_x64_optimizations) { 56 sources = [ 57 "../externals/zlib/adler32_simd.c", 58 "../externals/zlib/adler32_simd.h", 59 ] 60 61 if (!is_win || is_clang) { 62 cflags = [ "-mssse3" ] 63 } 64 } 65 66 if (use_arm_neon_optimizations) { 67 sources = [ 68 "../externals/zlib/adler32_simd.c", 69 "../externals/zlib/adler32_simd.h", 70 ] 71 } 72 73 configs += [ ":zlib_internal_config" ] 74 75 public_configs = [ ":zlib_adler32_simd_config" ] 76 77 public_deps = [ ":zlib_common_headers" ] 78 } 79 80 if (use_arm_neon_optimizations) { 81 config("zlib_arm_crc32_config") { 82 defines = [ "CRC32_ARMV8_CRC32" ] 83 if (is_android) { 84 defines += [ "ARMV8_OS_ANDROID" ] 85 } else if (is_linux || is_chromeos) { 86 defines += [ "ARMV8_OS_LINUX" ] 87 } else if (is_mac) { 88 defines += [ "ARMV8_OS_MACOS" ] 89 } else if (is_ios) { 90 defines += [ "ARMV8_OS_IOS" ] 91 } else if (is_fuchsia) { 92 defines += [ "ARMV8_OS_FUCHSIA" ] 93 } else if (is_win) { 94 defines += [ "ARMV8_OS_WINDOWS" ] 95 } else { 96 assert(false, "Unsupported ARM OS") 97 } 98 } 99 100 source_set("zlib_arm_crc32") { 101 visibility = [ ":*" ] 102 103 include_dirs = [ 104 "../externals/zlib/", 105 "../externals/zlib/contrib/optimizations/", 106 ] 107 108 if (!is_win && !is_clang) { 109 cflags_c = [ "-march=armv8-a+aes+crc" ] 110 } 111 112 sources = [ 113 "../externals/zlib/crc32_simd.c", 114 "../externals/zlib/crc32_simd.h", 115 ] 116 117 configs += [ ":zlib_internal_config" ] 118 119 public_configs = [ ":zlib_arm_crc32_config" ] 120 121 public_deps = [ ":zlib_common_headers" ] 122 } 123 } 124 125 config("zlib_inflate_chunk_simd_config") { 126 if (use_x86_x64_optimizations) { 127 defines = [ "INFLATE_CHUNK_SIMD_SSE2" ] 128 129 if (current_cpu == "x64") { 130 defines += [ "INFLATE_CHUNK_READ_64LE" ] 131 } 132 } 133 134 if (use_arm_neon_optimizations) { 135 defines = [ "INFLATE_CHUNK_SIMD_NEON" ] 136 137 if (current_cpu == "arm64") { 138 defines += [ "INFLATE_CHUNK_READ_64LE" ] 139 } 140 } 141 } 142 143 source_set("zlib_inflate_chunk_simd") { 144 visibility = [ ":*" ] 145 146 if (use_x86_x64_optimizations || use_arm_neon_optimizations) { 147 include_dirs = [ 148 "../externals/zlib/", 149 "../externals/zlib/contrib/optimizations/", 150 ] 151 sources = [ 152 "../externals/zlib/contrib/optimizations/chunkcopy.h", 153 "../externals/zlib/contrib/optimizations/inffast_chunk.c", 154 "../externals/zlib/contrib/optimizations/inffast_chunk.h", 155 "../externals/zlib/contrib/optimizations/inflate.c", 156 ] 157 } 158 159 configs += [ ":zlib_internal_config" ] 160 configs += [ ":zlib_warnings" ] 161 162 public_configs = [ ":zlib_inflate_chunk_simd_config" ] 163 164 public_deps = [ ":zlib_common_headers" ] 165 } 166 167 config("zlib_crc32_simd_config") { 168 if (use_x86_x64_optimizations) { 169 defines = [ "CRC32_SIMD_SSE42_PCLMUL" ] 170 } 171 } 172 173 source_set("zlib_crc32_simd") { 174 visibility = [ ":*" ] 175 176 if (use_x86_x64_optimizations) { 177 sources = [ 178 "../externals/zlib/crc32_simd.c", 179 "../externals/zlib/crc32_simd.h", 180 "../externals/zlib/crc_folding.c", 181 ] 182 183 if (!is_win || is_clang) { 184 cflags = [ 185 "-msse4.2", 186 "-mpclmul", 187 ] 188 } 189 } 190 191 configs += [ ":zlib_internal_config" ] 192 193 public_configs = [ ":zlib_crc32_simd_config" ] 194 195 public_deps = [ ":zlib_common_headers" ] 196 } 197 198 config("zlib_slide_hash_simd_config") { 199 if (use_x86_x64_optimizations) { 200 defines = [ "DEFLATE_SLIDE_HASH_SSE2" ] 201 } 202 203 if (use_arm_neon_optimizations) { 204 defines = [ "DEFLATE_SLIDE_HASH_NEON" ] 205 } 206 } 207 208 source_set("zlib_slide_hash_simd") { 209 visibility = [ ":*" ] 210 211 if (use_x86_x64_optimizations) { 212 sources = [ "../externals/zlib/slide_hash_simd.h" ] 213 } 214 215 if (use_arm_neon_optimizations) { 216 sources = [ "../externals/zlib/slide_hash_simd.h" ] 217 } 218 219 configs += [ ":zlib_internal_config" ] 220 221 public_configs = [ ":zlib_slide_hash_simd_config" ] 222 223 public_deps = [ ":zlib_common_headers" ] 224 } 225 226 config("zlib_warnings") { 227 if (is_clang) { 228 cflags = [ 229 "-Wno-incompatible-pointer-types", 230 "-Wunused-variable", 231 ] 232 } 233 } 234 235 third_party("zlib") { 236 public_include_dirs = [ "../externals/zlib" ] 237 defines = [] 238 deps = [] 239 configs = [] 240 241 sources = [ 242 "../externals/zlib/adler32.c", 243 "../externals/zlib/chromeconf.h", 244 "../externals/zlib/compress.c", 245 "../externals/zlib/contrib/optimizations/insert_string.h", 246 "../externals/zlib/cpu_features.c", 247 "../externals/zlib/cpu_features.h", 248 "../externals/zlib/crc32.c", 249 "../externals/zlib/crc32.h", 250 "../externals/zlib/deflate.c", 251 "../externals/zlib/deflate.h", 252 "../externals/zlib/gzclose.c", 253 "../externals/zlib/gzguts.h", 254 "../externals/zlib/gzlib.c", 255 "../externals/zlib/gzread.c", 256 "../externals/zlib/gzwrite.c", 257 "../externals/zlib/infback.c", 258 "../externals/zlib/inffast.c", 259 "../externals/zlib/inffast.h", 260 "../externals/zlib/inffixed.h", 261 "../externals/zlib/inflate.h", 262 "../externals/zlib/inftrees.c", 263 "../externals/zlib/inftrees.h", 264 "../externals/zlib/trees.c", 265 "../externals/zlib/trees.h", 266 "../externals/zlib/uncompr.c", 267 "../externals/zlib/zconf.h", 268 "../externals/zlib/zlib.h", 269 "../externals/zlib/zutil.c", 270 "../externals/zlib/zutil.h", 271 ] 272 273 if (is_android) { 274 deps += [ "//third_party/cpu-features" ] 275 } 276 277 if (!use_x86_x64_optimizations && !use_arm_neon_optimizations) { 278 defines += [ "CPU_NO_SIMD" ] 279 } 280 281 if (use_x86_x64_optimizations || use_arm_neon_optimizations) { 282 deps += [ 283 ":zlib_adler32_simd", 284 ":zlib_inflate_chunk_simd", 285 ":zlib_slide_hash_simd", 286 ] 287 288 if (use_x86_x64_optimizations) { 289 deps += [ ":zlib_crc32_simd" ] 290 } else if (use_arm_neon_optimizations) { 291 deps += [ ":zlib_arm_crc32" ] 292 } 293 } else { 294 sources += [ "../externals/zlib/inflate.c" ] 295 } 296 297 configs += [ 298 ":zlib_internal_config", 299 ":zlib_warnings", 300 ] 301 302 allow_circular_includes_from = deps 303 } 304} 305 306config("zlib_config") { 307} 308 309third_party("compression_utils_portable") { 310 visibility = [ "//third_party/externals/angle2:*" ] 311 public_include_dirs = [ "../externals/zlib/google" ] 312 sources = [ 313 "../externals/zlib/google/compression_utils_portable.cc", 314 "../externals/zlib/google/compression_utils_portable.h", 315 ] 316 public_deps = [ ":zlib" ] # either system or from source 317} 318