1cb93a386Sopenharmony_ciload("@rules_cc//cc:defs.bzl", "cc_binary")
2cb93a386Sopenharmony_ciload("@emsdk//emscripten_toolchain:wasm_rules.bzl", "wasm_cc_binary")
3cb93a386Sopenharmony_ci
4cb93a386Sopenharmony_cipackage(default_visibility = ["//:__subpackages__"])
5cb93a386Sopenharmony_ci
6cb93a386Sopenharmony_ciBASE_LINKOPTS = [
7cb93a386Sopenharmony_ci    #"-flto",  # https://github.com/emscripten-core/emsdk/issues/807
8cb93a386Sopenharmony_ci    "--bind",  # Compiles the source code using the Embind bindings to connect C/C++ and JavaScript
9cb93a386Sopenharmony_ci    "--no-entry",
10cb93a386Sopenharmony_ci    "-sALLOW_MEMORY_GROWTH",
11cb93a386Sopenharmony_ci    "-sUSE_PTHREADS=0",  # Disable pthreads
12cb93a386Sopenharmony_ci    "-sMODULARIZE",
13cb93a386Sopenharmony_ci    "-sDISABLE_EXCEPTION_CATCHING",  # Disable all exception catching
14cb93a386Sopenharmony_ci    "-sNODEJS_CATCH_EXIT=0",  # We don't have a 'main' so disable exit() catching
15cb93a386Sopenharmony_ci    "-sWASM",
16cb93a386Sopenharmony_ci    "-sMAX_WEBGL_VERSION=2",
17cb93a386Sopenharmony_ci    "-sFORCE_FILESYSTEM=0",
18cb93a386Sopenharmony_ci    "-sFILESYSTEM=0",
19cb93a386Sopenharmony_ci]
20cb93a386Sopenharmony_ci
21cb93a386Sopenharmony_ciRELEASE_OPTS = [
22cb93a386Sopenharmony_ci    # We disable closure for now, because we need a way to pass in the externs file,
23cb93a386Sopenharmony_ci    # which does not appear to be exposed on the emscripten toolchain.
24cb93a386Sopenharmony_ci    # "--closure 1",  # Run the closure compiler
25cb93a386Sopenharmony_ci    "-sASSERTIONS=0",  # Turn off assertions
26cb93a386Sopenharmony_ci]
27cb93a386Sopenharmony_ci
28cb93a386Sopenharmony_ciDEBUG_OPTS = [
29cb93a386Sopenharmony_ci    "--closure 0",  # Do not use closure
30cb93a386Sopenharmony_ci    "-sASSERTIONS",  # Turn on assertions
31cb93a386Sopenharmony_ci    "-sGL_ASSERTIONS",
32cb93a386Sopenharmony_ci]
33cb93a386Sopenharmony_ci
34cb93a386Sopenharmony_ciGM_OPTS = [
35cb93a386Sopenharmony_ci    "-sEXPORT_NAME=InitWasmGMTests",
36cb93a386Sopenharmony_ci    "--pre-js",
37cb93a386Sopenharmony_ci    "modules/canvaskit/gm.js",
38cb93a386Sopenharmony_ci]
39cb93a386Sopenharmony_ci
40cb93a386Sopenharmony_cifilegroup(
41cb93a386Sopenharmony_ci    name = "hdrs",
42cb93a386Sopenharmony_ci    srcs = [
43cb93a386Sopenharmony_ci        "WasmCommon.h",
44cb93a386Sopenharmony_ci    ],
45cb93a386Sopenharmony_ci)
46cb93a386Sopenharmony_ci
47cb93a386Sopenharmony_cicc_binary(
48cb93a386Sopenharmony_ci    name = "gm-bindings",
49cb93a386Sopenharmony_ci    testonly = True,
50cb93a386Sopenharmony_ci    srcs = [
51cb93a386Sopenharmony_ci        "gm_bindings.cpp",
52cb93a386Sopenharmony_ci        ":hdrs",
53cb93a386Sopenharmony_ci        "//gm:gms",  # Required for the registry to work
54cb93a386Sopenharmony_ci        "//src/ports:default_global_init",
55cb93a386Sopenharmony_ci        "//src/ports:fontmgr",
56cb93a386Sopenharmony_ci        "//src/ports:malloc",
57cb93a386Sopenharmony_ci        "//src/ports:skdebug",
58cb93a386Sopenharmony_ci        "//src/ports:skia_image_generator",
59cb93a386Sopenharmony_ci    ],
60cb93a386Sopenharmony_ci    additional_linker_inputs = ["gm.js"],
61cb93a386Sopenharmony_ci    linkopts = select({
62cb93a386Sopenharmony_ci        "//bazel/common_config_settings:debug_build": BASE_LINKOPTS + GM_OPTS + DEBUG_OPTS,
63cb93a386Sopenharmony_ci        "//bazel/common_config_settings:release_build": BASE_LINKOPTS + GM_OPTS + RELEASE_OPTS,
64cb93a386Sopenharmony_ci        "//conditions:default": BASE_LINKOPTS + GM_OPTS + RELEASE_OPTS,
65cb93a386Sopenharmony_ci    }),
66cb93a386Sopenharmony_ci    local_defines = [
67cb93a386Sopenharmony_ci        "SK_GL",
68cb93a386Sopenharmony_ci        "SK_USE_WEBGL",
69cb93a386Sopenharmony_ci    ],
70cb93a386Sopenharmony_ci    # This target won't build successfully on its own because of missing emscripten
71cb93a386Sopenharmony_ci    # headers etc. Therefore, we hide it from wildcards.
72cb93a386Sopenharmony_ci    tags = ["manual"],
73cb93a386Sopenharmony_ci    deps = [
74cb93a386Sopenharmony_ci        "//:gms",
75cb93a386Sopenharmony_ci        "//:hash_and_encode",
76cb93a386Sopenharmony_ci        "//:tests",
77cb93a386Sopenharmony_ci    ],
78cb93a386Sopenharmony_ci)
79cb93a386Sopenharmony_ci
80cb93a386Sopenharmony_ciwasm_cc_binary(
81cb93a386Sopenharmony_ci    name = "gm-bindings-wasm",
82cb93a386Sopenharmony_ci    testonly = True,
83cb93a386Sopenharmony_ci    cc_target = ":gm-bindings",
84cb93a386Sopenharmony_ci)
85cb93a386Sopenharmony_ci
86cb93a386Sopenharmony_ciCK_DEFINES = [
87cb93a386Sopenharmony_ci    "SK_NO_FONTS",  #TODO(kjlubick)
88cb93a386Sopenharmony_ci    "SK_DISABLE_LEGACY_SHADERCONTEXT",
89cb93a386Sopenharmony_ci] + select({
90cb93a386Sopenharmony_ci    "//bazel/common_config_settings:gl_backend": [
91cb93a386Sopenharmony_ci        "SK_GL",
92cb93a386Sopenharmony_ci        "SK_SUPPORT_GPU=1",
93cb93a386Sopenharmony_ci    ],
94cb93a386Sopenharmony_ci    "//conditions:default": [
95cb93a386Sopenharmony_ci        "SK_SUPPORT_GPU=0",
96cb93a386Sopenharmony_ci    ],
97cb93a386Sopenharmony_ci})
98cb93a386Sopenharmony_ci
99cb93a386Sopenharmony_ciCK_OPTS = BASE_LINKOPTS + [
100cb93a386Sopenharmony_ci    "-sEXPORT_NAME=CanvasKitInit",
101cb93a386Sopenharmony_ci    # The order of these --pre-js flags matters! The preamble is a partially open scope and the
102cb93a386Sopenharmony_ci    # postamble closes it.
103cb93a386Sopenharmony_ci    "--pre-js",
104cb93a386Sopenharmony_ci    "modules/canvaskit/preamble.js",
105cb93a386Sopenharmony_ci    "--pre-js",
106cb93a386Sopenharmony_ci    "modules/canvaskit/color.js",
107cb93a386Sopenharmony_ci    "--pre-js",
108cb93a386Sopenharmony_ci    "modules/canvaskit/memory.js",
109cb93a386Sopenharmony_ci    "--pre-js",
110cb93a386Sopenharmony_ci    "modules/canvaskit/util.js",
111cb93a386Sopenharmony_ci    "--pre-js",
112cb93a386Sopenharmony_ci    "modules/canvaskit/interface.js",
113cb93a386Sopenharmony_ci    "--pre-js",
114cb93a386Sopenharmony_ci    "modules/canvaskit/postamble.js",
115cb93a386Sopenharmony_ci    "-sINITIAL_MEMORY=128MB",
116cb93a386Sopenharmony_ci] + select({
117cb93a386Sopenharmony_ci    "//bazel/common_config_settings:gl_backend": [
118cb93a386Sopenharmony_ci        "--pre-js",
119cb93a386Sopenharmony_ci        "modules/canvaskit/cpu.js",
120cb93a386Sopenharmony_ci        "--pre-js",
121cb93a386Sopenharmony_ci        "modules/canvaskit/gpu.js",
122cb93a386Sopenharmony_ci    ],
123cb93a386Sopenharmony_ci    "//conditions:default": [
124cb93a386Sopenharmony_ci        "--pre-js",
125cb93a386Sopenharmony_ci        "modules/canvaskit/cpu.js",
126cb93a386Sopenharmony_ci    ],
127cb93a386Sopenharmony_ci}) + select({
128cb93a386Sopenharmony_ci    "//bazel/common_config_settings:debug_build": DEBUG_OPTS,
129cb93a386Sopenharmony_ci    "//conditions:default": RELEASE_OPTS,
130cb93a386Sopenharmony_ci})
131cb93a386Sopenharmony_ci
132cb93a386Sopenharmony_cicc_binary(
133cb93a386Sopenharmony_ci    name = "canvaskit",
134cb93a386Sopenharmony_ci    srcs = [
135cb93a386Sopenharmony_ci        "canvaskit_bindings.cpp",
136cb93a386Sopenharmony_ci        ":hdrs",
137cb93a386Sopenharmony_ci        "//src/ports:default_global_init",
138cb93a386Sopenharmony_ci        "//src/ports:fontmgr",
139cb93a386Sopenharmony_ci        "//src/ports:malloc",
140cb93a386Sopenharmony_ci        "//src/ports:skdebug",
141cb93a386Sopenharmony_ci        "//src/ports:skia_image_generator",
142cb93a386Sopenharmony_ci    ],
143cb93a386Sopenharmony_ci    additional_linker_inputs = [
144cb93a386Sopenharmony_ci        "color.js",
145cb93a386Sopenharmony_ci        "interface.js",
146cb93a386Sopenharmony_ci        "memory.js",
147cb93a386Sopenharmony_ci        "postamble.js",
148cb93a386Sopenharmony_ci        "preamble.js",
149cb93a386Sopenharmony_ci        "util.js",
150cb93a386Sopenharmony_ci    ],
151cb93a386Sopenharmony_ci    linkopts = CK_OPTS,
152cb93a386Sopenharmony_ci    local_defines = CK_DEFINES,
153cb93a386Sopenharmony_ci    # This target won't build successfully on its own because of missing emscripten
154cb93a386Sopenharmony_ci    # headers etc. Therefore, we hide it from wildcards.
155cb93a386Sopenharmony_ci    tags = ["manual"],
156cb93a386Sopenharmony_ci    deps = [
157cb93a386Sopenharmony_ci        "//:skia-core",
158cb93a386Sopenharmony_ci    ],
159cb93a386Sopenharmony_ci)
160cb93a386Sopenharmony_ci
161cb93a386Sopenharmony_ciwasm_cc_binary(
162cb93a386Sopenharmony_ci    name = "canvaskit-wasm",
163cb93a386Sopenharmony_ci    cc_target = ":canvaskit",
164cb93a386Sopenharmony_ci)
165