zellij-compact-status/build.zig

65 lines
2 KiB
Zig

const std = @import("std");
const pkgs = @import("deps.zig").pkgs;
pub fn build(b: *std.build.Builder) !void {
// Standard release options allow the person running `zig build` to select
// between Debug, ReleaseSafe, ReleaseFast, and ReleaseSmall.
const mode = b.standardReleaseOptions();
const lib = b.addSharedLibrary("zellij-compact-status", "src/main.zig", .{ .unversioned = {} });
lib.setBuildMode(mode);
lib.target.cpu_arch = .wasm32;
lib.target.os_tag = .wasi;
lib.rdynamic = true;
lib.strip = mode != .Debug;
pkgs.addAllTo(lib);
const main_tests = b.addTest("src/main.zig");
main_tests.setBuildMode(mode);
const test_step = b.step("test", "Run library tests");
test_step.dependOn(&main_tests.step);
b.getInstallStep().dependOn(&(try InstallStep.init(b, lib)).step);
}
const InstallStep = struct {
builder: *std.build.Builder,
step: std.build.Step,
lib: *std.build.LibExeObjStep,
pub fn init(builder: *std.build.Builder, lib: *std.build.LibExeObjStep) !*InstallStep {
const self = try builder.allocator.create(InstallStep);
self.* = .{
.builder = builder,
.lib = lib,
.step = std.build.Step.init(.custom, "install", builder.allocator, make),
};
self.step.dependOn(&lib.step);
return self;
}
fn make(step: *std.build.Step) anyerror!void {
const self = @fieldParentPtr(InstallStep, "step", step);
const plugin_install_dir = std.build.InstallDir{
.custom = "share/zellij/plugins",
};
const plugin_basename = "compact-status.wasm";
const dest_path = self.builder.getInstallPath(
plugin_install_dir,
plugin_basename,
);
try self.builder.updateFile(
self.lib.getOutputSource().getPath(self.builder),
dest_path,
);
// FIXME: the uninstall step doesn't do anything, despite this
self.builder.pushInstalledFile(plugin_install_dir, plugin_basename);
}
};