# Copyright 2016 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
assert(is_linux || is_chromeos)

generated_static_table_fourcc_file =
    "$target_gen_dir/src/generated_static_table_fourcc.h"
fourcc_file = "src/include/drm/drm_fourcc.h"

action("make_generated_static_table_fourcc") {
  script = "src/gen_table_fourcc.py"
  args = [
    rebase_path(fourcc_file, root_build_dir),
    rebase_path(generated_static_table_fourcc_file),
  ]
  outputs = [ generated_static_table_fourcc_file ]
  inputs = [ fourcc_file ]
}

config("libdrm_config") {
  # TODO(thomasanderson): Remove this hack once
  # https://patchwork.kernel.org/patch/10545295/ lands.
  defines = [ "typeof(x)=__typeof__(x)" ]

  include_dirs = [
    "src",
    "src/include",
    "src/include/drm",
  ]

  # libdrm uses macros defined by <sys/types.h> which are being moved to
  # <sys/sysmacros.h>.  GLIBC headers give a pragma warning in this case.
  # Suppress this warning for now.  This may be removed once
  # https://patchwork.kernel.org/patch/9628231/ lands.
  cflags = [ "-Wno-#pragma-messages" ]

  # glibc version >= 2.25 explicitly include <sys/sysmacros.h>
  cflags += [ "-DMAJOR_IN_SYSMACROS=1" ]

  # TODO(b/357680612): unused function 'swap32'.
  cflags += [ "-Wno-unused-function" ]

  if (is_clang) {
    cflags += [
      "-Wno-enum-conversion",

      # TODO(crbug.com/932060) fix unused result from asprintf in modetest.c.
      "-Wno-unused-result",

      # modetest.c has an improper conversion in a printf statement.
      "-Wno-format",
    ]
  }
}

static_library("libdrm") {
  sources = [
    "src/include/drm/drm.h",
    "src/include/drm/drm_fourcc.h",
    "src/include/drm/drm_mode.h",
    "src/libdrm_macros.h",
    "src/util_math.h",
    "src/xf86drm.c",
    "src/xf86drm.h",
    "src/xf86drmHash.c",
    "src/xf86drmHash.h",
    "src/xf86drmMode.c",
    "src/xf86drmMode.h",
    "src/xf86drmRandom.c",
    "src/xf86drmRandom.h",
  ]

  deps = [ ":make_generated_static_table_fourcc" ]

  include_dirs = [
    get_path_info(generated_static_table_fourcc_file, "dir"),
    "src",
    "src/include",
  ]
  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [ "//build/config/compiler:no_chromium_code" ]
  cflags = [
    # xf86drm.c uses readdir_r, which has been deprecated as of
    # glibc-2.24.  This causes a build error when using the Debian
    # Stretch sysroot.
    "-Wno-deprecated-declarations",
  ]

  public_configs = [ ":libdrm_config" ]
}

executable("modetest") {
  sources = [
    "src/tests/modetest/buffers.c",
    "src/tests/modetest/buffers.h",
    "src/tests/modetest/cursor.c",
    "src/tests/modetest/cursor.h",
    "src/tests/modetest/modetest.c",
    "src/tests/util/common.h",
    "src/tests/util/format.c",
    "src/tests/util/format.h",
    "src/tests/util/kms.c",
    "src/tests/util/kms.h",
    "src/tests/util/pattern.c",
    "src/tests/util/pattern.h",
  ]

  include_dirs = [
    "src/tests",
    "src/tests/modetest",
  ]

  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [ "//build/config/compiler:no_chromium_code" ]
  configs += [ ":libdrm_config" ]

  deps = [ ":libdrm" ]
}
