# Copyright 2022 Google LLC
#
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("skcms.gni")

# Use for CPU-specific skcms transform code that needs particular compiler flags.
# (This is patterned after `opts` in Skia's BUILD.gn.)
template("arch") {
  if (invoker.enabled) {
    source_set(target_name) {
      visibility = [ ":*" ]
      check_includes = false
      forward_variables_from(invoker, "*")
    }
  } else {
    # If not enabled, a phony empty target that swallows all otherwise unused variables.
    source_set(target_name) {
      visibility = [ ":*" ]
      check_includes = false
      forward_variables_from(invoker,
                             "*",
                             [
                               "sources",
                               "cflags",
                               "defines",
                             ])
    }
  }
}

arch("skcms_TransformHsw") {
  enabled = current_cpu == "x64" && target_os != "android"
  sources = skcms_TransformHsw
  if (is_win) {
    if (is_clang) {
      cflags = [
        "/clang:-mavx2",
        "/clang:-mf16c",
        "/clang:-ffp-contract=off",
      ]
    } else {
      cflags = [ "/arch:AVX2" ]
    }
  } else {
    cflags = [
      "-mavx2",
      "-mf16c",
      "-std=c11",
    ]
  }
}

arch("skcms_TransformSkx") {
  enabled = current_cpu == "x64" && target_os != "android"
  sources = skcms_TransformSkx
  if (is_win) {
    if (is_clang) {
      cflags = [
        "/clang:-mavx512f",
        "/clang:-mavx512dq",
        "/clang:-mavx512cd",
        "/clang:-mavx512bw",
        "/clang:-mavx512vl",
        "/clang:-ffp-contract=off",
      ]
    } else {
      cflags = [ "/arch:AVX512" ]
    }
  } else {
    cflags = [
      "-mavx512f",
      "-mavx512dq",
      "-mavx512cd",
      "-mavx512bw",
      "-mavx512vl",
      "-std=c11",
    ]
  }
}

static_library("skcms") {
  cflags = []
  if (!is_win || is_clang) {
    cflags += [ "-std=c11" ]
  }
  if (target_cpu != "x64" || target_os == "android") {
    defines = [
      "SKCMS_DISABLE_HSW",
      "SKCMS_DISABLE_SKX",
    ]
  }
  public = skcms_public_headers
  sources = skcms_public + skcms_TransformBaseline
  deps = [
    ":skcms_TransformHsw",
    ":skcms_TransformSkx",
  ]
}
