# Copyright 2013 The Flutter 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("//flutter/common/config.gni")
import("//flutter/impeller/tools/impeller.gni")
import("//flutter/testing/testing.gni")

source_set("gpu") {
  cflags = [
    # Dart gives us doubles. Skia and Impeller work in floats.
    # If Dart gives us a double > FLT_MAX or < -FLT_MAX, implicit conversion
    # will convert it to either inf/-inf or FLT_MAX/-FLT_MAX (undefined
    # behavior). This can result in surprising and difficult to debug behavior
    # for Flutter application developers, so it should be explicitly handled
    # via SafeNarrow.
    "-Wimplicit-float-conversion",
  ]

  if (is_win) {
    # This causes build failures in third_party dependencies on Windows.
    cflags += [ "-Wno-implicit-int-float-conversion" ]
  }

  public_configs = [ "//flutter:config" ]

  public_deps = []

  if (!defined(defines)) {
    defines = []
  }

  if (!is_fuchsia) {
    sources = [
      "command_buffer.cc",
      "command_buffer.h",
      "context.cc",
      "context.h",
      "device_buffer.cc",
      "device_buffer.h",
      "export.cc",
      "export.h",
      "fixtures.cc",
      "fixtures.h",
      "formats.cc",
      "formats.h",
      "host_buffer.cc",
      "host_buffer.h",
      "render_pass.cc",
      "render_pass.h",
      "render_pipeline.cc",
      "render_pipeline.h",
      "shader.cc",
      "shader.h",
      "shader_library.cc",
      "shader_library.h",
      "smoketest.cc",
      "smoketest.h",
      "texture.cc",
      "texture.h",
    ]
  }
  deps = [
    "//flutter/impeller",
    "//flutter/impeller/display_list:skia_conversions",
    "//flutter/lib/ui",
    "//flutter/third_party/tonic",
  ]

  if (is_win) {
    # Required for M_PI and others.
    defines += [ "_USE_MATH_DEFINES" ]
  }
}

if (enable_unittests) {
}
