# 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")

declare_args() {
  # Use the PCI lib to collect GPU information on Linux.
  use_libpci = true
}

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

    # TODO(jschuh): size_t to int.
    cflags = [ "/wd4267" ]
  }
  if (use_libpci) {
    defines += [ "USE_LIBPCI=1" ]
  }
  if (is_linux && use_libpci && use_x11) {
    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" ]
  }
}
