# 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("../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 || is_chromeos) { defines = [ "VK_USE_PLATFORM_XLIB_KHR", "VK_USE_PLATFORM_XCB_KHR", "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_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", "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", "VkQueryPool.hpp", "VkQueue.hpp", "VkRenderPass.hpp", "VkSampler.hpp", "VkSemaphore.hpp", "VkShaderModule.hpp", "VkSpecializationInfo.hpp", "VkStringify.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", "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" ] # 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", ] } 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 = [ "${swiftshader_spirv_tools_dir}:SPIRV-Tools", "../../third_party/marl:Marl", "../Device", "../Pipeline", "../Reactor:swiftshader_reactor", "../System", "../WSI", ] include_dirs = [ "..", "../../include", "$swiftshader_spirv_tools_dir/include", "$spirv_tools_spirv_headers_dir/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 { 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", ] }