blob: 5556abdf097f203f858226718f4600106014f590 [file] [log] [blame]
# 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("//build_overrides/build.gni")
import("//build_overrides/wayland.gni")
import("//build/config/ozone.gni")
import("../swiftshader.gni")
import("vulkan.gni")
# Need a separate config to ensure the warnings are added to the end.
config("swiftshader_libvulkan_private_config") {
if (is_linux) {
defines = [
"VK_EXPORT=__attribute__((visibility(\"default\")))",
]
if (ozone_platform_x11) {
defines += [ "VK_USE_PLATFORM_XCB_KHR" ]
}
if (ozone_platform_wayland) {
defines += [ "VK_USE_PLATFORM_WAYLAND_KHR" ]
}
} else if (is_chromeos) {
defines = [
"VK_EXPORT=__attribute__((visibility(\"default\")))",
]
} else if (is_fuchsia) {
defines = [
"VK_USE_PLATFORM_FUCHSIA=1",
"VK_EXPORT=__attribute__((visibility(\"default\")))",
]
} else if (is_win) {
defines = [
"VK_USE_PLATFORM_WIN32_KHR=1",
"VK_EXPORT=",
]
} else if (is_mac) {
defines = [
"VK_USE_PLATFORM_MACOS_MVK=1",
"VK_USE_PLATFORM_METAL_EXT=1",
"VK_EXPORT=__attribute__((visibility(\"default\")))",
]
} else {
defines = [ "VK_EXPORT=" ]
}
if (is_clang) {
cflags = [
"-Wno-unused-private-field",
"-Wno-switch",
]
}
defines += [
"SWIFTSHADER_ENABLE_ASTC", # TODO(b/150130101)
"SWIFTSHADER_LEGACY_PRECISION=true", # TODO(chromium:1299047)
"SWIFTSHADER_ZERO_INITIALIZE_DEVICE_MEMORY",
]
}
swiftshader_source_set("swiftshader_libvulkan_headers") {
sources = [
"Version.hpp",
"VkBuffer.hpp",
"VkBufferView.hpp",
"VkCommandBuffer.hpp",
"VkCommandPool.hpp",
"VkConfig.hpp",
"VkDebugUtilsMessenger.hpp",
"VkDescriptorPool.hpp",
"VkDescriptorSet.hpp",
"VkDescriptorSetLayout.hpp",
"VkDescriptorUpdateTemplate.hpp",
"VkDestroy.hpp",
"VkDevice.hpp",
"VkDeviceMemory.hpp",
"VkDeviceMemoryExternalHost.hpp",
"VkEvent.hpp",
"VkFence.hpp",
"VkFormat.hpp",
"VkFramebuffer.hpp",
"VkGetProcAddress.hpp",
"VkImage.hpp",
"VkImageView.hpp",
"VkInstance.hpp",
"VkMemory.hpp",
"VkObject.hpp",
"VkPhysicalDevice.hpp",
"VkPipeline.hpp",
"VkPipelineCache.hpp",
"VkPipelineLayout.hpp",
"VkPrivateData.hpp",
"VkQueryPool.hpp",
"VkQueue.hpp",
"VkRenderPass.hpp",
"VkSampler.hpp",
"VkSemaphore.hpp",
"VkShaderModule.hpp",
"VkSpecializationInfo.hpp",
"VkStringify.hpp",
"VkStructConversion.hpp",
"VkTimelineSemaphore.hpp",
"VulkanPlatform.hpp",
]
if (is_linux || is_chromeos || is_android) {
sources += [
"VkDeviceMemoryExternalLinux.hpp",
"VkSemaphoreExternalLinux.hpp",
]
} else if (is_mac) {
sources += [
"VkDeviceMemoryExternalMac.hpp",
]
} else if (is_fuchsia) {
sources += [ "VkSemaphoreExternalFuchsia.hpp" ]
}
}
swiftshader_shared_library("swiftshader_libvulkan") {
sources = [
"VkBuffer.cpp",
"VkBufferView.cpp",
"VkCommandBuffer.cpp",
"VkCommandPool.cpp",
"VkDebugUtilsMessenger.cpp",
"VkDescriptorPool.cpp",
"VkDescriptorSet.cpp",
"VkDescriptorSetLayout.cpp",
"VkDescriptorUpdateTemplate.cpp",
"VkDevice.cpp",
"VkDeviceMemory.cpp",
"VkDeviceMemoryExternalHost.cpp",
"VkFormat.cpp",
"VkFramebuffer.cpp",
"VkGetProcAddress.cpp",
"VkImage.cpp",
"VkImageView.cpp",
"VkInstance.cpp",
"VkMemory.cpp",
"VkPhysicalDevice.cpp",
"VkPipeline.cpp",
"VkPipelineCache.cpp",
"VkPipelineLayout.cpp",
"VkPromotedExtensions.cpp",
"VkQueryPool.cpp",
"VkQueue.cpp",
"VkRenderPass.cpp",
"VkSampler.cpp",
"VkSemaphore.cpp",
"VkShaderModule.cpp",
"VkSpecializationInfo.cpp",
"VkStringify.cpp",
"VkTimelineSemaphore.cpp",
"libVulkan.cpp",
"main.cpp",
"resource.h",
]
configs = [ ":swiftshader_libvulkan_private_config" ]
libs = []
# TODO(capn): Use the same ICD name on both Windows and non-Windows.
if (is_win) {
output_name = "vk_swiftshader"
} else {
output_name = "libvk_swiftshader"
}
if (is_win) {
sources += [
"Vulkan.rc",
"vk_swiftshader.def",
]
libs += [
"gdi32.lib",
"user32.lib",
]
}
if (is_mac) {
ldflags = [
"-Wl,-install_name,@rpath/libvk_swiftshader.dylib",
"-Wl,-exported_symbols_list," +
rebase_path("vk_swiftshader.exports", root_build_dir),
]
} else if (is_linux || is_chromeos || is_fuchsia) {
inputs = [
"vk_swiftshader.lds",
]
ldflags = [
# -Bsymbolic binds symbol references to their global definitions within
# a shared object, thereby preventing symbol preemption.
"-Wl,-Bsymbolic",
"-Wl,--version-script=" +
rebase_path("vk_swiftshader.lds", root_build_dir) ]
}
deps = [
"../../third_party/SPIRV-Tools:spvtools_opt",
"../../third_party/SPIRV-Tools:spvtools_val",
"../../third_party/SPIRV-Tools:spvtools_headers",
"../../third_party/marl:Marl",
"../Device",
"../Pipeline",
"../Reactor:swiftshader_reactor",
"../System",
"../WSI",
]
include_dirs = [
"..",
"../../include",
"../../third_party/SPIRV-Tools/include",
"../../third_party/SPIRV-Headers/include",
]
public_deps = [
":swiftshader_libvulkan_headers",
]
}
# Generates an ICD JSON file that can be used by all targets in this GN build
# (ANGLE, Dawn, Chromium).
action("icd_file") {
output_icd_file = "${root_out_dir}/${swiftshader_icd_file_name}"
input_file = swiftshader_icd_file_name
if (is_win) {
library_path = ".\\vk_swiftshader.dll"
} else if (is_mac) {
library_path = "./libvk_swiftshader.dylib"
} else if (is_fuchsia) {
library_path = "/pkg/lib/libvk_swiftshader.so"
} else {
library_path = "./libvk_swiftshader.so"
}
script = "write_icd_json.py"
args = [
"--input",
rebase_path(input_file, root_build_dir),
"--output",
rebase_path(output_icd_file, root_build_dir),
"--library_path",
library_path,
]
inputs = [
input_file,
]
outputs = [
output_icd_file,
]
deps = [
":swiftshader_libvulkan",
]
}