xref: /aosp_15_r20/external/skia/modules/pathkit/BUILD.bazel (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
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