1*03ce13f7SAndroid Build Coastguard Worker# Copyright 2019 The SwiftShader Authors. All Rights Reserved. 2*03ce13f7SAndroid Build Coastguard Worker# 3*03ce13f7SAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 4*03ce13f7SAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 5*03ce13f7SAndroid Build Coastguard Worker# You may obtain a copy of the License at 6*03ce13f7SAndroid Build Coastguard Worker# 7*03ce13f7SAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 8*03ce13f7SAndroid Build Coastguard Worker# 9*03ce13f7SAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 10*03ce13f7SAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 11*03ce13f7SAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*03ce13f7SAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 13*03ce13f7SAndroid Build Coastguard Worker# limitations under the License. 14*03ce13f7SAndroid Build Coastguard Worker 15*03ce13f7SAndroid Build Coastguard Workerimport("//build/config/ozone.gni") 16*03ce13f7SAndroid Build Coastguard Workerimport("//build_overrides/build.gni") 17*03ce13f7SAndroid Build Coastguard Workerimport("//build_overrides/wayland.gni") 18*03ce13f7SAndroid Build Coastguard Workerimport("../swiftshader.gni") 19*03ce13f7SAndroid Build Coastguard Workerimport("vulkan.gni") 20*03ce13f7SAndroid Build Coastguard Worker 21*03ce13f7SAndroid Build Coastguard Worker# Need a separate config to ensure the warnings are added to the end. 22*03ce13f7SAndroid Build Coastguard Workerconfig("swiftshader_libvulkan_private_config") { 23*03ce13f7SAndroid Build Coastguard Worker if (is_linux) { 24*03ce13f7SAndroid Build Coastguard Worker defines = [ "VK_EXPORT=__attribute__((visibility(\"default\")))" ] 25*03ce13f7SAndroid Build Coastguard Worker if (ozone_platform_x11) { 26*03ce13f7SAndroid Build Coastguard Worker defines += [ "VK_USE_PLATFORM_XCB_KHR" ] 27*03ce13f7SAndroid Build Coastguard Worker } 28*03ce13f7SAndroid Build Coastguard Worker if (ozone_platform_wayland) { 29*03ce13f7SAndroid Build Coastguard Worker defines += [ "VK_USE_PLATFORM_WAYLAND_KHR" ] 30*03ce13f7SAndroid Build Coastguard Worker } 31*03ce13f7SAndroid Build Coastguard Worker } else if (is_chromeos) { 32*03ce13f7SAndroid Build Coastguard Worker defines = [ "VK_EXPORT=__attribute__((visibility(\"default\")))" ] 33*03ce13f7SAndroid Build Coastguard Worker } else if (is_fuchsia) { 34*03ce13f7SAndroid Build Coastguard Worker defines = [ 35*03ce13f7SAndroid Build Coastguard Worker "VK_USE_PLATFORM_FUCHSIA=1", 36*03ce13f7SAndroid Build Coastguard Worker "VK_EXPORT=__attribute__((visibility(\"default\")))", 37*03ce13f7SAndroid Build Coastguard Worker ] 38*03ce13f7SAndroid Build Coastguard Worker } else if (is_win) { 39*03ce13f7SAndroid Build Coastguard Worker defines = [ 40*03ce13f7SAndroid Build Coastguard Worker "VK_USE_PLATFORM_WIN32_KHR=1", 41*03ce13f7SAndroid Build Coastguard Worker "VK_EXPORT=", 42*03ce13f7SAndroid Build Coastguard Worker ] 43*03ce13f7SAndroid Build Coastguard Worker } else if (is_mac) { 44*03ce13f7SAndroid Build Coastguard Worker defines = [ 45*03ce13f7SAndroid Build Coastguard Worker "VK_USE_PLATFORM_MACOS_MVK=1", 46*03ce13f7SAndroid Build Coastguard Worker "VK_USE_PLATFORM_METAL_EXT=1", 47*03ce13f7SAndroid Build Coastguard Worker "VK_EXPORT=__attribute__((visibility(\"default\")))", 48*03ce13f7SAndroid Build Coastguard Worker ] 49*03ce13f7SAndroid Build Coastguard Worker } else { 50*03ce13f7SAndroid Build Coastguard Worker defines = [ "VK_EXPORT=" ] 51*03ce13f7SAndroid Build Coastguard Worker } 52*03ce13f7SAndroid Build Coastguard Worker 53*03ce13f7SAndroid Build Coastguard Worker if (is_clang) { 54*03ce13f7SAndroid Build Coastguard Worker cflags = [ 55*03ce13f7SAndroid Build Coastguard Worker "-Wno-unused-private-field", 56*03ce13f7SAndroid Build Coastguard Worker "-Wno-switch", 57*03ce13f7SAndroid Build Coastguard Worker ] 58*03ce13f7SAndroid Build Coastguard Worker } 59*03ce13f7SAndroid Build Coastguard Worker 60*03ce13f7SAndroid Build Coastguard Worker defines += [ 61*03ce13f7SAndroid Build Coastguard Worker "SWIFTSHADER_ENABLE_ASTC", # TODO(b/150130101) 62*03ce13f7SAndroid Build Coastguard Worker "SWIFTSHADER_LEGACY_PRECISION=true", # TODO(chromium:1299047) 63*03ce13f7SAndroid Build Coastguard Worker "SWIFTSHADER_ZERO_INITIALIZE_DEVICE_MEMORY", 64*03ce13f7SAndroid Build Coastguard Worker ] 65*03ce13f7SAndroid Build Coastguard Worker 66*03ce13f7SAndroid Build Coastguard Worker if (build_with_chromium) { 67*03ce13f7SAndroid Build Coastguard Worker # Chromium requires higher precision filtering to pass the layout tests with SwiftShader. 68*03ce13f7SAndroid Build Coastguard Worker # http://crbug.com/726075 69*03ce13f7SAndroid Build Coastguard Worker defines += [ "SWIFTSHADER_HIGH_PRECISION_FILTERING" ] 70*03ce13f7SAndroid Build Coastguard Worker } 71*03ce13f7SAndroid Build Coastguard Worker} 72*03ce13f7SAndroid Build Coastguard Worker 73*03ce13f7SAndroid Build Coastguard Workerswiftshader_source_set("swiftshader_libvulkan_headers") { 74*03ce13f7SAndroid Build Coastguard Worker sources = [ 75*03ce13f7SAndroid Build Coastguard Worker "Version.hpp", 76*03ce13f7SAndroid Build Coastguard Worker "VkBuffer.hpp", 77*03ce13f7SAndroid Build Coastguard Worker "VkBufferView.hpp", 78*03ce13f7SAndroid Build Coastguard Worker "VkCommandBuffer.hpp", 79*03ce13f7SAndroid Build Coastguard Worker "VkCommandPool.hpp", 80*03ce13f7SAndroid Build Coastguard Worker "VkConfig.hpp", 81*03ce13f7SAndroid Build Coastguard Worker "VkDebugUtilsMessenger.hpp", 82*03ce13f7SAndroid Build Coastguard Worker "VkDescriptorPool.hpp", 83*03ce13f7SAndroid Build Coastguard Worker "VkDescriptorSet.hpp", 84*03ce13f7SAndroid Build Coastguard Worker "VkDescriptorSetLayout.hpp", 85*03ce13f7SAndroid Build Coastguard Worker "VkDescriptorUpdateTemplate.hpp", 86*03ce13f7SAndroid Build Coastguard Worker "VkDestroy.hpp", 87*03ce13f7SAndroid Build Coastguard Worker "VkDevice.hpp", 88*03ce13f7SAndroid Build Coastguard Worker "VkDeviceMemory.hpp", 89*03ce13f7SAndroid Build Coastguard Worker "VkDeviceMemoryExternalHost.hpp", 90*03ce13f7SAndroid Build Coastguard Worker "VkEvent.hpp", 91*03ce13f7SAndroid Build Coastguard Worker "VkFence.hpp", 92*03ce13f7SAndroid Build Coastguard Worker "VkFormat.hpp", 93*03ce13f7SAndroid Build Coastguard Worker "VkFramebuffer.hpp", 94*03ce13f7SAndroid Build Coastguard Worker "VkGetProcAddress.hpp", 95*03ce13f7SAndroid Build Coastguard Worker "VkImage.hpp", 96*03ce13f7SAndroid Build Coastguard Worker "VkImageView.hpp", 97*03ce13f7SAndroid Build Coastguard Worker "VkInstance.hpp", 98*03ce13f7SAndroid Build Coastguard Worker "VkMemory.hpp", 99*03ce13f7SAndroid Build Coastguard Worker "VkObject.hpp", 100*03ce13f7SAndroid Build Coastguard Worker "VkPhysicalDevice.hpp", 101*03ce13f7SAndroid Build Coastguard Worker "VkPipeline.hpp", 102*03ce13f7SAndroid Build Coastguard Worker "VkPipelineCache.hpp", 103*03ce13f7SAndroid Build Coastguard Worker "VkPipelineLayout.hpp", 104*03ce13f7SAndroid Build Coastguard Worker "VkPrivateData.hpp", 105*03ce13f7SAndroid Build Coastguard Worker "VkQueryPool.hpp", 106*03ce13f7SAndroid Build Coastguard Worker "VkQueue.hpp", 107*03ce13f7SAndroid Build Coastguard Worker "VkRenderPass.hpp", 108*03ce13f7SAndroid Build Coastguard Worker "VkSampler.hpp", 109*03ce13f7SAndroid Build Coastguard Worker "VkSemaphore.hpp", 110*03ce13f7SAndroid Build Coastguard Worker "VkShaderModule.hpp", 111*03ce13f7SAndroid Build Coastguard Worker "VkSpecializationInfo.hpp", 112*03ce13f7SAndroid Build Coastguard Worker "VkStringify.hpp", 113*03ce13f7SAndroid Build Coastguard Worker "VkStructConversion.hpp", 114*03ce13f7SAndroid Build Coastguard Worker "VkTimelineSemaphore.hpp", 115*03ce13f7SAndroid Build Coastguard Worker "VulkanPlatform.hpp", 116*03ce13f7SAndroid Build Coastguard Worker ] 117*03ce13f7SAndroid Build Coastguard Worker if (is_linux || is_chromeos || is_android) { 118*03ce13f7SAndroid Build Coastguard Worker sources += [ 119*03ce13f7SAndroid Build Coastguard Worker "VkDeviceMemoryExternalLinux.hpp", 120*03ce13f7SAndroid Build Coastguard Worker "VkSemaphoreExternalLinux.hpp", 121*03ce13f7SAndroid Build Coastguard Worker ] 122*03ce13f7SAndroid Build Coastguard Worker } else if (is_mac) { 123*03ce13f7SAndroid Build Coastguard Worker sources += [ "VkDeviceMemoryExternalMac.hpp" ] 124*03ce13f7SAndroid Build Coastguard Worker } else if (is_fuchsia) { 125*03ce13f7SAndroid Build Coastguard Worker sources += [ "VkSemaphoreExternalFuchsia.hpp" ] 126*03ce13f7SAndroid Build Coastguard Worker } 127*03ce13f7SAndroid Build Coastguard Worker} 128*03ce13f7SAndroid Build Coastguard Worker 129*03ce13f7SAndroid Build Coastguard Workerswiftshader_source_set("_swiftshader_libvulkan") { 130*03ce13f7SAndroid Build Coastguard Worker sources = [ 131*03ce13f7SAndroid Build Coastguard Worker "VkBuffer.cpp", 132*03ce13f7SAndroid Build Coastguard Worker "VkBufferView.cpp", 133*03ce13f7SAndroid Build Coastguard Worker "VkCommandBuffer.cpp", 134*03ce13f7SAndroid Build Coastguard Worker "VkCommandPool.cpp", 135*03ce13f7SAndroid Build Coastguard Worker "VkDebugUtilsMessenger.cpp", 136*03ce13f7SAndroid Build Coastguard Worker "VkDescriptorPool.cpp", 137*03ce13f7SAndroid Build Coastguard Worker "VkDescriptorSet.cpp", 138*03ce13f7SAndroid Build Coastguard Worker "VkDescriptorSetLayout.cpp", 139*03ce13f7SAndroid Build Coastguard Worker "VkDescriptorUpdateTemplate.cpp", 140*03ce13f7SAndroid Build Coastguard Worker "VkDevice.cpp", 141*03ce13f7SAndroid Build Coastguard Worker "VkDeviceMemory.cpp", 142*03ce13f7SAndroid Build Coastguard Worker "VkDeviceMemoryExternalHost.cpp", 143*03ce13f7SAndroid Build Coastguard Worker "VkFormat.cpp", 144*03ce13f7SAndroid Build Coastguard Worker "VkFramebuffer.cpp", 145*03ce13f7SAndroid Build Coastguard Worker "VkGetProcAddress.cpp", 146*03ce13f7SAndroid Build Coastguard Worker "VkImage.cpp", 147*03ce13f7SAndroid Build Coastguard Worker "VkImageView.cpp", 148*03ce13f7SAndroid Build Coastguard Worker "VkInstance.cpp", 149*03ce13f7SAndroid Build Coastguard Worker "VkMemory.cpp", 150*03ce13f7SAndroid Build Coastguard Worker "VkPhysicalDevice.cpp", 151*03ce13f7SAndroid Build Coastguard Worker "VkPipeline.cpp", 152*03ce13f7SAndroid Build Coastguard Worker "VkPipelineCache.cpp", 153*03ce13f7SAndroid Build Coastguard Worker "VkPipelineLayout.cpp", 154*03ce13f7SAndroid Build Coastguard Worker "VkPromotedExtensions.cpp", 155*03ce13f7SAndroid Build Coastguard Worker "VkQueryPool.cpp", 156*03ce13f7SAndroid Build Coastguard Worker "VkQueue.cpp", 157*03ce13f7SAndroid Build Coastguard Worker "VkRenderPass.cpp", 158*03ce13f7SAndroid Build Coastguard Worker "VkSampler.cpp", 159*03ce13f7SAndroid Build Coastguard Worker "VkSemaphore.cpp", 160*03ce13f7SAndroid Build Coastguard Worker "VkShaderModule.cpp", 161*03ce13f7SAndroid Build Coastguard Worker "VkSpecializationInfo.cpp", 162*03ce13f7SAndroid Build Coastguard Worker "VkStringify.cpp", 163*03ce13f7SAndroid Build Coastguard Worker "VkTimelineSemaphore.cpp", 164*03ce13f7SAndroid Build Coastguard Worker "libVulkan.cpp", 165*03ce13f7SAndroid Build Coastguard Worker "main.cpp", 166*03ce13f7SAndroid Build Coastguard Worker "resource.h", 167*03ce13f7SAndroid Build Coastguard Worker ] 168*03ce13f7SAndroid Build Coastguard Worker 169*03ce13f7SAndroid Build Coastguard Worker configs = [ ":swiftshader_libvulkan_private_config" ] 170*03ce13f7SAndroid Build Coastguard Worker 171*03ce13f7SAndroid Build Coastguard Worker libs = [] 172*03ce13f7SAndroid Build Coastguard Worker 173*03ce13f7SAndroid Build Coastguard Worker if (is_win) { 174*03ce13f7SAndroid Build Coastguard Worker libs += [ 175*03ce13f7SAndroid Build Coastguard Worker "gdi32.lib", 176*03ce13f7SAndroid Build Coastguard Worker "user32.lib", 177*03ce13f7SAndroid Build Coastguard Worker ] 178*03ce13f7SAndroid Build Coastguard Worker } 179*03ce13f7SAndroid Build Coastguard Worker 180*03ce13f7SAndroid Build Coastguard Worker public_deps = [ 181*03ce13f7SAndroid Build Coastguard Worker ":swiftshader_libvulkan_headers", 182*03ce13f7SAndroid Build Coastguard Worker "../../third_party/SPIRV-Tools:spvtools_headers", 183*03ce13f7SAndroid Build Coastguard Worker "../../third_party/SPIRV-Tools:spvtools_opt", 184*03ce13f7SAndroid Build Coastguard Worker "../../third_party/SPIRV-Tools:spvtools_val", 185*03ce13f7SAndroid Build Coastguard Worker "../../third_party/marl:Marl", 186*03ce13f7SAndroid Build Coastguard Worker "../Device", 187*03ce13f7SAndroid Build Coastguard Worker "../Pipeline", 188*03ce13f7SAndroid Build Coastguard Worker "../Reactor:swiftshader_reactor", 189*03ce13f7SAndroid Build Coastguard Worker "../System", 190*03ce13f7SAndroid Build Coastguard Worker "../WSI", 191*03ce13f7SAndroid Build Coastguard Worker ] 192*03ce13f7SAndroid Build Coastguard Worker 193*03ce13f7SAndroid Build Coastguard Worker include_dirs = [ 194*03ce13f7SAndroid Build Coastguard Worker "..", 195*03ce13f7SAndroid Build Coastguard Worker "../../include", 196*03ce13f7SAndroid Build Coastguard Worker "../../third_party/SPIRV-Tools/include", 197*03ce13f7SAndroid Build Coastguard Worker "../../third_party/SPIRV-Headers/include", 198*03ce13f7SAndroid Build Coastguard Worker ] 199*03ce13f7SAndroid Build Coastguard Worker} 200*03ce13f7SAndroid Build Coastguard Worker 201*03ce13f7SAndroid Build Coastguard Workerswiftshader_shared_library("swiftshader_libvulkan") { 202*03ce13f7SAndroid Build Coastguard Worker # TODO(capn): Use the same ICD name on both Windows and non-Windows. 203*03ce13f7SAndroid Build Coastguard Worker if (is_win) { 204*03ce13f7SAndroid Build Coastguard Worker output_name = "vk_swiftshader" 205*03ce13f7SAndroid Build Coastguard Worker } else { 206*03ce13f7SAndroid Build Coastguard Worker output_name = "libvk_swiftshader" 207*03ce13f7SAndroid Build Coastguard Worker } 208*03ce13f7SAndroid Build Coastguard Worker 209*03ce13f7SAndroid Build Coastguard Worker if (is_win) { 210*03ce13f7SAndroid Build Coastguard Worker sources = [ 211*03ce13f7SAndroid Build Coastguard Worker "Vulkan.rc", 212*03ce13f7SAndroid Build Coastguard Worker "vk_swiftshader.def", 213*03ce13f7SAndroid Build Coastguard Worker ] 214*03ce13f7SAndroid Build Coastguard Worker } else if (is_mac) { 215*03ce13f7SAndroid Build Coastguard Worker ldflags = [ 216*03ce13f7SAndroid Build Coastguard Worker "-Wl,-install_name,@rpath/libvk_swiftshader.dylib", 217*03ce13f7SAndroid Build Coastguard Worker "-Wl,-exported_symbols_list," + 218*03ce13f7SAndroid Build Coastguard Worker rebase_path("vk_swiftshader.exports", root_build_dir), 219*03ce13f7SAndroid Build Coastguard Worker ] 220*03ce13f7SAndroid Build Coastguard Worker } else if (is_linux || is_chromeos || is_fuchsia) { 221*03ce13f7SAndroid Build Coastguard Worker inputs = [ "vk_swiftshader.lds" ] 222*03ce13f7SAndroid Build Coastguard Worker ldflags = [ 223*03ce13f7SAndroid Build Coastguard Worker # -Bsymbolic binds symbol references to their global definitions within 224*03ce13f7SAndroid Build Coastguard Worker # a shared object, thereby preventing symbol preemption. 225*03ce13f7SAndroid Build Coastguard Worker "-Wl,-Bsymbolic", 226*03ce13f7SAndroid Build Coastguard Worker "-Wl,--version-script=" + 227*03ce13f7SAndroid Build Coastguard Worker rebase_path("vk_swiftshader.lds", root_build_dir), 228*03ce13f7SAndroid Build Coastguard Worker ] 229*03ce13f7SAndroid Build Coastguard Worker } 230*03ce13f7SAndroid Build Coastguard Worker 231*03ce13f7SAndroid Build Coastguard Worker deps = [ ":_swiftshader_libvulkan" ] 232*03ce13f7SAndroid Build Coastguard Worker} 233*03ce13f7SAndroid Build Coastguard Worker 234*03ce13f7SAndroid Build Coastguard Workerswiftshader_static_library("swiftshader_libvulkan_static") { 235*03ce13f7SAndroid Build Coastguard Worker complete_static_lib = true 236*03ce13f7SAndroid Build Coastguard Worker deps = [ ":_swiftshader_libvulkan" ] 237*03ce13f7SAndroid Build Coastguard Worker} 238*03ce13f7SAndroid Build Coastguard Worker 239*03ce13f7SAndroid Build Coastguard Worker# Generates an ICD JSON file that can be used by all targets in this GN build 240*03ce13f7SAndroid Build Coastguard Worker# (ANGLE, Dawn, Chromium). 241*03ce13f7SAndroid Build Coastguard Workeraction("icd_file") { 242*03ce13f7SAndroid Build Coastguard Worker output_icd_file = "${root_out_dir}/${swiftshader_icd_file_name}" 243*03ce13f7SAndroid Build Coastguard Worker input_file = swiftshader_icd_file_name 244*03ce13f7SAndroid Build Coastguard Worker 245*03ce13f7SAndroid Build Coastguard Worker if (is_win) { 246*03ce13f7SAndroid Build Coastguard Worker library_path = ".\\vk_swiftshader.dll" 247*03ce13f7SAndroid Build Coastguard Worker } else if (is_mac) { 248*03ce13f7SAndroid Build Coastguard Worker library_path = "./libvk_swiftshader.dylib" 249*03ce13f7SAndroid Build Coastguard Worker } else if (is_fuchsia) { 250*03ce13f7SAndroid Build Coastguard Worker library_path = "/pkg/lib/libvk_swiftshader.so" 251*03ce13f7SAndroid Build Coastguard Worker } else { 252*03ce13f7SAndroid Build Coastguard Worker library_path = "./libvk_swiftshader.so" 253*03ce13f7SAndroid Build Coastguard Worker } 254*03ce13f7SAndroid Build Coastguard Worker 255*03ce13f7SAndroid Build Coastguard Worker script = "write_icd_json.py" 256*03ce13f7SAndroid Build Coastguard Worker args = [ 257*03ce13f7SAndroid Build Coastguard Worker "--input", 258*03ce13f7SAndroid Build Coastguard Worker rebase_path(input_file, root_build_dir), 259*03ce13f7SAndroid Build Coastguard Worker "--output", 260*03ce13f7SAndroid Build Coastguard Worker rebase_path(output_icd_file, root_build_dir), 261*03ce13f7SAndroid Build Coastguard Worker "--library_path", 262*03ce13f7SAndroid Build Coastguard Worker library_path, 263*03ce13f7SAndroid Build Coastguard Worker ] 264*03ce13f7SAndroid Build Coastguard Worker 265*03ce13f7SAndroid Build Coastguard Worker inputs = [ input_file ] 266*03ce13f7SAndroid Build Coastguard Worker outputs = [ output_icd_file ] 267*03ce13f7SAndroid Build Coastguard Worker 268*03ce13f7SAndroid Build Coastguard Worker deps = [ ":swiftshader_libvulkan" ] 269*03ce13f7SAndroid Build Coastguard Worker} 270