1cb93a386Sopenharmony_ciload("@rules_cc//cc:defs.bzl", "cc_binary")
2cb93a386Sopenharmony_ciload("@emsdk//emscripten_toolchain:wasm_rules.bzl", "wasm_cc_binary")
3cb93a386Sopenharmony_ci
4cb93a386Sopenharmony_ciBASE_LINKOPTS = [
5cb93a386Sopenharmony_ci    #"-flto",  # https://github.com/emscripten-core/emsdk/issues/807
6cb93a386Sopenharmony_ci    "--bind",  # Compiles the source code using the Embind bindings to connect C/C++ and JavaScript
7cb93a386Sopenharmony_ci    "-s ALLOW_MEMORY_GROWTH=1",
8cb93a386Sopenharmony_ci    "-s USE_PTHREADS=0",  # Disable pthreads
9cb93a386Sopenharmony_ci    "-s ASSERTIONS=0",  # Turn off assertions
10cb93a386Sopenharmony_ci    "-s MODULARIZE=1",
11cb93a386Sopenharmony_ci    "-s EXPORT_NAME=WebGPUKitInit",
12cb93a386Sopenharmony_ci    "-s DISABLE_EXCEPTION_CATCHING=1",  # Disable all exception catching
13cb93a386Sopenharmony_ci    "-s NODEJS_CATCH_EXIT=0",  # We don't have a 'main' so disable exit() catching
14cb93a386Sopenharmony_ci    "-s WASM=1",
15cb93a386Sopenharmony_ci    "-s USE_WEBGPU=1",
16cb93a386Sopenharmony_ci]
17cb93a386Sopenharmony_ci
18cb93a386Sopenharmony_ciRELEASE_OPTS = [
19cb93a386Sopenharmony_ci    "--closure 1",  # Run the closure compiler
20cb93a386Sopenharmony_ci]
21cb93a386Sopenharmony_ci
22cb93a386Sopenharmony_ciDEBUG_OPTS = [
23cb93a386Sopenharmony_ci    "--closure 0",  # Do not use closure
24cb93a386Sopenharmony_ci]
25cb93a386Sopenharmony_ci
26cb93a386Sopenharmony_ciconfig_setting(
27cb93a386Sopenharmony_ci    name = "release_opts",
28cb93a386Sopenharmony_ci    values = {"compilation_mode": "opt"},
29cb93a386Sopenharmony_ci)
30cb93a386Sopenharmony_ci
31cb93a386Sopenharmony_ciconfig_setting(
32cb93a386Sopenharmony_ci    name = "debug_opts",
33cb93a386Sopenharmony_ci    values = {"compilation_mode": "dbg"},
34cb93a386Sopenharmony_ci)
35cb93a386Sopenharmony_ci
36cb93a386Sopenharmony_cicc_binary(
37cb93a386Sopenharmony_ci    name = "hello-world",
38cb93a386Sopenharmony_ci    srcs = ["bindings.cpp"],
39cb93a386Sopenharmony_ci    linkopts = select({
40cb93a386Sopenharmony_ci        ":debug_opts": BASE_LINKOPTS + DEBUG_OPTS,
41cb93a386Sopenharmony_ci        ":release_opts": BASE_LINKOPTS + RELEASE_OPTS,
42cb93a386Sopenharmony_ci        "//conditions:default": BASE_LINKOPTS + RELEASE_OPTS,
43cb93a386Sopenharmony_ci    }),
44cb93a386Sopenharmony_ci    # This target won't build successfully on its own because of missing emscripten
45cb93a386Sopenharmony_ci    # headers etc. Therefore, we hide it from wildcards.
46cb93a386Sopenharmony_ci    tags = ["manual"],
47cb93a386Sopenharmony_ci)
48cb93a386Sopenharmony_ci
49cb93a386Sopenharmony_ciwasm_cc_binary(
50cb93a386Sopenharmony_ci    name = "hello-world-wasm",
51cb93a386Sopenharmony_ci    cc_target = ":hello-world",
52cb93a386Sopenharmony_ci)
53