# 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("samples") {
  deps = [
    ":Animometer",
    ":CHelloTriangle",
    ":ComputeBoids",
    ":CppHelloTriangle",
    ":ManualSwapChainTest",
  ]
}

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

  # Export all of these as public deps so that `gn check` allows includes
  public_deps = [
    "${dawn_root}/src/dawn:cpp",
    "${dawn_root}/src/dawn:proc_shared",
    "${dawn_root}/src/dawn/common",
    "${dawn_root}/src/dawn/native",
    "${dawn_root}/src/dawn/utils",
    "${dawn_root}/src/dawn/utils:bindings",
    "${dawn_root}/src/dawn/utils:glfw",
    "${dawn_root}/src/dawn/wire",
  ]
  public_configs = [ "${dawn_root}/src/dawn/common:internal_config" ]
}

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

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

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

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

sample("ComputeBoids") {
  sources = [ "ComputeBoids.cpp" ]
}

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

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