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