# Copyright 2016 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("//build/testing/environments.gni")
import("//src/graphics/lib/magma/gnbuild/magma.gni")
import("//src/ui/lib/escher/build_args.gni")

group("tests") {
  testonly = true
  deps = [ ":escher_tests" ]
}
config("use_runtime_glsl_config") {
  defines = [ "ESCHER_USE_RUNTIME_GLSL=1" ]
}

config("test_for_glsl_spirv_mismatch_config") {
  defines = [ "ESCHER_TEST_FOR_GLSL_SPIRV_MISMATCH=1" ]
}

fuchsia_test_component("escher_unittests") {
  manifest = "meta/escher_unittests.cml"
  deps = [ "test:escher_unittests" ]
  test_type = "vulkan"
}

fuchsia_test_component("escher_unittests_expected_failure") {
  manifest = "meta/escher_unittests_expected_failure.cml"
  deps = [ "test:escher_unittests_expected_failure" ]
  test_type = "vulkan"
}

fuchsia_test_component("escher_renderer_tests") {
  manifest = "meta/escher_renderer_tests.cml"
  deps = [ "test:escher_renderer_tests" ]
  test_type = "vulkan"
}

fuchsia_test_component("escher_examples_test") {
  manifest = "meta/escher_examples_test.cml"
  deps = [ "//src/ui/examples/escher/test:escher_examples_test" ]
  test_type = "vulkan"
}

fuchsia_test_package("escher_tests") {
  test_components = [
    ":escher_renderer_tests",
    ":escher_examples_test",
    ":escher_unittests",
  ]
  deps = [
    "shaders:escher_shaders_resources",
    "shaders:escher_shaders_spirv_resources",
    "shaders:escher_test_shaders_spirv_resources",
    "//src/lib/vulkan:vulkan_validation_layers",
    "//src/ui/examples/escher/common/assets:escher_examples_assets",
  ]

  test_specs = {
    environments = basic_envs + magma_libvulkan_hardware_envs
  }
}

fuchsia_test_package("escher_tests_expected_failure") {
  test_components = [ ":escher_unittests_expected_failure" ]
  deps = [
    "shaders:escher_shaders_resources",
    "shaders:escher_shaders_spirv_resources",
    "//src/lib/vulkan:vulkan_validation_layers",
  ]

  test_specs = {
    log_settings = {
      max_severity = "FATAL"
    }
  }
}

config("thread_safety_warning") {
  cflags = [
    "-Wthread-safety",
    "-fcolor-diagnostics",
  ]
}

config("vk_mem_alloc_small_heap_max_size") {
  # Set maximum small heap size to 256MB, which works for AEMU (which has 512MB
  # memory heaps) and possibly other devices with limited memory size.
  defines = [ "VMA_SMALL_HEAP_MAX_SIZE=(256ull*1024*1024)" ]
}

config("vk_mem_alloc_error_suppression") {
  cflags = [
    "-Wno-deprecated-copy",
    "-Wno-missing-field-initializers",
    "-Wno-unused-variable",
  ]

  if (is_mac) {
    # TODO(https://fxbug.dev/42140638): Current vk_mem_alloc.h has a possible naming
    # conflict for aligned_alloc() method which is implemented natively on
    # macOS 10.15 SDK and above. We should update vk_mem_alloc.h to upstream
    # to fix this.
    cflags += [ "-Wno-unguarded-availability-new" ]
  }
}

source_set("vk_mem_alloc") {
  public_deps = [
    "//src/lib/fxl",
    "//src/lib/vulkan",
  ]

  sources = [
    "third_party/VulkanMemoryAllocator/vk_mem_alloc.h",
    "vk/vk_mem_alloc.cc",
  ]

  public_deps += [ "//zircon/system/public" ]

  public_configs = [
    ":vk_mem_alloc_error_suppression",
    ":vk_mem_alloc_small_heap_max_size",
  ]
}

# Allows variants of Escher library to be built, e.g. to toggle
# between runtime GLSL compilation vs using precompiled SPIR-V.
template("escher_library") {
  source_set(target_name) {
    forward_variables_from(invoker, "*")

    defines = [
      # Currently necessary on Fuchsia, but not Linux.
      "ESCHER_DISABLE_BACKGROUND_GLSL_COMPILATION",
    ]

    deps = [
      "//third_party/spirv-cross/gn:spirv_cross_sources",
      "//third_party/spirv-tools:spvtools_opt",
    ]

    if (use_runtime_glsl) {
      deps += [
        "//third_party/glslang:glslang_default_resource_limits_sources",
        "//third_party/glslang:glslang_sources",
        "//third_party/shaderc:libshaderc",
      ]
    }

    public_deps = [
      ":vk_mem_alloc",
      "//src/lib/fxl",
      "//src/lib/vulkan",
      "//src/ui/lib/escher/base:escher_base",
      "//src/ui/lib/escher/geometry:escher_geometry",
      "//src/ui/lib/escher/types:escher_types",
    ]

    sources = [
      "debug/debug_font.cc",
      "debug/debug_font.h",
      "debug/debug_rects.cc",
      "debug/debug_rects.h",
      "defaults/default_shader_program_factory.cc",
      "defaults/default_shader_program_factory.h",
      "escher.cc",
      "escher.h",
      "escher_process_init.cc",
      "escher_process_init.h",
      "flatland/flatland_static_config.cc",
      "flatland/flatland_static_config.h",
      "flatland/rectangle_compositor.cc",
      "flatland/rectangle_compositor.h",
      "forward_declarations.h",
      "fs/hack_filesystem.cc",
      "fs/hack_filesystem.h",
      "hmd/pose_buffer_latching_shader.cc",
      "hmd/pose_buffer_latching_shader.h",
      "impl/command_buffer.cc",
      "impl/command_buffer.h",
      "impl/command_buffer_pool.cc",
      "impl/command_buffer_pool.h",
      "impl/command_buffer_sequencer.cc",
      "impl/command_buffer_sequencer.h",
      "impl/debug_print.cc",
      "impl/descriptor_set_pool.cc",
      "impl/descriptor_set_pool.h",
      "impl/frame_manager.cc",
      "impl/frame_manager.h",
      "impl/gpu_mem_slab.cc",
      "impl/gpu_mem_slab.h",
      "impl/gpu_mem_suballocation.cc",
      "impl/gpu_mem_suballocation.h",
      "impl/image_cache.cc",
      "impl/image_cache.h",
      "impl/mesh_manager.cc",
      "impl/mesh_manager.h",
      "impl/mesh_shader_binding.cc",
      "impl/mesh_shader_binding.h",
      "impl/naive_buffer.cc",
      "impl/naive_buffer.h",
      "impl/naive_image.cc",
      "impl/naive_image.h",
      "impl/uniform_buffer_pool.cc",
      "impl/uniform_buffer_pool.h",
      "impl/vulkan_utils.cc",
      "impl/vulkan_utils.h",
      "impl/z_sort.cc",
      "impl/z_sort.h",
      "material/material.cc",
      "material/material.h",
      "math/lerp.h",
      "math/rotations.cc",
      "math/rotations.h",
      "mesh/indexed_triangle_mesh.h",
      "mesh/indexed_triangle_mesh_clip.h",
      "mesh/indexed_triangle_mesh_upload.h",
      "mesh/tessellation.cc",
      "mesh/tessellation.h",
      "paper/paper_draw_call.h",
      "paper/paper_draw_call_factory.cc",
      "paper/paper_draw_call_factory.h",
      "paper/paper_drawable.h",
      "paper/paper_drawable_flags.h",
      "paper/paper_light.h",
      "paper/paper_material.h",
      "paper/paper_readme.h",
      "paper/paper_render_funcs.cc",
      "paper/paper_render_funcs.h",
      "paper/paper_render_queue.cc",
      "paper/paper_render_queue.h",
      "paper/paper_render_queue_context.cc",
      "paper/paper_render_queue_context.h",
      "paper/paper_render_queue_flags.h",
      "paper/paper_renderer.cc",
      "paper/paper_renderer.h",
      "paper/paper_renderer_config.h",
      "paper/paper_renderer_static_config.cc",
      "paper/paper_renderer_static_config.h",
      "paper/paper_scene.h",
      "paper/paper_shader_list.h",
      "paper/paper_shader_structs.h",
      "paper/paper_shape_cache.cc",
      "paper/paper_shape_cache.h",
      "paper/paper_timestamp_graph.cc",
      "paper/paper_timestamp_graph.h",
      "paper/paper_transform_stack.cc",
      "paper/paper_transform_stack.h",
      "profiling/timestamp_profiler.cc",
      "profiling/timestamp_profiler.h",
      "renderer/batch_gpu_downloader.cc",
      "renderer/batch_gpu_downloader.h",
      "renderer/batch_gpu_uploader.cc",
      "renderer/batch_gpu_uploader.h",
      "renderer/buffer_cache.cc",
      "renderer/buffer_cache.h",
      "renderer/frame.cc",
      "renderer/frame.h",
      "renderer/render_funcs.cc",
      "renderer/render_funcs.h",
      "renderer/render_queue.cc",
      "renderer/render_queue.h",
      "renderer/render_queue_context.h",
      "renderer/render_queue_item.h",
      "renderer/sampler_cache.cc",
      "renderer/sampler_cache.h",
      "renderer/semaphore.cc",
      "renderer/semaphore.h",
      "renderer/uniform_allocation.h",
      "renderer/uniform_binding.h",
      "renderer/uniform_block_allocator.cc",
      "renderer/uniform_block_allocator.h",
      "resources/resource.cc",
      "resources/resource.h",
      "resources/resource_manager.cc",
      "resources/resource_manager.h",
      "resources/resource_recycler.cc",
      "resources/resource_recycler.h",
      "resources/resource_type_info.h",
      "scene/ambient_light.cc",
      "scene/ambient_light.h",
      "scene/binding.h",
      "scene/camera.cc",
      "scene/camera.h",
      "scene/directional_light.cc",
      "scene/directional_light.h",
      "scene/model.cc",
      "scene/model.h",
      "scene/object.cc",
      "scene/object.h",
      "scene/shape.cc",
      "scene/shape.h",
      "scene/viewing_volume.cc",
      "scene/viewing_volume.h",
      "shaders/util/spirv_file_util.cc",
      "shaders/util/spirv_file_util.h",
      "shape/mesh.cc",
      "shape/mesh.h",
      "shape/mesh_builder.cc",
      "shape/mesh_builder.h",
      "shape/mesh_builder_factory.h",
      "shape/mesh_spec.cc",
      "shape/mesh_spec.h",
      "shape/rounded_rect.cc",
      "shape/rounded_rect.h",
      "status.h",
      "third_party/enum_utils/enum_utils.h",
      "third_party/granite/vk/command_buffer.cc",
      "third_party/granite/vk/command_buffer.h",
      "third_party/granite/vk/command_buffer_pipeline_state.cc",
      "third_party/granite/vk/command_buffer_pipeline_state.h",
      "third_party/granite/vk/descriptor_set_layout.cc",
      "third_party/granite/vk/descriptor_set_layout.h",
      "third_party/granite/vk/pipeline_layout.cc",
      "third_party/granite/vk/pipeline_layout.h",
      "third_party/granite/vk/render_pass.cc",
      "third_party/granite/vk/render_pass.h",
      "third_party/granite/vk/render_pass_info.cc",
      "third_party/granite/vk/render_pass_info.h",
      "third_party/granite/vk/shader_utils.cc",
      "third_party/granite/vk/shader_utils.h",
      "util/align.h",
      "util/alloca.h",
      "util/bit_ops.h",
      "util/bitmap.h",
      "util/block_allocator.cc",
      "util/block_allocator.h",
      "util/debug_print.h",
      "util/enum_cast.h",
      "util/enum_count.h",
      "util/enum_flags.h",
      "util/enum_utils.h",
      "util/epsilon_compare.cc",
      "util/epsilon_compare.h",
      "util/hash.h",
      "util/hash_cache.h",
      "util/hash_fnv_1a.h",
      "util/hash_map.h",
      "util/hashable.h",
      "util/hasher.h",
      "util/image_utils.cc",
      "util/image_utils.h",
      "util/intrusive_list.h",
      "util/object_pool.h",
      "util/pair_hasher.h",
      "util/stack_allocator.h",
      "util/stopwatch.h",
      "util/string_utils.h",
      "util/trace_macros.h",
      "util/tracer.cc",
      "util/tracer.h",
      "vk/buffer.cc",
      "vk/buffer.h",
      "vk/buffer_factory.h",
      "vk/chained_semaphore_generator.cc",
      "vk/chained_semaphore_generator.h",
      "vk/color_space.cc",
      "vk/color_space.h",
      "vk/command_buffer.h",
      "vk/framebuffer.cc",
      "vk/framebuffer.h",
      "vk/gpu_allocator.h",
      "vk/gpu_mem.cc",
      "vk/gpu_mem.h",
      "vk/image.cc",
      "vk/image.h",
      "vk/image_layout_updater.cc",
      "vk/image_layout_updater.h",
      "vk/image_view.cc",
      "vk/image_view.h",
      "vk/impl/descriptor_set_allocator.cc",
      "vk/impl/descriptor_set_allocator.h",
      "vk/impl/descriptor_set_allocator_cache.cc",
      "vk/impl/descriptor_set_allocator_cache.h",
      "vk/impl/framebuffer.cc",
      "vk/impl/framebuffer.h",
      "vk/impl/framebuffer_allocator.cc",
      "vk/impl/framebuffer_allocator.h",
      "vk/impl/pipeline_layout_cache.cc",
      "vk/impl/pipeline_layout_cache.h",
      "vk/impl/render_pass_cache.cc",
      "vk/impl/render_pass_cache.h",
      "vk/naive_gpu_allocator.cc",
      "vk/naive_gpu_allocator.h",
      "vk/pipeline_builder.cc",
      "vk/pipeline_builder.h",
      "vk/render_pass.cc",
      "vk/render_pass.h",
      "vk/render_pass_info.h",
      "vk/sampler.cc",
      "vk/sampler.h",
      "vk/shader_module.cc",
      "vk/shader_module.h",
      "vk/shader_module_template.cc",
      "vk/shader_module_template.h",
      "vk/shader_program.cc",
      "vk/shader_program.h",
      "vk/shader_program_factory.cc",
      "vk/shader_program_factory.h",
      "vk/shader_variant_args.cc",
      "vk/shader_variant_args.h",
      "vk/texture.cc",
      "vk/texture.h",
      "vk/vma_gpu_allocator.cc",
      "vk/vma_gpu_allocator.h",
      "vk/vulkan_context.h",
      "vk/vulkan_device_queues.cc",
      "vk/vulkan_device_queues.h",
      "vk/vulkan_instance.cc",
      "vk/vulkan_instance.h",
      "vk/vulkan_limits.h",
      "vk/vulkan_swapchain.cc",
      "vk/vulkan_swapchain.h",
      "vk/vulkan_swapchain_helper.cc",
      "vk/vulkan_swapchain_helper.h",
    ]

    if (is_fuchsia) {
      sources += [
        "flib/fence.h",
        "flib/fence_listener.cc",
        "flib/fence_listener.h",
        "flib/fence_queue.cc",
        "flib/fence_queue.h",
        "flib/fence_set_listener.cc",
        "flib/fence_set_listener.h",
        "fs/fuchsia_data_source.cc",
        "fs/fuchsia_data_source.h",
        "util/fuchsia_utils.cc",
        "util/fuchsia_utils.h",
      ]
      public_deps += [
        "//sdk/fidl/fuchsia.images:fuchsia.images_hlcpp",
        "//sdk/fidl/fuchsia.sysmem:fuchsia.sysmem_hlcpp",
        "//sdk/lib/fidl/cpp",
        "//sdk/lib/fit",
        "//sdk/lib/syslog/cpp",
        "//sdk/lib/vfs/cpp",
        "//zircon/system/public",
        "//zircon/system/ulib/async-loop:async-loop-cpp",
        "//zircon/system/ulib/async-loop:async-loop-default",
        "//zircon/system/ulib/trace-vthread",
      ]
      deps += [ "//zircon/system/ulib/trace" ]
    }

    if (is_linux) {
      sources += [
        "fs/linux_data_source.cc",
        "fs/linux_data_source.h",
        "util/impl/trace_macros_impl.cc",
        "util/impl/trace_macros_impl.h",
      ]
    }

    if (is_mac) {
      sources += [
        "fs/macos_data_source.cc",
        "fs/macos_data_source.h",
        "util/impl/trace_macros_impl.cc",
        "util/impl/trace_macros_impl.h",
      ]
    }

    public_configs = [ ":thread_safety_warning" ]
    if (use_runtime_glsl) {
      public_configs += [ ":use_runtime_glsl_config" ]
    }
  }
}

set_defaults("escher_library") {
  configs = default_common_binary_configs
}

escher_library("escher_with_glslang") {
  use_runtime_glsl = true
}

escher_library("escher_no_glslang") {
  use_runtime_glsl = false
}

source_set("escher") {
  if (escher_use_runtime_glsl) {
    public_deps = [ "//src/ui/lib/escher:escher_with_glslang" ]
  } else {
    public_deps = [ "//src/ui/lib/escher:escher_no_glslang" ]
  }
  if (escher_test_for_glsl_spirv_mismatch) {
    public_configs += [ ":test_for_glsl_spirv_mismatch_config" ]
  }
}

group("unittests") {
  testonly = true
  deps = [
    "//src/ui/lib/escher/test:escher_renderer_tests",
    "//src/ui/lib/escher/test:escher_unittests",
  ]
}
