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
8declare_args() {
9  angle_use_custom_libvulkan = !is_android && !is_fuchsia && !is_ggp
10}
11
12config("angle_libvulkan_config") {
13  if (angle_use_custom_libvulkan) {
14    defines = [ "ANGLE_USE_CUSTOM_LIBVULKAN" ]
15  }
16}
17
18angle_source_set("angle_libvulkan_loader") {
19  public_configs = [ ":angle_libvulkan_config" ]
20  sources = [
21    "libvulkan_loader.cpp",
22    "libvulkan_loader.h",
23  ]
24  deps = [ "$angle_root:angle_common" ]
25}
26
27if (angle_enable_vulkan) {
28  group("angle_libvulkan") {
29    public_configs = [ ":angle_libvulkan_config" ]
30    data_deps = []
31    if (angle_use_custom_libvulkan) {
32      if (angle_shared_libvulkan) {
33        data_deps += [ "$angle_vulkan_loader_dir:libvulkan" ]
34      } else {
35        public_deps = [ "$angle_vulkan_loader_dir:libvulkan" ]
36      }
37      data_deps += [ "$angle_vulkan_tools_dir:VkICD_mock_icd" ]
38    }
39  }
40
41  config("angle_vulkan_headers_config") {
42    if (angle_shared_libvulkan) {
43      defines = [ "ANGLE_SHARED_LIBVULKAN=1" ]
44    }
45  }
46
47  angle_source_set("angle_vulkan_headers") {
48    sources = [
49      "vk_google_filtering_precision.h",
50      "vk_headers.h",
51    ]
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  group("angle_vulkan_entry_points") {
61    public_deps = [ ":angle_vulkan_headers" ]
62    if (is_fuchsia) {
63      public_deps += [
64        "$angle_root/src/common/fuchsia_egl",
65        "//third_party/fuchsia-sdk/sdk/pkg/vulkan",
66      ]
67      if (!angle_use_vulkan_null_display) {
68        public_deps += [ "//third_party/fuchsia-sdk/sdk/pkg/vulkan_layers:VkLayer_image_pipe_swapchain" ]
69      }
70    } else if (!is_android && !is_ggp) {
71      if (angle_shared_libvulkan) {
72        data_deps = [ "$angle_vulkan_loader_dir:libvulkan" ]
73      } else {
74        deps = [ "$angle_vulkan_loader_dir:libvulkan" ]
75      }
76    }
77  }
78
79  angle_source_set("vulkan") {
80    sources = [
81      "vulkan_icd.cpp",
82      "vulkan_icd.h",
83    ]
84
85    public_deps = [
86      ":angle_libvulkan",
87      ":angle_vulkan_entry_points",
88      "$angle_root:angle_common",
89    ]
90
91    configs += [ "$angle_root:angle_no_cfi_icall" ]
92
93    defines = [
94      "ANGLE_VK_LAYERS_DIR=\"$angle_data_dir\"",
95      "ANGLE_VK_MOCK_ICD_JSON=\"$angle_data_dir/VkICD_mock_icd.json\"",
96    ]
97
98    deps = []
99    data_deps = []
100
101    if (angle_enable_swiftshader) {
102      import("$swiftshader_dir/src/Vulkan/vulkan.gni")
103      _sws_icd = "./$swiftshader_icd_file_name"
104      if (is_win) {
105        _sws_icd = ".\\\\$swiftshader_icd_file_name"
106      }
107
108      defines += [ "ANGLE_VK_SWIFTSHADER_ICD_JSON=\"${_sws_icd}\"" ]
109
110      data_deps += [
111        "$swiftshader_dir/src/Vulkan:icd_file",
112        "$swiftshader_dir/src/Vulkan:swiftshader_libvulkan",
113      ]
114    }
115  }
116
117  if (angle_enable_vulkan_validation_layers) {
118    group("vulkan_validation_layers") {
119      data_deps = []
120      if (is_fuchsia) {
121        data_deps += [ "//third_party/fuchsia-sdk:vulkan_validation" ]
122      } else {
123        data_deps +=
124            [ "$angle_vulkan_validation_layers_dir:vulkan_validation_layers" ]
125        if (!is_android) {
126          data_deps +=
127              [ "$angle_vulkan_validation_layers_dir:vulkan_gen_json_files" ]
128        }
129      }
130    }
131  }
132}
133