# Copyright 2020 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.
#
# Contains the build rules for confidential trace tests.

import("../../../gni/angle.gni")

angle_shared_library("angle_restricted_trace_loader") {
  sources = [
    "restricted_traces_autogen.h",
    "restricted_traces_export.h",
    "trace_egl_loader_autogen.cpp",
    "trace_egl_loader_autogen.h",
    "trace_gles_loader_autogen.cpp",
    "trace_gles_loader_autogen.h",
  ]
  defines = [ "ANGLE_TRACE_LOADER_IMPLEMENTATION" ]
  deps = [ "$angle_root:includes" ]
}

angle_trace_fixture("angle_restricted_trace_fixture") {
  gl_header = "angle_trace_gl.h"
  public_deps = [
    ":angle_restricted_trace_loader",
    "$angle_root/util:angle_util",
  ]
  public_configs = [ "$angle_root:no_gl_prototypes" ]
}

# Imports "angle_restricted_traces"
import("restricted_traces_autogen.gni")
_traces = []
_trace_headers = []

foreach(_trace_data, angle_restricted_traces) {
  _trace = _trace_data[0]
  _trace_ctx = _trace_data[1]
  _target = "angle_restricted_trace_${_trace}"

  angle_trace(_target) {
    sources = _trace_data[2]
    data = _trace_data[3]
    trace_prefix = _trace_data[4]
    fixture = ":angle_restricted_trace_fixture"
  }

  _traces += [ ":${_target}" ]
  _trace_headers += [ ":${_target}_headers" ]
}

angle_shared_library("angle_restricted_traces") {
  testonly = true

  sources = [
    "restricted_traces_autogen.cpp",
    "restricted_traces_autogen.h",
    "restricted_traces_export.h",
  ]

  data = [ "restricted_traces.json" ]

  data_deps = _traces
  defines = [ "ANGLE_TRACE_IMPLEMENTATION" ]

  deps = [
           "$angle_root:angle_common",
           "$angle_root/util:angle_util",
         ] + _trace_headers

  public_deps = [ ":angle_restricted_trace_loader" ]
}

group("goldctl") {
  data = []

  # Because this links to a CIPD dependency, which is a symlink on Unix
  # platforms, refer to the actual executable rather than the whole directory;
  # copying the whole directory doesn't work, at least with "mb.py zip".
  if (is_win) {
    data += [ "//tools/skia_goldctl/win/goldctl.exe" ]
  } else if (is_mac) {
    data += [ "//tools/skia_goldctl/mac/goldctl" ]
  } else {
    data += [ "//tools/skia_goldctl/linux/goldctl" ]
  }
}

group("angle_restricted_trace_gold_tests") {
  testonly = true
  data_deps = [
    ":goldctl",
    "$angle_root/src/tests:angle_perftests",
    "$angle_root/src/tests:angle_system_info_test",
  ]
  data = [
    "restricted_trace_gold_tests.py",
    "restricted_traces.json",
    "../skia_gold/",
    "//build/skia_gold_common/",
    "//testing/scripts/common.py",
    "//testing/xvfb.py",
  ]
}
