xref: /aosp_15_r20/external/zlib/BUILD.gn (revision 86ee64e75fa5f8bce2c8c356138035642429cd05)
1*86ee64e7SAndroid Build Coastguard Worker# Copyright 2013 The Chromium Authors
2*86ee64e7SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be
3*86ee64e7SAndroid Build Coastguard Worker# found in the LICENSE file.
4*86ee64e7SAndroid Build Coastguard Worker
5*86ee64e7SAndroid Build Coastguard Workerimport("//build/config/compiler/compiler.gni")
6*86ee64e7SAndroid Build Coastguard Workerimport("//build/config/dcheck_always_on.gni")
7*86ee64e7SAndroid Build Coastguard Worker
8*86ee64e7SAndroid Build Coastguard Workerdeclare_args() {
9*86ee64e7SAndroid Build Coastguard Worker  # Expose zlib's symbols, used by Node.js to provide zlib APIs for its native
10*86ee64e7SAndroid Build Coastguard Worker  # modules.
11*86ee64e7SAndroid Build Coastguard Worker  zlib_symbols_visible = false
12*86ee64e7SAndroid Build Coastguard Worker}
13*86ee64e7SAndroid Build Coastguard Worker
14*86ee64e7SAndroid Build Coastguard Workerif (build_with_chromium) {
15*86ee64e7SAndroid Build Coastguard Worker  import("//testing/test.gni")
16*86ee64e7SAndroid Build Coastguard Worker}
17*86ee64e7SAndroid Build Coastguard Worker
18*86ee64e7SAndroid Build Coastguard Workerif (current_cpu == "arm" || current_cpu == "arm64") {
19*86ee64e7SAndroid Build Coastguard Worker  import("//build/config/arm.gni")
20*86ee64e7SAndroid Build Coastguard Worker}
21*86ee64e7SAndroid Build Coastguard Worker
22*86ee64e7SAndroid Build Coastguard Workerconfig("zlib_config") {
23*86ee64e7SAndroid Build Coastguard Worker  include_dirs = [ "." ]
24*86ee64e7SAndroid Build Coastguard Worker
25*86ee64e7SAndroid Build Coastguard Worker  if (zlib_symbols_visible) {
26*86ee64e7SAndroid Build Coastguard Worker    defines = [ "ZLIB_DLL" ]
27*86ee64e7SAndroid Build Coastguard Worker  }
28*86ee64e7SAndroid Build Coastguard Worker}
29*86ee64e7SAndroid Build Coastguard Worker
30*86ee64e7SAndroid Build Coastguard Workerconfig("zlib_internal_config") {
31*86ee64e7SAndroid Build Coastguard Worker  defines = [ "ZLIB_IMPLEMENTATION" ]
32*86ee64e7SAndroid Build Coastguard Worker
33*86ee64e7SAndroid Build Coastguard Worker  if (!is_debug) {
34*86ee64e7SAndroid Build Coastguard Worker    # Build code using -O3, see: crbug.com/1084371.
35*86ee64e7SAndroid Build Coastguard Worker    configs = [ "//build/config/compiler:optimize_speed" ]
36*86ee64e7SAndroid Build Coastguard Worker  }
37*86ee64e7SAndroid Build Coastguard Worker  if (is_debug || dcheck_always_on || use_fuzzing_engine) {
38*86ee64e7SAndroid Build Coastguard Worker    # Enable zlib's asserts in debug and fuzzer builds.
39*86ee64e7SAndroid Build Coastguard Worker    defines += [ "ZLIB_DEBUG" ]
40*86ee64e7SAndroid Build Coastguard Worker  }
41*86ee64e7SAndroid Build Coastguard Worker
42*86ee64e7SAndroid Build Coastguard Worker  if (is_win && !is_clang) {
43*86ee64e7SAndroid Build Coastguard Worker    # V8 supports building with msvc, these silence some warnings that
44*86ee64e7SAndroid Build Coastguard Worker    # causes compilation to fail (https://crbug.com/1255096).
45*86ee64e7SAndroid Build Coastguard Worker    cflags = [
46*86ee64e7SAndroid Build Coastguard Worker      "/wd4244",
47*86ee64e7SAndroid Build Coastguard Worker      "/wd4100",
48*86ee64e7SAndroid Build Coastguard Worker      "/wd4702",
49*86ee64e7SAndroid Build Coastguard Worker      "/wd4127",
50*86ee64e7SAndroid Build Coastguard Worker    ]
51*86ee64e7SAndroid Build Coastguard Worker  }
52*86ee64e7SAndroid Build Coastguard Worker}
53*86ee64e7SAndroid Build Coastguard Worker
54*86ee64e7SAndroid Build Coastguard Workersource_set("zlib_common_headers") {
55*86ee64e7SAndroid Build Coastguard Worker  visibility = [ ":*" ]
56*86ee64e7SAndroid Build Coastguard Worker
57*86ee64e7SAndroid Build Coastguard Worker  sources = [
58*86ee64e7SAndroid Build Coastguard Worker    "chromeconf.h",
59*86ee64e7SAndroid Build Coastguard Worker    "deflate.h",
60*86ee64e7SAndroid Build Coastguard Worker    "inffast.h",
61*86ee64e7SAndroid Build Coastguard Worker    "inffixed.h",
62*86ee64e7SAndroid Build Coastguard Worker    "inflate.h",
63*86ee64e7SAndroid Build Coastguard Worker    "inftrees.h",
64*86ee64e7SAndroid Build Coastguard Worker    "zconf.h",
65*86ee64e7SAndroid Build Coastguard Worker    "zlib.h",
66*86ee64e7SAndroid Build Coastguard Worker    "zutil.h",
67*86ee64e7SAndroid Build Coastguard Worker  ]
68*86ee64e7SAndroid Build Coastguard Worker}
69*86ee64e7SAndroid Build Coastguard Worker
70*86ee64e7SAndroid Build Coastguard Workeruse_arm_neon_optimizations = false
71*86ee64e7SAndroid Build Coastguard Workerif ((current_cpu == "arm" || current_cpu == "arm64") &&
72*86ee64e7SAndroid Build Coastguard Worker    !(is_win && !is_clang)) {
73*86ee64e7SAndroid Build Coastguard Worker  # TODO([email protected]): Optimizations temporarily disabled for
74*86ee64e7SAndroid Build Coastguard Worker  # Windows on Arm MSVC builds, see http://crbug.com/v8/10012.
75*86ee64e7SAndroid Build Coastguard Worker  if (arm_use_neon) {
76*86ee64e7SAndroid Build Coastguard Worker    use_arm_neon_optimizations = true
77*86ee64e7SAndroid Build Coastguard Worker  }
78*86ee64e7SAndroid Build Coastguard Worker}
79*86ee64e7SAndroid Build Coastguard Worker
80*86ee64e7SAndroid Build Coastguard Workeruse_x86_x64_optimizations =
81*86ee64e7SAndroid Build Coastguard Worker    (current_cpu == "x86" || current_cpu == "x64") && !is_ios
82*86ee64e7SAndroid Build Coastguard Worker
83*86ee64e7SAndroid Build Coastguard Workerconfig("zlib_adler32_simd_config") {
84*86ee64e7SAndroid Build Coastguard Worker  if (use_x86_x64_optimizations) {
85*86ee64e7SAndroid Build Coastguard Worker    defines = [ "ADLER32_SIMD_SSSE3" ]
86*86ee64e7SAndroid Build Coastguard Worker    if (is_win) {
87*86ee64e7SAndroid Build Coastguard Worker      defines += [ "X86_WINDOWS" ]
88*86ee64e7SAndroid Build Coastguard Worker    } else {
89*86ee64e7SAndroid Build Coastguard Worker      defines += [ "X86_NOT_WINDOWS" ]
90*86ee64e7SAndroid Build Coastguard Worker    }
91*86ee64e7SAndroid Build Coastguard Worker  }
92*86ee64e7SAndroid Build Coastguard Worker
93*86ee64e7SAndroid Build Coastguard Worker  if (use_arm_neon_optimizations) {
94*86ee64e7SAndroid Build Coastguard Worker    defines = [ "ADLER32_SIMD_NEON" ]
95*86ee64e7SAndroid Build Coastguard Worker  }
96*86ee64e7SAndroid Build Coastguard Worker}
97*86ee64e7SAndroid Build Coastguard Worker
98*86ee64e7SAndroid Build Coastguard Workersource_set("zlib_adler32_simd") {
99*86ee64e7SAndroid Build Coastguard Worker  visibility = [ ":*" ]
100*86ee64e7SAndroid Build Coastguard Worker
101*86ee64e7SAndroid Build Coastguard Worker  if (use_x86_x64_optimizations) {
102*86ee64e7SAndroid Build Coastguard Worker    sources = [
103*86ee64e7SAndroid Build Coastguard Worker      "adler32_simd.c",
104*86ee64e7SAndroid Build Coastguard Worker      "adler32_simd.h",
105*86ee64e7SAndroid Build Coastguard Worker    ]
106*86ee64e7SAndroid Build Coastguard Worker
107*86ee64e7SAndroid Build Coastguard Worker    if (!is_win || is_clang) {
108*86ee64e7SAndroid Build Coastguard Worker      cflags = [ "-mssse3" ]
109*86ee64e7SAndroid Build Coastguard Worker    }
110*86ee64e7SAndroid Build Coastguard Worker  }
111*86ee64e7SAndroid Build Coastguard Worker
112*86ee64e7SAndroid Build Coastguard Worker  if (use_arm_neon_optimizations) {
113*86ee64e7SAndroid Build Coastguard Worker    sources = [
114*86ee64e7SAndroid Build Coastguard Worker      "adler32_simd.c",
115*86ee64e7SAndroid Build Coastguard Worker      "adler32_simd.h",
116*86ee64e7SAndroid Build Coastguard Worker    ]
117*86ee64e7SAndroid Build Coastguard Worker  }
118*86ee64e7SAndroid Build Coastguard Worker
119*86ee64e7SAndroid Build Coastguard Worker  configs += [ ":zlib_internal_config" ]
120*86ee64e7SAndroid Build Coastguard Worker
121*86ee64e7SAndroid Build Coastguard Worker  public_configs = [ ":zlib_adler32_simd_config" ]
122*86ee64e7SAndroid Build Coastguard Worker
123*86ee64e7SAndroid Build Coastguard Worker  public_deps = [ ":zlib_common_headers" ]
124*86ee64e7SAndroid Build Coastguard Worker}
125*86ee64e7SAndroid Build Coastguard Worker
126*86ee64e7SAndroid Build Coastguard Workerif (use_arm_neon_optimizations) {
127*86ee64e7SAndroid Build Coastguard Worker  config("zlib_arm_crc32_config") {
128*86ee64e7SAndroid Build Coastguard Worker    defines = [ "CRC32_ARMV8_CRC32" ]
129*86ee64e7SAndroid Build Coastguard Worker    if (is_android) {
130*86ee64e7SAndroid Build Coastguard Worker      defines += [ "ARMV8_OS_ANDROID" ]
131*86ee64e7SAndroid Build Coastguard Worker    } else if (is_linux || is_chromeos) {
132*86ee64e7SAndroid Build Coastguard Worker      defines += [ "ARMV8_OS_LINUX" ]
133*86ee64e7SAndroid Build Coastguard Worker    } else if (is_mac) {
134*86ee64e7SAndroid Build Coastguard Worker      defines += [ "ARMV8_OS_MACOS" ]
135*86ee64e7SAndroid Build Coastguard Worker    } else if (is_ios) {
136*86ee64e7SAndroid Build Coastguard Worker      defines += [ "ARMV8_OS_IOS" ]
137*86ee64e7SAndroid Build Coastguard Worker    } else if (is_fuchsia) {
138*86ee64e7SAndroid Build Coastguard Worker      defines += [ "ARMV8_OS_FUCHSIA" ]
139*86ee64e7SAndroid Build Coastguard Worker    } else if (is_win) {
140*86ee64e7SAndroid Build Coastguard Worker      defines += [ "ARMV8_OS_WINDOWS" ]
141*86ee64e7SAndroid Build Coastguard Worker    } else {
142*86ee64e7SAndroid Build Coastguard Worker      assert(false, "Unsupported ARM OS")
143*86ee64e7SAndroid Build Coastguard Worker    }
144*86ee64e7SAndroid Build Coastguard Worker  }
145*86ee64e7SAndroid Build Coastguard Worker
146*86ee64e7SAndroid Build Coastguard Worker  source_set("zlib_arm_crc32") {
147*86ee64e7SAndroid Build Coastguard Worker    visibility = [ ":*" ]
148*86ee64e7SAndroid Build Coastguard Worker
149*86ee64e7SAndroid Build Coastguard Worker    include_dirs = [ "." ]
150*86ee64e7SAndroid Build Coastguard Worker
151*86ee64e7SAndroid Build Coastguard Worker    if (!is_win && !is_clang) {
152*86ee64e7SAndroid Build Coastguard Worker      assert(!use_thin_lto,
153*86ee64e7SAndroid Build Coastguard Worker             "ThinLTO fails mixing different module-level targets")
154*86ee64e7SAndroid Build Coastguard Worker      cflags_c = [ "-march=armv8-a+aes+crc" ]
155*86ee64e7SAndroid Build Coastguard Worker    }
156*86ee64e7SAndroid Build Coastguard Worker
157*86ee64e7SAndroid Build Coastguard Worker    sources = [
158*86ee64e7SAndroid Build Coastguard Worker      "crc32_simd.c",
159*86ee64e7SAndroid Build Coastguard Worker      "crc32_simd.h",
160*86ee64e7SAndroid Build Coastguard Worker    ]
161*86ee64e7SAndroid Build Coastguard Worker
162*86ee64e7SAndroid Build Coastguard Worker    configs += [ ":zlib_internal_config" ]
163*86ee64e7SAndroid Build Coastguard Worker
164*86ee64e7SAndroid Build Coastguard Worker    public_configs = [ ":zlib_arm_crc32_config" ]
165*86ee64e7SAndroid Build Coastguard Worker
166*86ee64e7SAndroid Build Coastguard Worker    public_deps = [ ":zlib_common_headers" ]
167*86ee64e7SAndroid Build Coastguard Worker  }
168*86ee64e7SAndroid Build Coastguard Worker}
169*86ee64e7SAndroid Build Coastguard Worker
170*86ee64e7SAndroid Build Coastguard Workerconfig("zlib_inflate_chunk_simd_config") {
171*86ee64e7SAndroid Build Coastguard Worker  if (use_x86_x64_optimizations) {
172*86ee64e7SAndroid Build Coastguard Worker    defines = [ "INFLATE_CHUNK_SIMD_SSE2" ]
173*86ee64e7SAndroid Build Coastguard Worker
174*86ee64e7SAndroid Build Coastguard Worker    if (current_cpu == "x64") {
175*86ee64e7SAndroid Build Coastguard Worker      defines += [ "INFLATE_CHUNK_READ_64LE" ]
176*86ee64e7SAndroid Build Coastguard Worker    }
177*86ee64e7SAndroid Build Coastguard Worker  }
178*86ee64e7SAndroid Build Coastguard Worker
179*86ee64e7SAndroid Build Coastguard Worker  if (use_arm_neon_optimizations) {
180*86ee64e7SAndroid Build Coastguard Worker    defines = [ "INFLATE_CHUNK_SIMD_NEON" ]
181*86ee64e7SAndroid Build Coastguard Worker
182*86ee64e7SAndroid Build Coastguard Worker    if (current_cpu == "arm64") {
183*86ee64e7SAndroid Build Coastguard Worker      defines += [ "INFLATE_CHUNK_READ_64LE" ]
184*86ee64e7SAndroid Build Coastguard Worker    }
185*86ee64e7SAndroid Build Coastguard Worker  }
186*86ee64e7SAndroid Build Coastguard Worker}
187*86ee64e7SAndroid Build Coastguard Worker
188*86ee64e7SAndroid Build Coastguard Workersource_set("zlib_inflate_chunk_simd") {
189*86ee64e7SAndroid Build Coastguard Worker  visibility = [ ":*" ]
190*86ee64e7SAndroid Build Coastguard Worker
191*86ee64e7SAndroid Build Coastguard Worker  if (use_x86_x64_optimizations || use_arm_neon_optimizations) {
192*86ee64e7SAndroid Build Coastguard Worker    include_dirs = [ "." ]
193*86ee64e7SAndroid Build Coastguard Worker
194*86ee64e7SAndroid Build Coastguard Worker    sources = [
195*86ee64e7SAndroid Build Coastguard Worker      "contrib/optimizations/chunkcopy.h",
196*86ee64e7SAndroid Build Coastguard Worker      "contrib/optimizations/inffast_chunk.c",
197*86ee64e7SAndroid Build Coastguard Worker      "contrib/optimizations/inffast_chunk.h",
198*86ee64e7SAndroid Build Coastguard Worker      "contrib/optimizations/inflate.c",
199*86ee64e7SAndroid Build Coastguard Worker    ]
200*86ee64e7SAndroid Build Coastguard Worker  }
201*86ee64e7SAndroid Build Coastguard Worker
202*86ee64e7SAndroid Build Coastguard Worker  configs += [ ":zlib_internal_config" ]
203*86ee64e7SAndroid Build Coastguard Worker
204*86ee64e7SAndroid Build Coastguard Worker  # Needed for MSVC, which is still supported by V8 and PDFium. zlib uses K&R C
205*86ee64e7SAndroid Build Coastguard Worker  # style function declarations, which triggers warning C4131.
206*86ee64e7SAndroid Build Coastguard Worker  configs -= [ "//build/config/compiler:chromium_code" ]
207*86ee64e7SAndroid Build Coastguard Worker  configs += [ "//build/config/compiler:no_chromium_code" ]
208*86ee64e7SAndroid Build Coastguard Worker  configs += [ ":zlib_warnings" ]
209*86ee64e7SAndroid Build Coastguard Worker
210*86ee64e7SAndroid Build Coastguard Worker  public_configs = [ ":zlib_inflate_chunk_simd_config" ]
211*86ee64e7SAndroid Build Coastguard Worker
212*86ee64e7SAndroid Build Coastguard Worker  public_deps = [ ":zlib_common_headers" ]
213*86ee64e7SAndroid Build Coastguard Worker}
214*86ee64e7SAndroid Build Coastguard Worker
215*86ee64e7SAndroid Build Coastguard Workerconfig("zlib_crc32_simd_config") {
216*86ee64e7SAndroid Build Coastguard Worker  if (use_x86_x64_optimizations) {
217*86ee64e7SAndroid Build Coastguard Worker    defines = [ "CRC32_SIMD_SSE42_PCLMUL" ]
218*86ee64e7SAndroid Build Coastguard Worker  }
219*86ee64e7SAndroid Build Coastguard Worker}
220*86ee64e7SAndroid Build Coastguard Worker
221*86ee64e7SAndroid Build Coastguard Workersource_set("zlib_crc32_simd") {
222*86ee64e7SAndroid Build Coastguard Worker  visibility = [ ":*" ]
223*86ee64e7SAndroid Build Coastguard Worker
224*86ee64e7SAndroid Build Coastguard Worker  if (use_x86_x64_optimizations) {
225*86ee64e7SAndroid Build Coastguard Worker    sources = [
226*86ee64e7SAndroid Build Coastguard Worker      "crc32_simd.c",
227*86ee64e7SAndroid Build Coastguard Worker      "crc32_simd.h",
228*86ee64e7SAndroid Build Coastguard Worker      "crc_folding.c",
229*86ee64e7SAndroid Build Coastguard Worker    ]
230*86ee64e7SAndroid Build Coastguard Worker
231*86ee64e7SAndroid Build Coastguard Worker    if (!is_win || is_clang) {
232*86ee64e7SAndroid Build Coastguard Worker      cflags = [
233*86ee64e7SAndroid Build Coastguard Worker        "-msse4.2",
234*86ee64e7SAndroid Build Coastguard Worker        "-mpclmul",
235*86ee64e7SAndroid Build Coastguard Worker      ]
236*86ee64e7SAndroid Build Coastguard Worker    }
237*86ee64e7SAndroid Build Coastguard Worker  }
238*86ee64e7SAndroid Build Coastguard Worker
239*86ee64e7SAndroid Build Coastguard Worker  configs += [ ":zlib_internal_config" ]
240*86ee64e7SAndroid Build Coastguard Worker
241*86ee64e7SAndroid Build Coastguard Worker  public_configs = [ ":zlib_crc32_simd_config" ]
242*86ee64e7SAndroid Build Coastguard Worker
243*86ee64e7SAndroid Build Coastguard Worker  public_deps = [ ":zlib_common_headers" ]
244*86ee64e7SAndroid Build Coastguard Worker}
245*86ee64e7SAndroid Build Coastguard Worker
246*86ee64e7SAndroid Build Coastguard Workerconfig("zlib_slide_hash_simd_config") {
247*86ee64e7SAndroid Build Coastguard Worker  if (use_x86_x64_optimizations) {
248*86ee64e7SAndroid Build Coastguard Worker    defines = [ "DEFLATE_SLIDE_HASH_SSE2" ]
249*86ee64e7SAndroid Build Coastguard Worker  }
250*86ee64e7SAndroid Build Coastguard Worker
251*86ee64e7SAndroid Build Coastguard Worker  if (use_arm_neon_optimizations) {
252*86ee64e7SAndroid Build Coastguard Worker    defines = [ "DEFLATE_SLIDE_HASH_NEON" ]
253*86ee64e7SAndroid Build Coastguard Worker  }
254*86ee64e7SAndroid Build Coastguard Worker}
255*86ee64e7SAndroid Build Coastguard Worker
256*86ee64e7SAndroid Build Coastguard Workersource_set("zlib_slide_hash_simd") {
257*86ee64e7SAndroid Build Coastguard Worker  visibility = [ ":*" ]
258*86ee64e7SAndroid Build Coastguard Worker
259*86ee64e7SAndroid Build Coastguard Worker  if (use_x86_x64_optimizations) {
260*86ee64e7SAndroid Build Coastguard Worker    sources = [ "slide_hash_simd.h" ]
261*86ee64e7SAndroid Build Coastguard Worker  }
262*86ee64e7SAndroid Build Coastguard Worker
263*86ee64e7SAndroid Build Coastguard Worker  if (use_arm_neon_optimizations) {
264*86ee64e7SAndroid Build Coastguard Worker    sources = [ "slide_hash_simd.h" ]
265*86ee64e7SAndroid Build Coastguard Worker  }
266*86ee64e7SAndroid Build Coastguard Worker
267*86ee64e7SAndroid Build Coastguard Worker  configs += [ ":zlib_internal_config" ]
268*86ee64e7SAndroid Build Coastguard Worker
269*86ee64e7SAndroid Build Coastguard Worker  public_configs = [ ":zlib_slide_hash_simd_config" ]
270*86ee64e7SAndroid Build Coastguard Worker
271*86ee64e7SAndroid Build Coastguard Worker  public_deps = [ ":zlib_common_headers" ]
272*86ee64e7SAndroid Build Coastguard Worker}
273*86ee64e7SAndroid Build Coastguard Worker
274*86ee64e7SAndroid Build Coastguard Workerconfig("zlib_warnings") {
275*86ee64e7SAndroid Build Coastguard Worker  if (is_clang) {
276*86ee64e7SAndroid Build Coastguard Worker    cflags = [
277*86ee64e7SAndroid Build Coastguard Worker      "-Wno-incompatible-pointer-types",
278*86ee64e7SAndroid Build Coastguard Worker      "-Wunused-variable",
279*86ee64e7SAndroid Build Coastguard Worker    ]
280*86ee64e7SAndroid Build Coastguard Worker  }
281*86ee64e7SAndroid Build Coastguard Worker}
282*86ee64e7SAndroid Build Coastguard Worker
283*86ee64e7SAndroid Build Coastguard Workercomponent("zlib") {
284*86ee64e7SAndroid Build Coastguard Worker  if (!is_win) {
285*86ee64e7SAndroid Build Coastguard Worker    # Don't stomp on "libzlib" on other platforms.
286*86ee64e7SAndroid Build Coastguard Worker    output_name = "chrome_zlib"
287*86ee64e7SAndroid Build Coastguard Worker  }
288*86ee64e7SAndroid Build Coastguard Worker
289*86ee64e7SAndroid Build Coastguard Worker  sources = [
290*86ee64e7SAndroid Build Coastguard Worker    "adler32.c",
291*86ee64e7SAndroid Build Coastguard Worker    "chromeconf.h",
292*86ee64e7SAndroid Build Coastguard Worker    "compress.c",
293*86ee64e7SAndroid Build Coastguard Worker    "contrib/optimizations/insert_string.h",
294*86ee64e7SAndroid Build Coastguard Worker    "cpu_features.c",
295*86ee64e7SAndroid Build Coastguard Worker    "cpu_features.h",
296*86ee64e7SAndroid Build Coastguard Worker    "crc32.c",
297*86ee64e7SAndroid Build Coastguard Worker    "crc32.h",
298*86ee64e7SAndroid Build Coastguard Worker    "deflate.c",
299*86ee64e7SAndroid Build Coastguard Worker    "deflate.h",
300*86ee64e7SAndroid Build Coastguard Worker    "gzclose.c",
301*86ee64e7SAndroid Build Coastguard Worker    "gzguts.h",
302*86ee64e7SAndroid Build Coastguard Worker    "gzlib.c",
303*86ee64e7SAndroid Build Coastguard Worker    "gzread.c",
304*86ee64e7SAndroid Build Coastguard Worker    "gzwrite.c",
305*86ee64e7SAndroid Build Coastguard Worker    "infback.c",
306*86ee64e7SAndroid Build Coastguard Worker    "inffast.c",
307*86ee64e7SAndroid Build Coastguard Worker    "inffast.h",
308*86ee64e7SAndroid Build Coastguard Worker    "inffixed.h",
309*86ee64e7SAndroid Build Coastguard Worker    "inflate.h",
310*86ee64e7SAndroid Build Coastguard Worker    "inftrees.c",
311*86ee64e7SAndroid Build Coastguard Worker    "inftrees.h",
312*86ee64e7SAndroid Build Coastguard Worker    "trees.c",
313*86ee64e7SAndroid Build Coastguard Worker    "trees.h",
314*86ee64e7SAndroid Build Coastguard Worker    "uncompr.c",
315*86ee64e7SAndroid Build Coastguard Worker    "zconf.h",
316*86ee64e7SAndroid Build Coastguard Worker    "zlib.h",
317*86ee64e7SAndroid Build Coastguard Worker    "zutil.c",
318*86ee64e7SAndroid Build Coastguard Worker    "zutil.h",
319*86ee64e7SAndroid Build Coastguard Worker  ]
320*86ee64e7SAndroid Build Coastguard Worker
321*86ee64e7SAndroid Build Coastguard Worker  defines = []
322*86ee64e7SAndroid Build Coastguard Worker  deps = []
323*86ee64e7SAndroid Build Coastguard Worker
324*86ee64e7SAndroid Build Coastguard Worker  if (!use_x86_x64_optimizations && !use_arm_neon_optimizations) {
325*86ee64e7SAndroid Build Coastguard Worker    # Apparently android_cronet bot builds with NEON disabled and
326*86ee64e7SAndroid Build Coastguard Worker    # we also should disable optimizations for iOS@x86 (a.k.a. simulator).
327*86ee64e7SAndroid Build Coastguard Worker    defines += [ "CPU_NO_SIMD" ]
328*86ee64e7SAndroid Build Coastguard Worker  }
329*86ee64e7SAndroid Build Coastguard Worker
330*86ee64e7SAndroid Build Coastguard Worker  if (use_x86_x64_optimizations || use_arm_neon_optimizations) {
331*86ee64e7SAndroid Build Coastguard Worker    deps += [
332*86ee64e7SAndroid Build Coastguard Worker      ":zlib_adler32_simd",
333*86ee64e7SAndroid Build Coastguard Worker      ":zlib_inflate_chunk_simd",
334*86ee64e7SAndroid Build Coastguard Worker      ":zlib_slide_hash_simd",
335*86ee64e7SAndroid Build Coastguard Worker    ]
336*86ee64e7SAndroid Build Coastguard Worker
337*86ee64e7SAndroid Build Coastguard Worker    if (use_x86_x64_optimizations) {
338*86ee64e7SAndroid Build Coastguard Worker      deps += [ ":zlib_crc32_simd" ]
339*86ee64e7SAndroid Build Coastguard Worker    } else if (use_arm_neon_optimizations) {
340*86ee64e7SAndroid Build Coastguard Worker      deps += [ ":zlib_arm_crc32" ]
341*86ee64e7SAndroid Build Coastguard Worker    }
342*86ee64e7SAndroid Build Coastguard Worker  } else {
343*86ee64e7SAndroid Build Coastguard Worker    sources += [ "inflate.c" ]
344*86ee64e7SAndroid Build Coastguard Worker  }
345*86ee64e7SAndroid Build Coastguard Worker
346*86ee64e7SAndroid Build Coastguard Worker  if (is_android) {
347*86ee64e7SAndroid Build Coastguard Worker    import("//build/config/android/config.gni")
348*86ee64e7SAndroid Build Coastguard Worker    if (defined(android_ndk_root) && android_ndk_root != "") {
349*86ee64e7SAndroid Build Coastguard Worker      deps += [ "//third_party/cpu_features:ndk_compat" ]
350*86ee64e7SAndroid Build Coastguard Worker    } else {
351*86ee64e7SAndroid Build Coastguard Worker      assert(false, "CPU detection requires the Android NDK")
352*86ee64e7SAndroid Build Coastguard Worker    }
353*86ee64e7SAndroid Build Coastguard Worker  }
354*86ee64e7SAndroid Build Coastguard Worker
355*86ee64e7SAndroid Build Coastguard Worker  configs -= [ "//build/config/compiler:chromium_code" ]
356*86ee64e7SAndroid Build Coastguard Worker  configs += [ "//build/config/compiler:no_chromium_code" ]
357*86ee64e7SAndroid Build Coastguard Worker
358*86ee64e7SAndroid Build Coastguard Worker  if (zlib_symbols_visible) {
359*86ee64e7SAndroid Build Coastguard Worker    configs -= [ "//build/config/gcc:symbol_visibility_hidden" ]
360*86ee64e7SAndroid Build Coastguard Worker    configs += [ "//build/config/gcc:symbol_visibility_default" ]
361*86ee64e7SAndroid Build Coastguard Worker  }
362*86ee64e7SAndroid Build Coastguard Worker
363*86ee64e7SAndroid Build Coastguard Worker  public_configs = [ ":zlib_config" ]
364*86ee64e7SAndroid Build Coastguard Worker
365*86ee64e7SAndroid Build Coastguard Worker  configs += [
366*86ee64e7SAndroid Build Coastguard Worker    ":zlib_internal_config",
367*86ee64e7SAndroid Build Coastguard Worker
368*86ee64e7SAndroid Build Coastguard Worker    # Must be after no_chromium_code for warning flags to be ordered correctly.
369*86ee64e7SAndroid Build Coastguard Worker    ":zlib_warnings",
370*86ee64e7SAndroid Build Coastguard Worker  ]
371*86ee64e7SAndroid Build Coastguard Worker
372*86ee64e7SAndroid Build Coastguard Worker  allow_circular_includes_from = deps
373*86ee64e7SAndroid Build Coastguard Worker}
374*86ee64e7SAndroid Build Coastguard Worker
375*86ee64e7SAndroid Build Coastguard Workerconfig("minizip_warnings") {
376*86ee64e7SAndroid Build Coastguard Worker  visibility = [ ":*" ]
377*86ee64e7SAndroid Build Coastguard Worker
378*86ee64e7SAndroid Build Coastguard Worker  if (is_clang) {
379*86ee64e7SAndroid Build Coastguard Worker    cflags = [
380*86ee64e7SAndroid Build Coastguard Worker      # zlib uses `if ((a == b))` for some reason.
381*86ee64e7SAndroid Build Coastguard Worker      "-Wno-parentheses-equality",
382*86ee64e7SAndroid Build Coastguard Worker    ]
383*86ee64e7SAndroid Build Coastguard Worker  }
384*86ee64e7SAndroid Build Coastguard Worker}
385*86ee64e7SAndroid Build Coastguard Worker
386*86ee64e7SAndroid Build Coastguard Workerstatic_library("minizip") {
387*86ee64e7SAndroid Build Coastguard Worker  include_dirs = [
388*86ee64e7SAndroid Build Coastguard Worker    ".",
389*86ee64e7SAndroid Build Coastguard Worker    "//third_party/zlib",
390*86ee64e7SAndroid Build Coastguard Worker  ]
391*86ee64e7SAndroid Build Coastguard Worker
392*86ee64e7SAndroid Build Coastguard Worker  sources = [
393*86ee64e7SAndroid Build Coastguard Worker    "contrib/minizip/ioapi.c",
394*86ee64e7SAndroid Build Coastguard Worker    "contrib/minizip/ioapi.h",
395*86ee64e7SAndroid Build Coastguard Worker    "contrib/minizip/iowin32.c",
396*86ee64e7SAndroid Build Coastguard Worker    "contrib/minizip/iowin32.h",
397*86ee64e7SAndroid Build Coastguard Worker    "contrib/minizip/unzip.c",
398*86ee64e7SAndroid Build Coastguard Worker    "contrib/minizip/unzip.h",
399*86ee64e7SAndroid Build Coastguard Worker    "contrib/minizip/zip.c",
400*86ee64e7SAndroid Build Coastguard Worker    "contrib/minizip/zip.h",
401*86ee64e7SAndroid Build Coastguard Worker  ]
402*86ee64e7SAndroid Build Coastguard Worker
403*86ee64e7SAndroid Build Coastguard Worker  if (!is_win) {
404*86ee64e7SAndroid Build Coastguard Worker    sources -= [
405*86ee64e7SAndroid Build Coastguard Worker      "contrib/minizip/iowin32.c",
406*86ee64e7SAndroid Build Coastguard Worker      "contrib/minizip/iowin32.h",
407*86ee64e7SAndroid Build Coastguard Worker    ]
408*86ee64e7SAndroid Build Coastguard Worker  }
409*86ee64e7SAndroid Build Coastguard Worker
410*86ee64e7SAndroid Build Coastguard Worker  if (is_apple || is_android || is_nacl) {
411*86ee64e7SAndroid Build Coastguard Worker    # Mac, Android and the BSDs don't have fopen64, ftello64, or fseeko64. We
412*86ee64e7SAndroid Build Coastguard Worker    # use fopen, ftell, and fseek instead on these systems.
413*86ee64e7SAndroid Build Coastguard Worker    defines = [ "USE_FILE32API" ]
414*86ee64e7SAndroid Build Coastguard Worker  }
415*86ee64e7SAndroid Build Coastguard Worker
416*86ee64e7SAndroid Build Coastguard Worker  deps = [ ":zlib" ]
417*86ee64e7SAndroid Build Coastguard Worker
418*86ee64e7SAndroid Build Coastguard Worker  configs -= [ "//build/config/compiler:chromium_code" ]
419*86ee64e7SAndroid Build Coastguard Worker  configs += [ "//build/config/compiler:no_chromium_code" ]
420*86ee64e7SAndroid Build Coastguard Worker
421*86ee64e7SAndroid Build Coastguard Worker  public_configs = [ ":zlib_config" ]
422*86ee64e7SAndroid Build Coastguard Worker
423*86ee64e7SAndroid Build Coastguard Worker  configs += [
424*86ee64e7SAndroid Build Coastguard Worker    # Must be after no_chromium_code for warning flags to be ordered correctly.
425*86ee64e7SAndroid Build Coastguard Worker    ":minizip_warnings",
426*86ee64e7SAndroid Build Coastguard Worker  ]
427*86ee64e7SAndroid Build Coastguard Worker}
428*86ee64e7SAndroid Build Coastguard Worker
429*86ee64e7SAndroid Build Coastguard Workerexecutable("zlib_bench") {
430*86ee64e7SAndroid Build Coastguard Worker  include_dirs = [ "." ]
431*86ee64e7SAndroid Build Coastguard Worker
432*86ee64e7SAndroid Build Coastguard Worker  sources = [ "contrib/bench/zlib_bench.cc" ]
433*86ee64e7SAndroid Build Coastguard Worker  if (!is_debug) {
434*86ee64e7SAndroid Build Coastguard Worker    configs -= [ "//build/config/compiler:default_optimization" ]
435*86ee64e7SAndroid Build Coastguard Worker    configs += [ "//build/config/compiler:optimize_speed" ]
436*86ee64e7SAndroid Build Coastguard Worker  }
437*86ee64e7SAndroid Build Coastguard Worker
438*86ee64e7SAndroid Build Coastguard Worker  deps = [ ":zlib" ]
439*86ee64e7SAndroid Build Coastguard Worker
440*86ee64e7SAndroid Build Coastguard Worker  configs -= [ "//build/config/compiler:chromium_code" ]
441*86ee64e7SAndroid Build Coastguard Worker  configs += [ "//build/config/compiler:no_chromium_code" ]
442*86ee64e7SAndroid Build Coastguard Worker}
443*86ee64e7SAndroid Build Coastguard Worker
444*86ee64e7SAndroid Build Coastguard Workerexecutable("minigzip") {
445*86ee64e7SAndroid Build Coastguard Worker  include_dirs = [ "." ]
446*86ee64e7SAndroid Build Coastguard Worker
447*86ee64e7SAndroid Build Coastguard Worker  sources = [ "test/minigzip.c" ]
448*86ee64e7SAndroid Build Coastguard Worker  if (!is_debug) {
449*86ee64e7SAndroid Build Coastguard Worker    configs -= [ "//build/config/compiler:default_optimization" ]
450*86ee64e7SAndroid Build Coastguard Worker    configs += [ "//build/config/compiler:optimize_speed" ]
451*86ee64e7SAndroid Build Coastguard Worker  }
452*86ee64e7SAndroid Build Coastguard Worker
453*86ee64e7SAndroid Build Coastguard Worker  deps = [ ":zlib" ]
454*86ee64e7SAndroid Build Coastguard Worker
455*86ee64e7SAndroid Build Coastguard Worker  configs -= [ "//build/config/compiler:chromium_code" ]
456*86ee64e7SAndroid Build Coastguard Worker  configs += [ "//build/config/compiler:no_chromium_code" ]
457*86ee64e7SAndroid Build Coastguard Worker}
458*86ee64e7SAndroid Build Coastguard Worker
459*86ee64e7SAndroid Build Coastguard Workerexecutable("zpipe") {
460*86ee64e7SAndroid Build Coastguard Worker  include_dirs = [ "." ]
461*86ee64e7SAndroid Build Coastguard Worker
462*86ee64e7SAndroid Build Coastguard Worker  sources = [ "examples/zpipe.c" ]
463*86ee64e7SAndroid Build Coastguard Worker  if (!is_debug) {
464*86ee64e7SAndroid Build Coastguard Worker    configs -= [ "//build/config/compiler:default_optimization" ]
465*86ee64e7SAndroid Build Coastguard Worker    configs += [ "//build/config/compiler:optimize_speed" ]
466*86ee64e7SAndroid Build Coastguard Worker  }
467*86ee64e7SAndroid Build Coastguard Worker
468*86ee64e7SAndroid Build Coastguard Worker  deps = [ ":zlib" ]
469*86ee64e7SAndroid Build Coastguard Worker
470*86ee64e7SAndroid Build Coastguard Worker  configs -= [ "//build/config/compiler:chromium_code" ]
471*86ee64e7SAndroid Build Coastguard Worker  configs += [ "//build/config/compiler:no_chromium_code" ]
472*86ee64e7SAndroid Build Coastguard Worker}
473*86ee64e7SAndroid Build Coastguard Worker
474*86ee64e7SAndroid Build Coastguard Workerif (!is_win || target_os != "winuwp") {
475*86ee64e7SAndroid Build Coastguard Worker  executable("minizip_bin") {
476*86ee64e7SAndroid Build Coastguard Worker    include_dirs = [ "." ]
477*86ee64e7SAndroid Build Coastguard Worker
478*86ee64e7SAndroid Build Coastguard Worker    sources = [ "contrib/minizip/minizip.c" ]
479*86ee64e7SAndroid Build Coastguard Worker
480*86ee64e7SAndroid Build Coastguard Worker    if (is_clang) {
481*86ee64e7SAndroid Build Coastguard Worker      cflags = [
482*86ee64e7SAndroid Build Coastguard Worker        "-Wno-incompatible-pointer-types-discards-qualifiers",
483*86ee64e7SAndroid Build Coastguard Worker      ]
484*86ee64e7SAndroid Build Coastguard Worker    }
485*86ee64e7SAndroid Build Coastguard Worker
486*86ee64e7SAndroid Build Coastguard Worker    if (!is_debug) {
487*86ee64e7SAndroid Build Coastguard Worker      configs -= [ "//build/config/compiler:default_optimization" ]
488*86ee64e7SAndroid Build Coastguard Worker      configs += [ "//build/config/compiler:optimize_speed" ]
489*86ee64e7SAndroid Build Coastguard Worker    }
490*86ee64e7SAndroid Build Coastguard Worker
491*86ee64e7SAndroid Build Coastguard Worker    deps = [ ":minizip" ]
492*86ee64e7SAndroid Build Coastguard Worker
493*86ee64e7SAndroid Build Coastguard Worker    configs -= [ "//build/config/compiler:chromium_code" ]
494*86ee64e7SAndroid Build Coastguard Worker    configs += [ "//build/config/compiler:no_chromium_code" ]
495*86ee64e7SAndroid Build Coastguard Worker  }
496*86ee64e7SAndroid Build Coastguard Worker
497*86ee64e7SAndroid Build Coastguard Worker  executable("miniunz_bin") {
498*86ee64e7SAndroid Build Coastguard Worker    include_dirs = [ "." ]
499*86ee64e7SAndroid Build Coastguard Worker
500*86ee64e7SAndroid Build Coastguard Worker    sources = [ "contrib/minizip/miniunz.c" ]
501*86ee64e7SAndroid Build Coastguard Worker
502*86ee64e7SAndroid Build Coastguard Worker    if (is_clang) {
503*86ee64e7SAndroid Build Coastguard Worker      cflags = [
504*86ee64e7SAndroid Build Coastguard Worker        "-Wno-incompatible-pointer-types-discards-qualifiers",
505*86ee64e7SAndroid Build Coastguard Worker      ]
506*86ee64e7SAndroid Build Coastguard Worker    }
507*86ee64e7SAndroid Build Coastguard Worker
508*86ee64e7SAndroid Build Coastguard Worker    if (!is_debug) {
509*86ee64e7SAndroid Build Coastguard Worker      configs -= [ "//build/config/compiler:default_optimization" ]
510*86ee64e7SAndroid Build Coastguard Worker      configs += [ "//build/config/compiler:optimize_speed" ]
511*86ee64e7SAndroid Build Coastguard Worker    }
512*86ee64e7SAndroid Build Coastguard Worker
513*86ee64e7SAndroid Build Coastguard Worker    deps = [ ":minizip" ]
514*86ee64e7SAndroid Build Coastguard Worker
515*86ee64e7SAndroid Build Coastguard Worker    configs -= [ "//build/config/compiler:chromium_code" ]
516*86ee64e7SAndroid Build Coastguard Worker    configs += [ "//build/config/compiler:no_chromium_code" ]
517*86ee64e7SAndroid Build Coastguard Worker  }
518*86ee64e7SAndroid Build Coastguard Worker}
519*86ee64e7SAndroid Build Coastguard Worker
520*86ee64e7SAndroid Build Coastguard Workerif (build_with_chromium) {
521*86ee64e7SAndroid Build Coastguard Worker  test("zlib_unittests") {
522*86ee64e7SAndroid Build Coastguard Worker    testonly = true
523*86ee64e7SAndroid Build Coastguard Worker
524*86ee64e7SAndroid Build Coastguard Worker    sources = [
525*86ee64e7SAndroid Build Coastguard Worker      "contrib/tests/infcover.cc",
526*86ee64e7SAndroid Build Coastguard Worker      "contrib/tests/infcover.h",
527*86ee64e7SAndroid Build Coastguard Worker      "contrib/tests/run_all_unittests.cc",
528*86ee64e7SAndroid Build Coastguard Worker      "contrib/tests/utils_unittest.cc",
529*86ee64e7SAndroid Build Coastguard Worker      "google/compression_utils_unittest.cc",
530*86ee64e7SAndroid Build Coastguard Worker      "google/zip_reader_unittest.cc",
531*86ee64e7SAndroid Build Coastguard Worker      "google/zip_unittest.cc",
532*86ee64e7SAndroid Build Coastguard Worker    ]
533*86ee64e7SAndroid Build Coastguard Worker
534*86ee64e7SAndroid Build Coastguard Worker    data = [ "google/test/data/" ]
535*86ee64e7SAndroid Build Coastguard Worker
536*86ee64e7SAndroid Build Coastguard Worker    if (is_ios) {
537*86ee64e7SAndroid Build Coastguard Worker      bundle_deps = [ "google:zlib_pak_bundle_data" ]
538*86ee64e7SAndroid Build Coastguard Worker    }
539*86ee64e7SAndroid Build Coastguard Worker
540*86ee64e7SAndroid Build Coastguard Worker    deps = [
541*86ee64e7SAndroid Build Coastguard Worker      ":minizip",
542*86ee64e7SAndroid Build Coastguard Worker      ":zlib",
543*86ee64e7SAndroid Build Coastguard Worker      "google:compression_utils",
544*86ee64e7SAndroid Build Coastguard Worker      "google:zip",
545*86ee64e7SAndroid Build Coastguard Worker      "//base/test:test_support",
546*86ee64e7SAndroid Build Coastguard Worker      "//testing/gtest",
547*86ee64e7SAndroid Build Coastguard Worker    ]
548*86ee64e7SAndroid Build Coastguard Worker
549*86ee64e7SAndroid Build Coastguard Worker    configs -= [ "//build/config/compiler:chromium_code" ]
550*86ee64e7SAndroid Build Coastguard Worker    configs += [ "//build/config/compiler:no_chromium_code" ]
551*86ee64e7SAndroid Build Coastguard Worker
552*86ee64e7SAndroid Build Coastguard Worker    include_dirs = [
553*86ee64e7SAndroid Build Coastguard Worker      "//third_party/googletest/src/googletest/include/gtest",
554*86ee64e7SAndroid Build Coastguard Worker      ".",
555*86ee64e7SAndroid Build Coastguard Worker      "google",
556*86ee64e7SAndroid Build Coastguard Worker    ]
557*86ee64e7SAndroid Build Coastguard Worker  }
558*86ee64e7SAndroid Build Coastguard Worker}
559