| # Copyright (c) 2013 The Chromium Authors. All rights reserved. | 
 | # Use of this source code is governed by a BSD-style license that can be | 
 | # found in the LICENSE file. | 
 |  | 
 | import("//build/config/compiler/compiler.gni") | 
 | if (current_cpu == "arm" || current_cpu == "arm64") { | 
 |   import("//build/config/arm.gni") | 
 | } | 
 |  | 
 | config("zlib_config") { | 
 |   include_dirs = [ "." ] | 
 | } | 
 |  | 
 | config("zlib_internal_config") { | 
 |   defines = [ "ZLIB_IMPLEMENTATION" ] | 
 | } | 
 |  | 
 | use_arm_neon_optimizations = false | 
 | if (current_cpu == "arm" || current_cpu == "arm64") { | 
 |   if (arm_use_neon) { | 
 |     use_arm_neon_optimizations = true | 
 |   } | 
 | } | 
 |  | 
 | # TODO(b/206642994): look into whether we should condition on the | 
 | # floating_point_fpu SABI variable, rather than sb_is_modular, here as we did | 
 | # in third_party/zlib/zlib.gyp. | 
 | if (is_starboard && sb_is_modular && target_cpu == "arm" && | 
 |     use_arm_neon_optimizations) { | 
 |   config("zlib_neon_fpu_config") { | 
 |     cflags = [ "-mfpu=neon" ] | 
 |     asmflags = cflags | 
 |   } | 
 | } | 
 |  | 
 | use_x86_x64_optimizations = | 
 |     (current_cpu == "x86" || current_cpu == "x64") && !is_ios | 
 |  | 
 | config("zlib_adler32_simd_config") { | 
 |   if (use_x86_x64_optimizations) { | 
 |     defines = [ "ADLER32_SIMD_SSSE3" ] | 
 |   } | 
 |  | 
 |   if (use_arm_neon_optimizations) { | 
 |     defines = [ "ADLER32_SIMD_NEON" ] | 
 |   } | 
 | } | 
 |  | 
 | source_set("zlib_adler32_simd") { | 
 |   visibility = [ ":*" ] | 
 |  | 
 |   if (use_x86_x64_optimizations) { | 
 |     sources = [ | 
 |       "adler32_simd.c", | 
 |       "adler32_simd.h", | 
 |     ] | 
 |     if (!is_win || is_clang) { | 
 |       cflags = [ "-mssse3" ] | 
 |     } | 
 |   } | 
 |  | 
 |   if (use_arm_neon_optimizations) { | 
 |     sources = [ | 
 |       "adler32_simd.c", | 
 |       "adler32_simd.h", | 
 |     ] | 
 |  | 
 |     if (!is_debug) { | 
 |       # Use optimize_speed (-O3) to output the _smallest_ code. | 
 |       if(!use_cobalt_customizations) { | 
 |         configs -= [ "//build/config/compiler:default_optimization" ] | 
 |       } | 
 |       configs += [ "//build/config/compiler:optimize_speed" ] | 
 |     } | 
 |   } | 
 |  | 
 |   configs += [ ":zlib_internal_config" ] | 
 |   if (is_starboard && !is_debug) { | 
 |     configs -= [ "//starboard/build/config:size" ] | 
 |     configs += [ "//starboard/build/config:speed" ] | 
 |   } | 
 |  | 
 |   if (is_starboard && sb_is_modular && target_cpu == "arm" && | 
 |       use_arm_neon_optimizations) { | 
 |     configs += [ ":zlib_neon_fpu_config" ] | 
 |   } | 
 |  | 
 |   public_configs = [ ":zlib_adler32_simd_config" ] | 
 | } | 
 |  | 
 | if (use_arm_neon_optimizations) { | 
 |   config("zlib_arm_crc32_config") { | 
 |     # Disabled for iPhone, as described in DDI0487C_a_armv8_arm: | 
 |     #  "All implementations of the ARMv8.1 architecture are required to | 
 |     #   implement the CRC32* instructions. These are optional in ARMv8.0." | 
 |     if (!is_ios && arm_version >= 8) { | 
 |       defines = [ "CRC32_ARMV8_CRC32" ] | 
 |       if (is_android) { | 
 |         defines += [ "ARMV8_OS_ANDROID" ] | 
 |       } else if (is_linux || is_chromeos) { | 
 |         defines += [ "ARMV8_OS_LINUX" ] | 
 |       } else if (is_fuchsia) { | 
 |         defines += [ "ARMV8_OS_FUCHSIA" ] | 
 |       } else if (is_win) { | 
 |         defines += [ "ARMV8_OS_WINDOWS" ] | 
 |       } else { | 
 |         assert(is_starboard, "Unsupported ARM OS") | 
 |       } | 
 |     } | 
 |   } | 
 |  | 
 |   source_set("zlib_arm_crc32") { | 
 |     visibility = [ ":*" ] | 
 |  | 
 |     if (!is_ios) { | 
 |       include_dirs = [ "." ] | 
 |  | 
 |       if (!use_cobalt_customizations && is_android) { | 
 |         import("//build/config/android/config.gni") | 
 |         if (defined(android_ndk_root) && android_ndk_root != "") { | 
 |           deps = [ | 
 |             "//third_party/android_ndk:cpu_features", | 
 |           ] | 
 |         } else { | 
 |           assert(false, "CPU detection requires the Android NDK") | 
 |         } | 
 |       } else if (!is_win && !is_clang) { | 
 |         assert(!use_thin_lto, | 
 |                "ThinLTO fails mixing different module-level targets") | 
 |         cflags_c = [ "-march=armv8-a+crc" ] | 
 |       } | 
 |  | 
 |       sources = [ | 
 |         "arm_features.c", | 
 |         "arm_features.h", | 
 |         "crc32_simd.c", | 
 |         "crc32_simd.h", | 
 |       ] | 
 |  | 
 |       if (is_starboard && use_arm_neon_optimizations) { | 
 |         sources += [ | 
 |           "contrib/optimizations/slide_hash_neon.c", | 
 |           "contrib/optimizations/slide_hash_neon.h", | 
 |         ] | 
 |       } | 
 |  | 
 |       if (!is_debug) { | 
 |         if(!use_cobalt_customizations) { | 
 |           configs -= [ "//build/config/compiler:default_optimization" ] | 
 |         } | 
 |         configs += [ "//build/config/compiler:optimize_speed" ] | 
 |       } | 
 |     } | 
 |  | 
 |     configs += [ ":zlib_internal_config" ] | 
 |     if (is_starboard && !is_debug) { | 
 |       configs -= [ "//starboard/build/config:size" ] | 
 |       configs += [ "//starboard/build/config:speed" ] | 
 |     } | 
 |     if (is_starboard) { | 
 |       deps = [ "//starboard:starboard_headers_only" ] | 
 |     } | 
 |  | 
 |     if (is_starboard && sb_is_modular && target_cpu == "arm" && | 
 |         use_arm_neon_optimizations) { | 
 |       configs += [ ":zlib_neon_fpu_config" ] | 
 |     } | 
 |  | 
 |     public_configs = [ ":zlib_arm_crc32_config" ] | 
 |   } | 
 | } | 
 |  | 
 | config("zlib_inflate_chunk_simd_config") { | 
 |   if (use_x86_x64_optimizations) { | 
 |     defines = [ "INFLATE_CHUNK_SIMD_SSE2" ] | 
 |  | 
 |     if (current_cpu == "x64") { | 
 |       defines += [ "INFLATE_CHUNK_READ_64LE" ] | 
 |     } | 
 |  | 
 |     if (is_starboard && current_cpu == "x86") { | 
 |       cflags = [ "-msse2" ] | 
 |     } | 
 |   } | 
 |  | 
 |   if (use_arm_neon_optimizations) { | 
 |     defines = [ "INFLATE_CHUNK_SIMD_NEON" ] | 
 |     if (current_cpu == "arm64") { | 
 |       defines += [ "INFLATE_CHUNK_READ_64LE" ] | 
 |     } | 
 |   } | 
 | } | 
 |  | 
 | source_set("zlib_inflate_chunk_simd") { | 
 |   visibility = [ ":*" ] | 
 |  | 
 |   if (use_x86_x64_optimizations || use_arm_neon_optimizations) { | 
 |     include_dirs = [ "." ] | 
 |  | 
 |     sources = [ | 
 |       "contrib/optimizations/chunkcopy.h", | 
 |       "contrib/optimizations/inffast_chunk.c", | 
 |       "contrib/optimizations/inffast_chunk.h", | 
 |       "contrib/optimizations/inflate.c", | 
 |     ] | 
 |  | 
 |     if (!is_win && use_cobalt_customizations) { | 
 |       cflags_c = [ "-Wno-unused-function" ] | 
 |       if (is_clang_16) { | 
 |         cflags_c += [ | 
 |           # inffast_chunk.c a function definition without a prototype | 
 |           "-Wno-deprecated-non-prototype", | 
 |         ] | 
 |       } | 
 |     } | 
 |  | 
 |     if (use_arm_neon_optimizations && !is_debug) { | 
 |       # Here we trade better performance on newer/bigger ARMv8 cores | 
 |       # for less perf on ARMv7, per crbug.com/772870#c40 | 
 |       if(!use_cobalt_customizations) { | 
 |         configs -= [ "//build/config/compiler:default_optimization" ] | 
 |       } | 
 |       configs += [ "//build/config/compiler:optimize_speed" ] | 
 |     } | 
 |   } | 
 |  | 
 |   if (!use_cobalt_customizations) { | 
 |     configs -= [ "//build/config/compiler:chromium_code" ] | 
 |   } | 
 |   configs += [ | 
 |     ":zlib_internal_config", | 
 |     "//build/config/compiler:no_chromium_code", | 
 |   ] | 
 |   if (is_starboard && !is_debug) { | 
 |     configs -= [ "//starboard/build/config:size" ] | 
 |     configs += [ "//starboard/build/config:speed" ] | 
 |   } | 
 |  | 
 |   if (is_starboard && sb_is_modular && target_cpu == "arm" && | 
 |       use_arm_neon_optimizations) { | 
 |     configs += [ ":zlib_neon_fpu_config" ] | 
 |   } | 
 |  | 
 |   public_configs = [ ":zlib_inflate_chunk_simd_config" ] | 
 | } | 
 |  | 
 | config("zlib_crc32_simd_config") { | 
 |   if (use_x86_x64_optimizations) { | 
 |     defines = [ "CRC32_SIMD_SSE42_PCLMUL" ] | 
 |   } | 
 | } | 
 |  | 
 | source_set("zlib_crc32_simd") { | 
 |   visibility = [ ":*" ] | 
 |  | 
 |   if (use_x86_x64_optimizations) { | 
 |     sources = [ | 
 |       "crc32_simd.c", | 
 |       "crc32_simd.h", | 
 |     ] | 
 |  | 
 |     if (!is_win || is_clang) { | 
 |       cflags = [ | 
 |         "-msse4.2", | 
 |         "-mpclmul", | 
 |       ] | 
 |     } | 
 |   } | 
 |  | 
 |   configs += [ ":zlib_internal_config" ] | 
 |  | 
 |   public_configs = [ ":zlib_crc32_simd_config" ] | 
 | } | 
 |  | 
 | source_set("zlib_x86_simd") { | 
 |   visibility = [ ":*" ] | 
 |  | 
 |   if (use_x86_x64_optimizations) { | 
 |     sources = [ | 
 |       "crc_folding.c", | 
 |       "fill_window_sse.c", | 
 |     ] | 
 |  | 
 |     if (!is_win || is_clang) { | 
 |       cflags = [ | 
 |         "-msse4.2", | 
 |         "-mpclmul", | 
 |       ] | 
 |     } | 
 |   } else { | 
 |     sources = [ | 
 |       "simd_stub.c", | 
 |     ] | 
 |   } | 
 |  | 
 |   if (!use_cobalt_customizations) { | 
 |     configs -= [ "//build/config/compiler:chromium_code" ] | 
 |   } | 
 |   configs += [ | 
 |     ":zlib_internal_config", | 
 |     "//build/config/compiler:no_chromium_code", | 
 |   ] | 
 | } | 
 |  | 
 | config("zlib_warnings") { | 
 |   if (is_clang && use_x86_x64_optimizations) { | 
 |     cflags = [ "-Wno-incompatible-pointer-types" ] | 
 |   } | 
 | } | 
 |  | 
 | component("zlib_hidden") { | 
 |   if (!is_win) { | 
 |     # Don't stomp on "libzlib" on other platforms. | 
 |     output_name = "chrome_zlib" | 
 |   } | 
 |  | 
 |   sources = [ | 
 |     "adler32.c", | 
 |     "chromeconf.h", | 
 |     "compress.c", | 
 |     "crc32.c", | 
 |     "crc32.h", | 
 |     "deflate.c", | 
 |     "deflate.h", | 
 |     "gzclose.c", | 
 |     "gzguts.h", | 
 |     "gzlib.c", | 
 |     "gzread.c", | 
 |     "gzwrite.c", | 
 |     "infback.c", | 
 |     "inffast.c", | 
 |     "inffast.h", | 
 |     "inffixed.h", | 
 |     "inflate.h", | 
 |     "inftrees.c", | 
 |     "inftrees.h", | 
 |     "trees.c", | 
 |     "trees.h", | 
 |     "uncompr.c", | 
 |     "x86.h", | 
 |     "zconf.h", | 
 |     "zlib.h", | 
 |     "zutil.c", | 
 |     "zutil.h", | 
 |   ] | 
 |  | 
 |   defines = [] | 
 |   deps = [] | 
 |   cflags_c = [] | 
 |  | 
 |   if (is_clang_16 && use_cobalt_customizations) { | 
 |     cflags_c += [ | 
 |       "-Wno-deprecated-non-prototype", | 
 |       "-Wno-unused-but-set-variable", | 
 |     ] | 
 |   } | 
 |  | 
 |   if (use_x86_x64_optimizations || use_arm_neon_optimizations) { | 
 |     deps += [ | 
 |       ":zlib_adler32_simd", | 
 |       ":zlib_inflate_chunk_simd", | 
 |     ] | 
 |  | 
 |     if (use_x86_x64_optimizations) { | 
 |       sources += [ | 
 |         "arm_stub.c", | 
 |         "x86.c", | 
 |       ] | 
 |       if (!is_win) { | 
 |         cflags_c += [ "-Wno-missing-braces" ] | 
 |       } | 
 |       deps += [ ":zlib_crc32_simd" ] | 
 |     } else if (use_arm_neon_optimizations) { | 
 |       if (!is_starboard) { | 
 |         # The slide_hash_neon sources are moved to zlib_arm_crc32 so that they | 
 |         # can be compiled with ARM NEON support. | 
 |         sources += [ | 
 |           "contrib/optimizations/slide_hash_neon.c", | 
 |           "contrib/optimizations/slide_hash_neon.h", | 
 |         ] | 
 |       } | 
 |       deps += [ ":zlib_arm_crc32" ] | 
 |     } | 
 |   } else { | 
 |     sources += [ | 
 |       "arm_stub.c", | 
 |       "inflate.c", | 
 |     ] | 
 |   } | 
 |  | 
 |   if (is_starboard) { | 
 |     check_includes = false | 
 |     sources += [ "inflate.c" ] | 
 |     sources -= [ | 
 |       "gzclose.c", | 
 |       "gzguts.h", | 
 |       "gzlib.c", | 
 |       "gzread.c", | 
 |       "gzwrite.c", | 
 |     ] | 
 |   } else if (!is_native_target_build) { | 
 |     configs -= [ "//build/config/compiler:chromium_code" ] | 
 |   } | 
 |   configs += [ | 
 |     ":zlib_internal_config", | 
 |     "//build/config/compiler:no_chromium_code", | 
 |  | 
 |     # Must be after no_chromium_code for warning flags to be ordered correctly. | 
 |     ":zlib_warnings", | 
 |   ] | 
 |  | 
 |   public_configs = [ ":zlib_config" ] | 
 |  | 
 |   deps += [ ":zlib_x86_simd" ] | 
 |   allow_circular_includes_from = deps | 
 | } | 
 |  | 
 | if (use_cobalt_customizations) { | 
 |   config("zlib_all_dependent_config") { | 
 |     # To prevent Zlib ever from redefining const keyword in zconf.h | 
 |     defines = [ "STDC" ] | 
 |   } | 
 |  | 
 |   group("zlib") { | 
 |     all_dependent_configs = [":zlib_all_dependent_config" ] | 
 |     public_deps = [ ":zlib_hidden" ] | 
 |   } | 
 | } | 
 |  | 
 | config("minizip_warnings") { | 
 |   visibility = [ ":*" ] | 
 |  | 
 |   if (is_clang) { | 
 |     # zlib uses `if ((a == b))` for some reason. | 
 |     cflags = [ "-Wno-parentheses-equality" ] | 
 |     if (is_clang_16 && use_cobalt_customizations) { | 
 |       cflags += [ | 
 |         "-Wno-misleading-indentation", | 
 |         "-Wno-unused-but-set-variable" | 
 |       ] | 
 |     } | 
 |   } | 
 | } | 
 |  | 
 | static_library("minizip") { | 
 |   sources = [ | 
 |     "contrib/minizip/ioapi.c", | 
 |     "contrib/minizip/ioapi.h", | 
 |     "contrib/minizip/iowin32.c", | 
 |     "contrib/minizip/iowin32.h", | 
 |     "contrib/minizip/unzip.c", | 
 |     "contrib/minizip/unzip.h", | 
 |     "contrib/minizip/zip.c", | 
 |     "contrib/minizip/zip.h", | 
 |   ] | 
 |  | 
 |   if (!is_win) { | 
 |     sources -= [ | 
 |       "contrib/minizip/iowin32.c", | 
 |       "contrib/minizip/iowin32.h", | 
 |     ] | 
 |   } | 
 |  | 
 |   if (is_mac || is_ios || is_android || is_nacl) { | 
 |     # Mac, Android and the BSDs don't have fopen64, ftello64, or fseeko64. We | 
 |     # use fopen, ftell, and fseek instead on these systems. | 
 |     defines = [ "USE_FILE32API" ] | 
 |   } | 
 |  | 
 |   deps = [ | 
 |     ":zlib", | 
 |   ] | 
 |  | 
 |   if (is_starboard) { | 
 |     sources += [ | 
 |       "contrib/minizip/iostarboard.c", | 
 |       "contrib/minizip/iostarboard.h", | 
 |     ] | 
 |     deps += [ "//starboard:starboard_headers_only" ] | 
 |   } else if (!is_native_target_build) { | 
 |     configs -= [ "//build/config/compiler:chromium_code" ] | 
 |   } | 
 |   configs += [ | 
 |     "//build/config/compiler:no_chromium_code", | 
 |  | 
 |     # Must be after no_chromium_code for warning flags to be ordered correctly. | 
 |     ":minizip_warnings", | 
 |   ] | 
 |  | 
 |   public_configs = [ ":zlib_config" ] | 
 | } | 
 |  | 
 | if (!is_starboard) { | 
 |   executable("zlib_bench") { | 
 |     include_dirs = [ "." ] | 
 |  | 
 |     sources = [ | 
 |       "contrib/bench/zlib_bench.cc", | 
 |     ] | 
 |  | 
 |     if (!is_debug) { | 
 |       if (!is_native_target_build) { | 
 |         configs -= [ "//build/config/compiler:default_optimization" ] | 
 |       } | 
 |       configs += [ "//build/config/compiler:optimize_speed" ] | 
 |     } | 
 |  | 
 |     if (!use_cobalt_customizations) { | 
 |       configs -= [ "//build/config/compiler:chromium_code" ] | 
 |     } | 
 |     configs += [ "//build/config/compiler:no_chromium_code" ] | 
 |  | 
 |     deps = [ | 
 |       ":zlib", | 
 |     ] | 
 |   } | 
 | } | 
 |  | 
 | static_library("zip") { | 
 |   sources = [ | 
 |     "google/zip.cc", | 
 |     "google/zip.h", | 
 |     "google/zip_internal.cc", | 
 |     "google/zip_internal.h", | 
 |     "google/zip_reader.cc", | 
 |     "google/zip_reader.h", | 
 |     "google/zip_writer.cc", | 
 |     "google/zip_writer.h", | 
 |   ] | 
 |  | 
 |   deps = [ | 
 |     ":minizip", | 
 |     "//base", | 
 |   ] | 
 | } | 
 |  | 
 | target(gtest_target_type, "zip_unittests") { | 
 |   testonly = true | 
 |  | 
 |   sources = [ | 
 |     "google/compression_utils_unittest.cc", | 
 |     "google/zip_reader_unittest.cc", | 
 |     "google/zip_unittest.cc", | 
 |     "google/compression_utils.cc", | 
 |     "google/compression_utils.h", | 
 |     "google/compression_utils_portable.cc", | 
 |     "google/compression_utils_portable.h", | 
 |   ] | 
 |  | 
 |   deps = [ | 
 |     ":minizip", | 
 |     ":zip", | 
 |     ":zlib", | 
 |     "//base/test:run_all_unittests", | 
 |     "//base/test:test_support", | 
 |     "//starboard/common", | 
 |     "//testing/gmock", | 
 |     "//testing/gtest", | 
 |     "//third_party/zlib/google/test:zip_unittest_files", | 
 |   ] | 
 |  | 
 |   if (is_starboard) { | 
 |     configs -= [ "//starboard/build/config:size" ] | 
 |     configs += [ "//starboard/build/config:speed" ] | 
 |  | 
 |     data_deps = [ "//third_party/zlib/google/test:zip_unittest_files" ] | 
 |   } | 
 | } |