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

# Do not use the targets in this file unless you need a certain libjpeg
# implementation. Use the meta target //third_party:jpeg instead.

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

if (cpu_arch == "x86" || cpu_arch == "x64") {

import("//third_party/yasm/yasm_assemble.gni")

yasm_assemble("simd_asm") {
  defines = []

  if (cpu_arch == "x86") {
    sources = [
      "simd/jccolmmx.asm",
      "simd/jccolss2.asm",
      "simd/jcgrammx.asm",
      "simd/jcgrass2.asm",
      "simd/jcqnt3dn.asm",
      "simd/jcqntmmx.asm",
      "simd/jcqnts2f.asm",
      "simd/jcqnts2i.asm",
      "simd/jcqntsse.asm",
      "simd/jcsammmx.asm",
      "simd/jcsamss2.asm",
      "simd/jdcolmmx.asm",
      "simd/jdcolss2.asm",
      "simd/jdmermmx.asm",
      "simd/jdmerss2.asm",
      "simd/jdsammmx.asm",
      "simd/jdsamss2.asm",
      "simd/jf3dnflt.asm",
      "simd/jfmmxfst.asm",
      "simd/jfmmxint.asm",
      "simd/jfss2fst.asm",
      "simd/jfss2int.asm",
      "simd/jfsseflt.asm",
      "simd/ji3dnflt.asm",
      "simd/jimmxfst.asm",
      "simd/jimmxint.asm",
      "simd/jimmxred.asm",
      "simd/jiss2flt.asm",
      "simd/jiss2fst.asm",
      "simd/jiss2int.asm",
      "simd/jiss2red.asm",
      "simd/jisseflt.asm",
      "simd/jsimdcpu.asm",
    ]
    defines += [
      "__x86__",
    ]
  } else if (cpu_arch == "x64") {
    sources = [
      "simd/jccolss2-64.asm",
      "simd/jcgrass2-64.asm",
      "simd/jcqnts2f-64.asm",
      "simd/jcqnts2i-64.asm",
      "simd/jcsamss2-64.asm",
      "simd/jdcolss2-64.asm",
      "simd/jdmerss2-64.asm",
      "simd/jdsamss2-64.asm",
      "simd/jfss2fst-64.asm",
      "simd/jfss2int-64.asm",
      "simd/jfsseflt-64.asm",
      "simd/jiss2flt-64.asm",
      "simd/jiss2fst-64.asm",
      "simd/jiss2int-64.asm",
      "simd/jiss2red-64.asm",
    ]
    defines += [
      "__x86_64__",
    ]
  }

  if (is_win) {
    defines += [
      "MSVC",
    ]
    include_dirs = [ "win" ]
    if (cpu_arch == "x86") {
      defines += [
        "WIN32",
      ]
    } else {
      defines += [
        "WIN64",
      ]
    }
  } else if (is_mac) {
    defines += [
      "MACHO",
    ]
    include_dirs = [ "mac" ]
  } else if (is_linux) {
    defines += [
      "ELF",
    ]
    include_dirs = [ "linux" ]
  }
}

}

source_set("simd") {
  if (cpu_arch == "x86") {
    deps = [ ":simd_asm" ]
    sources = [
      "simd/jsimd_i386.c",
    ]
    if (is_win) {
      cflags = [ "/wd4245" ]
    }
  } else if (cpu_arch == "x64") {
    deps = [ ":simd_asm" ]
    sources = [
      "simd/jsimd_x86_64.c",
    ]
  } else if (cpu_arch == "arm" && arm_version >= 7 &&
             (arm_use_neon || arm_optionally_use_neon)) {
    sources = [
      "simd/jsimd_arm.c",
      "simd/jsimd_arm_neon.S",
    ]
  } else {
    sources = [ "jsimd_none.c" ]
  }
}

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

source_set("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",
    "jpeglibmangler.h",
    "jquant1.c",
    "jquant2.c",
    "jutils.c",
    "jversion.h",
  ]

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

  configs += [ ":libjpeg_config" ]

  public_configs = [ ":libjpeg_config" ]

  # MemorySanitizer doesn't support assembly code, so keep it disabled in
  # MSan builds for now.
  # TODO: Enable on Linux when .asm files are recognized.
  if (is_msan || is_linux) {
    sources += [ "jsimd_none.c" ]
  } else {
    deps = [ ":simd" ]
  }

  # TODO(GYP): Compile the .asm files with YASM as GYP does.
}
