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