1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
const std = @import("std");
/// Options set by Zig build.zig and exposed via `terminal_options`.
pub const Options = struct {
/// The target artifact to build. This will gate some functionality.
artifact: Artifact,
/// Whether Oniguruma regex support is available. If this isn't
/// available, some features will be disabled. This may be outdated,
/// but the specific disabled features are:
///
/// - Kitty graphics protocol
/// - Tmux control mode
///
oniguruma: bool,
/// Whether to build SIMD-accelerated code paths. This pulls in more
/// build-time dependencies and adds libc as a runtime dependency,
/// but results in significant performance improvements.
simd: bool,
/// True if we should enable the "slow" runtime safety checks. These
/// are runtime safety checks that are slower than typical and should
/// generally be disabled in production builds.
slow_runtime_safety: bool,
/// Force C ABI mode on or off. If not set, then it will be set based on
/// Options.
c_abi: bool,
/// Add the required build options for the terminal module.
pub fn add(
self: Options,
b: *std.Build,
m: *std.Build.Module,
) void {
const opts = b.addOptions();
opts.addOption(Artifact, "artifact", self.artifact);
opts.addOption(bool, "c_abi", self.c_abi);
opts.addOption(bool, "oniguruma", self.oniguruma);
opts.addOption(bool, "simd", self.simd);
opts.addOption(bool, "slow_runtime_safety", self.slow_runtime_safety);
// These are synthesized based on other options.
opts.addOption(bool, "kitty_graphics", self.oniguruma);
opts.addOption(bool, "tmux_control_mode", self.oniguruma);
m.addOptions("terminal_options", opts);
}
};
pub const Artifact = enum {
/// Ghostty application
ghostty,
/// libghostty-vt, Zig module
lib,
};
|