Mercurial
view gui_ze/gui_ze.bzl @ 22:947b81010aba
[Dowa & Seobeo] Updated so that Dowa hashmaps can use arena and not be broken. Split up web so taht it can handle different paths. Also fixes issues with hash collisions which was pain in the ass.
| author | June Park <parkjune1995@gmail.com> |
|---|---|
| date | Tue, 07 Oct 2025 07:11:02 -0700 |
| parents | 2b9e75756825 |
| children | 7d3fa1a7a854 |
line wrap: on
line source
def _foo_impl(ctx): out = ctx.actions.declare_file(ctx.label.name) ctx.actions.write( output = out, content = "Hello!\n", ) return [DefaultInfo(files = depset([out]))] foo_binary = rule( implementation = _foo_impl, ) def _bundle_impl(ctx): """ bundle binary target into a folder which can later be used to make a post to github easily. """ binary_target = ctx.attr.binary binary = binary_target[DefaultInfo].files.to_list()[0] # First files are binary runfiles_files = binary_target[DefaultInfo].default_runfiles.files.to_list() # Name as output directory out_dir = ctx.actions.declare_directory(ctx.label.name) copy_cmd = [] copy_cmd.append("mkdir -p {}".format(out_dir.path)) for f in runfiles_files: if f.path == binary.path: continue start = 0 for directory in f.path.split("/"): if directory == binary.short_path.split("/")[0]: break print("\n\n equals: ", directory, binary.short_path.split("/")[0]); start += 1 # Remove the first folder (output) and last file (actaul files that needed to be copied) paths = "/".join(f.path.split("/")[start:-1]) full_path = "{}/{}".format(out_dir.path, paths) copy_cmd.append("mkdir -p {}".format(full_path)) copy_cmd.append("cp {} {}".format(f.path, full_path)) copy_cmd.append("cp {} {}".format(binary.path, out_dir.path)) ctx.actions.run_shell( inputs = runfiles_files, outputs = [out_dir], command = " && ".join(copy_cmd), progress_message = "Bundling {}".format(ctx.label.name), ) print("[INFO] See {}".format(out_dir.path)) return [DefaultInfo(files = depset([out_dir]))] bundle = rule( implementation = _bundle_impl, attrs = { "binary": attr.label( doc = "The cc_binary target to bundle", providers = [DefaultInfo], ), }, ) def _bun_binary_impl(ctx): out = ctx.actions.declare_file("bun") ctx.actions.run_shell( inputs = ctx.files.srcs, outputs = [out], command = """ mkdir -p {outdir} unzip -j {src} {inner} -d {outdir} chmod +x {outdir}/bun mv {outdir}/bun {out} """.format( outdir = out.dirname, src = ctx.files.srcs[0].path, inner = "bun-darwin-aarch64/bun", out = out.path, ), ) return DefaultInfo( files = depset([out]), executable = out, ) bun_binary = rule( implementation = _bun_binary_impl, attrs = { "srcs": attr.label_list(allow_files=True), }, executable = True, ) def _bun_build_impl(ctx): """ Run bun build on the folder This sucks because you need to either copy node module into the root folder where main.ts file exists or copy everything outwards. I chose to do it in this way. TODO: If possible, maybe create a node_module inside of the main target path and create a symlink, but I couldn't get it to work lol. """ out = ctx.actions.declare_file(ctx.label.name + ".js") inputs = [ctx.file.src] + ctx.files.data ctx.actions.run_shell( inputs = inputs, outputs = [out], tools = [ctx.executable._bun] + inputs, command = """ cp -r third_party/bun/** . \ && cp -r playground/** . \ && {} build {} --outfile {} """.format( ctx.executable._bun.path, ctx.file.src.path.split("/")[-1], out.path, ), progress_message = "Bundling {} with Bun!\n\n".format(ctx.file.src.path), ) return [DefaultInfo(files=depset([out]))] bun_build = rule( implementation = _bun_build_impl, attrs = { "src": attr.label(allow_single_file = [".ts", ".tsx", ".js", ".jsx"]), "_bun": attr.label( default = Label("//third_party/bun:bun"), executable = True, cfg = "exec", ), "data": attr.label_list(allow_files=True), }, ) def _move_files_into_dir_impl(ctx): srcs = ctx.files.srcs for src in srcs: out = ctx.actions.declare_file(ctx.attr.dest + "/" + src.basename) ctx.actions.symlink( output = out, target_file = src, ) return [DefaultInfo(files = depset([out]))] move_files_into_dir = rule( implementation = _move_files_into_dir_impl, attrs = { "srcs": attr.label_list(allow_files=True), "dest": attr.string(), }, ) def _move_to_directory_impl(ctx): srcs = ctx.files.data res = [] for src in srcs: true = "/".join(src.path.split("/")[2:]) path = ctx.attr.dest + "/" + true if ctx.attr.dest != "" else true out = ctx.actions.declare_file( path ); ctx.actions.symlink( output = out, target_file = src, ) res.append(out) return [DefaultInfo(files = depset(res))] move_to_directory = rule( implementation = _move_to_directory_impl, attrs = { "data": attr.label_list(allow_files=True), "dest": attr.string(), }, )