# Copyright 2018 Google Inc.
#
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("../../gn/skia.gni")

config("public_config") {
  include_dirs = [ "include" ]
}

skia_component("sksg") {
  check_includes = false
  import("sksg.gni")
  public_configs = [ ":public_config" ]
  sources = skia_sksg_sources
  configs = [ "../../:skia_private" ]
  deps = [ "../..:skia" ]
}

if (defined(is_skia_standalone) && skia_enable_tools) {
  skia_source_set("tests") {
    testonly = true

    configs = [ "../..:skia_private" ]
    sources = [ "tests/SGTest.cpp" ]
    deps = [
      ":sksg",
      "../..:skia",
      "../..:test",
    ]
  }

  skia_source_set("slides") {
    if (target_cpu != "wasm") {  # TODO: clean up wasm test
      testonly = true

      configs = [ "../..:skia_private" ]
      sources = [ "slides/SVGPongSlide.cpp" ]
      deps = [
        ":sksg",
        "../..:skia",
      ]
    }
  }
}
