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

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(!is_starboard) {
        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" ]
  }

  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 (!is_starboard && 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_debug) {
        if(!is_starboard) {
          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" ]
    }

    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 (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 && is_starboard) {
      cflags_c = [ "-Wno-unused-function" ]
    }

    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(!is_starboard) {
        configs -= [ "//build/config/compiler:default_optimization" ]
      }
      configs += [ "//build/config/compiler:optimize_speed" ]
    }
  }

  if (!is_starboard) {
    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" ]
  }

  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 (!is_starboard) {
    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") {
  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 (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) {
      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 {
    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
}

config("minizip_warnings") {
  visibility = [ ":*" ]

  if (is_clang) {
    # zlib uses `if ((a == b))` for some reason.
    cflags = [ "-Wno-parentheses-equality" ]
  }
}

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) {
    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) {
      configs -= [ "//build/config/compiler:default_optimization" ]
      configs += [ "//build/config/compiler:optimize_speed" ]
    }

    if (!is_starboard) {
      configs -= [ "//build/config/compiler:chromium_code" ]
    }
    configs += [ "//build/config/compiler:no_chromium_code" ]

    deps = [
      ":zlib",
    ]
  }
}
