xref: /aosp_15_r20/external/angle/src/common/vulkan/BUILD.gn (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1# Copyright 2020 The ANGLE Project Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5import("//build_overrides/swiftshader.gni")
6import("../../../gni/angle.gni")
7
8if (angle_use_wayland) {
9  import("//build_overrides/wayland.gni")
10}
11
12declare_args() {
13  angle_use_custom_libvulkan = !is_android && !is_fuchsia && !is_ggp
14
15  # On real CrOS devices, we should use the system Vulkan loader. On the
16  # ChromeOS-for-Linux build, we should use the built libvulkan because the
17  # build is used for MSAN tests. Mixing the non-MSAN system libvulkan with the
18  # MSAN ANGLE build can result in false positives.
19  if (is_chromeos && is_chromeos_device) {
20    angle_use_custom_libvulkan = false
21  }
22}
23
24config("angle_libvulkan_config") {
25  if (angle_use_custom_libvulkan) {
26    defines = [ "ANGLE_USE_CUSTOM_LIBVULKAN" ]
27  }
28}
29
30angle_source_set("angle_libvulkan_loader") {
31  public_configs = [ ":angle_libvulkan_config" ]
32  sources = [
33    "libvulkan_loader.cpp",
34    "libvulkan_loader.h",
35  ]
36  deps = [ "$angle_root:angle_common" ]
37}
38
39if (angle_enable_vulkan || angle_build_vulkan_system_info) {
40  config("angle_vulkan_headers_config") {
41    if (angle_shared_libvulkan) {
42      defines = [ "ANGLE_SHARED_LIBVULKAN=1" ]
43    }
44    if (angle_use_wayland) {
45      include_dirs = [ "$wayland_dir/src" ]
46    }
47    configs = [ "$angle_root:angle_vulkan_wayland_config" ]
48  }
49
50  angle_source_set("angle_vulkan_headers") {
51    sources = [ "vk_headers.h" ]
52    if (angle_shared_libvulkan) {
53      public_deps = [ "$angle_root/src/third_party/volk:volk" ]
54    } else {
55      public_deps = [ "$angle_vulkan_headers_dir:vulkan_headers" ]
56    }
57    public_configs = [ ":angle_vulkan_headers_config" ]
58  }
59
60  angle_source_set("angle_vulkan_icd") {
61    sources = [
62      "vulkan_icd.cpp",
63      "vulkan_icd.h",
64    ]
65
66    defines =
67        [ "ANGLE_VK_MOCK_ICD_JSON=\"$angle_data_dir/VkICD_mock_icd.json\"" ]
68
69    # On Fuchsia use validation layer provided by the SDK.
70    if (!is_fuchsia) {
71      defines += [ "ANGLE_VK_LAYERS_DIR=\"$angle_data_dir\"" ]
72    }
73
74    data_deps = []
75
76    if (angle_enable_swiftshader) {
77      import("$swiftshader_dir/src/Vulkan/vulkan.gni")
78      _sws_icd = "./$swiftshader_icd_file_name"
79      if (is_win) {
80        _sws_icd = ".\\\\$swiftshader_icd_file_name"
81      } else if (is_fuchsia) {
82        _sws_icd = "/pkg/$swiftshader_icd_file_name"
83      }
84
85      defines += [ "ANGLE_VK_SWIFTSHADER_ICD_JSON=\"${_sws_icd}\"" ]
86
87      data_deps += [
88        "$swiftshader_dir/src/Vulkan:icd_file",
89        "$swiftshader_dir/src/Vulkan:swiftshader_libvulkan",
90      ]
91    }
92
93    public_deps = [
94      ":angle_vulkan_headers",
95      "$angle_root:angle_common",
96    ]
97
98    configs += [ "$angle_root:angle_no_cfi_icall" ]
99  }
100}
101
102if (angle_enable_vulkan) {
103  group("angle_libvulkan") {
104    public_configs = [ ":angle_libvulkan_config" ]
105    data_deps = []
106    if (angle_use_custom_libvulkan) {
107      if (angle_shared_libvulkan) {
108        data_deps += [ "$angle_vulkan_loader_dir:libvulkan" ]
109      } else {
110        public_deps = [ "$angle_vulkan_loader_dir:libvulkan" ]
111      }
112      data_deps += [ "$angle_vulkan_tools_dir:VkICD_mock_icd" ]
113    }
114  }
115
116  group("angle_vulkan_entry_points") {
117    public_deps = [ ":angle_vulkan_headers" ]
118    if (is_fuchsia) {
119      public_deps += [
120        "$angle_root/src/common/fuchsia_egl",
121        "//third_party/fuchsia-sdk/sdk/pkg/vulkan",
122      ]
123      if (!angle_use_vulkan_null_display) {
124        public_deps += [ "//third_party/fuchsia-sdk/sdk/pkg/vulkan_layers:VkLayer_image_pipe_swapchain" ]
125      }
126    } else if (!is_android && !is_ggp) {
127      if (angle_shared_libvulkan) {
128        data_deps = [ "$angle_vulkan_loader_dir:libvulkan" ]
129      } else {
130        deps = [ "$angle_vulkan_loader_dir:libvulkan" ]
131      }
132    }
133  }
134
135  angle_source_set("vulkan") {
136    public_deps = [
137      ":angle_libvulkan",
138      ":angle_vulkan_entry_points",
139      ":angle_vulkan_icd",
140    ]
141  }
142
143  if (angle_enable_vulkan_validation_layers) {
144    group("vulkan_validation_layers") {
145      data_deps = []
146      if (is_fuchsia) {
147        data_deps += [ "//third_party/fuchsia-sdk/sdk/pkg/vulkan_layers:VkLayer_khronos_validation" ]
148      } else {
149        data_deps +=
150            [ "$angle_vulkan_validation_layers_dir:vulkan_validation_layers" ]
151        if (!is_android) {
152          data_deps +=
153              [ "$angle_vulkan_validation_layers_dir:vulkan_gen_json_files" ]
154        }
155      }
156    }
157  }
158
159  if (angle_enable_vulkan_api_dump_layer) {
160    group("lunarg_vulkantools") {
161      data_deps = []
162      if (!is_fuchsia) {
163        data_deps += [ "$angle_lunarg_vulkantools_dir:lunarg_vulkantools" ]
164        if (!is_android) {
165          data_deps += [ "$angle_lunarg_vulkantools_dir:vulkan_gen_json_files" ]
166        }
167      }
168    }
169  }
170}
171