xref: /aosp_15_r20/external/skia/third_party/zlib/BUILD.gn (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
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