# Copyright (C) 2025 The Fuchsia Authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. assert(is_fuchsia, "This build file works on Fuchsia GN build only.") import("//build/compiled_action.gni") import("//build/components.gni") import("//build_overrides/vulkan_tools.gni") import("//src/lib/vulkan/layers.gni") group("cube") { testonly = true deps = [ ":vkcube-on-fb", ":vkcube-on-fb-protected", ":vkcube-on-scenic", ] } fuchsia_test_component("vkcube-on-fb-component") { component_name = "vkcube-on-fb" deps = [ ":vkcube", "//src/lib/vulkan/swapchain:image_pipe_swapchain_fb_layer", "//src/lib/vulkan/validation_layers", ] manifest = "fuchsia/meta/vkcube-on-fb.cml" test_type = "system" } fuchsia_test_package("vkcube-on-fb") { test_components = [ ":vkcube-on-fb-component" ] test_specs = { # vkcube runs forever, so only run manually. environments = [] } } fuchsia_test_component("vkcube-on-fb-protected-component") { deps = [ ":vkcube", "//src/lib/vulkan/swapchain:image_pipe_swapchain_fb_layer", "//src/lib/vulkan/validation_layers", ] manifest = "fuchsia/meta/vkcube-on-fb-protected.cml" test_type = "system" } fuchsia_test_package("vkcube-on-fb-protected") { test_components = [ ":vkcube-on-fb-protected-component" ] test_specs = { # vkcube runs forever, so only run manually. environments = [] } } fuchsia_component("vkcube-on-scenic-component") { component_name = "vkcube-on-scenic" deps = [ ":vkcube", "//src/lib/vulkan/swapchain:image_pipe_swapchain_layer", "//src/lib/vulkan/validation_layers", ] manifest = "fuchsia/meta/vkcube-on-scenic.cml" } fuchsia_component("vkcube-on-scenic-protected-component") { component_name = "vkcube-on-scenic-protected" deps = [ ":vkcube", "//src/lib/vulkan/swapchain:image_pipe_swapchain_layer", "//src/lib/vulkan/validation_layers", ] manifest = "fuchsia/meta/vkcube-on-scenic-protected.cml" } fuchsia_package("vkcube-on-scenic") { deps = [ ":vkcube-on-scenic-component", ":vkcube-on-scenic-protected-component", ] } config("cube_config") { cube_frag_inc = "$target_gen_dir/cube.frag.inc" cube_vert_inc = "$target_gen_dir/cube.vert.inc" cube_frag_inc_rebased = rebase_path(cube_frag_inc, root_build_dir) cube_vert_inc_rebased = rebase_path(cube_vert_inc, root_build_dir) inputs = [ cube_frag_inc, cube_vert_inc, ] defines = [ "CUBE_FRAG_INC=\"$cube_frag_inc_rebased\"", "CUBE_VERT_INC=\"$cube_vert_inc_rebased\"", "VULKAN_HPP_NO_NODISCARD_WARNINGS", ] include_dirs = [ root_build_dir ] cflags = [ "-Wno-implicit-int-float-conversion" ] } executable("vkcube") { defines = [] if (defined(texture_ppm_h)) { path = rebase_path(texture_ppm_h, root_build_dir) defines += [ "TEXTURE_PPM_H=\"$path\"" ] } sources = [ "cube.cpp", "fuchsia/flatland_view.cpp", "fuchsia/flatland_view.h", ] configs += [ ":cube_config", ] deps = [ ":glslang_frag", ":glslang_vert", "//sdk/fidl/fuchsia.ui.app:fuchsia.ui.app_cpp", "//sdk/fidl/fuchsia.ui.composition:fuchsia.ui.composition_cpp", "//sdk/fidl/fuchsia.ui.views:fuchsia.ui.views_cpp", "//sdk/lib/async-loop:async-loop-cpp", "//sdk/lib/component/incoming/cpp", "//sdk/lib/component/outgoing/cpp", "//sdk/lib/syslog/cpp", "//sdk/lib/ui/scenic/cpp", "//third_party/Vulkan-Headers/src:vulkan_headers", "//third_party/Vulkan-Loader:libvulkan", "//zircon/system/ulib/syslog", ] } compiled_action("glslang_frag") { tool = "//third_party/glslang:glslang_validator" outputs = [ "$target_gen_dir/cube.frag.inc" ] sources = [ "cube.frag" ] args = [ "--quiet", "-V", "-x", "-o", rebase_path("$target_gen_dir/cube.frag.inc", root_build_dir), rebase_path("cube.frag", root_build_dir), ] } compiled_action("glslang_vert") { tool = "//third_party/glslang:glslang_validator" outputs = [ "$target_gen_dir/cube.vert.inc" ] sources = [ "cube.vert" ] args = [ "--quiet", "-V", "-x", "-o", rebase_path("$target_gen_dir/cube.vert.inc", root_build_dir), rebase_path("cube.vert", root_build_dir), ] }