# Copyright 2019 The SwiftShader Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import("../swiftshader.gni")

if (is_linux) {
  import("//build/config/ozone.gni")
  if (ozone_platform_wayland) {
    import("//third_party/wayland/features.gni")
  }
}

config("WSI_metal_weak_framework") {
  if (is_mac) {
    ldflags = [
      "-weak_framework",
      "Metal",
    ]
  }
}

swiftshader_source_set("WSI") {
  sources = [
    "HeadlessSurfaceKHR.cpp",
    "HeadlessSurfaceKHR.hpp",
    "VkSurfaceKHR.cpp",
    "VkSurfaceKHR.hpp",
    "VkSwapchainKHR.cpp",
    "VkSwapchainKHR.hpp",
  ]

  if (is_linux) {
    sources += [
      "WaylandSurfaceKHR.cpp",
      "WaylandSurfaceKHR.hpp",
      "XcbSurfaceKHR.cpp",
      "XcbSurfaceKHR.hpp",
      "libWaylandClient.cpp",
      "libWaylandClient.hpp",
      "libXCB.cpp",
      "libXCB.hpp",
    ]
  }

  if (is_win) {
    sources += [
      "Win32SurfaceKHR.cpp",
      "Win32SurfaceKHR.hpp",
    ]
  }

  if (is_mac) {
    sources += [
      "MetalSurface.hpp",
      "MetalSurface.mm",
    ]
    frameworks = [
      "Cocoa.framework",
      "QuartzCore.framework",
    ]
    public_configs = [ ":WSI_metal_weak_framework" ]
  }

  include_dirs = [
    "..",
    "../../include",
    "../../third_party/SPIRV-Headers/include",
  ]

  deps = [
    "../../third_party/SPIRV-Tools:spvtools_headers",
    "../../third_party/marl:Marl_headers",
    "../System",
    "../Vulkan:swiftshader_libvulkan_headers",
  ]

  if (defined(use_system_libwayland) && !use_system_libwayland) {
    # Use chromium third-party targets
    deps += [ "//third_party/wayland:wayland_client" ]
  }

  configs = [ "../Vulkan:swiftshader_libvulkan_private_config" ]
}
