# Copyright 2019 The Chromium OS 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("//common-mk/pkg_config.gni")
import("wayland_protocol.gni")

group("all") {
  deps = [
    ":sommelier",
  ]
  if (use.fuzzer) {
    deps += [ ":sommelier_wayland_fuzzer" ]
  }

  if (use.test) {
    deps += [ ":sommelier_test" ]
  }
}

# Set this to the Xwayland path.
if (!defined(xwayland_path)) {
  xwayland_path = "\"/opt/google/cros-containers/bin/Xwayland\""
}

# Set this to the GL driver path to use for Xwayland.
if (!defined(xwayland_gl_driver_path)) {
  xwayland_gl_driver_path = "\"/opt/google/cros-containers/lib\""
}

# Set this to the frame color to use for Xwayland clients.
if (!defined(frame_color)) {
  frame_color = "\"#f2f2f2\""
}

# Set this to the dark frame color to use for Xwayland clients.
if (!defined(dark_frame_color)) {
  dark_frame_color = "\"#323639\""
}

wayland_protocol_library("sommelier-protocol") {
  out_dir = "include"
  sources = [
    "protocol/aura-shell.xml",
    "protocol/drm.xml",
    "protocol/gaming-input-unstable-v2.xml",
    "protocol/gtk-shell.xml",
    "protocol/keyboard-extension-unstable-v1.xml",
    "protocol/linux-dmabuf-unstable-v1.xml",
    "protocol/linux-explicit-synchronization-unstable-v1.xml",
    "protocol/pointer-constraints-unstable-v1.xml",
    "protocol/relative-pointer-unstable-v1.xml",
    "protocol/text-input-unstable-v1.xml",
    "protocol/viewporter.xml",
    "protocol/xdg-shell-unstable-v6.xml",
  ]
}

gaming_defines = [ "GAMEPAD_SUPPORT" ]
gaming_deps = [ ":libgaming" ]

tracing_defines = [ "PERFETTO_TRACING" ]
tracing_pkg_deps = [ "perfetto" ]
tracing_libs = [ "pthread" ]

sommelier_defines = [
                      "_GNU_SOURCE",
                      "WL_HIDE_DEPRECATED",
                      "XWAYLAND_PATH=${xwayland_path}",
                      "XWAYLAND_GL_DRIVER_PATH=${xwayland_gl_driver_path}",
                      "FRAME_COLOR=${frame_color}",
                      "DARK_FRAME_COLOR=${dark_frame_color}",
                    ] + gaming_defines + tracing_defines

static_library("libgaming") {
  sources = [ "sommelier-gaming.cc" ]
  defines = gaming_defines
  pkg_deps = [ "libevdev" ]
  deps = [ ":sommelier-protocol" ]
}

static_library("libsommelier") {
  sources = [
    "sommelier-compositor.cc",
    "sommelier-ctx.cc",
    "sommelier-data-device-manager.cc",
    "sommelier-display.cc",
    "sommelier-drm.cc",
    "sommelier-global.cc",
    "sommelier-gtk-shell.cc",
    "sommelier-mmap.cc",
    "sommelier-output.cc",
    "sommelier-pointer-constraints.cc",
    "sommelier-relative-pointer-manager.cc",
    "sommelier-seat.cc",
    "sommelier-shell.cc",
    "sommelier-shm.cc",
    "sommelier-subcompositor.cc",
    "sommelier-text-input.cc",
    "sommelier-timing.cc",
    "sommelier-tracing.cc",
    "sommelier-util.cc",
    "sommelier-viewporter.cc",
    "sommelier-window.cc",
    "sommelier-xdg-shell.cc",
    "sommelier.cc",
    "virtualization/virtgpu_channel.cc",
    "virtualization/virtwl_channel.cc",
  ]
  include_dirs = []
  defines = sommelier_defines
  pkg_deps = [
    "gbm",
    "libdrm",
    "pixman-1",
    "wayland-client",
    "wayland-server",
    "xcb",
    "xcb-composite",
    "xcb-xfixes",
    "xkbcommon",
  ] + tracing_pkg_deps
  libs = [ "m" ] + tracing_libs
  deps = [ ":sommelier-protocol" ] + gaming_deps
}

executable("sommelier") {
  sources = [ "sommelier-main.cc" ]

  defines = sommelier_defines

  deps = [ ":libsommelier" ]
}

if (use.test) {
  executable("sommelier_test") {
    sources = [ "sommelier_test.cc" ]

    # gnlint: disable=GnLintCommonTesting
    libs = [
      "gmock",
      "gtest",
    ]
    defines = sommelier_defines
    deps = [ ":libsommelier" ]
  }
}

if (use.fuzzer) {
  executable("sommelier_wayland_fuzzer") {
    sources = [ "sommelier-wayland-fuzzer.cc" ]

    configs += [ "//common-mk/common_fuzzer" ]

    defines = sommelier_defines

    deps = [ ":libsommelier" ]
  }
}
