1*c8dee2aaSAndroid Build Coastguard Workerload("@skia_user_config//:copts.bzl", "DEFAULT_COPTS") 2*c8dee2aaSAndroid Build Coastguard Workerload("//bazel:macros.bzl", "wasm_cc_binary") 3*c8dee2aaSAndroid Build Coastguard Worker 4*c8dee2aaSAndroid Build Coastguard Workerpackage( 5*c8dee2aaSAndroid Build Coastguard Worker default_applicable_licenses = ["//:license"], 6*c8dee2aaSAndroid Build Coastguard Worker) 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Workerlicenses(["notice"]) 9*c8dee2aaSAndroid Build Coastguard Worker 10*c8dee2aaSAndroid Build Coastguard WorkerBASE_LINKOPTS = [ 11*c8dee2aaSAndroid Build Coastguard Worker #"-flto", # https://github.com/emscripten-core/emsdk/issues/807 12*c8dee2aaSAndroid Build Coastguard Worker "--bind", # Compiles the source code using the Embind bindings to connect C/C++ and JavaScript 13*c8dee2aaSAndroid Build Coastguard Worker "-fno-rtti", 14*c8dee2aaSAndroid Build Coastguard Worker "--no-entry", 15*c8dee2aaSAndroid Build Coastguard Worker "-sALLOW_MEMORY_GROWTH", 16*c8dee2aaSAndroid Build Coastguard Worker "-sUSE_PTHREADS=0", # Disable pthreads 17*c8dee2aaSAndroid Build Coastguard Worker "-sMODULARIZE", 18*c8dee2aaSAndroid Build Coastguard Worker "-sDISABLE_EXCEPTION_CATCHING", # Disable all exception catching 19*c8dee2aaSAndroid Build Coastguard Worker "-sNODEJS_CATCH_EXIT=0", # We don't have a 'main' so disable exit() catching 20*c8dee2aaSAndroid Build Coastguard Worker "-sWASM", 21*c8dee2aaSAndroid Build Coastguard Worker "-sMAX_WEBGL_VERSION=2", 22*c8dee2aaSAndroid Build Coastguard Worker "-sUSE_WEBGL2=1", 23*c8dee2aaSAndroid Build Coastguard Worker "-sFORCE_FILESYSTEM=0", 24*c8dee2aaSAndroid Build Coastguard Worker "-sDYNAMIC_EXECUTION=0", 25*c8dee2aaSAndroid Build Coastguard Worker "-sERROR_ON_UNDEFINED_SYMBOLS=0", 26*c8dee2aaSAndroid Build Coastguard Worker "-sFILESYSTEM=0", 27*c8dee2aaSAndroid Build Coastguard Worker "-sEXPORTED_FUNCTIONS=['_malloc','_free']", 28*c8dee2aaSAndroid Build Coastguard Worker] 29*c8dee2aaSAndroid Build Coastguard Worker 30*c8dee2aaSAndroid Build Coastguard WorkerBASE_OPTS = [ 31*c8dee2aaSAndroid Build Coastguard Worker "-DEMSCRIPTEN_HAS_UNBOUND_TYPE_NAMES=0", 32*c8dee2aaSAndroid Build Coastguard Worker "-DSK_TRIVIAL_ABI=[[clang::trivial_abi]]", 33*c8dee2aaSAndroid Build Coastguard Worker] 34*c8dee2aaSAndroid Build Coastguard Worker 35*c8dee2aaSAndroid Build Coastguard WorkerRELEASE_OPTS = BASE_OPTS + [ 36*c8dee2aaSAndroid Build Coastguard Worker "-Oz", 37*c8dee2aaSAndroid Build Coastguard Worker "--closure 1", 38*c8dee2aaSAndroid Build Coastguard Worker "-DSK_RELEASE", 39*c8dee2aaSAndroid Build Coastguard Worker] 40*c8dee2aaSAndroid Build Coastguard Worker 41*c8dee2aaSAndroid Build Coastguard WorkerDEBUG_OPTS = BASE_OPTS + [ 42*c8dee2aaSAndroid Build Coastguard Worker "-O0", 43*c8dee2aaSAndroid Build Coastguard Worker "--js-opts", 44*c8dee2aaSAndroid Build Coastguard Worker "0", 45*c8dee2aaSAndroid Build Coastguard Worker "-sSAFE_HEAP=1", 46*c8dee2aaSAndroid Build Coastguard Worker "-sASSERTIONS=1", 47*c8dee2aaSAndroid Build Coastguard Worker "-g3", 48*c8dee2aaSAndroid Build Coastguard Worker "-DPATHKIT_TESTING", 49*c8dee2aaSAndroid Build Coastguard Worker "-DSK_DEBUG", 50*c8dee2aaSAndroid Build Coastguard Worker] 51*c8dee2aaSAndroid Build Coastguard Worker 52*c8dee2aaSAndroid Build Coastguard Worker# Note: These are defines that only impact the _bindings.cpp files in this 53*c8dee2aaSAndroid Build Coastguard Worker# folder. Any defines that need to effect the entire Skia build should go in 54*c8dee2aaSAndroid Build Coastguard Worker# //bazel/BUILD.bazel 55*c8dee2aaSAndroid Build Coastguard WorkerCK_DEFINES = [ 56*c8dee2aaSAndroid Build Coastguard Worker "CK_INCLUDE_PATHOPS", 57*c8dee2aaSAndroid Build Coastguard Worker "EMSCRIPTEN_HAS_UNBOUND_TYPE_NAMES=0", # Allows us to compile with -fno-rtti 58*c8dee2aaSAndroid Build Coastguard Worker] 59*c8dee2aaSAndroid Build Coastguard Worker 60*c8dee2aaSAndroid Build Coastguard WorkerCK_RELEASE_OPTS = [ 61*c8dee2aaSAndroid Build Coastguard Worker # Run the closure compiler 62*c8dee2aaSAndroid Build Coastguard Worker "--closure 1", 63*c8dee2aaSAndroid Build Coastguard Worker # pass the externs file in 64*c8dee2aaSAndroid Build Coastguard Worker "--closure-args=--externs=$(location externs.js)", 65*c8dee2aaSAndroid Build Coastguard Worker] 66*c8dee2aaSAndroid Build Coastguard Worker 67*c8dee2aaSAndroid Build Coastguard WorkerCK_LINKOPTS = BASE_LINKOPTS + [ 68*c8dee2aaSAndroid Build Coastguard Worker "-sEXPORT_NAME=PathKitInit", 69*c8dee2aaSAndroid Build Coastguard Worker "-sINITIAL_MEMORY=32MB", 70*c8dee2aaSAndroid Build Coastguard Worker "--pre-js", 71*c8dee2aaSAndroid Build Coastguard Worker "modules/pathkit/chaining.js", 72*c8dee2aaSAndroid Build Coastguard Worker "--pre-js", 73*c8dee2aaSAndroid Build Coastguard Worker "modules/pathkit/helper.js", 74*c8dee2aaSAndroid Build Coastguard Worker] + select({ 75*c8dee2aaSAndroid Build Coastguard Worker "//bazel/common_config_settings:debug_build": DEBUG_OPTS, 76*c8dee2aaSAndroid Build Coastguard Worker "//conditions:default": RELEASE_OPTS + CK_RELEASE_OPTS, 77*c8dee2aaSAndroid Build Coastguard Worker}) 78*c8dee2aaSAndroid Build Coastguard Worker 79*c8dee2aaSAndroid Build Coastguard Worker# All JS files that could possibly be included via --pre-js or --post-js. 80*c8dee2aaSAndroid Build Coastguard Worker# Whether they actually will be or not will be controlled above in the 81*c8dee2aaSAndroid Build Coastguard Worker# construction of CK_LINKOPTS. 82*c8dee2aaSAndroid Build Coastguard WorkerJS_INTERFACE_FILES = [ 83*c8dee2aaSAndroid Build Coastguard Worker "chaining.js", 84*c8dee2aaSAndroid Build Coastguard Worker "helper.js", 85*c8dee2aaSAndroid Build Coastguard Worker] 86*c8dee2aaSAndroid Build Coastguard Worker 87*c8dee2aaSAndroid Build Coastguard WorkerCK_SRCS = [ 88*c8dee2aaSAndroid Build Coastguard Worker "pathkit_wasm_bindings.cpp", 89*c8dee2aaSAndroid Build Coastguard Worker] 90*c8dee2aaSAndroid Build Coastguard Worker 91*c8dee2aaSAndroid Build Coastguard WorkerCK_COPTS = [ 92*c8dee2aaSAndroid Build Coastguard Worker "-Wno-header-hygiene", 93*c8dee2aaSAndroid Build Coastguard Worker] 94*c8dee2aaSAndroid Build Coastguard Worker 95*c8dee2aaSAndroid Build Coastguard Workercc_binary( 96*c8dee2aaSAndroid Build Coastguard Worker name = "pathkit.build", 97*c8dee2aaSAndroid Build Coastguard Worker srcs = CK_SRCS, 98*c8dee2aaSAndroid Build Coastguard Worker additional_linker_inputs = JS_INTERFACE_FILES + ["externs.js"], 99*c8dee2aaSAndroid Build Coastguard Worker copts = DEFAULT_COPTS + CK_COPTS, 100*c8dee2aaSAndroid Build Coastguard Worker linkopts = CK_LINKOPTS, 101*c8dee2aaSAndroid Build Coastguard Worker local_defines = CK_DEFINES, 102*c8dee2aaSAndroid Build Coastguard Worker # This target won't build successfully on its own because of missing 103*c8dee2aaSAndroid Build Coastguard Worker # emscripten headers etc. Therefore, we hide it from wildcards. 104*c8dee2aaSAndroid Build Coastguard Worker tags = ["manual"], 105*c8dee2aaSAndroid Build Coastguard Worker deps = [ 106*c8dee2aaSAndroid Build Coastguard Worker "//:core", 107*c8dee2aaSAndroid Build Coastguard Worker "//:pathops", 108*c8dee2aaSAndroid Build Coastguard Worker ], 109*c8dee2aaSAndroid Build Coastguard Worker) 110*c8dee2aaSAndroid Build Coastguard Worker 111*c8dee2aaSAndroid Build Coastguard Workerwasm_cc_binary( 112*c8dee2aaSAndroid Build Coastguard Worker name = "pathkit", 113*c8dee2aaSAndroid Build Coastguard Worker # Whatever is before the dot will be the name of the output js and wasm, aka "the stem". 114*c8dee2aaSAndroid Build Coastguard Worker # https://github.com/emscripten-core/emsdk/blob/4a48a752e6a8bef6f222622f2b4926d5eb3bdeb3/bazel/emscripten_toolchain/wasm_cc_binary.bzl#L179 115*c8dee2aaSAndroid Build Coastguard Worker cc_target = ":pathkit.build", 116*c8dee2aaSAndroid Build Coastguard Worker visibility = [ 117*c8dee2aaSAndroid Build Coastguard Worker "//infra/jsfiddle:__pkg__", 118*c8dee2aaSAndroid Build Coastguard Worker ], 119*c8dee2aaSAndroid Build Coastguard Worker) 120