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

import("//build/config/ui.gni")

source_set("config") {
  sources = [
    "dx_diag_node.cc",
    "dx_diag_node.h",
    "gpu_blacklist.cc",
    "gpu_blacklist.h",
    "gpu_control_list_jsons.h",
    "gpu_control_list.cc",
    "gpu_control_list.h",
    "gpu_driver_bug_list_json.cc",
    "gpu_driver_bug_list.cc",
    "gpu_driver_bug_list.h",
    "gpu_driver_bug_workaround_type.h",
    "gpu_dx_diagnostics_win.cc",
    "gpu_feature_type.h",
    "gpu_info.cc",
    "gpu_info.h",
    "gpu_info_collector_android.cc",
    "gpu_info_collector_linux.cc",
    "gpu_info_collector_linux.h",
    "gpu_info_collector_mac.mm",
    "gpu_info_collector_ozone.cc",
    "gpu_info_collector_win.cc",
    "gpu_info_collector_x11.cc",
    "gpu_info_collector.cc",
    "gpu_info_collector.h",
    "gpu_performance_stats.h",
    "gpu_test_config.cc",
    "gpu_test_config.h",
    "gpu_test_expectations_parser.cc",
    "gpu_test_expectations_parser.h",
    "gpu_util.cc",
    "gpu_util.h",
    "software_rendering_list_json.cc",
  ]

  defines = [ "GPU_IMPLEMENTATION" ]

  deps = [
    "//base",
    "//third_party/re2",
    "//ui/gl",
  ]

  # Prefer mesa GL headers to system headers, which cause problems on Win.
  include_dirs = [ "//third_party/mesa/src/include" ]

  if (is_win) {
    deps += [ "//third_party/libxml" ]
    libs = [ "dxguid.lib", "setupapi.lib" ]

    if (is_chrome_branded && is_official_build) {
      sources += [
        "//third_party/amd/AmdCfxPxExt.h",
        "//third_party/amd/amd_videocard_info_win.cc",
      ]
    }
  }
  if (is_linux && (use_x11 || use_ozone)) {
    deps += [
      "//build/config/linux:libpci",
    ]
  }
  if (is_linux && use_x11) {
    configs += [
      "//build/config/linux:x11",
      "//build/config/linux:xext",
    ]
    deps += [
      "//third_party/libXNVCtrl",
    ]
  } else {
    sources -= [ "gpu_info_collector_x11.cc" ]
  }
  if (!use_ozone) {
    sources -= [ "gpu_info_collector_ozone.cc" ]
  }
}

