# 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("//testing/test.gni")

test("swiftshader_vulkan_unittests") {
  deps = [
    "//base",
    "//base/test:test_support",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/SPIRV-Tools/src:SPIRV-Tools",
    "//third_party/swiftshader/src/Vulkan:swiftshader_libvulkan",
  ]

  sources = [
    "//gpu/swiftshader_tests_main.cc",
    "Device.cpp",
    "Driver.cpp",
    "unittests.cpp",
  ]

  include_dirs = [
    "//third_party/SPIRV-Tools/src/include",
    "../../include", # Khronos headers
  ]

  if (is_win) {
    ldflags = [
      "/DELAYLOAD:libvulkan.dll",
    ]
  } else if (is_mac) {
    ldflags = [
      "-rpath",
      "@executable_path/",
    ]
  } else {
    ldflags = [ "-Wl,-rpath=\$ORIGIN/swiftshader" ]
  }
}
