# Copyright 2017 The ANGLE Project Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

config("libpng_config") {
  include_dirs = [ "src" ]
  cflags = []
  if (is_clang) {
    cflags += [ "-Wno-tautological-constant-out-of-range-compare" ]
  }
  if (is_apple) {
    # TODO(crbug.com/41492875): this can be removed once libpng is updated to include
    # https://github.com/pnggroup/libpng/commit/893b8113f04d408cc6177c6de19c9889a48faa24
    cflags += [ "-fno-define-target-os-macros" ]
  }
}

static_library("libpng") {
  sources = [
    "src/png.c",
    "src/pngerror.c",
    "src/pngget.c",
    "src/pngmem.c",
    "src/pngpread.c",
    "src/pngread.c",
    "src/pngrio.c",
    "src/pngrtran.c",
    "src/pngrutil.c",
    "src/pngset.c",
    "src/pngtrans.c",
    "src/pngwio.c",
    "src/pngwrite.c",
    "src/pngwtran.c",
    "src/pngwutil.c",
  ]

  # Note: currently pnglibconf.h defines this, but if it gets dropped in a
  # future roll, needs to be added here for the other defines to work.
  # defines = [ "PNG_SET_OPTION_SUPPORTED" ]
  if (current_cpu == "x86" || current_cpu == "x64") {
    sources += [
      "src/intel/filter_sse2_intrinsics.c",
      "src/intel/intel_init.c",
    ]
    defines = [ "PNG_INTEL_SSE_OPT=1" ]
  } else if (target_cpu == "arm" || target_cpu == "arm64") {
    sources += [
      "src/arm/arm_init.c",
      "src/arm/filter_neon_intrinsics.c",
      "src/arm/palette_neon_intrinsics.c",
    ]
    defines = [
      "PNG_ARM_NEON_OPT=2",
      "PNG_ARM_NEON_IMPLEMENTATION=1",
    ]
  }
  if (is_win) {
    cflags = [ "/wd4028" ]
  }
  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [ "//build/config/compiler:no_chromium_code" ]
  public_configs = [ ":libpng_config" ]
  deps = [ "//third_party/zlib:zlib" ]
}
