diff options
author | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2020-02-12 22:44:30 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2020-02-12 22:44:30 +0000 |
commit | c4be25e2aeb728edaac99118f9a2cdd1a4401627 (patch) | |
tree | 35ce8c3f0967ce2c0e79634229da32fbdb33ed87 | |
parent | a9924793a09de37d0b65ded1b253e52543a49a2a (diff) | |
parent | ac0ff6eedb6b5da7a6629620b955594c4e79a5ab (diff) | |
download | zlib-c4be25e2aeb728edaac99118f9a2cdd1a4401627.tar.gz |
Merge "Reland "Enable the various chrome zlib optimizations."" am: be96c1531e am: 11b1b4dede am: ac0ff6eedb
Change-Id: Iddd78b24ed467dd2e80adef860d63abc4b5c7798
-rw-r--r-- | Android.bp | 97 |
1 files changed, 89 insertions, 8 deletions
@@ -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 |