diff --git a/example/c-vt/build.zig b/example/c-vt/build.zig new file mode 100644 index 000000000..b1ec9f5b1 --- /dev/null +++ b/example/c-vt/build.zig @@ -0,0 +1,42 @@ +const std = @import("std"); + +pub fn build(b: *std.Build) void { + const target = b.standardTargetOptions(.{}); + const optimize = b.standardOptimizeOption(.{}); + + const run_step = b.step("run", "Run the app"); + + const exe_mod = b.createModule(.{ + .target = target, + .optimize = optimize, + }); + exe_mod.addCSourceFiles(.{ + .root = b.path("src"), + .files = &.{"main.c"}, + }); + + // You'll want to use a lazy dependency here so that ghostty is only + // downloaded if you actually need it. + if (b.lazyDependency("ghostty", .{ + // Setting simd to false will force a pure static build that + // doesn't even require libc, but it has a significant performance + // penalty. If your embedding app requires libc anyway, you should + // always keep simd enabled. + // .simd = false, + })) |dep| { + exe_mod.linkLibrary(dep.artifact("ghostty-vt")); + } + + // Exe + const exe = b.addExecutable(.{ + .name = "c_vt", + .root_module = exe_mod, + }); + b.installArtifact(exe); + + // Run + const run_cmd = b.addRunArtifact(exe); + run_cmd.step.dependOn(b.getInstallStep()); + if (b.args) |args| run_cmd.addArgs(args); + run_step.dependOn(&run_cmd.step); +} diff --git a/example/c-vt/build.zig.zon b/example/c-vt/build.zig.zon new file mode 100644 index 000000000..3230f440e --- /dev/null +++ b/example/c-vt/build.zig.zon @@ -0,0 +1,24 @@ +.{ + .name = .c_vt, + .version = "0.0.0", + .fingerprint = 0x413a8529b1255f9a, + .minimum_zig_version = "0.14.1", + .dependencies = .{ + // Ghostty dependency. In reality, you'd probably use a URL-based + // dependency like the one showed (and commented out) below this one. + // We use a path dependency here for simplicity and to ensure our + // examples always test against the source they're bundled with. + .ghostty = .{ .path = "../../" }, + + // Example of what a URL-based dependency looks like: + // .ghostty = .{ + // .url = "https://github.com/ghostty-org/ghostty/archive/COMMIT.tar.gz", + // .hash = "N-V-__8AAMVLTABmYkLqhZPLXnMl-KyN38R8UVYqGrxqO36s", + // }, + }, + .paths = .{ + "build.zig", + "build.zig.zon", + "src", + }, +} diff --git a/example/c-vt/src/main.c b/example/c-vt/src/main.c new file mode 100644 index 000000000..45269d1d4 --- /dev/null +++ b/example/c-vt/src/main.c @@ -0,0 +1,3 @@ +int main() { + return 42; +} diff --git a/include/ghostty-vt.h b/include/ghostty-vt.h index b61069058..7bbbdf3da 100644 --- a/include/ghostty-vt.h +++ b/include/ghostty-vt.h @@ -21,6 +21,9 @@ typedef enum { GHOSTTY_VT_OUT_OF_MEMORY = -1, } GhosttyVtResult; +//------------------------------------------------------------------- +// Allocator Interface + typedef struct { /** * Return a pointer to `len` bytes with specified `alignment`, or return