# Copyright 2016 The Fuchsia 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/arm.gni")

config("libpng_config") {
  include_dirs = [ "." ]
  defines = []
}

# Must be in a config because of how GN orders flags (otherwise -Wall will
# appear after this, and turn it back on).
config("clang_warnings") {
  if (is_clang) {
    cflags = [
      "-Wno-conversion",
      "-Wno-implicit-fallthrough",

      # libpng checks that the width is not greater than PNG_SIZE_MAX.
      # On platforms where size_t is 64-bits, this comparison will always
      # be false.
      "-Wno-tautological-constant-out-of-range-compare",
    ]
  }
}

source_set("libpng") {
  sources = [
    "png.c",
    "png.h",
    "pngconf.h",
    "pngerror.c",
    "pngget.c",
    "pnginfo.h",
    "pnglibconf.h",
    "pngmem.c",
    "pngpread.c",
    "pngprefix.h",
    "pngpriv.h",
    "pngread.c",
    "pngrio.c",
    "pngrtran.c",
    "pngrutil.c",
    "pngset.c",
    "pngstruct.h",
    "pngtrans.c",
    "pngwio.c",
    "pngwrite.c",
    "pngwtran.c",
    "pngwutil.c",
  ]
  defines = []
  cflags = []
  if (current_cpu == "x86" || current_cpu == "x64") {
    sources += [
      "contrib/intel/filter_sse2_intrinsics.c",
      "contrib/intel/intel_init.c",
    ]
    defines += [ "PNG_INTEL_SSE_OPT=1" ]
  } else if ((current_cpu == "arm" || current_cpu == "arm64") && arm_use_neon) {
    sources += [
      "arm/arm_init.c",
      "arm/filter_neon_intrinsics.c",
    ]
    defines += [
      "PNG_ARM_NEON_OPT=2",
      "PNG_ARM_NEON_IMPLEMENTATION=1",
    ]
  }

  public_configs = [ ":libpng_config" ]
  public_deps = [ "//third_party/zlib" ]
  configs += [ ":clang_warnings" ]

  # TODO(fxbug.dev/77808): pull new code for libpng before we allow it to be
  # used in more places.
  visibility = [
    "//src/camera/bin/factory/*",
    "//src/ui/tools/gltf_export/*",
    "//src/ui/examples/frame-compression/*",
    "//src/developer/forensics/feedback_data/*",
    "//third_party/freetype2/*",
  ]
}
