# Copyright 2018 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/rust/rustc_binary.gni")
import("//build/rust/rustc_library.gni")
import("//build/rust/rustc_test.gni")
import("//build/test/test_package.gni")
import("//src/lib/vulkan/layers.gni")

declare_args() {
  # Include the vulkan validation layers in carnelian examples.
  carnelian_enable_vulkan_validation = is_debug
}

rustc_library("carnelian") {
  name = "carnelian"
  with_unit_tests = true
  version = "0.1.0"
  edition = "2018"
  deps = [
    "//garnet/lib/rust/io_util",
    "//sdk/fidl/fuchsia.fonts:fuchsia.fonts-rustc",
    "//sdk/fidl/fuchsia.hardware.input:fuchsia.hardware.input-rustc",
    "//sdk/fidl/fuchsia.images:fuchsia.images-rustc",
    "//sdk/fidl/fuchsia.input:fuchsia.input-rustc",
    "//sdk/fidl/fuchsia.input.report:fuchsia.input.report-rustc",
    "//sdk/fidl/fuchsia.math:fuchsia.math-rustc",
    "//sdk/fidl/fuchsia.mem:fuchsia.mem-rustc",
    "//sdk/fidl/fuchsia.scenic.scheduling:fuchsia.scenic.scheduling-rustc",
    "//sdk/fidl/fuchsia.sysmem:fuchsia.sysmem-rustc",
    "//sdk/fidl/fuchsia.ui.app:fuchsia.ui.app-rustc",
    "//sdk/fidl/fuchsia.ui.gfx:fuchsia.ui.gfx-rustc",
    "//sdk/fidl/fuchsia.ui.input:fuchsia.ui.input-rustc",
    "//sdk/fidl/fuchsia.ui.input3:fuchsia.ui.input3-rustc",
    "//sdk/fidl/fuchsia.ui.policy:fuchsia.ui.policy-rustc",
    "//sdk/fidl/fuchsia.ui.scenic:fuchsia.ui.scenic-rustc",
    "//sdk/fidl/fuchsia.ui.views:fuchsia.ui.views-rustc",
    "//src/graphics/lib/compute/mold",
    "//src/graphics/lib/compute/spinel-rs-sys",
    "//src/lib/diagnostics/inspect/rust",
    "//src/lib/fdio/rust:fdio",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/lib/fuchsia-component",
    "//src/lib/fuchsia-runtime",
    "//src/lib/mapped-vmo",
    "//src/lib/storage/fuchsia-vfs-watcher",
    "//src/lib/syslog/rust:syslog",
    "//src/lib/trace/rust:trace",
    "//src/lib/trace/rust:trace-provider",
    "//src/lib/ui/fuchsia-framebuffer",
    "//src/lib/ui/fuchsia-scenic",
    "//src/lib/ui/input-synthesis",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//src/lib/zircon/rust:fuchsia-zircon-sys",
    "//src/testing/fidl:placeholders-rustc",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:argh",
    "//third_party/rust_crates:async-trait",
    "//third_party/rust_crates:chrono",
    "//third_party/rust_crates:euclid",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:itertools",
    "//third_party/rust_crates:lazy_static",
    "//third_party/rust_crates:lipsum",
    "//third_party/rust_crates:png",
    "//third_party/rust_crates:rand",
    "//third_party/rust_crates:serde",
    "//third_party/rust_crates:smallvec",
    "//third_party/rust_crates:toml",
    "//third_party/rust_crates:ttf-parser",
    "//third_party/rust_crates:vk-sys",
  ]

  non_rust_deps = [
    "//src/graphics/lib/compute/common",
    "//src/graphics/lib/compute/common/vk",
    "//src/graphics/lib/compute/hotsort/platforms/vk",
    "//src/graphics/lib/compute/spinel",
    "//src/graphics/lib/compute/spinel/platforms/vk",
    "//src/graphics/lib/compute/spinel/platforms/vk:vk_find_target",
  ]

  sources = [
    "src/app.rs",
    "src/app/strategies.rs",
    "src/app/strategies/base.rs",
    "src/app/strategies/framebuffer.rs",
    "src/app/strategies/scenic.rs",
    "src/color.rs",
    "src/drawing.rs",
    "src/facet.rs",
    "src/geometry.rs",
    "src/input.rs",
    "src/input_ext.rs",
    "src/lib.rs",
    "src/message.rs",
    "src/render/dynamic.rs",
    "src/render/generic/mod.rs",
    "src/render/generic/mold/composition.rs",
    "src/render/generic/mold/context.rs",
    "src/render/generic/mold/image.rs",
    "src/render/generic/mold/mod.rs",
    "src/render/generic/mold/path.rs",
    "src/render/generic/mold/raster.rs",
    "src/render/generic/spinel/composition.rs",
    "src/render/generic/spinel/context.rs",
    "src/render/generic/spinel/image.rs",
    "src/render/generic/spinel/mod.rs",
    "src/render/generic/spinel/path.rs",
    "src/render/generic/spinel/raster.rs",
    "src/render/mod.rs",
    "src/render/shed.rs",
    "src/view.rs",
    "src/view/strategies.rs",
    "src/view/strategies/base.rs",
    "src/view/strategies/framebuffer.rs",
    "src/view/strategies/scenic.rs",
  ]

  inputs = [ "//prebuilt/third_party/fonts/robotoslab/RobotoSlab-Regular.ttf" ]

  if (carnelian_enable_vulkan_validation) {
    features = [ "vulkan-validation" ]
  }
}

rustc_binary("button") {
  version = "0.1.0"
  edition = "2018"
  source_root = "examples/button.rs"
  sources = [ "examples/button.rs" ]
  deps = [
    "//src/lib/trace/rust:trace-provider",
    "//src/lib/ui/carnelian",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:argh",
    "//third_party/rust_crates:euclid",
  ]
}

rustc_binary("clockface") {
  version = "0.1.0"
  edition = "2018"
  source_root = "examples/clockface.rs"
  sources = [ "examples/clockface.rs" ]
  deps = [
    "//src/lib/trace/rust:trace-provider",
    "//src/lib/ui/carnelian",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:argh",
    "//third_party/rust_crates:chrono",
    "//third_party/rust_crates:euclid",
  ]
}

rustc_binary("font_metrics") {
  version = "0.1.0"
  edition = "2018"
  source_root = "examples/font_metrics.rs"
  sources = [ "examples/font_metrics.rs" ]
  deps = [
    "//src/lib/fdio/rust:fdio",
    "//src/lib/fuchsia-runtime",
    "//src/lib/ui/carnelian",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:euclid",
    "//third_party/rust_crates:lipsum",
  ]
}

rustc_binary("infinite_scroll") {
  version = "0.1.0"
  edition = "2018"
  source_root = "examples/infinite_scroll.rs"
  sources = [ "examples/infinite_scroll.rs" ]
  deps = [
    "//src/lib/trace/rust:trace",
    "//src/lib/trace/rust:trace-provider",
    "//src/lib/ui/carnelian",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:argh",
    "//third_party/rust_crates:chrono",
    "//third_party/rust_crates:euclid",
    "//third_party/rust_crates:lazy_static",
    "//third_party/rust_crates:lipsum",
    "//third_party/rust_crates:rand",
  ]
}

rustc_binary("ink") {
  version = "0.1.0"
  edition = "2018"
  source_root = "examples/ink.rs"
  sources = [ "examples/ink.rs" ]
  deps = [
    "//sdk/fidl/fuchsia.hardware.input:fuchsia.hardware.input-rustc",
    "//src/lib/fdio/rust:fdio",
    "//src/lib/trace/rust:trace",
    "//src/lib/trace/rust:trace-provider",
    "//src/lib/ui/carnelian",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:argh",
    "//third_party/rust_crates:euclid",
    "//third_party/rust_crates:itertools",
    "//third_party/rust_crates:rand",
  ]
}

rustc_binary("shapes") {
  version = "0.1.0"
  edition = "2018"
  source_root = "examples/shapes.rs"
  sources = [ "examples/shapes.rs" ]
  deps = [
    "//src/lib/trace/rust:trace",
    "//src/lib/trace/rust:trace-provider",
    "//src/lib/ui/carnelian",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:argh",
    "//third_party/rust_crates:euclid",
    "//third_party/rust_crates:rand",
  ]
}

rustc_binary("spinning_square") {
  version = "0.1.0"
  edition = "2018"
  source_root = "examples/spinning_square.rs"
  sources = [ "examples/spinning_square.rs" ]
  deps = [
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia-async",
    "//src/lib/trace/rust:trace-provider",
    "//src/lib/ui/carnelian",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//src/testing/fidl:placeholders-rustc",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:euclid",
    "//third_party/rust_crates:futures",
  ]
}

rustc_binary("gamma") {
  version = "0.1.0"
  edition = "2018"
  source_root = "examples/gamma.rs"
  sources = [ "examples/gamma.rs" ]
  deps = [
    "//src/lib/trace/rust:trace-provider",
    "//src/lib/ui/carnelian",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:argh",
    "//third_party/rust_crates:euclid",
  ]
}

rustc_binary("png") {
  version = "0.1.0"
  edition = "2018"
  source_root = "examples/png.rs"
  sources = [ "examples/png.rs" ]
  deps = [
    "//src/lib/trace/rust:trace-provider",
    "//src/lib/ui/carnelian",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:argh",
    "//third_party/rust_crates:euclid",
    "//third_party/rust_crates:png",
  ]
}

rustc_binary("svg") {
  version = "0.1.0"
  edition = "2018"
  source_root = "examples/svg.rs"
  sources = [ "examples/svg.rs" ]
  deps = [
    "//src/lib/trace/rust:trace-provider",
    "//src/lib/ui/carnelian",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:argh",
    "//third_party/rust_crates:euclid",
  ]
}

test_package("carnelian-render-tests") {
  deps = [ ":carnelian_test" ]

  tests = [
    {
      name = "carnelian_lib_test"
      environments = basic_envs
    },
  ]

  public_deps = vulkan_validation_layers.public_deps
  loadable_modules = vulkan_validation_layers.loadable_modules
  resources = vulkan_validation_layers.resources
}

test_package("carnelian-tests") {
  deps = [ ":carnelian_test" ]

  tests = [
    {
      name = "carnelian_lib_test"
      environments = basic_envs
    },
  ]
}

rustc_binary("carnelian_integration_test_bin") {
  name = "carnelian_integration_test"
  edition = "2018"
  source_root = "tests/carnelian_integration_test.rs"
  sources = [ "tests/carnelian_integration_test.rs" ]
  deps = [
    "//src/lib/ui/carnelian",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//third_party/rust_crates:anyhow",
  ]
}

fuchsia_component("carnelian-integration-test-component") {
  testonly = true
  manifest = "meta/carnelian_integration_test.cmx"
  deps = [ ":carnelian_integration_test_bin" ]
}

fuchsia_test_package("carnelian-integration-test") {
  test_components = [ ":carnelian-integration-test-component" ]
  deps = [ ":carnelian-integration-test-component" ]
  test_specs = {
    environments = [ nuc_env ]
  }
}

rustc_binary("carnelian_fb_integration_test_bin") {
  name = "carnelian_fb_integration_test"
  edition = "2018"
  source_root = "tests/carnelian_integration_test.rs"
  sources = [ "tests/carnelian_integration_test.rs" ]
  deps = [
    "//src/lib/ui/carnelian",
    "//src/lib/zircon/rust:fuchsia-zircon",
    "//third_party/rust_crates:anyhow",
  ]
}

fuchsia_component("carnelian-fb-integration-test-component") {
  testonly = true
  manifest = "meta/carnelian_fb_integration_test.cmx"
  deps = [ ":carnelian_fb_integration_test_bin" ]
}

fuchsia_test_package("carnelian-fb-integration-test") {
  test_components = [ ":carnelian-fb-integration-test-component" ]
  deps = [ ":carnelian-fb-integration-test-component" ]
  test_specs = {
    environments = [ nuc_env ]
  }
}

resource("robotoslab") {
  sources = [ "//prebuilt/third_party/fonts/robotoslab/RobotoSlab-Regular.ttf" ]
  outputs = [ "data/fonts/{{source_file_part}}" ]
}

resource("quintessential") {
  sources = [
    "//prebuilt/third_party/fonts/quintessential/Quintessential-Regular.ttf",
  ]
  outputs = [ "data/fonts/{{source_file_part}}" ]
}

resource("droidserif") {
  sources = [ "//prebuilt/third_party/fonts/droidserif/DroidSerif-Regular.ttf" ]
  outputs = [ "data/fonts/{{source_file_part}}" ]
}

resource("shortstack") {
  sources = [ "//prebuilt/third_party/fonts/shortstack/ShortStack-Regular.ttf" ]
  outputs = [ "data/fonts/{{source_file_part}}" ]
}

resource("roboto") {
  sources = [ "//prebuilt/third_party/fonts/roboto/Roboto-Regular.ttf" ]
  outputs = [ "data/fonts/{{source_file_part}}" ]
}

resource("static_images") {
  sources = [
    "examples/static/baboon.png",
    "examples/static/cross.png",
    "examples/static/lenna.png",
  ]
  outputs = [ "data/static/{{source_file_part}}" ]
}

resource("static_sheds") {
  sources = [ "examples/static/fuchsia.shed" ]
  outputs = [ "data/static/{{source_file_part}}" ]
}

resource("virtcon_config") {
  sources = [ "config/virtcon_config.toml" ]
  outputs = [ "data/config/carnelian.toml" ]
}

resource("shaders") {
  sources = [
    "src/render/shaders/copy.comp.spv",
    "src/render/shaders/motioncopy-srgb.comp.spv",
    "src/render/shaders/motioncopy-unorm.comp.spv",
  ]
  outputs = [ "data/shaders/{{source_file_part}}" ]
}

# A custom template for carnelian examples to support
# dynamic enabling of the vulkan validation layers
template("carnelian_example") {
  example_deps = invoker.deps
  if (carnelian_enable_vulkan_validation) {
    example_deps += [ "//src/lib/vulkan/validation_layers" ]
  }
  fuchsia_package_with_single_component(target_name) {
    forward_variables_from(invoker, [ "manifest" ])
    visibility = [ ":*" ]
    deps = example_deps
  }
}

# To add an example to the build, add its name
# and any addition dependencies like fonts or static image
# assets to the list below.
carnelian_examples = [
  {
    name = "button"
    additional_deps = [ ":robotoslab" ]
  },
  {
    name = "clockface"
  },
  {
    name = "font_metrics"
    additional_deps = [
      ":droidserif",
      ":quintessential",
      ":roboto",
      ":robotoslab",
      ":shortstack",
    ]
  },
  {
    name = "gamma"
  },
  {
    name = "infinite_scroll"
    additional_deps = [
      ":robotoslab",
      ":shaders",
    ]
  },
  {
    name = "ink"
  },
  {
    name = "png"
    additional_deps = [ ":static_images" ]
  },
  {
    name = "shapes"
  },
  {
    name = "spinning_square"
  },
  {
    name = "svg"
    additional_deps = [ ":static_sheds" ]
  },
]

# List for populating the examples group below
carnelian_examples_deps = []

# Rebased path to the example shard
carnelian_example_manifest_include = rebase_path("meta/example.shard.cmx")

foreach(carnelian_example_details, carnelian_examples) {
  carnelian_example_package_name =
      string_replace(carnelian_example_details.name, "_", "-") + "-rs"
  carnelian_example_manifest_label =
      "generate_${carnelian_example_details.name}_cmx"
  carnelian_example_manifest_path =
      "${target_gen_dir}/${carnelian_example_package_name}.cmx"

  # Generate a manifest file for the example
  # that has the name of the binary but otherwise
  # just depends on the example.shard.cmx for needed
  # content
  generated_file(carnelian_example_manifest_label) {
    visibility = [ ":*" ]

    outputs = [ carnelian_example_manifest_path ]
    output_conversion = "json"
    contents = {
      include = [ carnelian_example_manifest_include ]
      program = {
        binary = "bin/${carnelian_example_details.name}"
      }
    }
  }

  # Use the carnelian_example template to create a target
  # for the example
  carnelian_example(carnelian_example_package_name) {
    manifest = rebase_path(carnelian_example_manifest_path)
    deps = [
      ":" + carnelian_example_details.name,
      ":${carnelian_example_manifest_label}",
    ]
    if (defined(carnelian_example_details.additional_deps)) {
      deps += carnelian_example_details.additional_deps
    }
  }
  carnelian_examples_deps +=
      [ "//src/lib/ui/carnelian:" + carnelian_example_package_name ]
}

group("examples") {
  public_deps = carnelian_examples_deps
}
