# Copyright 2016 Google Inc.
#
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

declare_args() {
  skia_use_system_zlib = is_official_build
}

import("../third_party.gni")

if (skia_use_system_zlib) {
  system("zlib") {
    libs = [ "z" ]
  }
} else {
  third_party("zlib") {
    public_include_dirs = [ "../externals/zlib" ]

    deps = [
      ":zlib_x86",
    ]
    sources = [
      "../externals/zlib/adler32.c",
      "../externals/zlib/compress.c",
      "../externals/zlib/crc32.c",
      "../externals/zlib/deflate.c",
      "../externals/zlib/gzclose.c",
      "../externals/zlib/gzlib.c",
      "../externals/zlib/gzread.c",
      "../externals/zlib/gzwrite.c",
      "../externals/zlib/infback.c",
      "../externals/zlib/inffast.c",
      "../externals/zlib/inflate.c",
      "../externals/zlib/inftrees.c",
      "../externals/zlib/trees.c",
      "../externals/zlib/uncompr.c",
      "../externals/zlib/zutil.c",
    ]
  }
}

third_party("zlib_x86") {
  public_include_dirs = []
  if (target_cpu == "x86" || target_cpu == "x64") {
    sources = [
      "../externals/zlib/crc_folding.c",
      "../externals/zlib/fill_window_sse.c",
      "../externals/zlib/x86.c",
    ]
    if (!is_win || is_clang) {
      cflags_c = [
        "-msse4.2",
        "-mpclmul",
      ]
    }
  } else {
    sources = [
      "../externals/zlib/simd_stub.c",
    ]
  }
}
