blob: 9d7b7c1c5c75b6b183b309b9ebfee7a52996895b [file] [log] [blame]
# Copyright 2021 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import("//build/components.gni")
import("../layers.gni")
# To prevent confusion, restrict default visibility.
visibility = [ ":*" ]
executable("validation-server-bin") {
output_name = "validation-server"
sources = [ "validation_server.cc" ]
deps = [
"//sdk/lib/fdio",
"//sdk/lib/fidl/cpp",
"//sdk/lib/sys/cpp",
"//sdk/lib/vfs/cpp",
"//src/lib/fxl",
"//zircon/system/ulib/async-loop:async-loop-cpp",
"//zircon/system/ulib/async-loop:async-loop-default",
]
}
group("vulkan_validation_layers") {
deps = [
":vklayer_khronos_validation_json",
"//third_party/Vulkan-ValidationLayers:vulkan_validation_layers",
]
}
# Modify the validation layer json to reference the correct library path.
action("process_layer_json") {
deps = [ "//third_party/Vulkan-ValidationLayers:vulkan_gen_json_files" ]
script = "process_layer_json.py"
sources = [ "${vulkan_data_dir}/VkLayer_khronos_validation.json" ]
outputs = [ "$target_gen_dir/VkLayer_khronos_validation.json" ]
args = [
rebase_path(outputs[0], root_build_dir),
rebase_path(sources[0], root_build_dir),
]
}
resource("vklayer_khronos_validation_json") {
target_outputs = get_target_outputs(":process_layer_json")
sources = [ target_outputs[0] ]
outputs = [ "data/vulkan/explicit_layer.d/VkLayer_khronos_validation.json" ]
deps = [ ":process_layer_json" ]
}
fuchsia_component("validation-server-component") {
manifest = "meta/validation-server.cml"
component_name = "validation-server"
deps = [
":validation-server-bin",
":vulkan_validation_layers",
]
}
fuchsia_package("validation-server-pkg") {
visibility += [ "*" ]
deps = [ ":validation-server-component" ]
}
group("vulkan-validation-pkg") {
visibility += [ "*" ]
deps = [ ":validation-server-pkg" ]
}
if (current_toolchain == target_toolchain) {
# Generate a cml that includes a specific version of vulkan-validation-pkg.
action("cml") {
# This boils down to a _pm target.
merkle_file = get_label_info(":validation-server-pkg", "target_out_dir") +
"/validation-server-pkg/meta.far.merkle"
# The meta.far.merkle file contains the current package hash.
deps = [ ":validation-server-pkg" ]
script = "make_validation_client_cml.py"
sources = [
merkle_file,
script,
]
outputs = [ "$target_gen_dir/validation-client.cml" ]
args = [
rebase_path(outputs[0], root_build_dir),
rebase_path(merkle_file, root_build_dir),
]
}
}
# Clients that want access to Vulkan validation layers should depend on this.
fuchsia_component("validation-client") {
component_name = "validation-client"
visibility += [ "*" ]
cml_target = ":cml($target_toolchain)"
manifest_deps = [ cml_target ]
manifest = get_label_info(manifest_deps[0], "target_gen_dir") +
"/validation-client.cml"
}