# 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")

import("${dawn_root}/scripts/dawn_features.gni")

###############################################################################
# Utils for tests and samples
###############################################################################

static_library("utils") {
  configs += [
    "${dawn_root}/src/dawn/common:internal_config",
    "${dawn_root}/src/tint:tint_public_config",
  ]

  sources = [
    "ComboRenderBundleEncoderDescriptor.cpp",
    "ComboRenderBundleEncoderDescriptor.h",
    "ComboRenderPipelineDescriptor.cpp",
    "ComboRenderPipelineDescriptor.h",
    "PlatformDebugLogger.h",
    "ScopedAutoreleasePool.h",
    "SystemUtils.cpp",
    "SystemUtils.h",
    "TerribleCommandBuffer.cpp",
    "TerribleCommandBuffer.h",
    "TestUtils.cpp",
    "TestUtils.h",
    "TextureUtils.cpp",
    "TextureUtils.h",
    "Timer.h",
    "WGPUHelpers.cpp",
    "WGPUHelpers.h",
    "WireHelper.cpp",
    "WireHelper.h",
  ]
  deps = [
    "${dawn_root}/src/dawn:proc",
    "${dawn_root}/src/dawn/common",
    "${dawn_root}/src/dawn/native:headers",
    "${dawn_root}/src/dawn/wire",
    "${dawn_spirv_tools_dir}:spvtools_opt",
  ]

  libs = []
  frameworks = []

  if (is_win && !dawn_is_winuwp) {
    sources += [ "WindowsDebugLogger.cpp" ]
  } else {
    sources += [ "EmptyDebugLogger.cpp" ]
  }

  if (is_win) {
    sources += [ "WindowsTimer.cpp" ]
  } else if (is_mac) {
    sources += [
      "OSXTimer.cpp",
      "ObjCUtils.h",
      "ObjCUtils.mm",
    ]
    frameworks += [ "QuartzCore.framework" ]
  } else {
    sources += [ "PosixTimer.cpp" ]
  }

  if (is_mac) {
    sources += [ "ScopedAutoreleasePool.mm" ]
  } else {
    sources += [ "ScopedAutoreleasePool.cpp" ]
  }

  public_deps = [ "${dawn_root}/include/dawn:cpp_headers" ]
}
