# 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",
    ":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" ]
}

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

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