# 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.
# Do not use the targets in this file unless you need a certain libjpeg
# implementation. Use the meta target //third_party:jpeg instead.

if (current_cpu == "arm") {
  import("//build/config/arm.gni")
}

if (current_cpu == "x86" || current_cpu == "x64") {
  import("//third_party/yasm/yasm_assemble.gni")

  yasm_assemble("simd_asm") {

    defines = []

    if (current_cpu == "x86") {
      sources = [
        "simd/jccolor-mmx.asm",
        "simd/jccolor-sse2.asm",
        "simd/jcgray-mmx.asm",
        "simd/jcgray-sse2.asm",
        "simd/jchuff-sse2.asm",
        "simd/jcsample-mmx.asm",
        "simd/jcsample-sse2.asm",
        "simd/jdcolor-mmx.asm",
        "simd/jdcolor-sse2.asm",
        "simd/jdmerge-mmx.asm",
        "simd/jdmerge-sse2.asm",
        "simd/jdsample-mmx.asm",
        "simd/jdsample-sse2.asm",
        "simd/jfdctflt-3dn.asm",
        "simd/jfdctflt-sse.asm",
        "simd/jfdctfst-mmx.asm",
        "simd/jfdctfst-sse2.asm",
        "simd/jfdctint-mmx.asm",
        "simd/jfdctint-sse2.asm",
        "simd/jidctflt-3dn.asm",
        "simd/jidctflt-sse.asm",
        "simd/jidctflt-sse2.asm",
        "simd/jidctfst-mmx.asm",
        "simd/jidctfst-sse2.asm",
        "simd/jidctint-mmx.asm",
        "simd/jidctint-sse2.asm",
        "simd/jidctred-mmx.asm",
        "simd/jidctred-sse2.asm",
        "simd/jquant-3dn.asm",
        "simd/jquant-mmx.asm",
        "simd/jquant-sse.asm",
        "simd/jquantf-sse2.asm",
        "simd/jquanti-sse2.asm",
        "simd/jsimdcpu.asm",
      ]

      defines += [
        "__x86__",
        "PIC",
      ]
    } else if (current_cpu == "x64") {
      sources = [
        "simd/jccolor-sse2-64.asm",
        "simd/jcgray-sse2-64.asm",
        "simd/jchuff-sse2-64.asm",
        "simd/jcsample-sse2-64.asm",
        "simd/jdcolor-sse2-64.asm",
        "simd/jdmerge-sse2-64.asm",
        "simd/jdsample-sse2-64.asm",
        "simd/jfdctflt-sse-64.asm",
        "simd/jfdctfst-sse2-64.asm",
        "simd/jfdctint-sse2-64.asm",
        "simd/jidctflt-sse2-64.asm",
        "simd/jidctfst-sse2-64.asm",
        "simd/jidctint-sse2-64.asm",
        "simd/jidctred-sse2-64.asm",
        "simd/jquantf-sse2-64.asm",
        "simd/jquanti-sse2-64.asm",
      ]

      defines += [
        "__x86_64__",
        "PIC",
      ]
    }

    defines += [ "ELF" ]
  }
}

static_library("simd") {
  if (!is_fuchsia) {
    sources = [
      "jsimd_none.c",
    ]
  } else if (current_cpu == "x86") {
    deps = [
      ":simd_asm",
    ]

    sources = [
      "simd/jsimd_i386.c",
    ]
  } else if (current_cpu == "x64") {
    deps = [
      ":simd_asm",
    ]

    sources = [
      "simd/jsimd_x86_64.c",
    ]
  } else if (current_cpu == "arm" && arm_version >= 7 &&
             (arm_use_neon || arm_optionally_use_neon)) {
    sources = [
      "simd/jsimd_arm.c",
      "simd/jsimd_arm_neon.S",
    ]
  } else if (current_cpu == "arm64") {
    sources = [
      "simd/jsimd_arm64.c",
      "simd/jsimd_arm64_neon.S",
    ]
  } else {
    sources = [
      "jsimd_none.c",
    ]
  }
}

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

static_library("libjpeg") {
  sources = [
    "jcapimin.c",
    "jcapistd.c",
    "jccoefct.c",
    "jccolor.c",
    "jcdctmgr.c",
    "jchuff.c",
    "jchuff.h",
    "jcinit.c",
    "jcmainct.c",
    "jcmarker.c",
    "jcmaster.c",
    "jcomapi.c",
    "jconfig.h",
    "jcparam.c",
    "jcphuff.c",
    "jcprepct.c",
    "jcsample.c",
    "jdapimin.c",
    "jdapistd.c",
    "jdatadst.c",
    "jdatasrc.c",
    "jdcoefct.c",
    "jdcolor.c",
    "jdct.h",
    "jddctmgr.c",
    "jdhuff.c",
    "jdhuff.h",
    "jdinput.c",
    "jdmainct.c",
    "jdmarker.c",
    "jdmaster.c",
    "jdmerge.c",
    "jdphuff.c",
    "jdpostct.c",
    "jdsample.c",
    "jerror.c",
    "jerror.h",
    "jfdctflt.c",
    "jfdctfst.c",
    "jfdctint.c",
    "jidctflt.c",
    "jidctfst.c",
    "jidctint.c",
    "jidctred.c",
    "jinclude.h",
    "jmemmgr.c",
    "jmemnobs.c",
    "jmemsys.h",
    "jmorecfg.h",
    "jpegint.h",
    "jpeglib.h",
    "jquant1.c",
    "jquant2.c",
    "jutils.c",
    "jversion.h",
  ]

  defines = [
    "WITH_SIMD",
    "NO_GETENV",
  ]

  configs += [ ":libjpeg_config" ]

  public_configs = [ ":libjpeg_config" ]

  deps = [
    ":simd",
  ]
}
