[bazel] Move CanvasKit configuration options to buildrc

Removing cc_binary_with_flags will make it easier to have
more compiled options (e.g. CPU only build) and conforms
with how we plan to have options.

The supported build configurations will live in buildrc
as sets of flags to turn things on or off.

Change-Id: Idf7f81bce03eae8a6e37e19e35f55a53075cd715
Bug: skia:12541
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/565011
Reviewed-by: Ben Wagner <bungeman@google.com>
diff --git a/.bazelrc b/.bazelrc
index db68f67..816000a 100644
--- a/.bazelrc
+++ b/.bazelrc
@@ -57,6 +57,20 @@
 # CanvasKit flags
 build --flag_alias=ck_enable_fonts=//modules/canvaskit:enable_fonts
 build --flag_alias=ck_disable_fonts=no//modules/canvaskit:enable_fonts
+build --flag_alias=ck_enable_canvas_polyfill=//modules/canvaskit:enable_canvas_polyfill
+build --flag_alias=ck_disable_canvas_polyfill=no//modules/canvaskit:enable_canvas_polyfill
+build --flag_alias=ck_enable_embedded_font=//modules/canvaskit:include_embedded_font
+build --flag_alias=ck_disable_embedded_font=no//modules/canvaskit:include_embedded_font
+build --flag_alias=ck_enable_matrix_js=//modules/canvaskit:include_matrix_js
+build --flag_alias=ck_disable_matrix_js=no//modules/canvaskit:include_matrix_js
+build --flag_alias=ck_enable_skottie=//modules/canvaskit:enable_skottie
+build --flag_alias=ck_disable_skottie=no//modules/canvaskit:enable_skottie
+build --flag_alias=ck_enable_skp_serialization=//modules/canvaskit:enable_skp_serialization
+build --flag_alias=ck_disable_skp_serialization=no//modules/canvaskit:enable_skp_serialization
+build --flag_alias=ck_enable_particles=//modules/canvaskit:enable_particles
+build --flag_alias=ck_disable_particles=no//modules/canvaskit:enable_particles
+build --flag_alias=ck_enable_runtime_effect=//modules/canvaskit:enable_runtime_effect
+build --flag_alias=ck_disable_runtime_effect=no//modules/canvaskit:enable_runtime_effect
 
 # =============================================================================
 # REMOTE BUILD EXECUTION
diff --git a/bazel/buildrc b/bazel/buildrc
index ed6ceb3..18450f0 100644
--- a/bazel/buildrc
+++ b/bazel/buildrc
@@ -50,10 +50,27 @@
 build:debug --compilation_mode=dbg
 
 # See also https://github.com/emscripten-core/emsdk/issues/984 for disabling cc_toolchain_resolution
-build:webgl2_release --config=release --noincompatible_enable_cc_toolchain_resolution
-build:webgl2_debug --config=debug --noincompatible_enable_cc_toolchain_resolution
+build:canvaskit_full --noincompatible_enable_cc_toolchain_resolution \
+                     --include_decoder=gif_decode_codec --include_decoder=jpeg_decode_codec \
+                     --include_decoder=png_decode_codec --include_decoder=webp_decode_codec \
+                     \
+                     --include_encoder=jpeg_encode_codec --include_encoder=png_encode_codec \
+                     --include_encoder=webp_encode_codec \
+                     \
+                     --with_harfbuzz --with_icu --fontmgr_factory=custom_embedded_fontmgr_factory \
+                     --ck_enable_fonts --ck_enable_embedded_font \
+                     \
+                     --disable_tracing --enable_sksl_tracing \
+                     \
+                     --ck_enable_canvas_polyfill --ck_enable_skp_serialization --ck_enable_skottie \
+                     --ck_enable_particles --ck_enable_runtime_effect --ck_enable_matrix_js
+
+build:ck_webgl2 --with_gl_standard=webgl_standard --gpu_backend=gl_backend
+
+build:ck_full_webgl2_release --config=canvaskit_full --config=ck_webgl2 --config=release
+build:ck_full_webgl2_debug --config=canvaskit_full --config=ck_webgl2 --config=debug
 # TODO(kjlubick) We should be able to configure testing on Chrome or Firefox with this.
-build:webgl2_release_chrome --config=webgl2_release
+build:ck_full_webgl2_release_chrome --config=ck_full_webgl2_release
 
 # We only want to enforce IWYU on debug builds because we have some things that are only
 # necessary to include in debug mode (e.g. SkDEBUGCODE), but very rarely something that is
diff --git a/infra/bots/gen_tasks_logic/gen_tasks_logic.go b/infra/bots/gen_tasks_logic/gen_tasks_logic.go
index 4165dbc..847b2a8 100644
--- a/infra/bots/gen_tasks_logic/gen_tasks_logic.go
+++ b/infra/bots/gen_tasks_logic/gen_tasks_logic.go
@@ -2087,7 +2087,7 @@
 	"example_hello_world_dawn":   "//example:hello_world_dawn",
 	"example_hello_world_gl":     "//example:hello_world_gl",
 	"example_hello_world_vulkan": "//example:hello_world_vulkan",
-	"modules_canvaskit_webgl":    "//modules/canvaskit:canvaskit_webgl",
+	"modules_canvaskit":          "//modules/canvaskit:canvaskit",
 	"skia_public":                "//:skia_public",
 }
 
diff --git a/infra/bots/jobs.json b/infra/bots/jobs.json
index d2a1ef6..2cc4bf6 100644
--- a/infra/bots/jobs.json
+++ b/infra/bots/jobs.json
@@ -1,5 +1,5 @@
 [
-  {"name": "BazelBuild-modules_canvaskit_webgl-webgl2_debug-linux_x64"},
+  {"name": "BazelBuild-modules_canvaskit-ck_full_webgl2_debug-linux_x64"},
   {"name": "BazelBuild-example_hello_world_dawn-release-linux_x64",
    "cq_config": {}
    },
@@ -9,7 +9,9 @@
     "cq_config": {}
   },
   {"name": "BazelBuild-skia_public-release-linux_x64"},
-  {"name": "BazelTest-canvaskit_gold-webgl2_release_chrome-linux_x64"},
+  {"name": "BazelTest-canvaskit_gold-ck_full_webgl2_release_chrome-linux_x64",
+    "cq_config": {"location_regexes": ["modules/canvaskit/.*"]}
+  },
   {"name": "Build-Debian9-Clang-arm-Release-Flutter_Android_Docker"},
   {"name": "Build-Debian10-GCC-x86-Debug-Docker"},
   {"name": "Build-Debian10-GCC-x86-Release-Docker"},
diff --git a/infra/bots/tasks.json b/infra/bots/tasks.json
index c678426..7e334e7 100755
--- a/infra/bots/tasks.json
+++ b/infra/bots/tasks.json
@@ -15,9 +15,9 @@
         "BazelBuild-example_hello_world_vulkan-release-linux_x64"
       ]
     },
-    "BazelBuild-modules_canvaskit_webgl-webgl2_debug-linux_x64": {
+    "BazelBuild-modules_canvaskit-ck_full_webgl2_debug-linux_x64": {
       "tasks": [
-        "BazelBuild-modules_canvaskit_webgl-webgl2_debug-linux_x64"
+        "BazelBuild-modules_canvaskit-ck_full_webgl2_debug-linux_x64"
       ]
     },
     "BazelBuild-skia_public-enforce_iwyu-linux_x64": {
@@ -30,9 +30,9 @@
         "BazelBuild-skia_public-release-linux_x64"
       ]
     },
-    "BazelTest-canvaskit_gold-webgl2_release_chrome-linux_x64": {
+    "BazelTest-canvaskit_gold-ck_full_webgl2_release_chrome-linux_x64": {
       "tasks": [
-        "BazelTest-canvaskit_gold-webgl2_release_chrome-linux_x64"
+        "BazelTest-canvaskit_gold-ck_full_webgl2_release_chrome-linux_x64"
       ]
     },
     "Build-Debian10-Clang-arm-Debug-Android": {
@@ -3462,7 +3462,7 @@
       "max_attempts": 1,
       "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com"
     },
-    "BazelBuild-modules_canvaskit_webgl-webgl2_debug-linux_x64": {
+    "BazelBuild-modules_canvaskit-ck_full_webgl2_debug-linux_x64": {
       "casSpec": "compile",
       "cipd_packages": [
         {
@@ -3480,9 +3480,9 @@
         "bazel_build_task_driver/bazel_build",
         "--project_id=skia-swarming-bots",
         "--task_id=<(TASK_ID)",
-        "--task_name=BazelBuild-modules_canvaskit_webgl-webgl2_debug-linux_x64",
-        "--label=//modules/canvaskit:canvaskit_webgl",
-        "--config=webgl2_debug",
+        "--task_name=BazelBuild-modules_canvaskit-ck_full_webgl2_debug-linux_x64",
+        "--label=//modules/canvaskit:canvaskit",
+        "--config=ck_full_webgl2_debug",
         "--workdir=.",
         "--bazel_arg=--config=for_linux_x64_with_rbe",
         "--bazel_arg=--jobs=100",
@@ -3594,7 +3594,7 @@
       "max_attempts": 1,
       "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com"
     },
-    "BazelTest-canvaskit_gold-webgl2_release_chrome-linux_x64": {
+    "BazelTest-canvaskit_gold-ck_full_webgl2_release_chrome-linux_x64": {
       "casSpec": "compile",
       "cipd_packages": [
         {
@@ -3612,8 +3612,8 @@
         "./canvaskit_gold",
         "--project_id=skia-swarming-bots",
         "--task_id=<(TASK_ID)",
-        "--task_name=BazelTest-canvaskit_gold-webgl2_release_chrome-linux_x64",
-        "--test_config=webgl2_release_chrome",
+        "--task_name=BazelTest-canvaskit_gold-ck_full_webgl2_release_chrome-linux_x64",
+        "--test_config=ck_full_webgl2_release_chrome",
         "--workdir=.",
         "--goldctl_path=./cipd_bin_packages/goldctl",
         "--git_commit=<(REVISION)",
@@ -86592,6 +86592,11 @@
   "commit_queue": {
     "BazelBuild-example_hello_world_dawn-release-linux_x64": {},
     "BazelBuild-skia_public-enforce_iwyu-linux_x64": {},
+    "BazelTest-canvaskit_gold-ck_full_webgl2_release_chrome-linux_x64": {
+      "location_regexes": [
+        "modules/canvaskit/.*"
+      ]
+    },
     "Build-Debian10-Clang-arm-Debug-Android": {},
     "Build-Debian10-Clang-arm-Release-Android_API26": {},
     "Build-Debian10-Clang-arm64-Debug-Android": {},
diff --git a/modules/canvaskit/BUILD.bazel b/modules/canvaskit/BUILD.bazel
index 6e4c7a5..16a210f 100644
--- a/modules/canvaskit/BUILD.bazel
+++ b/modules/canvaskit/BUILD.bazel
@@ -1,6 +1,5 @@
 load("//bazel:macros.bzl", "exports_files_legacy", "wasm_cc_binary")
 load("//bazel/common_config_settings:defs.bzl", "bool_flag")
-load("//bazel:cc_binary_with_flags.bzl", "cc_binary_with_flags")
 load("//bazel:karma_test.bzl", "karma_test")
 load("//bazel:copts.bzl", "DEFAULT_COPTS")
 
@@ -261,46 +260,13 @@
     "-Wno-header-hygiene",
 ]
 
-cc_binary_with_flags(
-    name = "canvaskit.webgl",
+cc_binary(
+    name = "canvaskit.build",
     srcs = CK_SRCS,
     additional_linker_inputs = JS_INTERFACE_FILES + ["externs.js"],
     copts = DEFAULT_COPTS + CK_COPTS,
     linkopts = CK_LINKOPTS,
     local_defines = CK_DEFINES,
-    set_flags = {
-        "disable_tracing": ["True"],
-        "include_decoder": [
-            "jpeg_decode_codec",
-            "png_decode_codec",
-            "webp_decode_codec",
-            "gif_decode_codec",
-        ],
-        "include_encoder": [
-            "jpeg_encode_codec",
-            "png_encode_codec",
-            "webp_encode_codec",
-        ],
-        # TODO(kjlubick) make this optional, depending on enable_fonts
-        "fontmgr_factory": [
-            "custom_embedded_fontmgr_factory",
-        ],
-        "gpu_backend": [
-            "gl_backend",
-        ],
-        "with_gl_standard": [
-            "webgl_standard",
-        ],
-        "use_harfbuzz": [
-            "True",
-        ],
-        "use_icu": [
-            "True",
-        ],
-        "enable_sksl_tracing": [
-            "True",
-        ],
-    },
     # This target won't build successfully on its own because of missing emscripten
     # headers etc. Therefore, we hide it from wildcards.
     tags = ["manual"],
@@ -326,58 +292,56 @@
 )
 
 wasm_cc_binary(
-    name = "canvaskit_webgl",
+    name = "canvaskit",
     # Whatever is before the dot will be the name of the output js and wasm, aka "the stem".
     # https://github.com/emscripten-core/emsdk/blob/82ad00499a42abde16b363239d2bc83bf5d863ab/bazel/emscripten_toolchain/wasm_cc_binary.bzl#L91
-    cc_target = ":canvaskit.webgl",
+    cc_target = ":canvaskit.build",
 )
 
 bool_flag(
-    default = True,
+    default = False,
     flag_name = "enable_canvas_polyfill",
 )
 
 bool_flag(
-    default = True,
+    default = False,
     flag_name = "enable_fonts",
 )
 
 bool_flag(
-    default = True,
+    default = False,
     flag_name = "include_embedded_font",
 )
 
 bool_flag(
-    default = True,
+    default = False,
+    flag_name = "include_matrix_js",
+)
+
+bool_flag(
+    default = False,
     flag_name = "enable_skottie",
 )
 
 bool_flag(
-    default = True,
+    default = False,
     flag_name = "enable_skp_serialization",
 )
 
 bool_flag(
-    default = True,
+    default = False,
     flag_name = "enable_particles",
 )
 
 bool_flag(
-    default = True,
+    default = False,
     flag_name = "enable_runtime_effect",
 )
 
-bool_flag(
-    default = True,
-    flag_name = "include_matrix_js",
-)
-
 karma_test(
     name = "canvaskit_js_tests",
     srcs = [
-        # TODO(kjlubick) add an intermediate rule that renames this file to something consistent
-        #   so we can support multiple build variants easier.
-        ":canvaskit_webgl/canvaskit.js",
+        ":canvaskit/canvaskit.js",
         # We want to make sure the CanvasKit JS is loaded before the loader script
         "tests/bazel/canvaskitinit.js",
         "tests/bazel/util.js",
@@ -399,7 +363,7 @@
     # exfiltrate the PNGs they create.
     env = "//modules/canvaskit/go/gold_test_env:gold_test_env",
     static_files = [
-        ":canvaskit_webgl/canvaskit.wasm",
+        ":canvaskit/canvaskit.wasm",
         "//modules/canvaskit/tests/assets:test_assets",
     ],
 )
diff --git a/modules/canvaskit/Makefile b/modules/canvaskit/Makefile
index 0f6838b..26ccbb5 100644
--- a/modules/canvaskit/Makefile
+++ b/modules/canvaskit/Makefile
@@ -136,14 +136,14 @@
 	cd npm_build && npm run dtslint
 
 bazel_canvaskit_debug:
-	bazelisk build :canvaskit_webgl --config=webgl2_debug
+	bazelisk build :canvaskit --config=ck_full_webgl2_debug
 	- rm -rf build/
 	mkdir build
 	cp ../../bazel-bin/modules/canvaskit/canvaskit_webgl/canvaskit.js build/canvaskit.js
 	cp ../../bazel-bin/modules/canvaskit/canvaskit_webgl/canvaskit.wasm build/canvaskit.wasm
 
 bazel_canvaskit_release:
-	bazelisk build :canvaskit_webgl --config=webgl2_release
+	bazelisk build :canvaskit --config=ck_full_webgl2_release
 	- rm -rf build/
 	mkdir build
 	cp ../../bazel-bin/modules/canvaskit/canvaskit_webgl/canvaskit.js build/canvaskit.js
@@ -151,7 +151,7 @@
 	ls -l build
 
 bazel_test_canvaskit:
-	bazelisk test :canvaskit_js_tests --config=webgl2_release_chrome --test_output=streamed
+	bazelisk test :canvaskit_js_tests --config=ck_full_webgl2_release_chrome --test_output=streamed
 	echo "test output in //bazel-testlogs/modules/canvaskit/canvaskit_js_tests/test.outputs/"
 	cd ../../bazel-testlogs/modules/canvaskit/canvaskit_js_tests/test.outputs/ && unzip -qo outputs.zip && ls
 
diff --git a/modules/canvaskit/tests/bazel/canvaskitinit.js b/modules/canvaskit/tests/bazel/canvaskitinit.js
index 8b1133e..039167d 100644
--- a/modules/canvaskit/tests/bazel/canvaskitinit.js
+++ b/modules/canvaskit/tests/bazel/canvaskitinit.js
@@ -6,7 +6,7 @@
 const _LoadCanvasKit = new Promise((resolve, reject) => {
     console.log('canvaskit loading', new Date());
     CanvasKitInit({
-        locateFile: (file) => '/static/skia/modules/canvaskit/canvaskit_webgl/'+file,
+        locateFile: (file) => '/static/skia/modules/canvaskit/canvaskit/'+file,
     }).then((loaded) => {
         console.log('canvaskit loaded', new Date());
         CanvasKit = loaded;