# 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",
      "XlibSurfaceKHR.cpp",
      "XlibSurfaceKHR.hpp",
      "libX11.cpp",
      "libX11.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" ]
}
