# 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("wayland_protocol.gni")

group("all") {
  deps = [ ":sommelier" ]
}

if (!defined(peer_cmd_prefix)) {
  if (use.amd64) {
    peer_cmd_prefix = "\"/opt/google/cros-containers/lib/ld-linux-x86-64.so.2 --library-path /opt/google/cros-containers/lib --inhibit-rpath \\\"\\\"\""
  }
  if (use.arm) {
    peer_cmd_prefix = "\"/opt/google/cros-containers/lib/ld-linux-armhf.so.3 --library-path /opt/google/cros-containers/lib --inhibit-rpath \\\"\\\"\""
  }
}

# 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 shm driver to use for Xwayland.
if (!defined(xwayland_shm_driver)) {
  xwayland_shm_driver = "\"virtwl\""
}

# Set this to the shm driver to use for wayland clients.
if (!defined(shm_driver)) {
  shm_driver = "\"virtwl-dmabuf\""
}

# Set this to the virtwl device.
if (!defined(virtwl_device)) {
  virtwl_device = "\"/dev/wl0\""
}

# 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/gtk-shell.xml",
    "protocol/keyboard-extension-unstable-v1.xml",
    "protocol/linux-dmabuf-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.xml",
  ]
}

executable("sommelier") {
  pkg_deps = [
    "gbm",
    "libdrm",
    "pixman-1",
    "wayland-client",
    "wayland-server",
    "xcb",
    "xcb-composite",
    "xcb-xfixes",
    "xkbcommon",
  ]
  libs = [ "m" ]
  deps = [ ":sommelier-protocol" ]
  sources = [
    "sommelier-compositor.c",
    "sommelier-data-device-manager.c",
    "sommelier-display.c",
    "sommelier-drm.c",
    "sommelier-gtk-shell.c",
    "sommelier-output.c",
    "sommelier-pointer-constraints.c",
    "sommelier-relative-pointer-manager.c",
    "sommelier-seat.c",
    "sommelier-shell.c",
    "sommelier-shm.c",
    "sommelier-subcompositor.c",
    "sommelier-text-input.c",
    "sommelier-viewporter.c",
    "sommelier-xdg-shell.c",
    "sommelier.c",
  ]
  defines = [
    "_GNU_SOURCE",
    "WL_HIDE_DEPRECATED",
    "XWAYLAND_PATH=${xwayland_path}",
    "XWAYLAND_GL_DRIVER_PATH=${xwayland_gl_driver_path}",
    "XWAYLAND_SHM_DRIVER=${xwayland_shm_driver}",
    "SHM_DRIVER=${shm_driver}",
    "VIRTWL_DEVICE=${virtwl_device}",
    "PEER_CMD_PREFIX=${peer_cmd_prefix}",
    "FRAME_COLOR=${frame_color}",
    "DARK_FRAME_COLOR=${dark_frame_color}",
  ]
}
