# 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_libpng = is_official_build
}

import("../third_party.gni")

if (skia_use_system_libpng) {
  system("libpng") {
    libs = [ "png" ]
  }
} else {
  third_party("libpng") {
    public_include_dirs = [
      ".",
      "../externals/libpng",
    ]

    defines = [ "PNG_SET_OPTION_SUPPORTED" ]
    deps = [
      "//third_party/zlib",
    ]
    sources = [
      "../externals/libpng/png.c",
      "../externals/libpng/pngerror.c",
      "../externals/libpng/pngget.c",
      "../externals/libpng/pngmem.c",
      "../externals/libpng/pngpread.c",
      "../externals/libpng/pngread.c",
      "../externals/libpng/pngrio.c",
      "../externals/libpng/pngrtran.c",
      "../externals/libpng/pngrutil.c",
      "../externals/libpng/pngset.c",
      "../externals/libpng/pngtrans.c",
      "../externals/libpng/pngwio.c",
      "../externals/libpng/pngwrite.c",
      "../externals/libpng/pngwtran.c",
      "../externals/libpng/pngwutil.c",
    ]

    if (current_cpu == "arm" || current_cpu == "arm64") {
      sources += [
        "../externals/libpng/arm/arm_init.c",
        "../externals/libpng/arm/filter_neon_intrinsics.c",
        "../externals/libpng/arm/palette_neon_intrinsics.c",
      ]
      if (is_clang && is_win) {
        # TODO(mtklein): libpng includes arm64_neon.h in clang-cl.exe builds,
        # where it should only do that in cl.exe builds, continuing to use
        # arm_neon.h with Clang.  Until that's fixed, NEON code won't build.
        defines += [ "PNG_ARM_NEON_OPT=0" ]
      }
    }

    if (current_cpu == "x86" || current_cpu == "x64") {
      defines += [ "PNG_INTEL_SSE" ]
      sources += [
        "../externals/libpng/intel/filter_sse2_intrinsics.c",
        "../externals/libpng/intel/intel_init.c",
      ]
    }
  }
}
