# 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",
    ]
    deps = [ "../..:samples" ]
  }

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

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",
  ]
}

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" ]
  }
  if (skia_canvaskit_enable_skottie) {
    deps += [
      "../../modules/skottie:skottie",
      "../../modules/sksg:sksg",
    ]
  }
  if (skia_canvaskit_enable_particles) {
    deps += [ "../../modules/particles:particles" ]
  }
  if (skia_canvaskit_enable_skottie || skia_canvaskit_enable_particles) {
    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_particles) {
    sources += [ "particles_bindings.cpp" ]
  }
  if (skia_canvaskit_enable_skottie || skia_canvaskit_enable_particles) {
    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_particles) {
    ldflags += [
      "--pre-js",
      rebase_path("particles.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_DISABLE_AAA",
    "SK_FORCE_8_BYTE_ALIGNMENT",
    "EMSCRIPTEN_HAS_UNBOUND_TYPE_NAMES=0",
    "SK_HAS_ANDROID_CODEC",
    "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_gpu) {
    defines += [
      "SK_SUPPORT_GPU=1",
      "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_SUPPORT_GPU=0",
      "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" ]
  }
}
