# Copyright 2020 The Dawn 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
#
#     http://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.

import("../scripts/dawn_overrides_with_defaults.gni")

group("dawn_samples") {
  deps = [
    ":Animometer",
    ":CHelloTriangle",
    ":ComputeBoids",
    ":CppHelloTriangle",
    ":CubeReflection",
    ":ManualSwapChainTest",
  ]
}

# Static library to contain code and dependencies common to all samples
static_library("dawn_sample_utils") {
  sources = [
    "SampleUtils.cpp",
    "SampleUtils.h",
  ]

  # Export all of these as public deps so that `gn check` allows includes
  public_deps = [
    "${dawn_root}/src/common",
    "${dawn_root}/src/dawn:dawn_proc",
    "${dawn_root}/src/dawn:dawncpp",
    "${dawn_root}/src/dawn_native",
    "${dawn_root}/src/dawn_wire",
    "${dawn_root}/src/utils:dawn_bindings",
    "${dawn_root}/src/utils:dawn_glfw",
    "${dawn_root}/src/utils:dawn_utils",
  ]
  public_configs = [ "${dawn_root}/src/common:dawn_internal" ]
}

# Template for samples to avoid listing dawn_sample_utils as a dep every time
template("dawn_sample") {
  executable(target_name) {
    deps = [ ":dawn_sample_utils" ]
    forward_variables_from(invoker, "*", [ "deps" ])

    if (defined(invoker.deps)) {
      deps += invoker.deps
    }
  }
}

dawn_sample("CppHelloTriangle") {
  sources = [ "CppHelloTriangle.cpp" ]
}

dawn_sample("CHelloTriangle") {
  sources = [ "CHelloTriangle.cpp" ]
}

dawn_sample("ComputeBoids") {
  sources = [ "ComputeBoids.cpp" ]
  deps = [ "${dawn_root}/third_party/gn/glm" ]
}

dawn_sample("Animometer") {
  sources = [ "Animometer.cpp" ]
}

dawn_sample("CubeReflection") {
  sources = [ "CubeReflection.cpp" ]
  deps = [ "${dawn_root}/third_party/gn/glm" ]
}

dawn_sample("ManualSwapChainTest") {
  sources = [ "ManualSwapChainTest.cpp" ]
}
