# Copyright 2020 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")
import("../../gn/toolchain/wasm.gni")
import("canvaskit.gni")

# These targets depend on components that are only declared if
# `skia_enable_tools` is true.
if (skia_enable_tools) {
  component("viewer_wasm") {
    testonly = true
    include_dirs = [ "../.." ]
    sources = [
      "../../modules/svg/src/SkSVGAttribute.cpp",
      "../../modules/svg/src/SkSVGAttributeParser.cpp",
      "../../modules/svg/src/SkSVGCircle.cpp",
      "../../modules/svg/src/SkSVGClipPath.cpp",
      "../../modules/svg/src/SkSVGContainer.cpp",
      "../../modules/svg/src/SkSVGDOM.cpp",
      "../../modules/svg/src/SkSVGEllipse.cpp",
      "../../modules/svg/src/SkSVGFe.cpp",
      "../../modules/svg/src/SkSVGFeColorMatrix.cpp",
      "../../modules/svg/src/SkSVGFeComposite.cpp",
      "../../modules/svg/src/SkSVGFeTurbulence.cpp",
      "../../modules/svg/src/SkSVGFilter.cpp",
      "../../modules/svg/src/SkSVGFilterContext.cpp",
      "../../modules/svg/src/SkSVGGradient.cpp",
      "../../modules/svg/src/SkSVGLine.cpp",
      "../../modules/svg/src/SkSVGLinearGradient.cpp",
      "../../modules/svg/src/SkSVGNode.cpp",
      "../../modules/svg/src/SkSVGPath.cpp",
      "../../modules/svg/src/SkSVGPattern.cpp",
      "../../modules/svg/src/SkSVGPoly.cpp",
      "../../modules/svg/src/SkSVGRadialGradient.cpp",
      "../../modules/svg/src/SkSVGRect.cpp",
      "../../modules/svg/src/SkSVGRenderContext.cpp",
      "../../modules/svg/src/SkSVGSVG.cpp",
      "../../modules/svg/src/SkSVGShape.cpp",
      "../../modules/svg/src/SkSVGStop.cpp",
      "../../modules/svg/src/SkSVGText.cpp",
      "../../modules/svg/src/SkSVGTransformableNode.cpp",
      "../../modules/svg/src/SkSVGUse.cpp",
      "../../modules/svg/src/SkSVGValue.cpp",
      "../../tools/viewer/SKPSlide.cpp",
      "../../tools/viewer/SampleSlide.cpp",
      "../../tools/viewer/SvgSlide.cpp",
    ]
  }

  component("gm_wasm") {
    testonly = true
    include_dirs = [ "../.." ]
    deps = [
      "../..:hash_and_encode",
      "../..:tool_utils",
      "../../modules/svg:svg",
    ]
    defines = [ "SK_GANESH" ]
  }
}

component("debugger") {
  include_dirs = [ "../.." ]
  sources = [
    "../../tools/SkSharingProc.cpp",
    "../../tools/UrlDataManager.cpp",
    "../../tools/debugger/DebugCanvas.cpp",
    "../../tools/debugger/DebugLayerManager.cpp",
    "../../tools/debugger/DrawCommand.cpp",
    "../../tools/debugger/JsonWriteBuffer.cpp",
  ]
  defines = [ "SK_GANESH" ]
}

action("create_notomono_cpp") {
  script = "../../tools/embed_resources.py"

  inputs = [ "fonts/NotoMono-Regular.ttf" ]

  output_path =
      "$root_out_dir/modules/canvaskit/fonts/NotoMono-Regular.ttf.ninja.cpp"

  outputs = [ output_path ]

  args = [
    "--name=SK_EMBEDDED_FONTS",
    "--input",
    rebase_path("fonts/NotoMono-Regular.ttf"),
    "--output",
    rebase_path(output_path),
    "--align=4",
  ]
}

skia_wasm_lib("canvaskit") {
  deps = [ "../..:skia" ]
  if (skia_canvaskit_enable_paragraph) {
    deps += [
      "../../modules/skparagraph:skparagraph",
      "../../modules/skunicode:skunicode",
    ]
  }
  if (skia_canvaskit_enable_skottie) {
    deps += [
      "../../modules/skottie:skottie",
      "../../modules/sksg:sksg",
    ]
  }
  if (skia_canvaskit_enable_skottie) {
    deps += [ "../../modules/skresources:skresources" ]
  }
  if (skia_canvaskit_include_viewer) {
    deps += [ ":viewer_wasm" ]
  }
  if (skia_canvaskit_enable_embedded_font) {
    deps += [ ":create_notomono_cpp" ]
  }

  sources = [
    "WasmCommon.h",
    "canvaskit_bindings.cpp",
  ]
  if (skia_canvaskit_enable_paragraph) {
    sources += [
      "paragraph_bindings.cpp",
      "paragraph_bindings_gen.cpp",
    ]
  }
  if (skia_canvaskit_enable_skottie) {
    sources += [
      "../../modules/skottie/utils/SkottieUtils.cpp",
      "skottie_bindings.cpp",
    ]
  }
  if (skia_canvaskit_enable_skottie) {
    sources += [ "../../modules/skresources/src/SkResources.cpp" ]
  }
  if (skia_canvaskit_include_viewer) {
    sources += [ "viewer_bindings.cpp" ]
    # TODO(kjlubick): remove this
  }
  if (skia_canvaskit_enable_debugger) {
    sources += [ "debugger_bindings.cpp" ]
    deps += [ ":debugger" ]
  }
  if (skia_canvaskit_enable_embedded_font) {
    sources += [
      "$root_out_dir/modules/canvaskit/fonts/NotoMono-Regular.ttf.ninja.cpp",
    ]
  }

  ldflags = []
  if (is_debug) {
    ldflags += [
      "-O0",
      "-sDEMANGLE_SUPPORT=1",
      "-sASSERTIONS=1",
      "-sGL_ASSERTIONS=1",
      "-g3",
      "--source-map-base",
      "/node_modules/canvaskit/bin/",
      "--pre-js",
      rebase_path("debug.js"),
    ]
  } else {
    externs_path = rebase_path("externs.js")
    ldflags += [
      "-Oz",
      "--closure=1",
      "--pre-js",
      rebase_path("release.js"),
      "--closure-args=--externs=$externs_path",
    ]
  }
  if (skia_canvaskit_profile_build) {
    ldflags += [
      "--profiling-funcs",
      "--closure=0",
    ]
  }
  ldflags += [ "-fno-rtti" ]

  if (skia_canvaskit_enable_webgpu) {
    ldflags += [
      "--pre-js",
      rebase_path("cpu.js"),
      "--pre-js",
      rebase_path("webgpu.js"),
      "-sUSE_WEBGL2=0",
      "-sUSE_WEBGPU=1",
      "-sASYNCIFY",

      # Modules from html5_webgpu for JS<->WASM interop
      "-sEXPORTED_RUNTIME_METHODS=WebGPU,JsValStore",

      # TODO(skia:13429): The closure compiler doesn't play well with optimized builds and ASYNCIFY.
      "--closure=0",
    ]
  } else if (skia_canvaskit_enable_webgl) {
    ldflags += [
      "-lGL",
      "--pre-js",
      rebase_path("cpu.js"),
      "--pre-js",
      rebase_path("webgl.js"),
      "-sUSE_WEBGL2=1",
      "-sMAX_WEBGL_VERSION=2",
    ]
  } else {
    ldflags += [
      "--pre-js",
      rebase_path("cpu.js"),
      "-sUSE_WEBGL2=0",
    ]
  }

  ldflags += [
    "-std=c++17",
    "--bind",
    "--no-entry",
    "--pre-js",
    rebase_path("preamble.js"),
    "--pre-js",
    rebase_path("color.js"),
    "--pre-js",
    rebase_path("memory.js"),
    "--pre-js",
    rebase_path("util.js"),
    "--pre-js",
    rebase_path("interface.js"),
  ]

  if (skia_canvaskit_enable_matrix_helper) {
    ldflags += [
      "--pre-js",
      rebase_path("matrix.js"),
    ]
  }

  ldflags += [
    "--pre-js",
    rebase_path("paragraph.js"),
  ]

  if (skia_canvaskit_enable_skottie) {
    ldflags += [
      "--pre-js",
      rebase_path("skottie.js"),
    ]
  }

  if (skia_canvaskit_enable_pathops) {
    ldflags += [
      "--pre-js",
      rebase_path("pathops.js"),
    ]
  }

  if (skia_canvaskit_enable_font) {
    ldflags += [
      "--pre-js",
      rebase_path("font.js"),
    ]
  }

  if (skia_canvaskit_enable_skp_serialization) {
    ldflags += [
      "--pre-js",
      rebase_path("skp.js"),
    ]
  }

  if (skia_canvaskit_enable_rt_shader) {
    ldflags += [
      "--pre-js",
      rebase_path("rt_shader.js"),
    ]
  }

  if (skia_canvaskit_enable_debugger) {
    ldflags += [
      "--pre-js",
      rebase_path("debugger.js"),
    ]
  }

  if (skia_canvaskit_enable_canvas_bindings) {
    ldflags += [
      "--pre-js",
      rebase_path("htmlcanvas/preamble.js"),
      "--pre-js",
      rebase_path("htmlcanvas/util.js"),
      "--pre-js",
      rebase_path("htmlcanvas/color.js"),
      "--pre-js",
      rebase_path("htmlcanvas/font.js"),
      "--pre-js",
      rebase_path("htmlcanvas/canvas2dcontext.js"),
      "--pre-js",
      rebase_path("htmlcanvas/htmlcanvas.js"),
      "--pre-js",
      rebase_path("htmlcanvas/htmlimage.js"),
      "--pre-js",
      rebase_path("htmlcanvas/imagedata.js"),
      "--pre-js",
      rebase_path("htmlcanvas/lineargradient.js"),
      "--pre-js",
      rebase_path("htmlcanvas/path2d.js"),
      "--pre-js",
      rebase_path("htmlcanvas/pattern.js"),
      "--pre-js",
      rebase_path("htmlcanvas/radialgradient.js"),
      "--pre-js",
      rebase_path("htmlcanvas/postamble.js"),
    ]
  }

  ldflags += [
    "--pre-js",
    rebase_path("postamble.js"),
    "-sLLD_REPORT_UNDEFINED",
    "-sALLOW_MEMORY_GROWTH",
    "-sUSE_PTHREADS=0",
    "-sDISABLE_EXCEPTION_CATCHING",
    "-sNODEJS_CATCH_EXIT=0",
    "-sDYNAMIC_EXECUTION=0",
    "-sEXPORT_NAME=CanvasKitInit",
    "-sEXPORTED_FUNCTIONS=[_malloc,_free]",
    "-sFORCE_FILESYSTEM=0",
    "-sFILESYSTEM=0",
    "-sMODULARIZE",
    "-sNO_EXIT_RUNTIME=1",
    "-sINITIAL_MEMORY=128MB",
    "-sWASM",
    "-sSTRICT=1",
  ]

  defines = []
  if (is_debug) {
    defines += [ "SK_DEBUG" ]
  } else {
    defines += [ "SK_RELEASE" ]
  }
  if (!is_debug && !skia_canvaskit_force_tracing) {
    defines += [ "SK_DISABLE_TRACING" ]
  }
  defines += [
    "SK_FORCE_AAA",
    "SK_FORCE_8_BYTE_ALIGNMENT",
    "EMSCRIPTEN_HAS_UNBOUND_TYPE_NAMES=0",
    "SK_SHAPER_HARFBUZZ_AVAILABLE",
  ]
  if (skia_canvaskit_enable_paragraph) {
    defines += [ "CK_INCLUDE_PARAGRAPH" ]
  }
  if (skia_canvaskit_enable_skp_serialization) {
    defines += [ "CK_SERIALIZE_SKP" ]
  }
  if (skia_enable_ganesh) {
    defines += [
      "SK_GANESH",
      "SK_DISABLE_LEGACY_SHADERCONTEXT",
    ]
    if (skia_canvaskit_enable_webgl) {
      defines += [
        "SK_GL",
        "CK_ENABLE_WEBGL",
      ]
    }
    if (skia_canvaskit_enable_webgpu) {
      defines += [
        "SK_DAWN",
        "CK_ENABLE_WEBGPU",
      ]
    }
  } else {
    defines += [ "SK_ENABLE_SKSL" ]
  }

  if (skia_canvaskit_enable_pathops) {
    defines += [ "CK_INCLUDE_PATHOPS" ]
  }
  if (skia_canvaskit_enable_rt_shader) {
    defines += [ "CK_INCLUDE_RUNTIME_EFFECT" ]
  }
  if (!skia_canvaskit_enable_alias_font) {
    defines += [ "CK_NO_ALIAS_FONT" ]
  }
  if (skia_canvaskit_legacy_draw_vertices_blend_mode) {
    # https://github.com/flutter/flutter/issues/98531
    defines += [ "SK_LEGACY_IGNORE_DRAW_VERTICES_BLEND_WITH_NO_SHADER" ]
  }
  if (!skia_canvaskit_enable_font) {
    defines += [ "CK_NO_FONTS" ]
  }
  if (skia_enable_sksl_tracing) {
    defines += [ "SKSL_ENABLE_TRACING" ]
  }
}
