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

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

if (is_ios) {
  group("skottie_ios_app") {
    deps = [ ":skottie_example" ]
  }
  ios_app_bundle("skottie_example") {
    sources = [
      "SkiaContext.h",
      "SkiaContext.mm",
      "SkiaViewController.h",
      "SkiaViewController.mm",
      "SkottieViewController.h",
      "SkottieViewController.mm",
      "main.mm",
    ]
    if (skia_enable_gpu && skia_use_metal) {
      sources += [
        "SkMetalViewBridge.h",
        "SkMetalViewBridge.mm",
        "SkiaMetalContext.mm",
      ]
    } else if (skia_enable_gpu && skia_use_gl) {
      sources += [ "SkiaGLContext.mm" ]
    } else {
      sources += [ "SkiaUIContext.mm" ]
    }
    data_sources = [
      "../../resources/skottie/skottie-3d-rotation-order.json",
      "../../resources/skottie/skottie-camera-parent-3.json",
      "../../resources/skottie/skottie-gradient-ramp.json",
      "../../resources/skottie/skottie-linear-wipe-effect.json",
      "../../resources/skottie/skottie-text-animator-1.json",
      "../../resources/skottie/skottie-text-animator-2.json",
      "../../resources/skottie/skottie-text-animator-3.json",
      "../../resources/skottie/skottie-text-animator-4.json",
      "../../resources/skottie/skottie-text-animator-5.json",
      "../../resources/skottie/skottie-text-animator-8.json",
      "../../resources/skottie/skottie-transform-effect.json",
      "../../resources/skottie/skottie_sample_2.json",
    ]
    deps = [
      "../..:skia",
      "../../modules/skottie",
    ]
    cflags_objcc = [
      "-std=c++14",
      "-w",
    ]
    frameworks = [
      "CoreFoundation.framework",
      "Foundation.framework",
      "QuartzCore.framework",
      "UIKit.framework",
    ]
    if (skia_enable_gpu && skia_use_metal) {
      frameworks += [
        "Metal.framework",
        "MetalKit.framework",
      ]
    } else if (skia_enable_gpu && skia_use_gl) {
      frameworks += [
        "GLKit.framework",
        "OpenGLES.framework",
      ]
    }
    launchscreen = "../../platform_tools/ios/app/LaunchScreen.storyboard"
  }
}
