summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2020-02-12 22:44:30 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2020-02-12 22:44:30 +0000
commitc4be25e2aeb728edaac99118f9a2cdd1a4401627 (patch)
tree35ce8c3f0967ce2c0e79634229da32fbdb33ed87
parenta9924793a09de37d0b65ded1b253e52543a49a2a (diff)
parentac0ff6eedb6b5da7a6629620b955594c4e79a5ab (diff)
downloadzlib-c4be25e2aeb728edaac99118f9a2cdd1a4401627.tar.gz
Merge "Reland "Enable the various chrome zlib optimizations."" am: be96c1531e am: 11b1b4dede am: ac0ff6eedb
Change-Id: Iddd78b24ed467dd2e80adef860d63abc4b5c7798
-rw-r--r--Android.bp97
1 files changed, 89 insertions, 8 deletions
diff --git a/Android.bp b/Android.bp
index c665c49..849384b 100644
--- a/Android.bp
+++ b/Android.bp
@@ -1,9 +1,70 @@
+srcs_opt = [
+ "adler32_simd.c",
+ // See https://chromium-review.googlesource.com/749732.
+// TODO: causes `atest org.apache.harmony.tests.java.util.zip.DeflaterTest` failures.
+// "contrib/optimizations/inffast_chunk.c",
+// "contrib/optimizations/inflate.c",
+ // This file doesn't build for non-neon, so it can't be in the main srcs.
+ "cpu_features.c",
+ "crc32_simd.c",
+]
+
+cflags_arm = [
+ // Since we're building for the platform, we claim to be Linux rather than
+ // Android so we use getauxval() directly instead of the NDK
+ // android_getCpuFeatures which isn't available to us anyway.
+ "-DARMV8_OS_LINUX",
+ // Testing with zlib_bench shows -O3 is a win for ARM but a bit of a wash
+ // for x86, so match the BUILD file in only enabling this for ARM.
+ "-O3",
+]
+cflags_arm_neon = [
+ // We no longer support non-Neon platform builds, but the NDK just has one libz.
+ "-DADLER32_SIMD_NEON",
+// TODO: causes `atest org.apache.harmony.tests.java.util.zip.DeflaterTest` failures.
+// "-DINFLATE_CHUNK_SIMD_NEON",
+ // HWCAP_CRC32 is checked at runtime, so it's okay to turn crc32
+ // acceleration on for both 32- and 64-bit.
+ "-DCRC32_ARMV8_CRC32",
+]
+cflags_arm64 = cflags_arm + cflags_arm_neon
+
+cflags_x86 = []
+srcs_x86 = [
+ "cpu_features.c",
+]
+
+/* TODO: this should work, but fails some tests on cuttlefish.
+cflags_x86 = [
+ // See ARMV8_OS_LINUX above.
+ "-DX86_NOT_WINDOWS",
+ // Android's x86/x86-64 ABI includes SSE2 and SSSE3.
+ "-DADLER32_SIMD_SSSE3",
+ "-DINFLATE_CHUNK_SIMD_SSE2",
+ // TODO: ...but the host build system defaults don't match our official ABI.
+ "-mssse3",
+ // PCLMUL isn't in the ABI, but it won't actually be used unless CPUID
+ // reports that the processor really does have the instruction.
+ "-mpclmul",
+ "-DCRC32_SIMD_SSE42_PCLMUL",
+]
+srcs_x86 = [
+ "crc_folding.c",
+ "fill_window_sse.c",
+ "x86.c",
+] + srcs_opt
+*/
+
+// This optimization is applicable to arm64 and x86-64.
+cflags_64 = ["-DINFLATE_CHUNK_READ_64LE"]
+
cc_defaults {
name: "libz_defaults",
cflags: [
- "-O3",
+ // We do support hidden visibility, so turn that on.
"-DHAVE_HIDDEN",
+ // We do support const, so turn that on.
"-DZLIB_CONST",
"-Wall",
"-Werror",
@@ -15,7 +76,6 @@ cc_defaults {
srcs: [
"adler32.c",
"compress.c",
- "cpu_features.c",
"crc32.c",
"deflate.c",
"gzclose.c",
@@ -23,9 +83,9 @@ cc_defaults {
"gzread.c",
"gzwrite.c",
"infback.c",
+ "inffast.c",
"inflate.c",
"inftrees.c",
- "inffast.c",
"trees.c",
"uncompr.c",
"zutil.c",
@@ -33,15 +93,28 @@ cc_defaults {
arch: {
arm: {
- // measurements show that the ARM version of ZLib is about x1.17 faster
- // than the thumb one...
- // TODO: re-test with zlib_bench after SIMD is enabled.
- instruction_set: "arm",
-
// TODO: This is to work around b/24465209. Remove after root cause
// is fixed.
pack_relocations: false,
ldflags: ["-Wl,--hash-style=both"],
+
+ cflags: cflags_arm,
+ neon: {
+ cflags: cflags_arm_neon,
+ srcs: srcs_opt,
+ }
+ },
+ arm64: {
+ cflags: cflags_arm64 + cflags_64,
+ srcs: srcs_opt,
+ },
+ x86: {
+ cflags: cflags_x86,
+ srcs: srcs_x86,
+ },
+ x86_64: {
+ cflags: cflags_x86 + cflags_64,
+ srcs: srcs_x86,
},
},
}
@@ -73,6 +146,8 @@ cc_library {
},
}
+// libz_current allows modules building against the NDK to have access to zlib
+// API that's not available from the NDK libz.
cc_library_static {
name: "libz_current",
defaults: ["libz_defaults"],
@@ -93,6 +168,12 @@ cc_binary {
cflags: ["-Wall", "-Werror"],
host_supported: true,
shared_libs: ["libz"],
+ // We build zlib_bench32 and zlib_bench64 so it's easy to test LP32.
+ compile_multilib: "both",
+ multilib: {
+ lib32: { suffix: "32", },
+ lib64: { suffix: "64", },
+ },
}
// This module is defined in development/ndk/Android.bp. Updating these headers