# Copyright 2014 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.

config("libpng_public") {
  include_dirs = [ "." ]
}

source_set("libpng") {
  public_configs = [ ":libpng_public" ]

  cflags_c = []
  defines = []

  sources = [
    "png.c",
    "pngerror.c",
    "pngget.c",
    "pngmem.c",
    "pngpread.c",
    "pngread.c",
    "pngrio.c",
    "pngrtran.c",
    "pngrutil.c",
    "pngset.c",
    "pngtrans.c",
    "pngwio.c",
    "pngwrite.c",
    "pngwtran.c",
    "pngwutil.c",
  ]

  if ((is_android || is_linux || is_fuchsia || is_ios) &&
       (current_cpu == "arm" || current_cpu == "arm64")) {
    sources += [
      "arm/arm_init.c",
      "arm/filter_neon.S",
      "arm/filter_neon_intrinsics.c",
      "arm/palette_neon_intrinsics.c",
    ]

    defines += [ "PNG_ARM_NEON_OPT=2" ]

    cflags_c += [ "-Wno-sign-compare" ]
  }

  deps = [
    "//third_party/zlib",
  ]
}
