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

if (skia_enable_skottie) {
  config("public_config") {
    defines = [
      "SK_ENABLE_SKOTTIE",
      "SK_ENABLE_SKOTTIE_SKSLEFFECT",
    ]
    include_dirs = [ "include" ]
  }

  skia_component("skottie") {
    check_includes = false
    import("skottie.gni")
    public_configs = [ ":public_config" ]
    public = skia_skottie_public
    sources = skia_skottie_sources
    configs = [ "../../:skia_private" ]
    deps = [
      "../..:skia",
      "../skresources",
      "../sksg",
      "../skshaper",
      "../skunicode",
    ]
  }

  if (defined(is_skia_standalone)) {
    config("utils_config") {
      include_dirs = [ "utils" ]
    }
    skia_source_set("utils") {
      check_includes = false
      testonly = true

      public_configs = [ ":utils_config" ]
      configs = [ "../../:skia_private" ]

      sources = [
        "utils/SkottieUtils.cpp",
        "utils/TextEditor.cpp",
        "utils/TextPreshape.cpp",
      ]
      deps = [
        ":skottie",
        "../..:skia",
      ]
    }

    if (skia_enable_tools) {
      skia_source_set("tests") {
        testonly = true

        configs = [
          "../..:skia_private",
          "../..:tests_config",
        ]
        sources = [
          "src/SkottieTest.cpp",
          "tests/AudioLayer.cpp",
          "tests/Expression.cpp",
          "tests/Image.cpp",
          "tests/Keyframe.cpp",
          "tests/PropertyObserver.cpp",
          "tests/Shaper.cpp",
          "tests/Text.cpp",
        ]

        deps = [
          ":skottie",
          "../..:skia",
          "../..:test",
          "../skshaper",
          "../skunicode",
        ]
      }

      skia_source_set("fuzz") {
        check_includes = false
        testonly = true

        configs = [ "../..:skia_private" ]
        include_dirs = [
          "../../tools",
          "../../tools/flags",
          "../../tools/fonts",
        ]
        sources = [
          "../../tools/Resources.cpp",
          "../../tools/fonts/TestFontMgr.cpp",
          "../../tools/fonts/TestSVGTypeface.cpp",
          "../../tools/fonts/TestTypeface.cpp",
          "fuzz/FuzzSkottieJSON.cpp",
        ]

        deps = [
          "../..:skia",
          "../svg",
        ]

        public_deps = [ ":skottie" ]
      }

      skia_source_set("tool") {
        check_includes = false
        testonly = true

        configs = [ "../..:skia_private" ]
        sources = [ "src/SkottieTool.cpp" ]

        deps = [
          "../..:flags",
          "../..:gpu_tool_utils",
          "../..:skia",
          "../../experimental/ffmpeg:video_encoder",
          "../skshaper",
        ]

        public_deps = [
          ":skottie",
          ":utils",
        ]
      }

      # A couple of backend specific targets, to facilitate binary size experiments.
      skia_source_set("tool_cpu") {
        check_includes = false
        testonly = true

        configs = [ "../..:skia_private" ]
        sources = [ "src/SkottieTool.cpp" ]
        defines = [ "CPU_ONLY" ]

        deps = [
          "../..:flags",
          "../..:gpu_tool_utils",
          "../..:skia",
          "../../experimental/ffmpeg:video_encoder",
          "../skshaper",
        ]

        public_deps = [
          ":skottie",
          ":utils",
        ]
      }

      skia_source_set("tool_gpu") {
        check_includes = false
        testonly = true

        configs = [ "../..:skia_private" ]
        sources = [ "src/SkottieTool.cpp" ]
        defines = [ "GPU_ONLY" ]

        deps = [
          "../..:flags",
          "../..:gpu_tool_utils",
          "../..:skia",
          "../../experimental/ffmpeg:video_encoder",
          "../skshaper",
        ]

        public_deps = [
          ":skottie",
          ":utils",
        ]
      }

      skia_source_set("preshape_tool") {
        check_includes = false
        testonly = true

        configs = [ "../..:skia_private" ]
        sources = [ "utils/PreshapeTool.cpp" ]

        deps = [
          "../..:flags",
          "../..:skia",
        ]

        public_deps = [
          ":skottie",
          ":utils",
        ]
      }
      skia_source_set("gm") {
        check_includes = false
        testonly = true

        # would be nice to have a gm_config
        include_dirs = [ "../../gm" ]

        configs = [ "../..:skia_private" ]
        sources = [
          "gm/ExternalProperties.cpp",
          "gm/SkottieGM.cpp",
        ]

        deps = [
          ":skottie",
          ":utils",
          "../..:gpu_tool_utils",
          "../..:skia",
          "../..:tool_utils",
          "../skshaper",
        ]
      }
    }
  }
} else {
  group("skottie") {
  }
  group("fuzz") {
  }
  group("gm") {
  }
  group("tests") {
  }
  group("utils") {
  }
}
