blob: ca24cc4973f9f26ebfdb3d42545c19fe4560e4e3 [file] [log] [blame]
# 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",
]
}
}
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",
"../../modules/skunicode:skunicode",
]
}
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" ]
}
}