| # 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) { | 
 |     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", | 
 |     ] | 
 |   } | 
 | } | 
 |  | 
 | swiftshader_source_set("swiftshader_libvulkan_headers") { | 
 |   sources = [ | 
 |     "Version.h", | 
 |     "VkBuffer.hpp", | 
 |     "VkBufferView.hpp", | 
 |     "VkCommandBuffer.hpp", | 
 |     "VkCommandPool.hpp", | 
 |     "VkConfig.h", | 
 |     "VkDescriptorPool.hpp", | 
 |     "VkDescriptorSet.hpp", | 
 |     "VkDescriptorSetLayout.hpp", | 
 |     "VkDescriptorUpdateTemplate.hpp", | 
 |     "VkDestroy.h", | 
 |     "VkDevice.hpp", | 
 |     "VkDeviceMemory.hpp", | 
 |     "VkEvent.hpp", | 
 |     "VkFence.hpp", | 
 |     "VkFormat.h", | 
 |     "VkFramebuffer.hpp", | 
 |     "VkGetProcAddress.h", | 
 |     "VkImage.hpp", | 
 |     "VkImageView.hpp", | 
 |     "VkInstance.hpp", | 
 |     "VkMemory.h", | 
 |     "VkObject.hpp", | 
 |     "VkPhysicalDevice.hpp", | 
 |     "VkPipeline.hpp", | 
 |     "VkPipelineCache.hpp", | 
 |     "VkPipelineLayout.hpp", | 
 |     "VkQueryPool.hpp", | 
 |     "VkQueue.hpp", | 
 |     "VkRenderPass.hpp", | 
 |     "VkSampler.hpp", | 
 |     "VkSemaphore.hpp", | 
 |     "VkShaderModule.hpp", | 
 |     "VkStringify.hpp", | 
 |     "VulkanPlatform.h", | 
 |   ] | 
 |   if (is_linux || is_android) { | 
 |     sources += [ | 
 |       "VkDeviceMemoryExternalLinux.hpp", | 
 |       "VkSemaphoreExternalLinux.hpp", | 
 |     ] | 
 |   } else if (is_fuchsia) { | 
 |     sources += [ "VkSemaphoreExternalFuchsia.hpp" ] | 
 |   } else { | 
 |     sources += [ "VkSemaphoreExternalNone.hpp" ] | 
 |   } | 
 | } | 
 |  | 
 | swiftshader_shared_library("swiftshader_libvulkan") { | 
 |   sources = [ | 
 |     "VkBuffer.cpp", | 
 |     "VkBufferView.cpp", | 
 |     "VkCommandBuffer.cpp", | 
 |     "VkCommandPool.cpp", | 
 |     "VkDescriptorPool.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", | 
 |     "VkStringify.cpp", | 
 |     "Vulkan.rc", | 
 |     "libVulkan.cpp", | 
 |     "main.cpp", | 
 |     "resource.h", | 
 |     "vk_swiftshader.def", | 
 |   ] | 
 |  | 
 |   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_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_fuchsia) { | 
 |     inputs = [ | 
 |       "vk_swiftshader.lds", | 
 |     ] | 
 |     ldflags = [ "-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_llvm_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", | 
 |   ] | 
 | } |