annotate gui_ze/gui_ze.bzl @ 179:8d17f6e6e290

[ThirdParty] Added emsdk bazel rules that can be supported by bazel 9.0.0
author MrJuneJune <me@mrjunejune.com>
date Thu, 22 Jan 2026 21:23:17 -0800
parents f3084bca7317
children 71ad34a8bc9a 8c74204fd362
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
154
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
1 def _wasm_binary_impl(ctx):
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
2 """
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
3 Compile C source to WASM using clang --target=wasm32.
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
4 No libc - suitable for standalone WASM modules.
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
5
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
6 Requires LLVM with wasm32 support (e.g., Homebrew LLVM on macOS).
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
7 """
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
8 src = ctx.file.src
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
9 out = ctx.actions.declare_file(ctx.label.name + ".wasm")
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
10
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
11 # Shell script to find clang with wasm support and set PATH for wasm-ld
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
12 setup_cmd = """
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
13 export PATH="/opt/homebrew/bin:/usr/local/bin:$PATH"
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
14 if [ -x /opt/homebrew/opt/llvm/bin/clang ]; then
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
15 CLANG=/opt/homebrew/opt/llvm/bin/clang
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
16 elif [ -x /usr/local/opt/llvm/bin/clang ]; then
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
17 CLANG=/usr/local/opt/llvm/bin/clang
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
18 else
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
19 CLANG=clang
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
20 fi
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
21 """
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
22
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
23 # Build clang command
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
24 cmd_parts = [
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
25 setup_cmd,
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
26 "$CLANG",
168
f3084bca7317 [Misc] Fixed all errors and all tests should pass now.
MrJuneJune <me@mrjunejune.com>
parents: 156
diff changeset
27 "--target=wasm32-unknown-unknown",
154
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
28 "-O2",
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
29 "-Wl,--no-entry",
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
30 "-Wl,--export-dynamic",
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
31 ]
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
32
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
33 # Add exported functions
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
34 for fn in ctx.attr.exports:
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
35 cmd_parts.append("-Wl,--export=" + fn)
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
36
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
37 cmd_parts.append("-o")
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
38 cmd_parts.append(out.path)
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
39 cmd_parts.append(src.path)
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
40
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
41 ctx.actions.run_shell(
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
42 inputs = [src],
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
43 outputs = [out],
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
44 command = " ".join(cmd_parts),
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
45 progress_message = "Compiling {} to WASM".format(src.basename),
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
46 execution_requirements = {"no-sandbox": "1"},
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
47 )
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
48
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
49 return [DefaultInfo(files = depset([out]))]
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
50
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
51 wasm_binary = rule(
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
52 implementation = _wasm_binary_impl,
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
53 attrs = {
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
54 "src": attr.label(
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
55 allow_single_file = [".c"],
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
56 mandatory = True,
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
57 doc = "The C source file to compile",
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
58 ),
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
59 "exports": attr.string_list(
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
60 default = [],
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
61 doc = "List of function names to export (without leading underscore)",
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
62 ),
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
63 },
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
64 )
bdcc610eeed8 [Markdown Converter][GuiZe] Added markdown coverter in C and wasm rule sets. Needs further view on this as I haven't taken a look. Written by Claude.
June Park <parkjune1995@gmail.com>
parents: 128
diff changeset
65
8
98f96b8032e5 [GuiZe] Creating custom bazel rule to deploy to github easily.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
66 def _foo_impl(ctx):
12
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
67 out = ctx.actions.declare_file(ctx.label.name)
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
68 ctx.actions.write(
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
69 output = out,
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
70 content = "Hello!\n",
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
71 )
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
72 return [DefaultInfo(files = depset([out]))]
8
98f96b8032e5 [GuiZe] Creating custom bazel rule to deploy to github easily.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
73
98f96b8032e5 [GuiZe] Creating custom bazel rule to deploy to github easily.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
74 foo_binary = rule(
98f96b8032e5 [GuiZe] Creating custom bazel rule to deploy to github easily.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
75 implementation = _foo_impl,
98f96b8032e5 [GuiZe] Creating custom bazel rule to deploy to github easily.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
76 )
98f96b8032e5 [GuiZe] Creating custom bazel rule to deploy to github easily.
June Park <parkjune1995@gmail.com>
parents:
diff changeset
77
12
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
78 def _bundle_impl(ctx):
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
79 """
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
80 bundle binary target into a folder which can later be used to make a post to github easily.
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
81 """
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
82 binary_target = ctx.attr.binary
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
83 binary = binary_target[DefaultInfo].files.to_list()[0] # First files are binary
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
84 runfiles_files = binary_target[DefaultInfo].default_runfiles.files.to_list()
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
85
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
86 # Name as output directory
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
87 out_dir = ctx.actions.declare_directory(ctx.label.name)
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
88
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
89 copy_cmd = []
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
90 copy_cmd.append("mkdir -p {}".format(out_dir.path))
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
91
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
92 for f in runfiles_files:
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
93 if f.path == binary.path:
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
94 continue
15
2b9e75756825 [GuiZe] Updated to handle bundling and created a shee
June Park <parkjune1995@gmail.com>
parents: 12
diff changeset
95
2b9e75756825 [GuiZe] Updated to handle bundling and created a shee
June Park <parkjune1995@gmail.com>
parents: 12
diff changeset
96 start = 0
2b9e75756825 [GuiZe] Updated to handle bundling and created a shee
June Park <parkjune1995@gmail.com>
parents: 12
diff changeset
97 for directory in f.path.split("/"):
2b9e75756825 [GuiZe] Updated to handle bundling and created a shee
June Park <parkjune1995@gmail.com>
parents: 12
diff changeset
98 if directory == binary.short_path.split("/")[0]:
2b9e75756825 [GuiZe] Updated to handle bundling and created a shee
June Park <parkjune1995@gmail.com>
parents: 12
diff changeset
99 break
2b9e75756825 [GuiZe] Updated to handle bundling and created a shee
June Park <parkjune1995@gmail.com>
parents: 12
diff changeset
100 start += 1
2b9e75756825 [GuiZe] Updated to handle bundling and created a shee
June Park <parkjune1995@gmail.com>
parents: 12
diff changeset
101
12
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
102 # Remove the first folder (output) and last file (actaul files that needed to be copied)
15
2b9e75756825 [GuiZe] Updated to handle bundling and created a shee
June Park <parkjune1995@gmail.com>
parents: 12
diff changeset
103 paths = "/".join(f.path.split("/")[start:-1])
12
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
104 full_path = "{}/{}".format(out_dir.path, paths)
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
105 copy_cmd.append("mkdir -p {}".format(full_path))
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
106 copy_cmd.append("cp {} {}".format(f.path, full_path))
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
107
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
108 copy_cmd.append("cp {} {}".format(binary.path, out_dir.path))
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
109
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
110 ctx.actions.run_shell(
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
111 inputs = runfiles_files,
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
112 outputs = [out_dir],
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
113 command = " && ".join(copy_cmd),
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
114 progress_message = "Bundling {}".format(ctx.label.name),
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
115 )
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
116 return [DefaultInfo(files = depset([out_dir]))]
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
117
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
118 bundle = rule(
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
119 implementation = _bundle_impl,
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
120 attrs = {
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
121 "binary": attr.label(
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
122 doc = "The cc_binary target to bundle",
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
123 providers = [DefaultInfo],
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
124 ),
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
125 },
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
126 )
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
127
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
128
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
129 def _bun_binary_impl(ctx):
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
130 out = ctx.actions.declare_file("bun")
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
131 ctx.actions.run_shell(
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
132 inputs = ctx.files.srcs,
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
133 outputs = [out],
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
134 command = """
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
135 mkdir -p {outdir}
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
136 unzip -j {src} {inner} -d {outdir}
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
137 chmod +x {outdir}/bun
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
138 """.format(
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
139 outdir = out.dirname,
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
140 src = ctx.files.srcs[0].path,
24
7d3fa1a7a854 [GuiZe] Support x86 chip for bun.
June Park <parkjune1995@gmail.com>
parents: 15
diff changeset
141 inner = ctx.attr.src_folder,
12
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
142 out = out.path,
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
143 ),
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
144 )
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
145 return DefaultInfo(
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
146 files = depset([out]),
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
147 executable = out,
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
148 )
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
149
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
150 bun_binary = rule(
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
151 implementation = _bun_binary_impl,
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
152 attrs = {
25
342726584be2 [Bun] Fixed how bun would be ran within bazel.
June Park <parkjune1995@gmail.com>
parents: 24
diff changeset
153 "srcs": attr.label_list(allow_files=True),
342726584be2 [Bun] Fixed how bun would be ran within bazel.
June Park <parkjune1995@gmail.com>
parents: 24
diff changeset
154 "src_folder": attr.string(),
12
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
155 },
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
156 executable = True,
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
157 )
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
158
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
159 def _bun_build_impl(ctx):
15
2b9e75756825 [GuiZe] Updated to handle bundling and created a shee
June Park <parkjune1995@gmail.com>
parents: 12
diff changeset
160 """
2b9e75756825 [GuiZe] Updated to handle bundling and created a shee
June Park <parkjune1995@gmail.com>
parents: 12
diff changeset
161 Run bun build on the folder
2b9e75756825 [GuiZe] Updated to handle bundling and created a shee
June Park <parkjune1995@gmail.com>
parents: 12
diff changeset
162
2b9e75756825 [GuiZe] Updated to handle bundling and created a shee
June Park <parkjune1995@gmail.com>
parents: 12
diff changeset
163 This sucks because you need to either copy node module into the root folder where main.ts file
2b9e75756825 [GuiZe] Updated to handle bundling and created a shee
June Park <parkjune1995@gmail.com>
parents: 12
diff changeset
164 exists or copy everything outwards. I chose to do it in this way.
2b9e75756825 [GuiZe] Updated to handle bundling and created a shee
June Park <parkjune1995@gmail.com>
parents: 12
diff changeset
165
25
342726584be2 [Bun] Fixed how bun would be ran within bazel.
June Park <parkjune1995@gmail.com>
parents: 24
diff changeset
166 TODO: If possible, maybe create a node_module inside of the main target path and create a symlink
342726584be2 [Bun] Fixed how bun would be ran within bazel.
June Park <parkjune1995@gmail.com>
parents: 24
diff changeset
167 TODO: Add a specific path for node_modules
15
2b9e75756825 [GuiZe] Updated to handle bundling and created a shee
June Park <parkjune1995@gmail.com>
parents: 12
diff changeset
168 """
12
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
169 out = ctx.actions.declare_file(ctx.label.name + ".js")
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
170 inputs = [ctx.file.src] + ctx.files.data
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
171
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
172 ctx.actions.run_shell(
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
173 inputs = inputs,
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
174 outputs = [out],
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
175 tools = [ctx.executable._bun] + inputs,
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
176 command = """
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
177 cp -r third_party/bun/** . \
25
342726584be2 [Bun] Fixed how bun would be ran within bazel.
June Park <parkjune1995@gmail.com>
parents: 24
diff changeset
178 && cp -r {src_folder}/** . \
342726584be2 [Bun] Fixed how bun would be ran within bazel.
June Park <parkjune1995@gmail.com>
parents: 24
diff changeset
179 && export NODE_PATH=./node_modules && {bun_path} build {input_path} --outfile {output_path}
12
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
180 """.format(
25
342726584be2 [Bun] Fixed how bun would be ran within bazel.
June Park <parkjune1995@gmail.com>
parents: 24
diff changeset
181 bun_path = ctx.executable._bun.path,
342726584be2 [Bun] Fixed how bun would be ran within bazel.
June Park <parkjune1995@gmail.com>
parents: 24
diff changeset
182 src_folder = ctx.attr.src_folder,
342726584be2 [Bun] Fixed how bun would be ran within bazel.
June Park <parkjune1995@gmail.com>
parents: 24
diff changeset
183 input_path = ctx.file.src.path.split("/")[-1],
342726584be2 [Bun] Fixed how bun would be ran within bazel.
June Park <parkjune1995@gmail.com>
parents: 24
diff changeset
184 output_path = out.path,
12
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
185 ),
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
186 progress_message = "Bundling {} with Bun!\n\n".format(ctx.file.src.path),
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
187 )
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
188
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
189 return [DefaultInfo(files=depset([out]))]
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
190
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
191 bun_build = rule(
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
192 implementation = _bun_build_impl,
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
193 attrs = {
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
194 "src": attr.label(allow_single_file = [".ts", ".tsx", ".js", ".jsx"]),
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
195 "_bun": attr.label(
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
196 default = Label("//third_party/bun:bun"),
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
197 executable = True,
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
198 cfg = "exec",
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
199 ),
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
200 "data": attr.label_list(allow_files=True),
25
342726584be2 [Bun] Fixed how bun would be ran within bazel.
June Park <parkjune1995@gmail.com>
parents: 24
diff changeset
201 "src_folder": attr.string(),
12
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
202 },
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
203 )
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
204
156
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
205 def _bun_run_impl(ctx):
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
206 actual_exe = ctx.actions.declare_file(ctx.label.name)
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
207
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
208 # 1. Get the workspace name (crucial for runfiles paths)
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
209 workspace_name = ctx.workspace_name
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
210
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
211 # 2. Define the paths relative to the runfiles root
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
212 bun_path = ctx.executable._bun.short_path
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
213 src_path = ctx.file.src.short_path
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
214
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
215 # 3. Create the launcher script
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
216 # We use a template to handle the environment and pathing
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
217 script_content = """#!/bin/bash
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
218 # Find the runfiles directory
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
219 if [[ -z "$RUNFILES_DIR" ]]; then
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
220 if [[ -d "$0.runfiles" ]]; then
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
221 RUNFILES_DIR="$0.runfiles"
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
222 fi
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
223 fi
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
224
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
225 # Navigate to the workspace root inside runfiles
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
226 cd "$RUNFILES_DIR/{workspace}"
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
227 pwd
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
228 # Execute bun with the src file and any extra arguments
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
229 exec "./{bun_bin}" run "./{src_file}" "$@"
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
230 """.format(
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
231 workspace = workspace_name,
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
232 bun_bin = bun_path,
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
233 src_file = src_path
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
234 )
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
235
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
236 ctx.actions.write(
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
237 output = actual_exe,
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
238 content = script_content,
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
239 is_executable = True,
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
240 )
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
241
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
242 return [
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
243 DefaultInfo(
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
244 executable = actual_exe,
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
245 runfiles = ctx.runfiles(
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
246 files = [ctx.file.src] + ctx.files.data + ctx.files._bun_files
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
247 ).merge(ctx.attr._bun[DefaultInfo].default_runfiles),
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
248 ),
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
249 ]
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
250
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
251 # TODO: Fix the rules so that it can do relative import.
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
252 bun_run = rule(
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
253 implementation = _bun_run_impl,
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
254 executable = True,
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
255 attrs = {
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
256 "src": attr.label(allow_single_file = True, mandatory = True),
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
257 "data": attr.label_list(allow_files = True),
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
258 "_bun": attr.label(
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
259 default = Label("//third_party/bun:bun"),
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
260 executable = True,
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
261 cfg = "exec"
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
262 ),
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
263 "_bun_files": attr.label(default = Label("//third_party/bun:bun_files")),
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
264 },
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
265 )
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
266
cd35e600ae34 [MarkDown Converter] Fixed few things and made a test
June Park <parkjune1995@gmail.com>
parents: 154
diff changeset
267
12
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
268 def _move_files_into_dir_impl(ctx):
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
269 srcs = ctx.files.srcs
64
a30944e5719e Added vibe coded markdown to html script since it is useful for me. Updated Dowa so that it can be compiled without dirnet for windows.
June Park <parkjune1995@gmail.com>
parents: 58
diff changeset
270 outs = []
12
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
271 for src in srcs:
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
272 out = ctx.actions.declare_file(ctx.attr.dest + "/" + src.basename)
64
a30944e5719e Added vibe coded markdown to html script since it is useful for me. Updated Dowa so that it can be compiled without dirnet for windows.
June Park <parkjune1995@gmail.com>
parents: 58
diff changeset
273 ctx.actions.run_shell(
a30944e5719e Added vibe coded markdown to html script since it is useful for me. Updated Dowa so that it can be compiled without dirnet for windows.
June Park <parkjune1995@gmail.com>
parents: 58
diff changeset
274 inputs = [src],
a30944e5719e Added vibe coded markdown to html script since it is useful for me. Updated Dowa so that it can be compiled without dirnet for windows.
June Park <parkjune1995@gmail.com>
parents: 58
diff changeset
275 outputs = [out],
a30944e5719e Added vibe coded markdown to html script since it is useful for me. Updated Dowa so that it can be compiled without dirnet for windows.
June Park <parkjune1995@gmail.com>
parents: 58
diff changeset
276 command = "cp \"$1\" \"$2\"",
a30944e5719e Added vibe coded markdown to html script since it is useful for me. Updated Dowa so that it can be compiled without dirnet for windows.
June Park <parkjune1995@gmail.com>
parents: 58
diff changeset
277 arguments = [src.path, out.path],
12
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
278 )
64
a30944e5719e Added vibe coded markdown to html script since it is useful for me. Updated Dowa so that it can be compiled without dirnet for windows.
June Park <parkjune1995@gmail.com>
parents: 58
diff changeset
279 outs.append(out)
a30944e5719e Added vibe coded markdown to html script since it is useful for me. Updated Dowa so that it can be compiled without dirnet for windows.
June Park <parkjune1995@gmail.com>
parents: 58
diff changeset
280 return [DefaultInfo(files = depset(outs))]
12
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
281
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
282 move_files_into_dir = rule(
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
283 implementation = _move_files_into_dir_impl,
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
284 attrs = {
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
285 "srcs": attr.label_list(allow_files=True),
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
286 "dest": attr.string(),
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
287 },
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
288 )
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
289
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
290 def _move_to_directory_impl(ctx):
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
291 srcs = ctx.files.data
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
292 res = []
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
293 for src in srcs:
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
294 true = "/".join(src.path.split("/")[2:])
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
295 path = ctx.attr.dest + "/" + true if ctx.attr.dest != "" else true
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
296 out = ctx.actions.declare_file(
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
297 path
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
298 );
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
299 ctx.actions.symlink(
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
300 output = out,
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
301 target_file = src,
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
302 )
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
303 res.append(out)
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
304 return [DefaultInfo(files = depset(res))]
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
305
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
306 move_to_directory = rule(
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
307 implementation = _move_to_directory_impl,
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
308 attrs = {
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
309 "data": attr.label_list(allow_files=True),
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
310 "dest": attr.string(),
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
311 },
de54585a40f1 Adding bun and node modules.
June Park <parkjune1995@gmail.com>
parents: 8
diff changeset
312 )
58
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
313
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
314
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
315 def _macos_app_impl(ctx):
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
316 """Implementation for creating a macOS .app bundle from a binary."""
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
317 binary = ctx.file.binary
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
318 app_name = ctx.attr.app_name
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
319 bundle_id = ctx.attr.bundle_id
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
320
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
321 # Declare the .app directory as output
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
322 app_dir = ctx.actions.declare_directory(app_name + ".app")
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
323
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
324 ctx.actions.run_shell(
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
325 inputs = [binary],
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
326 outputs = [app_dir],
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
327 command = """
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
328 set -e
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
329
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
330 APPDIR="{app_dir}"
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
331
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
332 rm -rf "$APPDIR"
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
333 mkdir -p "$APPDIR/Contents/MacOS"
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
334 mkdir -p "$APPDIR/Contents/Resources"
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
335
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
336 cp {binary} "$APPDIR/Contents/MacOS/{app_name}"
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
337 chmod +x "$APPDIR/Contents/MacOS/{app_name}"
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
338
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
339 cat > "$APPDIR/Contents/Info.plist" <<EOF
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
340 <?xml version="1.0" encoding="UTF-8"?>
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
341 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
342 "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
343 <plist version="1.0">
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
344 <dict>
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
345 <key>CFBundleExecutable</key>
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
346 <string>{app_name}</string>
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
347 <key>CFBundleIdentifier</key>
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
348 <string>{bundle_id}</string>
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
349 <key>CFBundleName</key>
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
350 <string>{app_name}</string>
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
351 <key>CFBundleVersion</key>
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
352 <string>1.0</string>
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
353 </dict>
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
354 </plist>
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
355 EOF
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
356 """.format(
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
357 app_dir = app_dir.path,
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
358 binary = binary.path,
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
359 app_name = app_name,
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
360 bundle_id = bundle_id,
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
361 ),
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
362 progress_message = "Creating macOS app bundle for {}".format(app_name),
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
363 )
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
364
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
365 return [DefaultInfo(files = depset([app_dir]))]
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
366
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
367 _macos_app = rule(
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
368 implementation = _macos_app_impl,
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
369 attrs = {
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
370 "binary": attr.label(
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
371 allow_single_file = True,
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
372 mandatory = True,
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
373 doc = "The binary to bundle into a .app",
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
374 ),
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
375 "app_name": attr.string(
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
376 mandatory = True,
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
377 doc = "Name of the application",
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
378 ),
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
379 "bundle_id": attr.string(
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
380 mandatory = True,
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
381 doc = "Bundle identifier (e.g., com.example.app)",
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
382 ),
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
383 },
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
384 )
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
385
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
386 def _macos_signed_app_impl(ctx):
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
387 """Implementation for signing a macOS .app bundle."""
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
388 app_dir = ctx.file.app
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
389 app_name = ctx.attr.app_name
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
390
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
391 # Declare the signed .app directory as output
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
392 signed_app_dir = ctx.actions.declare_directory(app_name + "_signed.app")
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
393
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
394 ctx.actions.run_shell(
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
395 inputs = [app_dir],
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
396 outputs = [signed_app_dir],
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
397 command = """
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
398 set -e
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
399
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
400 APPDIR="{app_dir}"
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
401 SIGNEDDIR="{signed_dir}"
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
402
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
403 rm -rf "$SIGNEDDIR"
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
404 # Use -L to dereference symlinks, as codesign doesn't work with symlinks
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
405 cp -RL "$APPDIR" "$SIGNEDDIR"
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
406
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
407 codesign --deep --force --sign - "$SIGNEDDIR"
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
408 """.format(
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
409 app_dir = app_dir.path,
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
410 signed_dir = signed_app_dir.path,
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
411 ),
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
412 progress_message = "Signing macOS app bundle {}".format(app_name),
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
413 )
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
414
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
415 return [DefaultInfo(files = depset([signed_app_dir]))]
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
416
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
417 _macos_signed_app = rule(
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
418 implementation = _macos_signed_app_impl,
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
419 attrs = {
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
420 "app": attr.label(
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
421 allow_single_file = True,
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
422 mandatory = True,
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
423 doc = "The .app directory to sign",
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
424 ),
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
425 "app_name": attr.string(
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
426 mandatory = True,
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
427 doc = "Name of the application",
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
428 ),
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
429 },
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
430 )
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
431
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
432 def macos_app_and_dmg(name, binary, bundle_id = "com.example.app"):
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
433 """
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
434 Creates a macOS .app bundle, signs it, and packages it into a DMG.
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
435
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
436 Args:
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
437 name: Base name for the generated targets
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
438 binary: Label of the binary target to bundle
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
439 bundle_id: Bundle identifier for the app (default: com.example.app)
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
440
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
441 Generates:
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
442 {name}_app: The .app bundle
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
443 {name}_signed_app: The signed .app bundle
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
444 {name}_dmg: The final DMG file
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
445 """
168
f3084bca7317 [Misc] Fixed all errors and all tests should pass now.
MrJuneJune <me@mrjunejune.com>
parents: 156
diff changeset
446 macos_constraint = ["@platforms//os:macos"]
f3084bca7317 [Misc] Fixed all errors and all tests should pass now.
MrJuneJune <me@mrjunejune.com>
parents: 156
diff changeset
447
58
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
448 # 1. Build the .app bundle
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
449 _macos_app(
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
450 name = name + "_app",
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
451 binary = binary,
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
452 app_name = name,
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
453 bundle_id = bundle_id,
168
f3084bca7317 [Misc] Fixed all errors and all tests should pass now.
MrJuneJune <me@mrjunejune.com>
parents: 156
diff changeset
454 target_compatible_with = macos_constraint,
58
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
455 )
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
456
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
457 # 2. Sign the .app
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
458 _macos_signed_app(
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
459 name = name + "_signed_app",
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
460 app = ":" + name + "_app",
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
461 app_name = name,
168
f3084bca7317 [Misc] Fixed all errors and all tests should pass now.
MrJuneJune <me@mrjunejune.com>
parents: 156
diff changeset
462 target_compatible_with = macos_constraint,
58
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
463 )
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
464
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
465 # 3. Create the DMG
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
466 native.genrule(
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
467 name = name + "_dmg",
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
468 srcs = [":" + name + "_signed_app"],
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
469 outs = [name + ".dmg"],
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
470 cmd = """
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
471 set -e
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
472
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
473 SIGNEDDIR="$(location :{name}_signed_app)"
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
474
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
475 hdiutil create \
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
476 -volname {name} \
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
477 -srcfolder "$$SIGNEDDIR" \
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
478 -ov -format UDZO "$@"
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
479 """.format(name = name),
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
480 local = 1, # Disable sandboxing for hdiutil
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
481 tags = ["no-sandbox"],
168
f3084bca7317 [Misc] Fixed all errors and all tests should pass now.
MrJuneJune <me@mrjunejune.com>
parents: 156
diff changeset
482 target_compatible_with = macos_constraint,
58
ccb42d5bf8fd [PostDog] Somewhat working copy. That would use for testing.
June Park <parkjune1995@gmail.com>
parents: 25
diff changeset
483 )