| package { |
| default_applicable_licenses: ["external_zlib_license"], |
| } |
| |
| license { |
| name: "external_zlib_license", |
| visibility: [":__subpackages__"], |
| license_kinds: [ |
| "SPDX-license-identifier-BSD", |
| "SPDX-license-identifier-Zlib", |
| ], |
| license_text: [ |
| "LICENSE", |
| ], |
| } |
| |
| // These cflags are shared --- not only between all architectures, |
| // but between libz and libz_stable too. |
| cflags_shared = [ |
| // Our compiler does support hidden visibility. |
| "-DHAVE_HIDDEN", |
| // Our compiler does support const. |
| "-DZLIB_CONST", |
| // Use the traditional Rabin-Karp rolling hash to match zlib DEFLATE output exactly. |
| "-DCHROMIUM_ZLIB_NO_CASTAGNOLI", |
| // Enable -O3 for everyone, as chromium's BUILD.gn does. |
| "-O3", |
| "-Wall", |
| "-Werror", |
| "-Wno-deprecated-non-prototype", |
| "-Wno-unused", |
| "-Wno-unused-parameter", |
| ] |
| |
| cflags_arm = [ |
| // Even the NDK dropped non-neon support in r24. |
| "-DADLER32_SIMD_NEON", |
| // HWCAP_CRC32 is checked at runtime, so it's okay to enable crc32 |
| // acceleration for both 64-bit and 32-bit (which may be armv7, at |
| // least for NDK users). |
| "-DCRC32_ARMV8_CRC32", |
| // TODO: DINFLATE_CHUNK_SIMD_NEON causes `atest org.apache.harmony.tests.java.util.zip.DeflaterTest` failures. |
| // "-DINFLATE_CHUNK_SIMD_NEON", |
| ] |
| cflags_arm64 = cflags_arm + ["-DINFLATE_CHUNK_READ_64LE"] |
| |
| cflags_riscv64 = [ |
| // TODO: test and enable these. |
| // "-DRISCV_RVV", |
| // "-DADLER32_SIMD_RVV", |
| ] |
| |
| // The *host* x86 configuration (with *lower* CPU feature requirements). |
| cflags_x86 = [ |
| // See ARMV8_OS_LINUX above. |
| "-DX86_NOT_WINDOWS", |
| // Android's host CPU feature requirements are *lower* than the |
| // corresponding device CPU feature requirements, so it's easier to just |
| // say "no SIMD for you" rather than specificially disable SSSE3. |
| // We should have a conversation about that, but not until we at least have |
| // data on how many Studio users have CPUs that don't make the grade... |
| // https://issuetracker.google.com/171235570 |
| "-DCPU_NO_SIMD", |
| ] |
| cflags_x86_64 = cflags_x86 + ["-DINFLATE_CHUNK_READ_64LE"] |
| |
| // The additional *device* x86/x86_64 configuration. Devices have *higher* CPU |
| // feature requirements than the host. |
| cflags_android_x86 = [ |
| // Android's x86 and x86-64 ABIs both include SSE2 and SSSE3. |
| "-UCPU_NO_SIMD", |
| "-DADLER32_SIMD_SSSE3", |
| // TODO: DINFLATE_CHUNK_SIMD_SSE2 causes `atest org.apache.harmony.tests.java.util.zip.DeflaterTest` failures. |
| // "-DINFLATE_CHUNK_SIMD_SSE2", |
| ] |
| |
| libz_srcs = [ |
| "adler32.c", |
| "adler32_simd.c", |
| "compress.c", |
| "cpu_features.c", |
| "crc32.c", |
| "crc32_simd.c", |
| "crc_folding.c", |
| "deflate.c", |
| "gzclose.c", |
| "gzlib.c", |
| "gzread.c", |
| "gzwrite.c", |
| "infback.c", |
| "inffast.c", |
| "inflate.c", |
| "inftrees.c", |
| "trees.c", |
| "uncompr.c", |
| "zutil.c", |
| |
| // Not-yet-enabled optimizations. |
| // 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", |
| ] |
| |
| cc_defaults { |
| name: "libz_defaults", |
| defaults: [ |
| "bug_24465209_workaround", |
| ], |
| |
| cflags: cflags_shared, |
| stl: "none", |
| export_include_dirs: ["."], |
| |
| host_supported: true, |
| native_bridge_supported: true, |
| |
| vendor_available: true, |
| product_available: true, |
| ramdisk_available: true, |
| vendor_ramdisk_available: true, |
| recovery_available: true, |
| |
| arch: { |
| arm: { |
| cflags: cflags_arm, |
| }, |
| arm64: { |
| cflags: cflags_arm64, |
| }, |
| riscv64: { |
| cflags: cflags_riscv64, |
| }, |
| x86: { |
| cflags: cflags_x86, |
| }, |
| x86_64: { |
| cflags: cflags_x86_64, |
| }, |
| }, |
| target: { |
| android_arm: { |
| cflags: [ |
| // 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", |
| ], |
| }, |
| android_x86: { |
| cflags: cflags_android_x86, |
| }, |
| android_x86_64: { |
| cflags: cflags_android_x86, |
| }, |
| darwin_arm64: { |
| cflags: [ |
| "-DARMV8_OS_MACOS", |
| ], |
| }, |
| linux_bionic: { |
| enabled: true, |
| }, |
| linux_arm64: { |
| cflags: [ |
| // 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", |
| ], |
| }, |
| windows: { |
| enabled: true, |
| }, |
| }, |
| } |
| |
| cc_library { |
| name: "libz", |
| defaults: ["libz_defaults"], |
| |
| srcs: libz_srcs, |
| |
| unique_host_soname: true, |
| static_ndk_lib: true, |
| |
| double_loadable: true, |
| |
| stubs: { |
| versions: [ |
| "29", |
| "30", |
| ], |
| symbol_file: "libz.map.txt", |
| }, |
| |
| // Even though libz provides "stubs", it still needs to be available to com.android.runtime |
| // because "linker" in the runtime apex is linked statically to libz. (Note that linker is a |
| // static executable.) |
| apex_available: [ |
| "com.android.runtime", |
| "//apex_available:platform", |
| ], |
| |
| // When used by Vendor/Product APEX, |
| // libz should be treated like non-stable module. |
| // (Hence, should be bundled in APEX). |
| target: { |
| product: { |
| no_stubs: true, |
| }, |
| vendor: { |
| no_stubs: true, |
| }, |
| }, |
| |
| afdo: true, |
| } |
| |
| // A build of libz with identical behavior between architectures. |
| // Used by legacy OTA tools such as imgdiff and updater and their tests. |
| // New code should not use this library, because new code should not make |
| // assumptions about the _compressed_ bits, beyond the fact that they will |
| // decompress to the same input bytes. The actual compressed byte sequences |
| // can and do differ over time. |
| cc_library { |
| name: "libz_stable", |
| visibility: [ |
| "//bootable/recovery/applypatch", |
| "//bootable/recovery/tests", |
| "//bootable/recovery/updater", |
| "//bootable/deprecated-ota/applypatch", |
| "//bootable/deprecated-ota/tests", |
| "//bootable/deprecated-ota/updater", |
| ], |
| // We only use the shared flags here; the whole point is that this |
| // library behaves the same on all different architectures. |
| cflags: cflags_shared, |
| stl: "none", |
| export_include_dirs: ["."], |
| srcs: libz_srcs, |
| host_supported: true, |
| vendor_available: true, |
| recovery_available: true, |
| } |
| |
| cc_binary { |
| name: "zlib_bench", |
| srcs: ["contrib/bench/zlib_bench.cc"], |
| cflags: [ |
| "-Wall", |
| "-Werror", |
| "-Wno-deprecated-non-prototype", |
| "-Wno-unused-parameter", |
| ], |
| 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", |
| }, |
| }, |
| } |
| |
| cc_library { |
| name: "zlib_google_compression_utils_portable", |
| defaults: ["libz_defaults"], |
| srcs: [ |
| "google/compression_utils_portable.cc", |
| ], |
| export_include_dirs: ["google"], |
| host_supported: true, |
| shared_libs: ["libz"], |
| sdk_version: "minimum", |
| visibility: ["//external/angle"], |
| apex_available: [ |
| "com.android.runtime", |
| "//apex_available:platform", |
| ], |
| } |
| |
| cc_library_static { |
| name: "tflite_support_libz", |
| defaults: ["libz_defaults"], |
| srcs: [ |
| "contrib/minizip/ioapi.c", |
| "contrib/minizip/unzip.c", |
| ], |
| sdk_version: "current", |
| // TODO: switch this to "apex_inherit". |
| min_sdk_version: "30", |
| apex_available: [ |
| "//apex_available:platform", |
| "com.android.adservices", |
| "com.android.extservices", |
| ], |
| } |
| |
| cc_test { |
| name: "zlib_tests", |
| srcs: [ |
| "contrib/tests/infcover.cc", |
| "contrib/tests/utils_unittest.cc", |
| ], |
| cflags: [ |
| "-DCMAKE_STANDALONE_UNITTESTS", |
| "-Wno-unused-parameter", |
| ], |
| include_dirs: [ |
| // These tests include "gtest.h" rather than the usual "gtest/gtest.h". |
| "external/googletest/googletest/include/gtest/", |
| ], |
| shared_libs: ["libz"], |
| static_libs: ["zlib_google_compression_utils_portable"], |
| host_supported: true, |
| test_suites: ["device-tests"], |
| } |
| |
| ndk_headers { |
| name: "libz_headers", |
| from: "", |
| to: "", |
| srcs: [ |
| "zconf.h", |
| "zlib.h", |
| ], |
| license: "LICENSE", |
| } |
| |
| ndk_library { |
| name: "libz", |
| symbol_file: "libz.map.txt", |
| first_version: "9", |
| unversioned_until: "current", |
| } |
| |
| // Export zlib headers for inclusion in the musl sysroot. |
| genrule { |
| name: "libc_musl_sysroot_zlib_headers", |
| visibility: ["//external/musl"], |
| srcs: [ |
| "LICENSE", |
| "zconf.h", |
| "zlib.h", |
| ], |
| out: ["libc_musl_sysroot_zlib_headers.zip"], |
| tools: [ |
| "soong_zip", |
| "zip2zip", |
| ], |
| cmd: "$(location soong_zip) -o $(genDir)/sysroot.zip -symlinks=false" + |
| // NOTICE |
| " -j -f $(location LICENSE) " + |
| // headers |
| " -j -P include " + |
| " -f $(location zconf.h) " + |
| " -f $(location zlib.h) " + |
| " && " + |
| "$(location zip2zip) -i $(genDir)/sysroot.zip -o $(out) " + |
| " include/**/*:include " + |
| " LICENSE:NOTICE.zlib", |
| } |
| |
| cc_defaults { |
| name: "zlib_fuzz_defaults", |
| static_libs: ["libz"], |
| host_supported: true, |
| } |
| |
| cc_fuzz { |
| name: "zlib_deflate_fuzzer", |
| defaults: ["zlib_fuzz_defaults"], |
| srcs: ["contrib/tests/fuzzers/deflate_fuzzer.cc"], |
| } |
| |
| cc_fuzz { |
| name: "zlib_deflate_set_dictionary_fuzzer", |
| defaults: ["zlib_fuzz_defaults"], |
| srcs: ["contrib/tests/fuzzers/deflate_set_dictionary_fuzzer.cc"], |
| } |
| |
| cc_fuzz { |
| name: "zlib_inflate_fuzzer", |
| defaults: ["zlib_fuzz_defaults"], |
| srcs: ["contrib/tests/fuzzers/inflate_fuzzer.cc"], |
| } |
| |
| cc_fuzz { |
| name: "zlib_inflate_with_header_fuzzer", |
| defaults: ["zlib_fuzz_defaults"], |
| srcs: ["contrib/tests/fuzzers/inflate_with_header_fuzzer.cc"], |
| } |
| |
| cc_fuzz { |
| name: "zlib_streaming_inflate_fuzzer", |
| defaults: ["zlib_fuzz_defaults"], |
| srcs: ["contrib/tests/fuzzers/streaming_inflate_fuzzer.cc"], |
| fuzz_config: { |
| libfuzzer_options: ["max_len=256000"], |
| }, |
| } |
| |
| cc_fuzz { |
| name: "zlib_uncompress_fuzzer", |
| defaults: ["zlib_fuzz_defaults"], |
| srcs: ["contrib/tests/fuzzers/uncompress_fuzzer.cc"], |
| } |