# 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")

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 || is_chromeos) {
    sources += [
      "XcbSurfaceKHR.cpp",
      "XcbSurfaceKHR.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 = [
    "${swiftshader_spirv_tools_dir}:SPIRV-Tools",
    "../../third_party/marl:Marl_headers",
    "../System",
    "../Vulkan:swiftshader_libvulkan_headers",
  ]

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