# 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" ]
  }
}
