From 0b6486f774ea783ebece705aa9ce696c26731488 Mon Sep 17 00:00:00 2001 From: Mouad Debbar Date: Wed, 21 Dec 2022 09:49:29 -0500 Subject: [PATCH 01/16] [web] New gn for building CanvasKit --- third_party/canvaskit/BUILD.gn | 16 ++++ third_party/canvaskit/gn | 145 +++++++++++++++++++++++++++++++++ 2 files changed, 161 insertions(+) create mode 100644 third_party/canvaskit/BUILD.gn create mode 100755 third_party/canvaskit/gn diff --git a/third_party/canvaskit/BUILD.gn b/third_party/canvaskit/BUILD.gn new file mode 100644 index 0000000000000..cacbad3c6f318 --- /dev/null +++ b/third_party/canvaskit/BUILD.gn @@ -0,0 +1,16 @@ +# Copyright 2022 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. + +import("//build/toolchain/clang.gni") +import("//flutter/common/config.gni") + +declare_args() { + build_custom_canvaskit = false +} + +if (build_custom_canvaskit) { + group("canvaskit") { + deps = [ "//third_party/skia/modules/canvaskit" ] + } +} diff --git a/third_party/canvaskit/gn b/third_party/canvaskit/gn new file mode 100755 index 0000000000000..6a5c169eabd03 --- /dev/null +++ b/third_party/canvaskit/gn @@ -0,0 +1,145 @@ +#!/usr/bin/env vpython3 +# 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. + +import argparse +import os +import subprocess +import sys + + +SRC_ROOT = os.path.dirname( + os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +) + +def to_gn_args(args): + return { + 'build_custom_canvaskit': True, + + 'target_os': 'wasm', + 'target_cpu': 'wasm', + 'is_clang': True, + 'use_clang_static_analyzer': False, + + # Image encoders + 'skia_use_libjpeg_turbo_encode': False, + 'skia_use_libpng_encode': True, + 'skia_use_libwebp_encode': False, + # Image decoders + 'skia_use_libjpeg_turbo_decode': args.decoders, + 'skia_use_libpng_decode': args.decoders, + 'skia_use_libwebp_decode': args.decoders, + + # Font + 'skia_use_freetype': True, + 'skia_use_harfbuzz': True, + 'skia_use_fontconfig': False, + 'skia_enable_fontmgr_custom_directory': False, + 'skia_enable_fontmgr_custom_embedded': True, + 'skia_enable_fontmgr_custom_empty': True, + 'skia_fontmgr_factory': '//third_party/skia:fontmgr_custom_empty_factory', + 'skia_canvaskit_enable_font': True, + 'skia_canvaskit_enable_embedded_font': False, + 'skia_canvaskit_enable_alias_font': True, + + 'is_official_build': True, + 'is_component_build': False, + 'skia_enable_flutter_defines': True, + 'skia_use_angle': False, + 'skia_use_dng_sdk': False, + 'skia_use_expat': False, + 'skia_use_vulkan': False, + 'skia_use_webgpu': False, + 'skia_use_libheif': False, + 'skia_use_lua': False, + 'skia_use_wuffs': True, + 'skia_use_zlib': True, + 'skia_gl_standard': 'webgl', + 'skia_enable_gpu': True, + 'skia_enable_sksl_tracing': False, + 'skia_use_libheif': False, + 'skia_enable_skshaper': True, + 'skia_enable_skparagraph': True, + + 'skia_canvaskit_force_tracing': False, + 'skia_canvaskit_enable_skp_serialization': True, + 'skia_canvaskit_enable_effects_deserialization': False, + 'skia_canvaskit_enable_skottie': False, + 'skia_canvaskit_include_viewer': False, + 'skia_canvaskit_enable_particles': False, + 'skia_canvaskit_enable_pathops': True, + 'skia_canvaskit_enable_rt_shader': True, + 'skia_canvaskit_enable_matrix_helper': False, + 'skia_canvaskit_enable_canvas_bindings': False, + 'skia_canvaskit_legacy_draw_vertices_blend_mode': False, + 'skia_canvaskit_enable_debugger': False, + 'skia_canvaskit_enable_paragraph': True, + 'skia_canvaskit_enable_webgl': True, + 'skia_canvaskit_enable_webgpu': False, + + 'is_debug': args.runtime_mode == 'debug', + 'skia_canvaskit_profile_build': args.runtime_mode == 'profile' or args.runtime_mode == 'debug', + + # ICU flags + 'skia_use_icu': args.icu, + 'skia_use_client_icu': not args.icu, + 'skia_icu_bidi_dir': '//third_party/icu', + # This is consumed by //third_party/icu rather than Skia. + 'icu_use_data_file': False, + } + + +def parse_args(args): + args = args[1:] + parser = argparse.ArgumentParser(description='A script to run `gn gen` to build CanvasKit.') + + parser.add_argument('out_dir', help='The output directory') + parser.add_argument('--runtime-mode', required=True, help='The runtime mode ("debug", "profile", "release")') + parser.add_argument('--no-icu', dest='icu', default=True, action='store_false', help='Build CanvasKit without ICU') + parser.add_argument('--no-decoders', dest='decoders', default=True, action='store_false', help='Build CanvasKit without image decoders') + parser.add_argument('--verbose', default=False, action='store_true', help='Whether to print verbose output') + + return parser.parse_args(args) + +def to_command_line(gn_args): + """Converts the arguments dictionary to a list of command-line arguments. + + Args: + gn_args: GN arguments dictionary generated by to_gn_args(). + """ + + def merge(key, value): + if isinstance(value, bool): + return '%s=%s' % (key, 'true' if value else 'false') + return '%s="%s"' % (key, value) + + return [merge(x, y) for x, y in gn_args.items()] + +def main(argv): + args = parse_args(argv) + + exe = '.exe' if sys.platform.startswith(('cygwin', 'win')) else '' + command = [ + '%s/flutter/third_party/gn/gn%s' % (SRC_ROOT, exe), + 'gen', + '--check', + args.out_dir, + '--args=%s' % ' '.join(to_command_line(to_gn_args(args))), + ] + + if args.verbose: + command.append('-v') + + print('Generating CanvasKit in: %s' % args.out_dir) + try: + gn_call_result = subprocess.call(command, cwd=SRC_ROOT) + except subprocess.CalledProcessError as exc: + print('Failed to generate gn files: ', exc.returncode, exc.output) + sys.exit(1) + + return gn_call_result + + +if __name__ == '__main__': + sys.exit(main(sys.argv)) From fbcaf7de52e71b59c5e35336b3310485d3659278 Mon Sep 17 00:00:00 2001 From: Mouad Debbar Date: Mon, 19 Dec 2022 12:07:40 -0500 Subject: [PATCH 02/16] Use toolchain_args to override CanvasKit gn args --- third_party/canvaskit/BUILD.gn | 16 ---- third_party/canvaskit/gn | 145 --------------------------------- tools/gn | 1 - wasm/BUILD.gn | 13 +++ web_sdk/BUILD.gn | 3 +- 5 files changed, 15 insertions(+), 163 deletions(-) delete mode 100644 third_party/canvaskit/BUILD.gn delete mode 100755 third_party/canvaskit/gn diff --git a/third_party/canvaskit/BUILD.gn b/third_party/canvaskit/BUILD.gn deleted file mode 100644 index cacbad3c6f318..0000000000000 --- a/third_party/canvaskit/BUILD.gn +++ /dev/null @@ -1,16 +0,0 @@ -# Copyright 2022 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. - -import("//build/toolchain/clang.gni") -import("//flutter/common/config.gni") - -declare_args() { - build_custom_canvaskit = false -} - -if (build_custom_canvaskit) { - group("canvaskit") { - deps = [ "//third_party/skia/modules/canvaskit" ] - } -} diff --git a/third_party/canvaskit/gn b/third_party/canvaskit/gn deleted file mode 100755 index 6a5c169eabd03..0000000000000 --- a/third_party/canvaskit/gn +++ /dev/null @@ -1,145 +0,0 @@ -#!/usr/bin/env vpython3 -# 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. - -import argparse -import os -import subprocess -import sys - - -SRC_ROOT = os.path.dirname( - os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) -) - -def to_gn_args(args): - return { - 'build_custom_canvaskit': True, - - 'target_os': 'wasm', - 'target_cpu': 'wasm', - 'is_clang': True, - 'use_clang_static_analyzer': False, - - # Image encoders - 'skia_use_libjpeg_turbo_encode': False, - 'skia_use_libpng_encode': True, - 'skia_use_libwebp_encode': False, - # Image decoders - 'skia_use_libjpeg_turbo_decode': args.decoders, - 'skia_use_libpng_decode': args.decoders, - 'skia_use_libwebp_decode': args.decoders, - - # Font - 'skia_use_freetype': True, - 'skia_use_harfbuzz': True, - 'skia_use_fontconfig': False, - 'skia_enable_fontmgr_custom_directory': False, - 'skia_enable_fontmgr_custom_embedded': True, - 'skia_enable_fontmgr_custom_empty': True, - 'skia_fontmgr_factory': '//third_party/skia:fontmgr_custom_empty_factory', - 'skia_canvaskit_enable_font': True, - 'skia_canvaskit_enable_embedded_font': False, - 'skia_canvaskit_enable_alias_font': True, - - 'is_official_build': True, - 'is_component_build': False, - 'skia_enable_flutter_defines': True, - 'skia_use_angle': False, - 'skia_use_dng_sdk': False, - 'skia_use_expat': False, - 'skia_use_vulkan': False, - 'skia_use_webgpu': False, - 'skia_use_libheif': False, - 'skia_use_lua': False, - 'skia_use_wuffs': True, - 'skia_use_zlib': True, - 'skia_gl_standard': 'webgl', - 'skia_enable_gpu': True, - 'skia_enable_sksl_tracing': False, - 'skia_use_libheif': False, - 'skia_enable_skshaper': True, - 'skia_enable_skparagraph': True, - - 'skia_canvaskit_force_tracing': False, - 'skia_canvaskit_enable_skp_serialization': True, - 'skia_canvaskit_enable_effects_deserialization': False, - 'skia_canvaskit_enable_skottie': False, - 'skia_canvaskit_include_viewer': False, - 'skia_canvaskit_enable_particles': False, - 'skia_canvaskit_enable_pathops': True, - 'skia_canvaskit_enable_rt_shader': True, - 'skia_canvaskit_enable_matrix_helper': False, - 'skia_canvaskit_enable_canvas_bindings': False, - 'skia_canvaskit_legacy_draw_vertices_blend_mode': False, - 'skia_canvaskit_enable_debugger': False, - 'skia_canvaskit_enable_paragraph': True, - 'skia_canvaskit_enable_webgl': True, - 'skia_canvaskit_enable_webgpu': False, - - 'is_debug': args.runtime_mode == 'debug', - 'skia_canvaskit_profile_build': args.runtime_mode == 'profile' or args.runtime_mode == 'debug', - - # ICU flags - 'skia_use_icu': args.icu, - 'skia_use_client_icu': not args.icu, - 'skia_icu_bidi_dir': '//third_party/icu', - # This is consumed by //third_party/icu rather than Skia. - 'icu_use_data_file': False, - } - - -def parse_args(args): - args = args[1:] - parser = argparse.ArgumentParser(description='A script to run `gn gen` to build CanvasKit.') - - parser.add_argument('out_dir', help='The output directory') - parser.add_argument('--runtime-mode', required=True, help='The runtime mode ("debug", "profile", "release")') - parser.add_argument('--no-icu', dest='icu', default=True, action='store_false', help='Build CanvasKit without ICU') - parser.add_argument('--no-decoders', dest='decoders', default=True, action='store_false', help='Build CanvasKit without image decoders') - parser.add_argument('--verbose', default=False, action='store_true', help='Whether to print verbose output') - - return parser.parse_args(args) - -def to_command_line(gn_args): - """Converts the arguments dictionary to a list of command-line arguments. - - Args: - gn_args: GN arguments dictionary generated by to_gn_args(). - """ - - def merge(key, value): - if isinstance(value, bool): - return '%s=%s' % (key, 'true' if value else 'false') - return '%s="%s"' % (key, value) - - return [merge(x, y) for x, y in gn_args.items()] - -def main(argv): - args = parse_args(argv) - - exe = '.exe' if sys.platform.startswith(('cygwin', 'win')) else '' - command = [ - '%s/flutter/third_party/gn/gn%s' % (SRC_ROOT, exe), - 'gen', - '--check', - args.out_dir, - '--args=%s' % ' '.join(to_command_line(to_gn_args(args))), - ] - - if args.verbose: - command.append('-v') - - print('Generating CanvasKit in: %s' % args.out_dir) - try: - gn_call_result = subprocess.call(command, cwd=SRC_ROOT) - except subprocess.CalledProcessError as exc: - print('Failed to generate gn files: ', exc.returncode, exc.output) - sys.exit(1) - - return gn_call_result - - -if __name__ == '__main__': - sys.exit(main(sys.argv)) diff --git a/tools/gn b/tools/gn index 21e2c2af0e6c0..49d78b5c8da0c 100755 --- a/tools/gn +++ b/tools/gn @@ -617,7 +617,6 @@ def to_gn_wasm_args(args, gn_args): gn_args['skia_gl_standard'] = 'webgl' gn_args['skia_enable_gpu'] = True gn_args['skia_enable_sksl_tracing'] = False - gn_args['skia_use_icu'] = True gn_args['icu_use_data_file'] = False gn_args['skia_use_freetype'] = True gn_args['skia_use_harfbuzz'] = True diff --git a/wasm/BUILD.gn b/wasm/BUILD.gn index f4d6a54ee5e76..3a00fcc812cd4 100644 --- a/wasm/BUILD.gn +++ b/wasm/BUILD.gn @@ -6,6 +6,7 @@ # //flutter/BUILD.gn pulls in Flutter SDK dependencies which will crash # when the target CPU is WASM. +import("//build/toolchain/wasm.gni") import("//flutter/common/config.gni") # This is the default target when building when the target CPU is WASM. @@ -14,3 +15,15 @@ group("wasm") { deps = [ "//flutter/web_sdk" ] } } + +wasm_toolchain("canvaskit") { + extra_toolchain_args = { + skia_use_icu = true + } +} + +wasm_toolchain("canvaskit_lite") { + extra_toolchain_args = { + skia_use_icu = false + } +} diff --git a/web_sdk/BUILD.gn b/web_sdk/BUILD.gn index 42ac8a5dece79..5a1caab38ac7f 100644 --- a/web_sdk/BUILD.gn +++ b/web_sdk/BUILD.gn @@ -559,7 +559,8 @@ if (!is_fuchsia) { ] + web_engine_libraries if (build_canvaskit) { - deps += [ "//third_party/skia/modules/canvaskit" ] + deps += + [ "//third_party/skia/modules/canvaskit(//flutter/wasm:canvaskit)" ] } # flutter_ddc_modules From bb376ccd9934ab7beccaeecdb75c28892cd6f391 Mon Sep 17 00:00:00 2001 From: Mouad Debbar Date: Wed, 21 Dec 2022 17:45:23 -0500 Subject: [PATCH 03/16] Use correct path for the generated canvaskit files --- web_sdk/BUILD.gn | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web_sdk/BUILD.gn b/web_sdk/BUILD.gn index 5a1caab38ac7f..53d06566df733 100644 --- a/web_sdk/BUILD.gn +++ b/web_sdk/BUILD.gn @@ -603,11 +603,11 @@ if (!is_fuchsia) { if (build_canvaskit) { tmp_files += [ { - source = rebase_path("$root_out_dir/canvaskit.js") + source = rebase_path("$root_out_dir/canvaskit/canvaskit.js") destination = "canvaskit/canvaskit.js" }, { - source = rebase_path("$root_out_dir/canvaskit.wasm") + source = rebase_path("$root_out_dir/canvaskit/canvaskit.wasm") destination = "canvaskit/canvaskit.wasm" }, ] From 533864aa755c72aa0372bc5fad873430b0a07a96 Mon Sep 17 00:00:00 2001 From: Mouad Debbar Date: Thu, 22 Dec 2022 14:41:13 -0500 Subject: [PATCH 04/16] Put toolchain close to target --- DEPS | 4 ++-- third_party/canvaskit/BUILD.gn | 27 +++++++++++++++++++++++++++ tools/gn | 3 +++ web_sdk/BUILD.gn | 7 +++++-- 4 files changed, 37 insertions(+), 4 deletions(-) create mode 100644 third_party/canvaskit/BUILD.gn diff --git a/DEPS b/DEPS index 52ffa00a57a9a..3e240c0d5b928 100644 --- a/DEPS +++ b/DEPS @@ -18,7 +18,7 @@ vars = { 'llvm_git': 'https://llvm.googlesource.com', # OCMock is for testing only so there is no google clone 'ocmock_git': 'https://github.com/erikdoe/ocmock.git', - 'skia_revision': 'cd149aaa33bd51e842c22f28d8c5bd20bf06a842', + 'skia_revision': 'd92853ebd3175fdefec05a565aa31199335a34ae', # WARNING: DO NOT EDIT canvaskit_cipd_instance MANUALLY # See `lib/web_ui/README.md` for how to roll CanvasKit to a new version. @@ -236,7 +236,7 @@ allowed_hosts = [ ] deps = { - 'src': 'https://github.com/flutter/buildroot.git' + '@' + 'b2ab6e1908b3eb268d2a2cab1ec5b63f38e1bc11', + 'src': 'https://github.com/flutter/buildroot.git' + '@' + 'fbaac6aad455f77ccafc4d3f15bad31856fbcb5b', # Fuchsia compatibility # diff --git a/third_party/canvaskit/BUILD.gn b/third_party/canvaskit/BUILD.gn new file mode 100644 index 0000000000000..015571e1610bd --- /dev/null +++ b/third_party/canvaskit/BUILD.gn @@ -0,0 +1,27 @@ +# Copyright 2022 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. + +import("//build/toolchain/wasm.gni") + +wasm_toolchain("canvaskit") { + extra_toolchain_args = { + skia_use_icu = true + skia_use_client_icu = false + } +} + +group("canvaskit") { + public_deps = [ "//third_party/skia/modules/canvaskit(:canvaskit)" ] +} + +wasm_toolchain("canvaskit_lite") { + extra_toolchain_args = { + skia_use_icu = false + skia_use_client_icu = true + } +} + +group("canvaskit_lite") { + public_deps = [ "//third_party/skia/modules/canvaskit(:canvaskit_lite)" ] +} diff --git a/tools/gn b/tools/gn index 49d78b5c8da0c..92756754130bd 100755 --- a/tools/gn +++ b/tools/gn @@ -649,12 +649,15 @@ def to_gn_wasm_args(args, gn_args): gn_args['skia_canvaskit_enable_webgpu'] = False is_profile_build = args.runtime_mode == 'profile' or args.runtime_mode == 'debug' gn_args['skia_canvaskit_profile_build'] = is_profile_build + gn_args['skia_icu_bidi_dir'] = '//third_party/icu' gn_args['flutter_prebuilt_dart_sdk'] = True # TODO(jacksongardner): Make this based off of the input argument rather # than forced to true, once the recipes are updated. # https://github.com/flutter/flutter/issues/113303 gn_args['build_canvaskit'] = True + # TODO(mdebbar): Read this from an input argument. + gn_args['build_canvaskit_lite'] = False gn_args['flutter_build_web_sdk'] = True diff --git a/web_sdk/BUILD.gn b/web_sdk/BUILD.gn index 53d06566df733..52d9b8c3cb959 100644 --- a/web_sdk/BUILD.gn +++ b/web_sdk/BUILD.gn @@ -8,6 +8,7 @@ import("//third_party/dart/build/dart/dart_action.gni") declare_args() { build_canvaskit = false + build_canvaskit_lite = false archive_flutter_web_sdk = true } @@ -559,8 +560,10 @@ if (!is_fuchsia) { ] + web_engine_libraries if (build_canvaskit) { - deps += - [ "//third_party/skia/modules/canvaskit(//flutter/wasm:canvaskit)" ] + deps += [ "//flutter/third_party/canvaskit:canvaskit" ] + } + if (build_canvaskit_lite) { + deps += [ "//flutter/third_party/canvaskit:canvaskit_lite" ] } # flutter_ddc_modules From b59bf8c39ceff420556157ca2832e6d3a1862ec8 Mon Sep 17 00:00:00 2001 From: Mouad Debbar Date: Thu, 22 Dec 2022 14:44:15 -0500 Subject: [PATCH 05/16] remove extra toolchains --- wasm/BUILD.gn | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/wasm/BUILD.gn b/wasm/BUILD.gn index 3a00fcc812cd4..12894b8d937ff 100644 --- a/wasm/BUILD.gn +++ b/wasm/BUILD.gn @@ -15,15 +15,3 @@ group("wasm") { deps = [ "//flutter/web_sdk" ] } } - -wasm_toolchain("canvaskit") { - extra_toolchain_args = { - skia_use_icu = true - } -} - -wasm_toolchain("canvaskit_lite") { - extra_toolchain_args = { - skia_use_icu = false - } -} From 05725339669cd206bf924449e03d8f05edd21113 Mon Sep 17 00:00:00 2001 From: Mouad Debbar Date: Thu, 22 Dec 2022 14:44:58 -0500 Subject: [PATCH 06/16] remove extra import --- wasm/BUILD.gn | 1 - 1 file changed, 1 deletion(-) diff --git a/wasm/BUILD.gn b/wasm/BUILD.gn index 12894b8d937ff..f4d6a54ee5e76 100644 --- a/wasm/BUILD.gn +++ b/wasm/BUILD.gn @@ -6,7 +6,6 @@ # //flutter/BUILD.gn pulls in Flutter SDK dependencies which will crash # when the target CPU is WASM. -import("//build/toolchain/wasm.gni") import("//flutter/common/config.gni") # This is the default target when building when the target CPU is WASM. From ea0e1920e8b22e4fb1d1d97d35bb049a541c9dad Mon Sep 17 00:00:00 2001 From: Mouad Debbar Date: Thu, 22 Dec 2022 14:46:24 -0500 Subject: [PATCH 07/16] add canvaskit_lite to archive --- web_sdk/BUILD.gn | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/web_sdk/BUILD.gn b/web_sdk/BUILD.gn index 52d9b8c3cb959..24a928c067ce1 100644 --- a/web_sdk/BUILD.gn +++ b/web_sdk/BUILD.gn @@ -615,6 +615,18 @@ if (!is_fuchsia) { }, ] } + if (build_canvaskit_lite) { + tmp_files += [ + { + source = rebase_path("$root_out_dir/canvaskit_lite/canvaskit.js") + destination = "canvaskit_lite/canvaskit.js" + }, + { + source = rebase_path("$root_out_dir/canvaskit_lite/canvaskit.wasm") + destination = "canvaskit_lite/canvaskit.wasm" + }, + ] + } files = tmp_files } } From 8783c22ebc5212e85dd9825342ccb28bfcc6b0c0 Mon Sep 17 00:00:00 2001 From: Mouad Debbar Date: Thu, 22 Dec 2022 15:27:34 -0500 Subject: [PATCH 08/16] fix local canvaskit path in tests --- lib/web_ui/dev/steps/compile_tests_step.dart | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/web_ui/dev/steps/compile_tests_step.dart b/lib/web_ui/dev/steps/compile_tests_step.dart index b1d221af092c9..a5691d085a9f8 100644 --- a/lib/web_ui/dev/steps/compile_tests_step.dart +++ b/lib/web_ui/dev/steps/compile_tests_step.dart @@ -159,6 +159,7 @@ Future copyCanvasKitFiles({bool useLocalCanvasKit = false}) async { // If CanvasKit has been built locally, use that instead of the CIPD version. final io.File localCanvasKitWasm = io.File(pathlib.join( environment.wasmReleaseOutDir.path, + 'canvaskit', 'canvaskit.wasm', )); final bool builtLocalCanvasKit = localCanvasKitWasm.existsSync(); @@ -178,6 +179,7 @@ Future copyCanvasKitFiles({bool useLocalCanvasKit = false}) async { localCanvasKitWasm, io.File(pathlib.join( environment.wasmReleaseOutDir.path, + 'canvaskit', 'canvaskit.js', )), ]; From 5cb2d247535646e3bb2e0026fafba865b9f09ce4 Mon Sep 17 00:00:00 2001 From: Mouad Debbar Date: Wed, 28 Dec 2022 16:26:17 -0500 Subject: [PATCH 09/16] add some guards using visibility and asserts --- third_party/canvaskit/BUILD.gn | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/third_party/canvaskit/BUILD.gn b/third_party/canvaskit/BUILD.gn index 015571e1610bd..c2067616dc7fc 100644 --- a/third_party/canvaskit/BUILD.gn +++ b/third_party/canvaskit/BUILD.gn @@ -4,7 +4,10 @@ import("//build/toolchain/wasm.gni") +# This toolchain is only to be used by the canvaskit group below. wasm_toolchain("canvaskit") { + # Prevent accidental use of this toolchain. + assert(target_name == "canvaskit", "Only :canvaskit can use this toolchain.") extra_toolchain_args = { skia_use_icu = true skia_use_client_icu = false @@ -12,10 +15,15 @@ wasm_toolchain("canvaskit") { } group("canvaskit") { + visibility = [ "//flutter/web_sdk:*" ] public_deps = [ "//third_party/skia/modules/canvaskit(:canvaskit)" ] } +# This toolchain is only to be used by the canvaskit_lite group below. wasm_toolchain("canvaskit_lite") { + # Prevent accidental use of this toolchain. + assert(target_name == "canvaskit_lite", + "Only :canvaskit_lite can use this toolchain.") extra_toolchain_args = { skia_use_icu = false skia_use_client_icu = true @@ -23,5 +31,6 @@ wasm_toolchain("canvaskit_lite") { } group("canvaskit_lite") { + visibility = [ "//flutter/web_sdk:*" ] public_deps = [ "//third_party/skia/modules/canvaskit(:canvaskit_lite)" ] } From 098ee39afc79d4e9a829dbb023a1448d83908272 Mon Sep 17 00:00:00 2001 From: Mouad Debbar Date: Wed, 4 Jan 2023 12:58:57 -0500 Subject: [PATCH 10/16] renames --- third_party/canvaskit/BUILD.gn | 20 ++++++++------------ tools/gn | 2 +- web_sdk/BUILD.gn | 18 +++++++++--------- 3 files changed, 18 insertions(+), 22 deletions(-) diff --git a/third_party/canvaskit/BUILD.gn b/third_party/canvaskit/BUILD.gn index c2067616dc7fc..5788c7be282bd 100644 --- a/third_party/canvaskit/BUILD.gn +++ b/third_party/canvaskit/BUILD.gn @@ -1,36 +1,32 @@ -# Copyright 2022 The Flutter Authors. All rights reserved. +# 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. import("//build/toolchain/wasm.gni") -# This toolchain is only to be used by the canvaskit group below. +# This toolchain is only to be used by canvaskit_group below. wasm_toolchain("canvaskit") { - # Prevent accidental use of this toolchain. - assert(target_name == "canvaskit", "Only :canvaskit can use this toolchain.") extra_toolchain_args = { skia_use_icu = true skia_use_client_icu = false } } -group("canvaskit") { +group("canvaskit_group") { visibility = [ "//flutter/web_sdk:*" ] public_deps = [ "//third_party/skia/modules/canvaskit(:canvaskit)" ] } -# This toolchain is only to be used by the canvaskit_lite group below. -wasm_toolchain("canvaskit_lite") { - # Prevent accidental use of this toolchain. - assert(target_name == "canvaskit_lite", - "Only :canvaskit_lite can use this toolchain.") +# This toolchain is only to be used by canvaskit_chromium_group below. +wasm_toolchain("canvaskit_chromium") { extra_toolchain_args = { skia_use_icu = false skia_use_client_icu = true } } -group("canvaskit_lite") { +group("canvaskit_chromium_group") { visibility = [ "//flutter/web_sdk:*" ] - public_deps = [ "//third_party/skia/modules/canvaskit(:canvaskit_lite)" ] + public_deps = + [ "//third_party/skia/modules/canvaskit(:canvaskit_chromium)" ] } diff --git a/tools/gn b/tools/gn index 92756754130bd..410ce30113289 100755 --- a/tools/gn +++ b/tools/gn @@ -657,7 +657,7 @@ def to_gn_wasm_args(args, gn_args): # https://github.com/flutter/flutter/issues/113303 gn_args['build_canvaskit'] = True # TODO(mdebbar): Read this from an input argument. - gn_args['build_canvaskit_lite'] = False + gn_args['build_canvaskit_chromium'] = False gn_args['flutter_build_web_sdk'] = True diff --git a/web_sdk/BUILD.gn b/web_sdk/BUILD.gn index 24a928c067ce1..e168f4ab5b2b2 100644 --- a/web_sdk/BUILD.gn +++ b/web_sdk/BUILD.gn @@ -560,10 +560,10 @@ if (!is_fuchsia) { ] + web_engine_libraries if (build_canvaskit) { - deps += [ "//flutter/third_party/canvaskit:canvaskit" ] + deps += [ "//flutter/third_party/canvaskit:canvaskit_group" ] } if (build_canvaskit_lite) { - deps += [ "//flutter/third_party/canvaskit:canvaskit_lite" ] + deps += [ "//flutter/third_party/canvaskit:canvaskit_chromium_group" ] } # flutter_ddc_modules @@ -607,23 +607,23 @@ if (!is_fuchsia) { tmp_files += [ { source = rebase_path("$root_out_dir/canvaskit/canvaskit.js") - destination = "canvaskit/canvaskit.js" + destination = "flutter_web_sdk/canvaskit/canvaskit.js" }, { source = rebase_path("$root_out_dir/canvaskit/canvaskit.wasm") - destination = "canvaskit/canvaskit.wasm" + destination = "flutter_web_sdk/canvaskit/canvaskit.wasm" }, ] } - if (build_canvaskit_lite) { + if (build_canvaskit_chromium) { tmp_files += [ { - source = rebase_path("$root_out_dir/canvaskit_lite/canvaskit.js") - destination = "canvaskit_lite/canvaskit.js" + source = rebase_path("$root_out_dir/canvaskit_chromium/canvaskit.js") + destination = "flutter_web_sdk/canvaskit_chromium/canvaskit.js" }, { - source = rebase_path("$root_out_dir/canvaskit_lite/canvaskit.wasm") - destination = "canvaskit_lite/canvaskit.wasm" + source = rebase_path("$root_out_dir/canvaskit_chromium/canvaskit.wasm") + destination = "flutter_web_sdk/canvaskit_chromium/canvaskit.wasm" }, ] } From 7fe057b965dd45d42d2c78dcee186f9b0825760c Mon Sep 17 00:00:00 2001 From: Mouad Debbar Date: Tue, 17 Jan 2023 14:38:50 -0500 Subject: [PATCH 11/16] formatting --- third_party/canvaskit/BUILD.gn | 3 +-- web_sdk/BUILD.gn | 3 ++- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/third_party/canvaskit/BUILD.gn b/third_party/canvaskit/BUILD.gn index 5788c7be282bd..4fd86632d88ea 100644 --- a/third_party/canvaskit/BUILD.gn +++ b/third_party/canvaskit/BUILD.gn @@ -27,6 +27,5 @@ wasm_toolchain("canvaskit_chromium") { group("canvaskit_chromium_group") { visibility = [ "//flutter/web_sdk:*" ] - public_deps = - [ "//third_party/skia/modules/canvaskit(:canvaskit_chromium)" ] + public_deps = [ "//third_party/skia/modules/canvaskit(:canvaskit_chromium)" ] } diff --git a/web_sdk/BUILD.gn b/web_sdk/BUILD.gn index 3d69c52a4082d..148cd2e7fc897 100644 --- a/web_sdk/BUILD.gn +++ b/web_sdk/BUILD.gn @@ -624,7 +624,8 @@ if (!is_fuchsia) { destination = "flutter_web_sdk/canvaskit_chromium/canvaskit.js" }, { - source = rebase_path("$root_out_dir/canvaskit_chromium/canvaskit.wasm") + source = + rebase_path("$root_out_dir/canvaskit_chromium/canvaskit.wasm") destination = "flutter_web_sdk/canvaskit_chromium/canvaskit.wasm" }, ] From 3ea622c774888564a101c3e57238624979ca5f15 Mon Sep 17 00:00:00 2001 From: Mouad Debbar Date: Tue, 17 Jan 2023 14:45:09 -0500 Subject: [PATCH 12/16] rename mistake --- tools/gn | 1 - web_sdk/BUILD.gn | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/tools/gn b/tools/gn index 410ce30113289..613b9ca80cbd0 100755 --- a/tools/gn +++ b/tools/gn @@ -649,7 +649,6 @@ def to_gn_wasm_args(args, gn_args): gn_args['skia_canvaskit_enable_webgpu'] = False is_profile_build = args.runtime_mode == 'profile' or args.runtime_mode == 'debug' gn_args['skia_canvaskit_profile_build'] = is_profile_build - gn_args['skia_icu_bidi_dir'] = '//third_party/icu' gn_args['flutter_prebuilt_dart_sdk'] = True # TODO(jacksongardner): Make this based off of the input argument rather diff --git a/web_sdk/BUILD.gn b/web_sdk/BUILD.gn index 148cd2e7fc897..994a9cc61b700 100644 --- a/web_sdk/BUILD.gn +++ b/web_sdk/BUILD.gn @@ -8,7 +8,7 @@ import("//third_party/dart/build/dart/dart_action.gni") declare_args() { build_canvaskit = false - build_canvaskit_lite = false + build_canvaskit_chromium = false archive_flutter_web_sdk = true } @@ -564,7 +564,7 @@ if (!is_fuchsia) { if (build_canvaskit) { deps += [ "//flutter/third_party/canvaskit:canvaskit_group" ] } - if (build_canvaskit_lite) { + if (build_canvaskit_chromium) { deps += [ "//flutter/third_party/canvaskit:canvaskit_chromium_group" ] } From 3ce404576cc6fadb961e371fdf33eb68d32e6464 Mon Sep 17 00:00:00 2001 From: Mouad Debbar Date: Wed, 18 Jan 2023 17:13:00 -0500 Subject: [PATCH 13/16] Add github issue to the TODO --- tools/gn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/gn b/tools/gn index 613b9ca80cbd0..9bde919e5e601 100755 --- a/tools/gn +++ b/tools/gn @@ -655,7 +655,7 @@ def to_gn_wasm_args(args, gn_args): # than forced to true, once the recipes are updated. # https://github.com/flutter/flutter/issues/113303 gn_args['build_canvaskit'] = True - # TODO(mdebbar): Read this from an input argument. + # TODO(mdebbar): Read this from an input argument. https://github.com/flutter/flutter/issues/118744 gn_args['build_canvaskit_chromium'] = False gn_args['flutter_build_web_sdk'] = True From 59e7fc894f7ec7bcfd76ea222dcaffd9ac7a6a81 Mon Sep 17 00:00:00 2001 From: Mouad Debbar Date: Thu, 19 Jan 2023 09:23:36 -0500 Subject: [PATCH 14/16] Update buildroot sha --- DEPS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DEPS b/DEPS index c91fca13e7554..08bf89be02076 100644 --- a/DEPS +++ b/DEPS @@ -236,7 +236,7 @@ allowed_hosts = [ ] deps = { - 'src': 'https://github.com/flutter/buildroot.git' + '@' + 'fbaac6aad455f77ccafc4d3f15bad31856fbcb5b', + 'src': 'https://github.com/flutter/buildroot.git' + '@' + '5ca962cdf56fa8e7313a37237d9f1d7e7466b93b', # Fuchsia compatibility # From b15ae6e20acc3af0674fbceaaefee9531f7efd49 Mon Sep 17 00:00:00 2001 From: Mouad Debbar Date: Fri, 20 Jan 2023 14:34:15 -0500 Subject: [PATCH 15/16] clang-tidy error --- tools/gn | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/gn b/tools/gn index fe82e21149c03..90e91b8bcbc42 100755 --- a/tools/gn +++ b/tools/gn @@ -658,7 +658,8 @@ def to_gn_wasm_args(args, gn_args): # than forced to true, once the recipes are updated. # https://github.com/flutter/flutter/issues/113303 gn_args['build_canvaskit'] = True - # TODO(mdebbar): Read this from an input argument. https://github.com/flutter/flutter/issues/118744 + # TODO(mdebbar): Read this from an input argument. + # https://github.com/flutter/flutter/issues/118744 gn_args['build_canvaskit_chromium'] = False gn_args['flutter_build_web_sdk'] = True From f2f0ba03087384340be7c3daeb8e1aecd7250bfa Mon Sep 17 00:00:00 2001 From: Mouad Debbar Date: Mon, 23 Jan 2023 14:44:39 -0500 Subject: [PATCH 16/16] skip canvaskit targets when not needed --- third_party/canvaskit/BUILD.gn | 42 ++++++++++++++++------------- third_party/canvaskit/canvaskit.gni | 8 ++++++ web_sdk/BUILD.gn | 3 +-- 3 files changed, 33 insertions(+), 20 deletions(-) create mode 100644 third_party/canvaskit/canvaskit.gni diff --git a/third_party/canvaskit/BUILD.gn b/third_party/canvaskit/BUILD.gn index 4fd86632d88ea..45ab6a223da00 100644 --- a/third_party/canvaskit/BUILD.gn +++ b/third_party/canvaskit/BUILD.gn @@ -3,29 +3,35 @@ # found in the LICENSE file. import("//build/toolchain/wasm.gni") +import("canvaskit.gni") -# This toolchain is only to be used by canvaskit_group below. -wasm_toolchain("canvaskit") { - extra_toolchain_args = { - skia_use_icu = true - skia_use_client_icu = false +if (build_canvaskit) { + # This toolchain is only to be used by canvaskit_group below. + wasm_toolchain("canvaskit") { + extra_toolchain_args = { + skia_use_icu = true + skia_use_client_icu = false + } } -} -group("canvaskit_group") { - visibility = [ "//flutter/web_sdk:*" ] - public_deps = [ "//third_party/skia/modules/canvaskit(:canvaskit)" ] + group("canvaskit_group") { + visibility = [ "//flutter/web_sdk:*" ] + public_deps = [ "//third_party/skia/modules/canvaskit(:canvaskit)" ] + } } -# This toolchain is only to be used by canvaskit_chromium_group below. -wasm_toolchain("canvaskit_chromium") { - extra_toolchain_args = { - skia_use_icu = false - skia_use_client_icu = true +if (build_canvaskit_chromium) { + # This toolchain is only to be used by canvaskit_chromium_group below. + wasm_toolchain("canvaskit_chromium") { + extra_toolchain_args = { + skia_use_icu = false + skia_use_client_icu = true + } } -} -group("canvaskit_chromium_group") { - visibility = [ "//flutter/web_sdk:*" ] - public_deps = [ "//third_party/skia/modules/canvaskit(:canvaskit_chromium)" ] + group("canvaskit_chromium_group") { + visibility = [ "//flutter/web_sdk:*" ] + public_deps = + [ "//third_party/skia/modules/canvaskit(:canvaskit_chromium)" ] + } } diff --git a/third_party/canvaskit/canvaskit.gni b/third_party/canvaskit/canvaskit.gni new file mode 100644 index 0000000000000..fdf99e98a2088 --- /dev/null +++ b/third_party/canvaskit/canvaskit.gni @@ -0,0 +1,8 @@ +# 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. + +declare_args() { + build_canvaskit = false + build_canvaskit_chromium = false +} diff --git a/web_sdk/BUILD.gn b/web_sdk/BUILD.gn index 994a9cc61b700..987b16a529211 100644 --- a/web_sdk/BUILD.gn +++ b/web_sdk/BUILD.gn @@ -4,11 +4,10 @@ import("//flutter/build/zip_bundle.gni") import("//flutter/common/config.gni") +import("//flutter/third_party/canvaskit/canvaskit.gni") import("//third_party/dart/build/dart/dart_action.gni") declare_args() { - build_canvaskit = false - build_canvaskit_chromium = false archive_flutter_web_sdk = true }