xref: /aosp_15_r20/external/swiftshader/src/Vulkan/BUILD.gn (revision 03ce13f70fcc45d86ee91b7ee4cab1936a95046e)
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