xref: /aosp_15_r20/external/skia/modules/canvaskit/BUILD.bazel (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Workerload("@skia_user_config//:copts.bzl", "DEFAULT_COPTS")
2*c8dee2aaSAndroid Build Coastguard Workerload("//bazel:macros.bzl", "bool_flag", "skia_filegroup", "wasm_cc_binary")
3*c8dee2aaSAndroid Build Coastguard Workerload("//bazel/karma:karma_test.bzl", "karma_test")
4*c8dee2aaSAndroid Build Coastguard Worker
5*c8dee2aaSAndroid Build Coastguard Workerpackage(
6*c8dee2aaSAndroid Build Coastguard Worker    default_applicable_licenses = ["//:license"],
7*c8dee2aaSAndroid Build Coastguard Worker)
8*c8dee2aaSAndroid Build Coastguard Worker
9*c8dee2aaSAndroid Build Coastguard Workerlicenses(["notice"])
10*c8dee2aaSAndroid Build Coastguard Worker
11*c8dee2aaSAndroid Build Coastguard Workerexports_files(
12*c8dee2aaSAndroid Build Coastguard Worker    ["npm_build/types/index.d.ts"],
13*c8dee2aaSAndroid Build Coastguard Worker    visibility = ["//infra:__subpackages__"],
14*c8dee2aaSAndroid Build Coastguard Worker)
15*c8dee2aaSAndroid Build Coastguard Worker
16*c8dee2aaSAndroid Build Coastguard WorkerBASE_LINKOPTS = [
17*c8dee2aaSAndroid Build Coastguard Worker    #"-flto",  # https://github.com/emscripten-core/emsdk/issues/807
18*c8dee2aaSAndroid Build Coastguard Worker    "--bind",  # Compiles the source code using the Embind bindings to connect C/C++ and JavaScript
19*c8dee2aaSAndroid Build Coastguard Worker    "-fno-rtti",
20*c8dee2aaSAndroid Build Coastguard Worker    "--no-entry",
21*c8dee2aaSAndroid Build Coastguard Worker    "-sALLOW_MEMORY_GROWTH",
22*c8dee2aaSAndroid Build Coastguard Worker    "-sUSE_PTHREADS=0",  # Disable pthreads
23*c8dee2aaSAndroid Build Coastguard Worker    "-sMODULARIZE",
24*c8dee2aaSAndroid Build Coastguard Worker    "-sDISABLE_EXCEPTION_CATCHING",  # Disable all exception catching
25*c8dee2aaSAndroid Build Coastguard Worker    "-sNODEJS_CATCH_EXIT=0",  # We don't have a 'main' so disable exit() catching
26*c8dee2aaSAndroid Build Coastguard Worker    "-sWASM",
27*c8dee2aaSAndroid Build Coastguard Worker    "-sMAX_WEBGL_VERSION=2",
28*c8dee2aaSAndroid Build Coastguard Worker    "-sUSE_WEBGL2=1",
29*c8dee2aaSAndroid Build Coastguard Worker    "-sFORCE_FILESYSTEM=0",
30*c8dee2aaSAndroid Build Coastguard Worker    "-sDYNAMIC_EXECUTION=0",
31*c8dee2aaSAndroid Build Coastguard Worker    "-sFILESYSTEM=0",
32*c8dee2aaSAndroid Build Coastguard Worker    "-sEXPORTED_FUNCTIONS=['_malloc','_free']",
33*c8dee2aaSAndroid Build Coastguard Worker]
34*c8dee2aaSAndroid Build Coastguard Worker
35*c8dee2aaSAndroid Build Coastguard WorkerRELEASE_OPTS = [
36*c8dee2aaSAndroid Build Coastguard Worker    "-sASSERTIONS=0",  # Turn off assertions
37*c8dee2aaSAndroid Build Coastguard Worker    "-Oz",
38*c8dee2aaSAndroid Build Coastguard Worker]
39*c8dee2aaSAndroid Build Coastguard Worker
40*c8dee2aaSAndroid Build Coastguard WorkerDEBUG_OPTS = [
41*c8dee2aaSAndroid Build Coastguard Worker    "--closure 0",  # Do not use closure
42*c8dee2aaSAndroid Build Coastguard Worker    "-sASSERTIONS",  # Turn on assertions
43*c8dee2aaSAndroid Build Coastguard Worker    "-sGL_ASSERTIONS",
44*c8dee2aaSAndroid Build Coastguard Worker    "-O0",
45*c8dee2aaSAndroid Build Coastguard Worker    "-g3",
46*c8dee2aaSAndroid Build Coastguard Worker]
47*c8dee2aaSAndroid Build Coastguard Worker
48*c8dee2aaSAndroid Build Coastguard Workerskia_filegroup(
49*c8dee2aaSAndroid Build Coastguard Worker    name = "hdrs",
50*c8dee2aaSAndroid Build Coastguard Worker    srcs = [
51*c8dee2aaSAndroid Build Coastguard Worker        "WasmCommon.h",
52*c8dee2aaSAndroid Build Coastguard Worker    ],
53*c8dee2aaSAndroid Build Coastguard Worker)
54*c8dee2aaSAndroid Build Coastguard Worker
55*c8dee2aaSAndroid Build Coastguard Worker# See https://stackoverflow.com/a/57499321 for reference.
56*c8dee2aaSAndroid Build Coastguard Workergenrule(
57*c8dee2aaSAndroid Build Coastguard Worker    name = "create_notomono_cpp",
58*c8dee2aaSAndroid Build Coastguard Worker    srcs = ["fonts/NotoMono-Regular.ttf"],
59*c8dee2aaSAndroid Build Coastguard Worker    outs = ["fonts/NotoMono-Regular.ttf.bazel.cpp"],  # Distinct name from compile.sh's version
60*c8dee2aaSAndroid Build Coastguard Worker    cmd = "$(location //tools:embed_resources) --name=SK_EMBEDDED_FONTS " +
61*c8dee2aaSAndroid Build Coastguard Worker          "--input=modules/canvaskit/fonts/NotoMono-Regular.ttf " +
62*c8dee2aaSAndroid Build Coastguard Worker          # The $@ means substitute in the one and only output location, which will be located
63*c8dee2aaSAndroid Build Coastguard Worker          # in //bazel-out, not in the fonts subdirectory (although it will be available to clients
64*c8dee2aaSAndroid Build Coastguard Worker          # in the fonts/ subdirectory as if it had been there all along.
65*c8dee2aaSAndroid Build Coastguard Worker          "--output=$@ " +
66*c8dee2aaSAndroid Build Coastguard Worker          "--align=4",
67*c8dee2aaSAndroid Build Coastguard Worker    tools = ["//tools:embed_resources"],
68*c8dee2aaSAndroid Build Coastguard Worker)
69*c8dee2aaSAndroid Build Coastguard Worker
70*c8dee2aaSAndroid Build Coastguard Worker# Note: These are defines that only impact the _bindings.cpp files in this folder.
71*c8dee2aaSAndroid Build Coastguard Worker# Any defines that need to effect the entire Skia build should go in //bazel/BUILD.bazel
72*c8dee2aaSAndroid Build Coastguard WorkerCK_DEFINES = [
73*c8dee2aaSAndroid Build Coastguard Worker    "CK_INCLUDE_PATHOPS",
74*c8dee2aaSAndroid Build Coastguard Worker    "EMSCRIPTEN_HAS_UNBOUND_TYPE_NAMES=0",  # Allows us to compile with -fno-rtti
75*c8dee2aaSAndroid Build Coastguard Worker    "SK_DISABLE_LEGACY_PARAGRAPH_UNICODE=1",
76*c8dee2aaSAndroid Build Coastguard Worker] + select({
77*c8dee2aaSAndroid Build Coastguard Worker    ":enable_fonts_true": ["CK_INCLUDE_PARAGRAPH"],
78*c8dee2aaSAndroid Build Coastguard Worker    ":enable_fonts_false": ["CK_NO_FONTS"],
79*c8dee2aaSAndroid Build Coastguard Worker}) + select({
80*c8dee2aaSAndroid Build Coastguard Worker    ":include_embedded_font_true": ["CK_EMBED_FONT"],
81*c8dee2aaSAndroid Build Coastguard Worker    ":include_embedded_font_false": [],
82*c8dee2aaSAndroid Build Coastguard Worker}) + select({
83*c8dee2aaSAndroid Build Coastguard Worker    ":enable_skp_serialization_true": ["CK_SERIALIZE_SKP=1"],
84*c8dee2aaSAndroid Build Coastguard Worker    ":enable_skp_serialization_false": [],
85*c8dee2aaSAndroid Build Coastguard Worker}) + select({
86*c8dee2aaSAndroid Build Coastguard Worker    ":enable_runtime_effect_true": ["CK_INCLUDE_RUNTIME_EFFECT=1"],
87*c8dee2aaSAndroid Build Coastguard Worker    ":enable_runtime_effect_false": [],
88*c8dee2aaSAndroid Build Coastguard Worker}) + select({
89*c8dee2aaSAndroid Build Coastguard Worker    ":enable_webgl_true": ["CK_ENABLE_WEBGL"],
90*c8dee2aaSAndroid Build Coastguard Worker    "//conditions:default": [],
91*c8dee2aaSAndroid Build Coastguard Worker})
92*c8dee2aaSAndroid Build Coastguard Worker
93*c8dee2aaSAndroid Build Coastguard WorkerCK_RELEASE_OPTS = [
94*c8dee2aaSAndroid Build Coastguard Worker    "--closure 1",  # Run the closure compiler
95*c8dee2aaSAndroid Build Coastguard Worker    # pass the externs file in
96*c8dee2aaSAndroid Build Coastguard Worker    "--closure-args=--externs=$(location externs.js)",
97*c8dee2aaSAndroid Build Coastguard Worker]
98*c8dee2aaSAndroid Build Coastguard Worker
99*c8dee2aaSAndroid Build Coastguard WorkerCK_LINKOPTS = BASE_LINKOPTS + [
100*c8dee2aaSAndroid Build Coastguard Worker    "-sEXPORT_NAME=CanvasKitInit",
101*c8dee2aaSAndroid Build Coastguard Worker    "-sINITIAL_MEMORY=128MB",
102*c8dee2aaSAndroid Build Coastguard Worker    # The order of these --pre-js flags matters! The preamble is a partially open scope and the
103*c8dee2aaSAndroid Build Coastguard Worker    # postamble closes it. TODO(kjlubick) do we need to do it this way anymore?
104*c8dee2aaSAndroid Build Coastguard Worker    "--pre-js",
105*c8dee2aaSAndroid Build Coastguard Worker    "modules/canvaskit/preamble.js",
106*c8dee2aaSAndroid Build Coastguard Worker    "--pre-js",
107*c8dee2aaSAndroid Build Coastguard Worker    "modules/canvaskit/color.js",
108*c8dee2aaSAndroid Build Coastguard Worker    "--pre-js",
109*c8dee2aaSAndroid Build Coastguard Worker    "modules/canvaskit/memory.js",
110*c8dee2aaSAndroid Build Coastguard Worker    "--pre-js",
111*c8dee2aaSAndroid Build Coastguard Worker    "modules/canvaskit/util.js",
112*c8dee2aaSAndroid Build Coastguard Worker    "--pre-js",
113*c8dee2aaSAndroid Build Coastguard Worker    "modules/canvaskit/interface.js",
114*c8dee2aaSAndroid Build Coastguard Worker    "--pre-js",
115*c8dee2aaSAndroid Build Coastguard Worker    "modules/canvaskit/pathops.js",
116*c8dee2aaSAndroid Build Coastguard Worker] + select({
117*c8dee2aaSAndroid Build Coastguard Worker    ":enable_webgl_true": [
118*c8dee2aaSAndroid Build Coastguard Worker        "--pre-js",
119*c8dee2aaSAndroid Build Coastguard Worker        "modules/canvaskit/cpu.js",
120*c8dee2aaSAndroid Build Coastguard Worker        "--pre-js",
121*c8dee2aaSAndroid Build Coastguard Worker        "modules/canvaskit/webgl.js",
122*c8dee2aaSAndroid Build Coastguard Worker    ],
123*c8dee2aaSAndroid Build Coastguard Worker    "//conditions:default": [
124*c8dee2aaSAndroid Build Coastguard Worker        "--pre-js",
125*c8dee2aaSAndroid Build Coastguard Worker        "modules/canvaskit/cpu.js",
126*c8dee2aaSAndroid Build Coastguard Worker    ],
127*c8dee2aaSAndroid Build Coastguard Worker}) + select({
128*c8dee2aaSAndroid Build Coastguard Worker    ":enable_fonts_true": [
129*c8dee2aaSAndroid Build Coastguard Worker        "--pre-js",
130*c8dee2aaSAndroid Build Coastguard Worker        "modules/canvaskit/font.js",
131*c8dee2aaSAndroid Build Coastguard Worker        "--pre-js",
132*c8dee2aaSAndroid Build Coastguard Worker        "modules/canvaskit/paragraph.js",
133*c8dee2aaSAndroid Build Coastguard Worker    ],
134*c8dee2aaSAndroid Build Coastguard Worker    ":enable_fonts_false": [],
135*c8dee2aaSAndroid Build Coastguard Worker}) + select({
136*c8dee2aaSAndroid Build Coastguard Worker    ":enable_canvas_polyfill_true": [
137*c8dee2aaSAndroid Build Coastguard Worker        "--pre-js",
138*c8dee2aaSAndroid Build Coastguard Worker        "modules/canvaskit/htmlcanvas/preamble.js",
139*c8dee2aaSAndroid Build Coastguard Worker        "--pre-js",
140*c8dee2aaSAndroid Build Coastguard Worker        "modules/canvaskit/htmlcanvas/util.js",
141*c8dee2aaSAndroid Build Coastguard Worker        "--pre-js",
142*c8dee2aaSAndroid Build Coastguard Worker        "modules/canvaskit/htmlcanvas/color.js",
143*c8dee2aaSAndroid Build Coastguard Worker        "--pre-js",
144*c8dee2aaSAndroid Build Coastguard Worker        "modules/canvaskit/htmlcanvas/font.js",
145*c8dee2aaSAndroid Build Coastguard Worker        "--pre-js",
146*c8dee2aaSAndroid Build Coastguard Worker        "modules/canvaskit/htmlcanvas/canvas2dcontext.js",
147*c8dee2aaSAndroid Build Coastguard Worker        "--pre-js",
148*c8dee2aaSAndroid Build Coastguard Worker        "modules/canvaskit/htmlcanvas/htmlcanvas.js",
149*c8dee2aaSAndroid Build Coastguard Worker        "--pre-js",
150*c8dee2aaSAndroid Build Coastguard Worker        "modules/canvaskit/htmlcanvas/htmlimage.js",
151*c8dee2aaSAndroid Build Coastguard Worker        "--pre-js",
152*c8dee2aaSAndroid Build Coastguard Worker        "modules/canvaskit/htmlcanvas/imagedata.js",
153*c8dee2aaSAndroid Build Coastguard Worker        "--pre-js",
154*c8dee2aaSAndroid Build Coastguard Worker        "modules/canvaskit/htmlcanvas/lineargradient.js",
155*c8dee2aaSAndroid Build Coastguard Worker        "--pre-js",
156*c8dee2aaSAndroid Build Coastguard Worker        "modules/canvaskit/htmlcanvas/path2d.js",
157*c8dee2aaSAndroid Build Coastguard Worker        "--pre-js",
158*c8dee2aaSAndroid Build Coastguard Worker        "modules/canvaskit/htmlcanvas/pattern.js",
159*c8dee2aaSAndroid Build Coastguard Worker        "--pre-js",
160*c8dee2aaSAndroid Build Coastguard Worker        "modules/canvaskit/htmlcanvas/radialgradient.js",
161*c8dee2aaSAndroid Build Coastguard Worker        "--pre-js",
162*c8dee2aaSAndroid Build Coastguard Worker        "modules/canvaskit/htmlcanvas/postamble.js",
163*c8dee2aaSAndroid Build Coastguard Worker    ],
164*c8dee2aaSAndroid Build Coastguard Worker    ":enable_canvas_polyfill_false": [],
165*c8dee2aaSAndroid Build Coastguard Worker}) + select({
166*c8dee2aaSAndroid Build Coastguard Worker    ":enable_skottie_true": [
167*c8dee2aaSAndroid Build Coastguard Worker        "--pre-js",
168*c8dee2aaSAndroid Build Coastguard Worker        "modules/canvaskit/skottie.js",
169*c8dee2aaSAndroid Build Coastguard Worker    ],
170*c8dee2aaSAndroid Build Coastguard Worker    ":enable_skottie_false": [],
171*c8dee2aaSAndroid Build Coastguard Worker}) + select({
172*c8dee2aaSAndroid Build Coastguard Worker    ":enable_skp_serialization_true": [
173*c8dee2aaSAndroid Build Coastguard Worker        "--pre-js",
174*c8dee2aaSAndroid Build Coastguard Worker        "modules/canvaskit/skp.js",
175*c8dee2aaSAndroid Build Coastguard Worker    ],
176*c8dee2aaSAndroid Build Coastguard Worker    ":enable_skp_serialization_false": [],
177*c8dee2aaSAndroid Build Coastguard Worker}) + select({
178*c8dee2aaSAndroid Build Coastguard Worker    ":enable_runtime_effect_true": [
179*c8dee2aaSAndroid Build Coastguard Worker        "--pre-js",
180*c8dee2aaSAndroid Build Coastguard Worker        "modules/canvaskit/rt_shader.js",
181*c8dee2aaSAndroid Build Coastguard Worker    ],
182*c8dee2aaSAndroid Build Coastguard Worker    ":enable_runtime_effect_false": [],
183*c8dee2aaSAndroid Build Coastguard Worker}) + select({
184*c8dee2aaSAndroid Build Coastguard Worker    ":build_for_debugger_true": [
185*c8dee2aaSAndroid Build Coastguard Worker        "--pre-js",
186*c8dee2aaSAndroid Build Coastguard Worker        "modules/canvaskit/debugger.js",
187*c8dee2aaSAndroid Build Coastguard Worker    ],
188*c8dee2aaSAndroid Build Coastguard Worker    ":build_for_debugger_false": [],
189*c8dee2aaSAndroid Build Coastguard Worker}) + select({
190*c8dee2aaSAndroid Build Coastguard Worker    ":include_matrix_js_true": [
191*c8dee2aaSAndroid Build Coastguard Worker        "--pre-js",
192*c8dee2aaSAndroid Build Coastguard Worker        "modules/canvaskit/matrix.js",
193*c8dee2aaSAndroid Build Coastguard Worker    ],
194*c8dee2aaSAndroid Build Coastguard Worker    ":include_matrix_js_false": [],
195*c8dee2aaSAndroid Build Coastguard Worker}) + [
196*c8dee2aaSAndroid Build Coastguard Worker    # This must come last
197*c8dee2aaSAndroid Build Coastguard Worker    "--pre-js",
198*c8dee2aaSAndroid Build Coastguard Worker    "modules/canvaskit/postamble.js",
199*c8dee2aaSAndroid Build Coastguard Worker] + select({
200*c8dee2aaSAndroid Build Coastguard Worker    "//bazel/common_config_settings:debug_build": DEBUG_OPTS + [
201*c8dee2aaSAndroid Build Coastguard Worker        "--pre-js",
202*c8dee2aaSAndroid Build Coastguard Worker        "modules/canvaskit/debug.js",
203*c8dee2aaSAndroid Build Coastguard Worker    ],
204*c8dee2aaSAndroid Build Coastguard Worker    "//conditions:default": RELEASE_OPTS + CK_RELEASE_OPTS + [
205*c8dee2aaSAndroid Build Coastguard Worker        "--pre-js",
206*c8dee2aaSAndroid Build Coastguard Worker        "modules/canvaskit/release.js",
207*c8dee2aaSAndroid Build Coastguard Worker    ],
208*c8dee2aaSAndroid Build Coastguard Worker})
209*c8dee2aaSAndroid Build Coastguard Worker
210*c8dee2aaSAndroid Build Coastguard Worker# All JS files that could possibly be included via --pre-js or --post-js.
211*c8dee2aaSAndroid Build Coastguard Worker# Whether they actually will be or not will be controlled above in the construction of CK_LINKOPTS.
212*c8dee2aaSAndroid Build Coastguard WorkerJS_INTERFACE_FILES = [
213*c8dee2aaSAndroid Build Coastguard Worker    "color.js",
214*c8dee2aaSAndroid Build Coastguard Worker    "cpu.js",
215*c8dee2aaSAndroid Build Coastguard Worker    "debug.js",
216*c8dee2aaSAndroid Build Coastguard Worker    "font.js",
217*c8dee2aaSAndroid Build Coastguard Worker    "interface.js",
218*c8dee2aaSAndroid Build Coastguard Worker    "matrix.js",
219*c8dee2aaSAndroid Build Coastguard Worker    "memory.js",
220*c8dee2aaSAndroid Build Coastguard Worker    "paragraph.js",
221*c8dee2aaSAndroid Build Coastguard Worker    "pathops.js",
222*c8dee2aaSAndroid Build Coastguard Worker    "postamble.js",
223*c8dee2aaSAndroid Build Coastguard Worker    "preamble.js",
224*c8dee2aaSAndroid Build Coastguard Worker    "release.js",
225*c8dee2aaSAndroid Build Coastguard Worker    "rt_shader.js",
226*c8dee2aaSAndroid Build Coastguard Worker    "skottie.js",
227*c8dee2aaSAndroid Build Coastguard Worker    "skp.js",
228*c8dee2aaSAndroid Build Coastguard Worker    "util.js",
229*c8dee2aaSAndroid Build Coastguard Worker    "webgl.js",
230*c8dee2aaSAndroid Build Coastguard Worker    "webgpu.js",
231*c8dee2aaSAndroid Build Coastguard Worker] + [
232*c8dee2aaSAndroid Build Coastguard Worker    "htmlcanvas/canvas2dcontext.js",
233*c8dee2aaSAndroid Build Coastguard Worker    "htmlcanvas/color.js",
234*c8dee2aaSAndroid Build Coastguard Worker    "htmlcanvas/font.js",
235*c8dee2aaSAndroid Build Coastguard Worker    "htmlcanvas/htmlcanvas.js",
236*c8dee2aaSAndroid Build Coastguard Worker    "htmlcanvas/htmlimage.js",
237*c8dee2aaSAndroid Build Coastguard Worker    "htmlcanvas/imagedata.js",
238*c8dee2aaSAndroid Build Coastguard Worker    "htmlcanvas/lineargradient.js",
239*c8dee2aaSAndroid Build Coastguard Worker    "htmlcanvas/path2d.js",
240*c8dee2aaSAndroid Build Coastguard Worker    "htmlcanvas/pattern.js",
241*c8dee2aaSAndroid Build Coastguard Worker    "htmlcanvas/postamble.js",
242*c8dee2aaSAndroid Build Coastguard Worker    "htmlcanvas/preamble.js",
243*c8dee2aaSAndroid Build Coastguard Worker    "htmlcanvas/radialgradient.js",
244*c8dee2aaSAndroid Build Coastguard Worker    "htmlcanvas/util.js",
245*c8dee2aaSAndroid Build Coastguard Worker] + select({
246*c8dee2aaSAndroid Build Coastguard Worker    ":build_for_debugger_true": ["debugger.js"],
247*c8dee2aaSAndroid Build Coastguard Worker    ":build_for_debugger_false": [],
248*c8dee2aaSAndroid Build Coastguard Worker})
249*c8dee2aaSAndroid Build Coastguard Worker
250*c8dee2aaSAndroid Build Coastguard WorkerCK_SRCS = [
251*c8dee2aaSAndroid Build Coastguard Worker    "canvaskit_bindings.cpp",
252*c8dee2aaSAndroid Build Coastguard Worker    ":hdrs",
253*c8dee2aaSAndroid Build Coastguard Worker] + select({
254*c8dee2aaSAndroid Build Coastguard Worker    ":include_embedded_font_true": ["fonts/NotoMono-Regular.ttf.bazel.cpp"],
255*c8dee2aaSAndroid Build Coastguard Worker    ":include_embedded_font_false": [],
256*c8dee2aaSAndroid Build Coastguard Worker}) + select({
257*c8dee2aaSAndroid Build Coastguard Worker    ":enable_fonts_true": [
258*c8dee2aaSAndroid Build Coastguard Worker        "paragraph_bindings.cpp",
259*c8dee2aaSAndroid Build Coastguard Worker        "paragraph_bindings_gen.cpp",
260*c8dee2aaSAndroid Build Coastguard Worker    ],
261*c8dee2aaSAndroid Build Coastguard Worker    ":enable_fonts_false": [],
262*c8dee2aaSAndroid Build Coastguard Worker}) + select({
263*c8dee2aaSAndroid Build Coastguard Worker    ":enable_skottie_true": ["skottie_bindings.cpp"],
264*c8dee2aaSAndroid Build Coastguard Worker    ":enable_skottie_false": [],
265*c8dee2aaSAndroid Build Coastguard Worker}) + select({
266*c8dee2aaSAndroid Build Coastguard Worker    ":build_for_debugger_true": ["debugger_bindings.cpp"],
267*c8dee2aaSAndroid Build Coastguard Worker    ":build_for_debugger_false": [],
268*c8dee2aaSAndroid Build Coastguard Worker})
269*c8dee2aaSAndroid Build Coastguard Worker
270*c8dee2aaSAndroid Build Coastguard WorkerCK_COPTS = [
271*c8dee2aaSAndroid Build Coastguard Worker    "-Wno-header-hygiene",
272*c8dee2aaSAndroid Build Coastguard Worker]
273*c8dee2aaSAndroid Build Coastguard Worker
274*c8dee2aaSAndroid Build Coastguard Workercc_binary(
275*c8dee2aaSAndroid Build Coastguard Worker    name = "canvaskit.build",
276*c8dee2aaSAndroid Build Coastguard Worker    srcs = CK_SRCS,
277*c8dee2aaSAndroid Build Coastguard Worker    additional_linker_inputs = JS_INTERFACE_FILES + ["externs.js"],
278*c8dee2aaSAndroid Build Coastguard Worker    copts = DEFAULT_COPTS + CK_COPTS,
279*c8dee2aaSAndroid Build Coastguard Worker    linkopts = CK_LINKOPTS,
280*c8dee2aaSAndroid Build Coastguard Worker    local_defines = CK_DEFINES,
281*c8dee2aaSAndroid Build Coastguard Worker    # This target won't build successfully on its own because of missing emscripten
282*c8dee2aaSAndroid Build Coastguard Worker    # headers etc. Therefore, we hide it from wildcards.
283*c8dee2aaSAndroid Build Coastguard Worker    tags = ["manual"],
284*c8dee2aaSAndroid Build Coastguard Worker    deps = [
285*c8dee2aaSAndroid Build Coastguard Worker        "//:bmp_decode_codec",
286*c8dee2aaSAndroid Build Coastguard Worker        "//:core",
287*c8dee2aaSAndroid Build Coastguard Worker        "//:gif_decode_codec",
288*c8dee2aaSAndroid Build Coastguard Worker        "//:ico_decode_codec",
289*c8dee2aaSAndroid Build Coastguard Worker        "//:jpeg_decode_codec",
290*c8dee2aaSAndroid Build Coastguard Worker        "//:jpeg_encode_codec",
291*c8dee2aaSAndroid Build Coastguard Worker        "//:png_decode_codec",
292*c8dee2aaSAndroid Build Coastguard Worker        "//:png_encode_codec",
293*c8dee2aaSAndroid Build Coastguard Worker        "//:wbmp_decode_codec",
294*c8dee2aaSAndroid Build Coastguard Worker        "//:webp_decode_codec",
295*c8dee2aaSAndroid Build Coastguard Worker        "//:webp_encode_codec",
296*c8dee2aaSAndroid Build Coastguard Worker        "//src/android:animated_image",
297*c8dee2aaSAndroid Build Coastguard Worker    ] + select({
298*c8dee2aaSAndroid Build Coastguard Worker        ":enable_fonts_true": [
299*c8dee2aaSAndroid Build Coastguard Worker            "//:fontmgr_data_freetype",
300*c8dee2aaSAndroid Build Coastguard Worker            "//:fontmgr_empty_freetype",
301*c8dee2aaSAndroid Build Coastguard Worker            "//modules/skparagraph:skparagraph_harfbuzz_skunicode",
302*c8dee2aaSAndroid Build Coastguard Worker            "//modules/skunicode:skunicode_icu",
303*c8dee2aaSAndroid Build Coastguard Worker        ],
304*c8dee2aaSAndroid Build Coastguard Worker        ":enable_fonts_false": [],
305*c8dee2aaSAndroid Build Coastguard Worker    }) + select({
306*c8dee2aaSAndroid Build Coastguard Worker        ":enable_skottie_true": [
307*c8dee2aaSAndroid Build Coastguard Worker            "//:skshaper_harfbuzz",
308*c8dee2aaSAndroid Build Coastguard Worker            "//:skshaper_unicode",
309*c8dee2aaSAndroid Build Coastguard Worker            "//:skunicode_icu",
310*c8dee2aaSAndroid Build Coastguard Worker            "//modules/skottie",
311*c8dee2aaSAndroid Build Coastguard Worker            "//modules/skottie/utils:skottie_utils",
312*c8dee2aaSAndroid Build Coastguard Worker            "//modules/skottie/utils:text_editor",
313*c8dee2aaSAndroid Build Coastguard Worker        ],
314*c8dee2aaSAndroid Build Coastguard Worker        ":enable_skottie_false": [],
315*c8dee2aaSAndroid Build Coastguard Worker    }) + select({
316*c8dee2aaSAndroid Build Coastguard Worker        ":build_for_debugger_true": [
317*c8dee2aaSAndroid Build Coastguard Worker            "//tools/debugger",
318*c8dee2aaSAndroid Build Coastguard Worker        ],
319*c8dee2aaSAndroid Build Coastguard Worker        ":build_for_debugger_false": [],
320*c8dee2aaSAndroid Build Coastguard Worker    }) + select({
321*c8dee2aaSAndroid Build Coastguard Worker        ":enable_webgl_true": [
322*c8dee2aaSAndroid Build Coastguard Worker            "//:ganesh_gl",
323*c8dee2aaSAndroid Build Coastguard Worker            "//:ganesh_webgl_factory",
324*c8dee2aaSAndroid Build Coastguard Worker        ],
325*c8dee2aaSAndroid Build Coastguard Worker        "//conditions:default": [],
326*c8dee2aaSAndroid Build Coastguard Worker    }),
327*c8dee2aaSAndroid Build Coastguard Worker)
328*c8dee2aaSAndroid Build Coastguard Worker
329*c8dee2aaSAndroid Build Coastguard Workerwasm_cc_binary(
330*c8dee2aaSAndroid Build Coastguard Worker    name = "canvaskit",
331*c8dee2aaSAndroid Build Coastguard Worker    # Whatever is before the dot will be the name of the output js and wasm, aka "the stem".
332*c8dee2aaSAndroid Build Coastguard Worker    # https://github.com/emscripten-core/emsdk/blob/82ad00499a42abde16b363239d2bc83bf5d863ab/bazel/emscripten_toolchain/wasm_cc_binary.bzl#L91
333*c8dee2aaSAndroid Build Coastguard Worker    cc_target = ":canvaskit.build",
334*c8dee2aaSAndroid Build Coastguard Worker    visibility = [
335*c8dee2aaSAndroid Build Coastguard Worker        "//infra/debugger-app:__pkg__",
336*c8dee2aaSAndroid Build Coastguard Worker        "//infra/jsfiddle:__pkg__",
337*c8dee2aaSAndroid Build Coastguard Worker        "//infra/shaders:__pkg__",
338*c8dee2aaSAndroid Build Coastguard Worker        "//infra/skottie:__pkg__",
339*c8dee2aaSAndroid Build Coastguard Worker    ],
340*c8dee2aaSAndroid Build Coastguard Worker)
341*c8dee2aaSAndroid Build Coastguard Worker
342*c8dee2aaSAndroid Build Coastguard Workerbool_flag(
343*c8dee2aaSAndroid Build Coastguard Worker    name = "enable_canvas_polyfill",
344*c8dee2aaSAndroid Build Coastguard Worker    default = False,
345*c8dee2aaSAndroid Build Coastguard Worker)
346*c8dee2aaSAndroid Build Coastguard Worker
347*c8dee2aaSAndroid Build Coastguard Workerbool_flag(
348*c8dee2aaSAndroid Build Coastguard Worker    name = "enable_fonts",
349*c8dee2aaSAndroid Build Coastguard Worker    default = False,
350*c8dee2aaSAndroid Build Coastguard Worker)
351*c8dee2aaSAndroid Build Coastguard Worker
352*c8dee2aaSAndroid Build Coastguard Workerbool_flag(
353*c8dee2aaSAndroid Build Coastguard Worker    name = "include_embedded_font",
354*c8dee2aaSAndroid Build Coastguard Worker    default = False,
355*c8dee2aaSAndroid Build Coastguard Worker)
356*c8dee2aaSAndroid Build Coastguard Worker
357*c8dee2aaSAndroid Build Coastguard Workerbool_flag(
358*c8dee2aaSAndroid Build Coastguard Worker    name = "include_matrix_js",
359*c8dee2aaSAndroid Build Coastguard Worker    default = False,
360*c8dee2aaSAndroid Build Coastguard Worker)
361*c8dee2aaSAndroid Build Coastguard Worker
362*c8dee2aaSAndroid Build Coastguard Workerbool_flag(
363*c8dee2aaSAndroid Build Coastguard Worker    name = "enable_skottie",
364*c8dee2aaSAndroid Build Coastguard Worker    default = False,
365*c8dee2aaSAndroid Build Coastguard Worker)
366*c8dee2aaSAndroid Build Coastguard Worker
367*c8dee2aaSAndroid Build Coastguard Workerbool_flag(
368*c8dee2aaSAndroid Build Coastguard Worker    name = "enable_skp_serialization",
369*c8dee2aaSAndroid Build Coastguard Worker    default = False,
370*c8dee2aaSAndroid Build Coastguard Worker)
371*c8dee2aaSAndroid Build Coastguard Worker
372*c8dee2aaSAndroid Build Coastguard Workerbool_flag(
373*c8dee2aaSAndroid Build Coastguard Worker    name = "enable_runtime_effect",
374*c8dee2aaSAndroid Build Coastguard Worker    default = False,
375*c8dee2aaSAndroid Build Coastguard Worker)
376*c8dee2aaSAndroid Build Coastguard Worker
377*c8dee2aaSAndroid Build Coastguard Workerbool_flag(
378*c8dee2aaSAndroid Build Coastguard Worker    name = "enable_webgl",
379*c8dee2aaSAndroid Build Coastguard Worker    default = False,
380*c8dee2aaSAndroid Build Coastguard Worker)
381*c8dee2aaSAndroid Build Coastguard Worker
382*c8dee2aaSAndroid Build Coastguard Workerbool_flag(
383*c8dee2aaSAndroid Build Coastguard Worker    name = "build_for_debugger",
384*c8dee2aaSAndroid Build Coastguard Worker    default = False,
385*c8dee2aaSAndroid Build Coastguard Worker)
386*c8dee2aaSAndroid Build Coastguard Worker
387*c8dee2aaSAndroid Build Coastguard Workerkarma_test(
388*c8dee2aaSAndroid Build Coastguard Worker    name = "canvaskit_js_tests",
389*c8dee2aaSAndroid Build Coastguard Worker    srcs = [
390*c8dee2aaSAndroid Build Coastguard Worker        ":canvaskit/canvaskit.js",
391*c8dee2aaSAndroid Build Coastguard Worker        # We want to make sure the CanvasKit JS is loaded before the loader script, so
392*c8dee2aaSAndroid Build Coastguard Worker        # CanvasKitInit is defined. This loader script makes a promise...
393*c8dee2aaSAndroid Build Coastguard Worker        "tests/init_with_gold_server.js",
394*c8dee2aaSAndroid Build Coastguard Worker        "tests/util.js",
395*c8dee2aaSAndroid Build Coastguard Worker        "tests/bazel_test_reporter.js",
396*c8dee2aaSAndroid Build Coastguard Worker        # ...which is used by all of the tests
397*c8dee2aaSAndroid Build Coastguard Worker        "tests/canvas_test.js",
398*c8dee2aaSAndroid Build Coastguard Worker        "tests/canvas2d_test.js",
399*c8dee2aaSAndroid Build Coastguard Worker        "tests/core_test.js",
400*c8dee2aaSAndroid Build Coastguard Worker        "tests/font_test.js",
401*c8dee2aaSAndroid Build Coastguard Worker        "tests/matrix_test.js",
402*c8dee2aaSAndroid Build Coastguard Worker        "tests/paragraph_test.js",
403*c8dee2aaSAndroid Build Coastguard Worker        "tests/path_test.js",
404*c8dee2aaSAndroid Build Coastguard Worker        "tests/rtshader_test.js",
405*c8dee2aaSAndroid Build Coastguard Worker        "tests/skottie_test.js",
406*c8dee2aaSAndroid Build Coastguard Worker    ],
407*c8dee2aaSAndroid Build Coastguard Worker    config_file = "karma.bazel.js",
408*c8dee2aaSAndroid Build Coastguard Worker    # The tests need the Gold server to be up and running so they can make POST requests to
409*c8dee2aaSAndroid Build Coastguard Worker    # exfiltrate the PNGs they create.
410*c8dee2aaSAndroid Build Coastguard Worker    env = "//modules/canvaskit/go/gold_test_env:gold_test_env",
411*c8dee2aaSAndroid Build Coastguard Worker    static_files = [
412*c8dee2aaSAndroid Build Coastguard Worker        ":canvaskit/canvaskit.wasm",
413*c8dee2aaSAndroid Build Coastguard Worker        "//modules/canvaskit/tests/assets:test_assets",
414*c8dee2aaSAndroid Build Coastguard Worker    ],
415*c8dee2aaSAndroid Build Coastguard Worker)
416*c8dee2aaSAndroid Build Coastguard Worker
417*c8dee2aaSAndroid Build Coastguard Workergenrule(
418*c8dee2aaSAndroid Build Coastguard Worker    name = "make version file",
419*c8dee2aaSAndroid Build Coastguard Worker    srcs = ["make_version.sh"],
420*c8dee2aaSAndroid Build Coastguard Worker    outs = ["version.js"],
421*c8dee2aaSAndroid Build Coastguard Worker    cmd = "$< $@",
422*c8dee2aaSAndroid Build Coastguard Worker    # This script uses the Git executable, which is not on the remote builders.
423*c8dee2aaSAndroid Build Coastguard Worker    # Forcing the execution to be local ensures it will be in the path.
424*c8dee2aaSAndroid Build Coastguard Worker    local = True,
425*c8dee2aaSAndroid Build Coastguard Worker    visibility = ["//infra:__subpackages__"],
426*c8dee2aaSAndroid Build Coastguard Worker)
427