# 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",
    "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" ]
}

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

foreach(_test_info, angle_restricted_traces) {
  # Empty out the "_test_and_ctx" list so GN doesn't complain about replacing non-empty list.
  _test_and_ctx = []
  _test_and_ctx = string_split(_test_info)
  _test = _test_and_ctx[0]
  _ctx = _test_and_ctx[1]
  _test_dir = "${_test}"
  _test_ctx = "${_test_dir}/${_test}_capture_context${_ctx}"
  _target = "angle_restricted_trace_" + _test
  _traces += [ ":$_target" ]
  angle_shared_library(_target) {
    testonly = true

    # Similar to capture replay sample, use the file index for sources
    sources = [ "angle_trace_gl.h" ] +
              rebase_path(read_file("${_test_ctx}_files.txt", "list lines"),
                          ".",
                          "${_test_dir}") +
              [
                "${_test_ctx}.cpp",
                "${_test_ctx}.h",
              ]

    configs += [ "$angle_root:no_gl_prototypes" ]
    data = [ "${_test_dir}/${_test}_capture_context${_ctx}.angledata.gz" ]
    defines = [ "ANGLE_REPLAY_IMPLEMENTATION" ]
    inputs = [ "${_test}.tar.gz.sha1" ]
    suppressed_configs += [ "$angle_root:constructor_and_destructor_warnings" ]

    public_deps = [ ":angle_restricted_trace_loader" ]
    deps = [ "$angle_root:includes" ]

    # Disable optimization in the trace perf tests to avoid optimizing huge files.
    if (!is_debug) {
      suppressed_configs += [
        "//build/config/compiler:afdo",
        "//build/config/compiler:afdo_optimize_size",
        "//build/config/compiler:default_optimization",
        "//build/config/compiler/pgo:default_pgo_flags",
      ]
      configs += [ "//build/config/compiler:no_optimize" ]
    }

    include_dirs = [ "." ]
  }
}

angle_shared_library("angle_restricted_traces") {
  testonly = true

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

  data = []
  defines = [ "ANGLE_TRACE_IMPLEMENTATION" ]

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

  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",
  ]
}
