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

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

