blob: 51d477a331b86104713a01dc62c1f404f0c730fa [file] [log] [blame]
[email protected]c6f27f22013-08-21 21:44:591# Copyright (c) 2013 The Chromium Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
Adenilson Cavalcanti78104f42017-09-29 03:24:525if (current_cpu == "arm" || current_cpu == "arm64") {
6 import("//build/config/arm.gni")
7}
8
[email protected]c6f27f22013-08-21 21:44:599config("zlib_config") {
[email protected]2ed04ae2013-10-07 20:17:1610 include_dirs = [ "." ]
[email protected]c6f27f22013-08-21 21:44:5911}
12
Daniel Bratellf2f7bfe2018-10-31 11:39:1213use_arm_neon_optimizations = false
14if (current_cpu == "arm" || current_cpu == "arm64") {
15 if (arm_use_neon) {
16 use_arm_neon_optimizations = true
17 }
18}
19
20use_x86_x64_optimizations =
21 (current_cpu == "x86" || current_cpu == "x64") && !is_ios
22
Noel Gordon09b784f2017-09-29 19:44:2523config("zlib_adler32_simd_config") {
Daniel Bratellf2f7bfe2018-10-31 11:39:1224 if (use_x86_x64_optimizations) {
Noel Gordon09b784f2017-09-29 19:44:2525 defines = [ "ADLER32_SIMD_SSSE3" ]
26 }
27
Daniel Bratellf2f7bfe2018-10-31 11:39:1228 if (use_arm_neon_optimizations) {
29 defines = [ "ADLER32_SIMD_NEON" ]
Noel Gordon09b784f2017-09-29 19:44:2530 }
31}
32
33source_set("zlib_adler32_simd") {
34 visibility = [ ":*" ]
35
Daniel Bratellf2f7bfe2018-10-31 11:39:1236 if (use_x86_x64_optimizations) {
Noel Gordon09b784f2017-09-29 19:44:2537 sources = [
38 "adler32_simd.c",
39 "adler32_simd.h",
40 ]
41
42 if (!is_win || is_clang) {
43 cflags = [ "-mssse3" ]
44 }
45 }
46
Daniel Bratellf2f7bfe2018-10-31 11:39:1247 if (use_arm_neon_optimizations) {
48 sources = [
49 "adler32_simd.c",
50 "adler32_simd.h",
51 ]
52 if (!is_debug) {
53 # Use optimize_speed (-O3) to output the _smallest_ code.
54 configs -= [ "//build/config/compiler:default_optimization" ]
55 configs += [ "//build/config/compiler:optimize_speed" ]
Noel Gordon09b784f2017-09-29 19:44:2556 }
57 }
58
Noel Gordon09b784f2017-09-29 19:44:2559 public_configs = [ ":zlib_adler32_simd_config" ]
60}
61
Daniel Bratellf2f7bfe2018-10-31 11:39:1262if (use_arm_neon_optimizations) {
63 config("zlib_arm_crc32_config") {
Adenilson Cavalcanti28c96232018-02-16 03:41:1464 # Restrictions:
65 # - Disabled for iPhones, as described in DDI0487C_a_armv8_arm:
66 # "All implementations of the ARMv8.1 architecture are required to
67 # implement the CRC32* instructions. These are optional in ARMv8.0."
Adenilson Cavalcanti28c96232018-02-16 03:41:1468 # - Fuchsia just added a syscall for feature detection.
69 # TODO(cavalcantii): crbug.com/810125.
Tiancong Wang9b3f32a2018-12-13 04:20:0870 if (!is_ios && !is_fuchsia) {
Adenilson Cavalcanti28c96232018-02-16 03:41:1471 defines = [ "CRC32_ARMV8_CRC32" ]
72 if (is_android) {
73 defines += [ "ARMV8_OS_ANDROID" ]
74 } else if (is_linux || is_chromeos) {
75 defines += [ "ARMV8_OS_LINUX" ]
76 }
77 }
78 }
Adenilson Cavalcanti28c96232018-02-16 03:41:1479
Adenilson Cavalcanti28c96232018-02-16 03:41:1480 source_set("zlib_arm_crc32") {
81 visibility = [ ":*" ]
82
Tiancong Wang9b3f32a2018-12-13 04:20:0883 if (is_clang && (!is_ios && !is_fuchsia)) {
Adenilson Cavalcanti28c96232018-02-16 03:41:1484 include_dirs = [ "." ]
85
86 if (is_android) {
87 import("//build/config/android/config.gni")
88 if (defined(android_ndk_root) && android_ndk_root != "") {
89 deps = [
90 "//third_party/android_tools:cpu_features",
91 ]
92 }
93 }
94
95 sources = [
96 "arm_features.c",
97 "arm_features.h",
98 "crc32_simd.c",
99 "crc32_simd.h",
100 ]
101
Adenilson Cavalcanti28c96232018-02-16 03:41:14102 if (!is_debug) {
103 configs -= [ "//build/config/compiler:default_optimization" ]
104 configs += [ "//build/config/compiler:optimize_speed" ]
105 }
106 }
107
108 public_configs = [ ":zlib_arm_crc32_config" ]
109 }
110}
111
Noel Gordonc293a3252017-12-08 11:39:34112config("zlib_inflate_chunk_simd_config") {
Daniel Bratellf2f7bfe2018-10-31 11:39:12113 if (use_x86_x64_optimizations) {
Noel Gordonb7fef392018-02-12 01:46:01114 defines = [ "INFLATE_CHUNK_SIMD_SSE2" ]
115
116 if (current_cpu == "x64") {
117 defines += [ "INFLATE_CHUNK_READ_64LE" ]
118 }
Noel Gordonc293a3252017-12-08 11:39:34119 }
120
Daniel Bratellf2f7bfe2018-10-31 11:39:12121 if (use_arm_neon_optimizations) {
122 defines = [ "INFLATE_CHUNK_SIMD_NEON" ]
Noel Gordonc293a3252017-12-08 11:39:34123 }
124}
125
126source_set("zlib_inflate_chunk_simd") {
127 visibility = [ ":*" ]
128
Daniel Bratellf2f7bfe2018-10-31 11:39:12129 if (use_x86_x64_optimizations || use_arm_neon_optimizations) {
Noel Gordonc293a3252017-12-08 11:39:34130 include_dirs = [ "." ]
131
132 sources = [
133 "contrib/optimizations/chunkcopy.h",
134 "contrib/optimizations/inffast_chunk.c",
135 "contrib/optimizations/inffast_chunk.h",
136 "contrib/optimizations/inflate.c",
137 ]
Noel Gordonc293a3252017-12-08 11:39:34138
Daniel Bratellf2f7bfe2018-10-31 11:39:12139 if (use_arm_neon_optimizations && !is_debug) {
140 # Here we trade better performance on newer/bigger ARMv8 cores
141 # for less perf on ARMv7. For details, check:
142 # https://bugs.chromium.org/p/chromium/issues/detail?id=772870#c40
143 configs -= [ "//build/config/compiler:default_optimization" ]
144 configs += [ "//build/config/compiler:optimize_speed" ]
Noel Gordonc293a3252017-12-08 11:39:34145 }
146 }
147
148 configs -= [ "//build/config/compiler:chromium_code" ]
149 configs += [ "//build/config/compiler:no_chromium_code" ]
150
151 public_configs = [ ":zlib_inflate_chunk_simd_config" ]
152}
153
Noel Gordon65e2abc2018-01-04 01:10:08154config("zlib_crc32_simd_config") {
Daniel Bratellf2f7bfe2018-10-31 11:39:12155 if (use_x86_x64_optimizations) {
Noel Gordon65e2abc2018-01-04 01:10:08156 defines = [ "CRC32_SIMD_SSE42_PCLMUL" ]
157 }
158}
159
160source_set("zlib_crc32_simd") {
161 visibility = [ ":*" ]
162
Daniel Bratellf2f7bfe2018-10-31 11:39:12163 if (use_x86_x64_optimizations) {
Noel Gordon65e2abc2018-01-04 01:10:08164 sources = [
165 "crc32_simd.c",
166 "crc32_simd.h",
167 ]
168
169 if (!is_win || is_clang) {
170 cflags = [
171 "-msse4.2",
172 "-mpclmul",
173 ]
174 }
175 }
176
177 public_configs = [ ":zlib_crc32_simd_config" ]
178}
179
robert.bradford02a95e32014-11-05 14:59:34180static_library("zlib_x86_simd") {
Noel Gordon65e2abc2018-01-04 01:10:08181 visibility = [ ":*" ]
182
Daniel Bratellf2f7bfe2018-10-31 11:39:12183 if (use_x86_x64_optimizations) {
scottmg1c240d272014-12-03 07:28:00184 sources = [
185 "crc_folding.c",
186 "fill_window_sse.c",
187 ]
Noel Gordon65e2abc2018-01-04 01:10:08188
Nico Weberf3b5bb22014-11-18 23:21:17189 if (!is_win || is_clang) {
scottmg1c240d272014-12-03 07:28:00190 cflags = [
191 "-msse4.2",
192 "-mpclmul",
193 ]
Nico Weberf3b5bb22014-11-18 23:21:17194 }
robert.bradford02a95e32014-11-05 14:59:34195 } else {
scottmg1c240d272014-12-03 07:28:00196 sources = [
197 "simd_stub.c",
198 ]
robert.bradford02a95e32014-11-05 14:59:34199 }
dprankede7d0dc2014-11-18 01:54:55200
201 configs -= [ "//build/config/compiler:chromium_code" ]
202 configs += [ "//build/config/compiler:no_chromium_code" ]
robert.bradford02a95e32014-11-05 14:59:34203}
204
brettw6dd952c72015-09-02 17:57:05205config("zlib_warnings") {
Daniel Bratellf2f7bfe2018-10-31 11:39:12206 if (is_clang && use_x86_x64_optimizations) {
brettw6dd952c72015-09-02 17:57:05207 cflags = [ "-Wno-incompatible-pointer-types" ]
208 }
209}
210
[email protected]6a0f2772013-10-03 17:16:11211static_library("zlib") {
[email protected]6a0f2772013-10-03 17:16:11212 if (!is_win) {
213 # Don't stomp on "libzlib" on other platforms.
214 output_name = "chrome_zlib"
215 }
216
[email protected]c6f27f22013-08-21 21:44:59217 sources = [
218 "adler32.c",
219 "compress.c",
220 "crc32.c",
221 "crc32.h",
222 "deflate.c",
223 "deflate.h",
224 "gzclose.c",
225 "gzguts.h",
226 "gzlib.c",
227 "gzread.c",
228 "gzwrite.c",
229 "infback.c",
230 "inffast.c",
231 "inffast.h",
232 "inffixed.h",
[email protected]c6f27f22013-08-21 21:44:59233 "inflate.h",
234 "inftrees.c",
235 "inftrees.h",
mark6d9a6252017-02-15 06:15:29236 "names.h",
[email protected]c6f27f22013-08-21 21:44:59237 "trees.c",
238 "trees.h",
239 "uncompr.c",
robert.bradford02a95e32014-11-05 14:59:34240 "x86.h",
[email protected]c6f27f22013-08-21 21:44:59241 "zconf.h",
242 "zlib.h",
243 "zutil.c",
244 "zutil.h",
245 ]
246
Boris Sazonove7d9a4642017-11-30 10:01:30247 defines = []
248 deps = []
249
Daniel Bratellf2f7bfe2018-10-31 11:39:12250 if (use_x86_x64_optimizations || use_arm_neon_optimizations) {
251 deps += [
252 ":zlib_adler32_simd",
253 ":zlib_inflate_chunk_simd",
254 ]
Noel Gordon65e2abc2018-01-04 01:10:08255
Daniel Bratellf2f7bfe2018-10-31 11:39:12256 if (use_x86_x64_optimizations) {
257 sources += [ "x86.c" ]
258 deps += [ ":zlib_crc32_simd" ]
259 } else if (use_arm_neon_optimizations) {
Adenilson Cavalcantiddbbeb052018-08-07 16:08:59260 sources += [ "contrib/optimizations/slide_hash_neon.h" ]
Daniel Bratellf2f7bfe2018-10-31 11:39:12261 deps += [ ":zlib_arm_crc32" ]
Noel Gordon09b784f2017-09-29 19:44:25262 }
Daniel Bratellf2f7bfe2018-10-31 11:39:12263 } else {
264 sources += [ "inflate.c" ]
robert.bradford02a95e32014-11-05 14:59:34265 }
266
[email protected]bfac2722014-01-17 20:19:45267 configs -= [ "//build/config/compiler:chromium_code" ]
brettw6dd952c72015-09-02 17:57:05268 configs += [
269 "//build/config/compiler:no_chromium_code",
270
271 # Must be after no_chromium_code for warning flags to be ordered correctly.
272 ":zlib_warnings",
273 ]
[email protected]add138e32013-10-04 19:45:41274
Brett Wilsone53895272014-09-23 23:41:46275 public_configs = [ ":zlib_config" ]
Noel Gordon09b784f2017-09-29 19:44:25276
Adenilson Cavalcanti626df312017-10-30 18:39:29277 deps += [ ":zlib_x86_simd" ]
Daniel Bratellf2f7bfe2018-10-31 11:39:12278 allow_circular_includes_from = deps
[email protected]c6f27f22013-08-21 21:44:59279}
280
brettw6dd952c72015-09-02 17:57:05281config("minizip_warnings") {
282 visibility = [ ":*" ]
Noel Gordon94793842018-02-12 08:15:47283
brettw6dd952c72015-09-02 17:57:05284 if (is_clang) {
285 # zlib uses `if ((a == b))` for some reason.
286 cflags = [ "-Wno-parentheses-equality" ]
287 }
288}
289
[email protected]c6f27f22013-08-21 21:44:59290static_library("minizip") {
291 sources = [
292 "contrib/minizip/ioapi.c",
293 "contrib/minizip/ioapi.h",
294 "contrib/minizip/iowin32.c",
295 "contrib/minizip/iowin32.h",
296 "contrib/minizip/unzip.c",
297 "contrib/minizip/unzip.h",
298 "contrib/minizip/zip.c",
299 "contrib/minizip/zip.h",
300 ]
301
302 if (!is_win) {
303 sources -= [
304 "contrib/minizip/iowin32.c",
305 "contrib/minizip/iowin32.h",
306 ]
[email protected]ab9ce6e2014-04-17 20:33:19307 }
Noel Gordon94793842018-02-12 08:15:47308
takise33876392017-04-07 05:48:40309 if (is_mac || is_ios || is_android || is_nacl) {
[email protected]c6f27f22013-08-21 21:44:59310 # Mac, Android and the BSDs don't have fopen64, ftello64, or fseeko64. We
311 # use fopen, ftell, and fseek instead on these systems.
312 defines = [ "USE_FILE32API" ]
313 }
314
scottmg1c240d272014-12-03 07:28:00315 deps = [
316 ":zlib",
317 ]
[email protected]c6f27f22013-08-21 21:44:59318
[email protected]bfac2722014-01-17 20:19:45319 configs -= [ "//build/config/compiler:chromium_code" ]
brettw6dd952c72015-09-02 17:57:05320 configs += [
321 "//build/config/compiler:no_chromium_code",
322
323 # Must be after no_chromium_code for warning flags to be ordered correctly.
324 ":minizip_warnings",
325 ]
Noel Gordon09b784f2017-09-29 19:44:25326
Brett Wilsone53895272014-09-23 23:41:46327 public_configs = [ ":zlib_config" ]
[email protected]c6f27f22013-08-21 21:44:59328}
Noel Gordon875ad5e32018-01-21 11:19:12329
330executable("zlib_bench") {
331 include_dirs = [ "." ]
332
333 sources = [
334 "contrib/bench/zlib_bench.cc",
335 ]
336
337 if (!is_debug) {
338 configs -= [ "//build/config/compiler:default_optimization" ]
339 configs += [ "//build/config/compiler:optimize_speed" ]
340 }
341
342 configs -= [ "//build/config/compiler:chromium_code" ]
343 configs += [ "//build/config/compiler:no_chromium_code" ]
344
345 deps = [
Noel Gordonb7fef392018-02-12 01:46:01346 ":zlib",
Noel Gordon875ad5e32018-01-21 11:19:12347 ]
348}