# Copyright 2016 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/linux/pkg_config.gni")

assert(is_linux)

declare_args() {
  # Controls whether the build should use the version of libdrm
  # library shipped with the system. In release builds of Chrome OS we
  # use the system version, but when building on dev workstations we
  # bundle it because Ubuntu doesn't ship a usable version.
  use_system_libdrm = false
}

if (!use_system_libdrm) {
  config("libdrm_config") {
    include_dirs = [
      "src",
      "src/include",
      "src/include/drm",
    ]
    if (is_clang) {
      cflags = [ "-Wno-enum-conversion" ]
    }
  }

  static_library("libdrm") {
    sources = [
      "src/xf86drm.c",
      "src/xf86drmHash.c",
      "src/xf86drmMode.c",
      "src/xf86drmRandom.c",
    ]

    include_dirs = [
      "src",
      "src/include",
    ]
    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [ "//build/config/compiler:no_chromium_code" ]

    public_configs = [ ":libdrm_config" ]
  }
}

if (use_system_libdrm) {
  pkg_config("libdrm_config") {
    packages = [ "libdrm" ]
  }
  group("libdrm") {
    public_configs = [ ":libdrm_config" ]
  }
}
