# Copyright 2013 The Flutter Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. _skia_root = "//flutter/third_party/skia" import("$_skia_root/gn/skia.gni") import("$_skia_root/gn/toolchain/wasm.gni") import("$_skia_root/modules/canvaskit/canvaskit.gni") # Defines a WASM library target. template("canvaskit_wasm_lib") { _vars_to_forward = [ "cflags", "check_includes", "ldflags", "defines", "deps", "includes", "sources", "include_dirs", "public_configs", "testonly", "visibility", ] _lib_name = target_name executable("${_lib_name}_js") { forward_variables_from(invoker, _vars_to_forward) output_extension = "js" output_name = "${_lib_name}" } group("$_lib_name") { public_deps = [ ":${_lib_name}_js" ] } } canvaskit_wasm_lib("canvaskit") { # Opted out of check_includes, due to (logically) being part of skia. check_includes = false deps = [ "../..:skia" ] if (skia_canvaskit_enable_paragraph) { deps += [ "../../modules/skparagraph:skparagraph", "../../modules/skunicode:skunicode", ] } sources = [ "$_skia_root/modules/canvaskit/WasmCommon.h", "$_skia_root/modules/canvaskit/canvaskit_bindings.cpp", ] if (skia_canvaskit_enable_paragraph) { sources += [ "$_skia_root/modules/canvaskit/paragraph_bindings.cpp", "$_skia_root/modules/canvaskit/paragraph_bindings_gen.cpp", ] } ldflags = [] if (is_debug) { ldflags += [ "-O0", "-sDEMANGLE_SUPPORT=1", "-sASSERTIONS=1", "-sGL_ASSERTIONS=1", "-g3", "--pre-js", rebase_path("$_skia_root/modules/canvaskit/debug.js"), ] } else { externs_path = rebase_path("$_skia_root/modules/canvaskit/externs.js") ldflags += [ "-Oz", "--closure=1", "--pre-js", rebase_path("$_skia_root/modules/canvaskit/release.js"), "--closure-args=--externs=$externs_path", ] } if (skia_canvaskit_profile_build) { ldflags += [ "--profiling-funcs", "--closure=0", ] } ldflags += [ "-fno-rtti" ] if (skia_canvaskit_enable_webgl) { ldflags += [ "-lGL", "--pre-js", rebase_path("$_skia_root/modules/canvaskit/cpu.js"), "--pre-js", rebase_path("$_skia_root/modules/canvaskit/webgl.js"), "-sUSE_WEBGL2=1", "-sMAX_WEBGL_VERSION=2", ] } else { ldflags += [ "--pre-js", rebase_path("$_skia_root/modules/canvaskit/cpu.js"), "-sUSE_WEBGL2=0", ] } ldflags += [ "-std=c++17", "--bind", "--no-entry", "--pre-js", rebase_path("$_skia_root/modules/canvaskit/preamble.js"), "--pre-js", rebase_path("$_skia_root/modules/canvaskit/color.js"), "--pre-js", rebase_path("$_skia_root/modules/canvaskit/memory.js"), "--pre-js", rebase_path("$_skia_root/modules/canvaskit/util.js"), "--pre-js", rebase_path("$_skia_root/modules/canvaskit/interface.js"), ] ldflags += [ "--pre-js", rebase_path("$_skia_root/modules/canvaskit/paragraph.js"), ] if (skia_canvaskit_enable_pathops) { ldflags += [ "--pre-js", rebase_path("$_skia_root/modules/canvaskit/pathops.js"), ] } if (skia_canvaskit_enable_font) { ldflags += [ "--pre-js", rebase_path("$_skia_root/modules/canvaskit/font.js"), ] } if (skia_canvaskit_enable_skp_serialization) { ldflags += [ "--pre-js", rebase_path("$_skia_root/modules/canvaskit/skp.js"), ] } if (skia_canvaskit_enable_rt_shader) { ldflags += [ "--pre-js", rebase_path("$_skia_root/modules/canvaskit/rt_shader.js"), ] } ldflags += [ "--pre-js", rebase_path("$_skia_root/modules/canvaskit/postamble.js"), "-sALLOW_MEMORY_GROWTH", "-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_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_enable_font) { defines += [ "CK_NO_FONTS" ] } }