lib-vt: boilerplate to build a shared object
parent
f97518cc10
commit
b006101ddd
12
build.zig
12
build.zig
|
|
@ -31,6 +31,7 @@ pub fn build(b: *std.Build) !void {
|
|||
|
||||
// All our steps which we'll hook up later. The steps are shown
|
||||
// up here just so that they are more self-documenting.
|
||||
const libvt_step = b.step("lib-vt", "Build libghostty-vt");
|
||||
const run_step = b.step("run", "Run the app");
|
||||
const run_valgrind_step = b.step(
|
||||
"run-valgrind",
|
||||
|
|
@ -86,7 +87,7 @@ pub fn build(b: *std.Build) !void {
|
|||
check_step.dependOn(dist.install_step);
|
||||
}
|
||||
|
||||
// libghostty
|
||||
// libghostty (internal, big)
|
||||
const libghostty_shared = try buildpkg.GhosttyLib.initShared(
|
||||
b,
|
||||
&deps,
|
||||
|
|
@ -96,6 +97,15 @@ pub fn build(b: *std.Build) !void {
|
|||
&deps,
|
||||
);
|
||||
|
||||
// libghostty-vt
|
||||
const libghostty_vt_shared = try buildpkg.GhosttyLibVt.initShared(
|
||||
b,
|
||||
&mod,
|
||||
&deps,
|
||||
);
|
||||
libghostty_vt_shared.install(libvt_step, "libghostty-vt.so");
|
||||
libghostty_vt_shared.installHeader(libvt_step);
|
||||
|
||||
// Helpgen
|
||||
if (config.emit_helpgen) deps.help_strings.install();
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,14 @@
|
|||
// libghostty-vt
|
||||
|
||||
#ifndef GHOSTTY_VT_H
|
||||
#define GHOSTTY_VT_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* GHOSTTY_VT_H */
|
||||
|
|
@ -0,0 +1,72 @@
|
|||
const GhosttyLibVt = @This();
|
||||
|
||||
const std = @import("std");
|
||||
const RunStep = std.Build.Step.Run;
|
||||
const Config = @import("Config.zig");
|
||||
const GhosttyZig = @import("GhosttyZig.zig");
|
||||
const SharedDeps = @import("SharedDeps.zig");
|
||||
const LibtoolStep = @import("LibtoolStep.zig");
|
||||
const LipoStep = @import("LipoStep.zig");
|
||||
|
||||
/// The step that generates the file.
|
||||
step: *std.Build.Step,
|
||||
|
||||
/// The final library file
|
||||
output: std.Build.LazyPath,
|
||||
dsym: ?std.Build.LazyPath,
|
||||
|
||||
pub fn initShared(
|
||||
b: *std.Build,
|
||||
zig: *const GhosttyZig,
|
||||
deps: *const SharedDeps,
|
||||
) !GhosttyLibVt {
|
||||
const lib = b.addSharedLibrary(.{
|
||||
.name = "ghostty-vt",
|
||||
.root_module = zig.vt,
|
||||
});
|
||||
|
||||
// Get our debug symbols
|
||||
const dsymutil: ?std.Build.LazyPath = dsymutil: {
|
||||
if (!deps.config.target.result.os.tag.isDarwin()) {
|
||||
break :dsymutil null;
|
||||
}
|
||||
|
||||
const dsymutil = RunStep.create(b, "dsymutil");
|
||||
dsymutil.addArgs(&.{"dsymutil"});
|
||||
dsymutil.addFileArg(lib.getEmittedBin());
|
||||
dsymutil.addArgs(&.{"-o"});
|
||||
const output = dsymutil.addOutputFileArg("libghostty-vt.dSYM");
|
||||
break :dsymutil output;
|
||||
};
|
||||
|
||||
return .{
|
||||
.step = &lib.step,
|
||||
.output = lib.getEmittedBin(),
|
||||
.dsym = dsymutil,
|
||||
};
|
||||
}
|
||||
|
||||
pub fn install(
|
||||
self: *const GhosttyLibVt,
|
||||
step: *std.Build.Step,
|
||||
name: []const u8,
|
||||
) void {
|
||||
const b = self.step.owner;
|
||||
const lib_install = b.addInstallLibFile(
|
||||
self.output,
|
||||
name,
|
||||
);
|
||||
step.dependOn(&lib_install.step);
|
||||
}
|
||||
|
||||
pub fn installHeader(
|
||||
self: *const GhosttyLibVt,
|
||||
step: *std.Build.Step,
|
||||
) void {
|
||||
const b = self.step.owner;
|
||||
const header_install = b.addInstallHeaderFile(
|
||||
b.path("include/ghostty-vt.h"),
|
||||
"ghostty-vt.h",
|
||||
);
|
||||
step.dependOn(&header_install.step);
|
||||
}
|
||||
|
|
@ -13,6 +13,7 @@ pub const GhosttyDocs = @import("GhosttyDocs.zig");
|
|||
pub const GhosttyExe = @import("GhosttyExe.zig");
|
||||
pub const GhosttyFrameData = @import("GhosttyFrameData.zig");
|
||||
pub const GhosttyLib = @import("GhosttyLib.zig");
|
||||
pub const GhosttyLibVt = @import("GhosttyLibVt.zig");
|
||||
pub const GhosttyResources = @import("GhosttyResources.zig");
|
||||
pub const GhosttyI18n = @import("GhosttyI18n.zig");
|
||||
pub const GhosttyXcodebuild = @import("GhosttyXcodebuild.zig");
|
||||
|
|
|
|||
|
|
@ -65,6 +65,12 @@ pub const EraseLine = terminal.EraseLine;
|
|||
pub const TabClear = terminal.TabClear;
|
||||
pub const Attribute = terminal.Attribute;
|
||||
|
||||
comptime {
|
||||
if (terminal.is_c_lib) {
|
||||
_ = terminal.c_api;
|
||||
}
|
||||
}
|
||||
|
||||
test {
|
||||
_ = terminal;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,5 @@
|
|||
pub export fn ghostty_hi() void {
|
||||
// Does nothing, but you can see this symbol exists:
|
||||
// nm -D --defined-only zig-out/lib/libghostty-vt.so | rg ' T '
|
||||
// This is temporary as we figure out the API.
|
||||
}
|
||||
|
|
@ -62,6 +62,13 @@ pub const Attribute = sgr.Attribute;
|
|||
|
||||
pub const isSafePaste = sanitize.isSafePaste;
|
||||
|
||||
/// This is set to true when we're building the C library.
|
||||
pub const is_c_lib = @import("root") == @import("../lib_vt.zig");
|
||||
|
||||
/// This is the C API for this package. Do NOT reference this unless
|
||||
/// you want a bunch of symbols exported into your final artifact.
|
||||
pub const c_api = @import("c_api.zig");
|
||||
|
||||
test {
|
||||
@import("std").testing.refAllDecls(@This());
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue