From 29717269cabb2adc97e2e278b545f211bc0376da Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Sat, 13 Jan 2024 14:30:56 -0800 Subject: [PATCH 1/8] build: remove tracy completely --- build.zig | 25 ---- pkg/tracy/build.zig | 91 -------------- pkg/tracy/build.zig.zon | 10 -- pkg/tracy/tracy.zig | 271 ---------------------------------------- src/main.zig | 5 - 5 files changed, 402 deletions(-) delete mode 100644 pkg/tracy/build.zig delete mode 100644 pkg/tracy/build.zig.zon delete mode 100644 pkg/tracy/tracy.zig diff --git a/build.zig b/build.zig index 876eb2cec..7eeb15d91 100644 --- a/build.zig +++ b/build.zig @@ -35,7 +35,6 @@ comptime { const app_version = std.SemanticVersion{ .major = 0, .minor = 1, .patch = 0 }; /// Build options, see the build options help for more info. -var tracy: bool = false; var flatpak: bool = false; var app_runtime: apprt.Runtime = .none; var renderer_impl: renderer.Impl = .opengl; @@ -62,15 +61,6 @@ pub fn build(b: *std.Build) !void { var env = try std.process.getEnvMap(b.allocator); defer env.deinit(); - // Note: Our tracy usage has a huge memory leak currently so only enable - // this if you really want tracy integration and don't mind the memory leak. - // Or, please contribute a fix because I don't know where it is. - tracy = b.option( - bool, - "tracy", - "Enable Tracy integration (default true in Debug on Linux)", - ) orelse false; - flatpak = b.option( bool, "flatpak", @@ -206,7 +196,6 @@ pub fn build(b: *std.Build) !void { "{}", .{version}, )); - exe_options.addOption(bool, "tracy_enabled", tracy); exe_options.addOption(bool, "flatpak", flatpak); exe_options.addOption(apprt.Runtime, "app_runtime", app_runtime); exe_options.addOption(font.Backend, "font_backend", font_backend); @@ -743,10 +732,6 @@ fn addDeps( .cpu = cpu_opts, .optimize = step.root_module.optimize.?, }); - const tracy_dep = b.dependency("tracy", .{ - .target = target_triple, - .optimize = step.root_module.optimize.?, - }); const zlib_dep = b.dependency("zlib", .{ .target = target_triple, .cpu = cpu_opts, @@ -767,9 +752,6 @@ fn addDeps( // Wasm we do manually since it is such a different build. if (step.rootModuleTarget().cpu.arch == .wasm32) { - // We link this package but its a no-op since Tracy - // never actually WORKS with wasm. - step.root_module.addImport("tracy", tracy_dep.module("tracy")); step.root_module.addImport("zig-js", js_dep.module("zig-js")); return static_libs; @@ -827,13 +809,6 @@ fn addDeps( step.linkLibrary(cimgui_dep.artifact("cimgui")); try static_libs.append(cimgui_dep.artifact("cimgui").getEmittedBin()); - // Tracy - step.root_module.addImport("tracy", tracy_dep.module("tracy")); - if (tracy) { - step.linkLibrary(tracy_dep.artifact("tracy")); - try static_libs.append(tracy_dep.artifact("tracy").getEmittedBin()); - } - // Glslang step.linkLibrary(glslang_dep.artifact("glslang")); try static_libs.append(glslang_dep.artifact("glslang").getEmittedBin()); diff --git a/pkg/tracy/build.zig b/pkg/tracy/build.zig deleted file mode 100644 index e274c2dc8..000000000 --- a/pkg/tracy/build.zig +++ /dev/null @@ -1,91 +0,0 @@ -const std = @import("std"); - -pub fn build(b: *std.Build) !void { - const target = b.standardTargetOptions(.{}); - const optimize = b.standardOptimizeOption(.{}); - - _ = b.addModule("tracy", .{ .root_source_file = .{ .path = "tracy.zig" } }); - - const upstream = b.dependency("tracy", .{}); - const lib = b.addStaticLibrary(.{ - .name = "tracy", - .target = target, - .optimize = optimize, - }); - lib.linkLibC(); - lib.linkLibCpp(); - if (target.result.os.tag == .windows) { - lib.linkSystemLibrary("Advapi32"); - lib.linkSystemLibrary("User32"); - lib.linkSystemLibrary("Ws2_32"); - lib.linkSystemLibrary("DbgHelp"); - } - - lib.addIncludePath(upstream.path("")); - - var flags = std.ArrayList([]const u8).init(b.allocator); - defer flags.deinit(); - try flags.appendSlice(&.{ - "-DTRACY_ENABLE", - "-fno-sanitize=undefined", - }); - if (target.result.os.tag == .windows) { - try flags.appendSlice(&.{ - "-D_WIN32_WINNT=0x601", - }); - } - - lib.addCSourceFile(.{ - .file = upstream.path("TracyClient.cpp"), - .flags = flags.items, - }); - - lib.installHeadersDirectoryOptions(.{ - .source_dir = upstream.path(""), - .install_dir = .header, - .install_subdir = "", - .include_extensions = &.{ ".h", ".hpp" }, - }); - - b.installArtifact(lib); -} - -const headers = &.{ - "TracyC.h", - "TracyOpenGL.hpp", - "Tracy.hpp", - "TracyD3D11.hpp", - "TracyD3D12.hpp", - "TracyOpenCL.hpp", - "TracyVulkan.hpp", - "client/TracyCallstack.h", - "client/TracyScoped.hpp", - "client/TracyStringHelpers.hpp", - "client/TracySysTrace.hpp", - "client/TracyDxt1.hpp", - "client/TracyRingBuffer.hpp", - "client/tracy_rpmalloc.hpp", - "client/TracyDebug.hpp", - "client/TracyLock.hpp", - "client/TracyThread.hpp", - "client/TracyArmCpuTable.hpp", - "client/TracyProfiler.hpp", - "client/TracyCallstack.hpp", - "client/TracySysTime.hpp", - "client/TracyFastVector.hpp", - "common/TracyApi.h", - "common/TracyYield.hpp", - "common/tracy_lz4hc.hpp", - "common/TracySystem.hpp", - "common/TracyProtocol.hpp", - "common/TracyQueue.hpp", - "common/TracyUwp.hpp", - "common/TracyAlloc.hpp", - "common/TracyAlign.hpp", - "common/TracyForceInline.hpp", - "common/TracyColor.hpp", - "common/tracy_lz4.hpp", - "common/TracyStackFrames.hpp", - "common/TracySocket.hpp", - "common/TracyMutex.hpp", -}; diff --git a/pkg/tracy/build.zig.zon b/pkg/tracy/build.zig.zon deleted file mode 100644 index d70dd2a89..000000000 --- a/pkg/tracy/build.zig.zon +++ /dev/null @@ -1,10 +0,0 @@ -.{ - .name = "tracy", - .version = "0.8.2", - .dependencies = .{ - .tracy = .{ - .url = "https://github.com/wolfpld/tracy/archive/refs/tags/v0.8.2.1.tar.gz", - .hash = "1220289ca424ec488316b75c992b9f02846caaa70287f958b3966e02d5ca81789d27", - }, - }, -} diff --git a/pkg/tracy/tracy.zig b/pkg/tracy/tracy.zig deleted file mode 100644 index 2ceca9103..000000000 --- a/pkg/tracy/tracy.zig +++ /dev/null @@ -1,271 +0,0 @@ -//! Tracy API. -//! -//! Forked and modified from https://github.com/SpexGuy/Zig-Tracy -const std = @import("std"); -const builtin = @import("builtin"); -const root = @import("root"); -const SourceLocation = std.builtin.SourceLocation; - -// Tracy is enabled if the root function tracy_enabled returns true. -pub const enabled = @hasDecl(root, "tracy_enabled") and root.tracy_enabled(); - -// Bring in the correct implementation depending on if we're enabled or not. -// See Impl for all the real doc comments. -pub usingnamespace if (enabled) Impl else Noop; - -const Impl = struct { - const c = @cImport({ - //uncomment to enable callstacks, very slow - //@cDefine("TRACY_CALLSTACK", ""); - - @cDefine("TRACY_ENABLE", ""); - @cInclude("TracyC.h"); - }); - - const has_callstack_support = @hasDecl(c, "TRACY_HAS_CALLSTACK") and @hasDecl(c, "TRACY_CALLSTACK"); - const callstack_enabled: c_int = if (has_callstack_support) c.TRACY_CALLSTACK else 0; - const callstack_depth = 10; // TODO configurable - - /// A zone represents the lifetime of a special on-stack profiler variable. - /// Typically it would exist for the duration of a whole scope of the - /// profiled function, but you also can measure time spent in scopes of a - /// for-loop or an if-branch. - pub const Zone = struct { - zone: c.___tracy_c_zone_context, - - /// Text description of a zone. - pub inline fn text(self: Zone, val: []const u8) void { - c.___tracy_emit_zone_text(self.zone, val.ptr, val.len); - } - - /// Name of the zone. - pub inline fn name(self: Zone, val: []const u8) void { - c.___tracy_emit_zone_name(self.zone, val.ptr, val.len); - } - - /// Color of the zone in the UI. Specify the value as RGB - /// using hex: 0xRRGGBB. - pub inline fn color(self: Zone, val: u32) void { - c.___tracy_emit_zone_color(self.zone, val); - } - - /// A value associated with the zone. - pub inline fn value(self: Zone, val: u64) void { - c.___tracy_emit_zone_value(self.zone, val); - } - - /// End the zone. - pub inline fn end(self: Zone) void { - c.___tracy_emit_zone_end(self.zone); - } - }; - - /// Tracy profiles within the context of a frame. This represents - /// a single frame. - pub fn Frame(comptime name: [:0]const u8) type { - return struct { - pub fn end(_: @This()) void { - c.___tracy_emit_frame_mark_end(name.ptr); - } - }; - } - - /// allocator returns an allocator that tracks allocs/frees. - pub fn allocator( - parent: std.mem.Allocator, - comptime name: ?[:0]const u8, - ) Allocator(name) { - return Allocator(name).init(parent); - } - - /// Returns an allocator type with the given name. - pub fn Allocator(comptime name: ?[:0]const u8) type { - return struct { - parent: std.mem.Allocator, - - const Self = @This(); - - pub fn init(parent: std.mem.Allocator) Self { - return .{ .parent = parent }; - } - - pub fn allocator(self: *Self) std.mem.Allocator { - return .{ - .ptr = self, - .vtable = &.{ - .alloc = allocFn, - .resize = resizeFn, - .free = freeFn, - }, - }; - } - - fn allocFn( - ctx: *anyopaque, - len: usize, - log2_ptr_align: u8, - ret_addr: usize, - ) ?[*]u8 { - const self = @as(*Self, @ptrCast(@alignCast(ctx))); - const result = self.parent.rawAlloc(len, log2_ptr_align, ret_addr); - if (result) |data| { - if (len != 0) { - if (name) |n| { - allocNamed(data.ptr, len, n); - } else { - alloc(data, len); - } - } - } - - return result; - } - - fn resizeFn( - ctx: *anyopaque, - buf: []u8, - log2_buf_align: u8, - new_len: usize, - ret_addr: usize, - ) bool { - const self = @as(*Self, @ptrCast(@alignCast(ctx))); - if (self.parent.rawResize(buf, log2_buf_align, new_len, ret_addr)) { - if (name) |n| { - freeNamed(buf.ptr, n); - allocNamed(buf.ptr, new_len, n); - } else { - free(buf.ptr); - alloc(buf.ptr, new_len); - } - - return true; - } - - // during normal operation the compiler hits this case thousands of times due to this - // emitting messages for it is both slow and causes clutter - return false; - } - - fn freeFn( - ctx: *anyopaque, - buf: []u8, - log2_buf_align: u8, - ret_addr: usize, - ) void { - const self = @as(*Self, @ptrCast(@alignCast(ctx))); - self.parent.rawFree(buf, log2_buf_align, ret_addr); - - if (buf.len != 0) { - if (name) |n| { - freeNamed(buf.ptr, n); - } else { - free(buf.ptr); - } - } - } - }; - } - - /// Start a trace. Defer calling end() to end the trace. - pub inline fn trace(comptime src: SourceLocation) Zone { - const static = struct { - var loc: c.___tracy_source_location_data = undefined; - }; - static.loc = .{ - .name = null, - .function = src.fn_name.ptr, - .file = src.file.ptr, - .line = src.line, - .color = 0, - }; - - const zone = if (has_callstack_support) - c.___tracy_emit_zone_begin_callstack(&static.loc, callstack_depth, 1) - else - c.___tracy_emit_zone_begin(&static.loc, 1); - - return Zone{ .zone = zone }; - } - - /// Mark the boundary of a frame. Good for continuous frames. For - /// discontinuous frames, use frame() and defer end(). - pub inline fn frameMark() void { - c.___tracy_emit_frame_mark(null); - } - - /// Start a discontinuous frame. - pub inline fn frame(comptime name: [:0]const u8) Frame(name) { - c.___tracy_emit_frame_mark_start(name.ptr); - return .{}; - } - - /// Name the current thread. - pub inline fn setThreadName(comptime name: [:0]const u8) void { - c.___tracy_set_thread_name(name.ptr); - } - - inline fn alloc(ptr: [*]u8, len: usize) void { - if (has_callstack_support) { - c.___tracy_emit_memory_alloc_callstack(ptr, len, callstack_depth, 0); - } else { - c.___tracy_emit_memory_alloc(ptr, len, 0); - } - } - - inline fn allocNamed(ptr: [*]u8, len: usize, comptime name: [:0]const u8) void { - if (has_callstack_support) { - c.___tracy_emit_memory_alloc_callstack_named(ptr, len, callstack_depth, 0, name.ptr); - } else { - c.___tracy_emit_memory_alloc_named(ptr, len, 0, name.ptr); - } - } - - inline fn free(ptr: [*]u8) void { - if (has_callstack_support) { - c.___tracy_emit_memory_free_callstack(ptr, callstack_depth, 0); - } else { - c.___tracy_emit_memory_free(ptr, 0); - } - } - - inline fn freeNamed(ptr: [*]u8, comptime name: [:0]const u8) void { - if (has_callstack_support) { - c.___tracy_emit_memory_free_callstack_named(ptr, callstack_depth, 0, name.ptr); - } else { - c.___tracy_emit_memory_free_named(ptr, 0, name.ptr); - } - } -}; - -const Noop = struct { - pub const Zone = struct { - pub inline fn text(_: Zone, _: []const u8) void {} - pub inline fn name(_: Zone, _: []const u8) void {} - pub inline fn color(_: Zone, _: u32) void {} - pub inline fn value(_: Zone, _: u64) void {} - pub inline fn end(_: Zone) void {} - }; - - pub fn Frame(comptime _: [:0]const u8) type { - return struct { - pub fn end(_: @This()) void {} - }; - } - - pub inline fn trace(comptime src: SourceLocation) Zone { - _ = src; - return .{}; - } - - pub inline fn frameMark() void {} - - pub inline fn frame(comptime name: [:0]const u8) Frame(name) { - return .{}; - } - - pub inline fn setThreadName(comptime name: [:0]const u8) void { - _ = name; - } -}; - -test {} diff --git a/src/main.zig b/src/main.zig index 66e39131e..74690a272 100644 --- a/src/main.zig +++ b/src/main.zig @@ -105,11 +105,6 @@ pub fn main() !MainReturn { try app_runtime.run(); } -// Required by tracy/tracy.zig to enable/disable tracy support. -pub fn tracy_enabled() bool { - return options.tracy_enabled; -} - pub const std_options = struct { // Our log level is always at least info in every build mode. pub const log_level: std.log.Level = switch (builtin.mode) { From adb7958f6177dfe5df69bc2202da98c566f389b9 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Sat, 13 Jan 2024 15:06:08 -0800 Subject: [PATCH 2/8] remove tracy usage from all files --- src/Surface.zig | 13 ----- src/apprt/glfw.zig | 24 --------- src/build_config.zig | 53 +++++++++++++------ src/font/shaper/harfbuzz.zig | 4 -- src/font/shaper/run.zig | 4 -- src/main.zig | 26 +++------ src/renderer/OpenGL.zig | 10 ---- src/renderer/Thread.zig | 15 ------ src/terminal/Parser.zig | 4 -- src/terminal/Screen.zig | 19 ------- src/terminal/Terminal.zig | 100 ----------------------------------- src/terminal/stream.zig | 11 ---- src/termio/Exec.zig | 5 -- src/termio/Thread.zig | 9 ---- 14 files changed, 42 insertions(+), 255 deletions(-) diff --git a/src/Surface.zig b/src/Surface.zig index 024670cfc..8325b823e 100644 --- a/src/Surface.zig +++ b/src/Surface.zig @@ -30,7 +30,6 @@ const imgui = @import("imgui"); const Pty = @import("pty.zig").Pty; const font = @import("font/main.zig"); const Command = @import("Command.zig"); -const trace = @import("tracy").trace; const terminal = @import("terminal/main.zig"); const configpkg = @import("config.zig"); const input = @import("input.zig"); @@ -1048,9 +1047,6 @@ fn queueRender(self: *Surface) !void { } pub fn sizeCallback(self: *Surface, size: apprt.SurfaceSize) !void { - const tracy = trace(@src()); - defer tracy.end(); - const new_screen_size: renderer.ScreenSize = .{ .width = size.width, .height = size.height, @@ -1453,9 +1449,6 @@ pub fn scrollCallback( yoff: f64, scroll_mods: input.ScrollMods, ) !void { - const tracy = trace(@src()); - defer tracy.end(); - // log.info("SCROLL: xoff={} yoff={} mods={}", .{ xoff, yoff, scroll_mods }); // Always show the mouse again if it is hidden @@ -1919,9 +1912,6 @@ pub fn mouseButtonCallback( ) !void { // log.debug("mouse action={} button={} mods={}", .{ action, button, mods }); - const tracy = trace(@src()); - defer tracy.end(); - // If we have an inspector, we always queue a render if (self.inspector) |insp| { defer self.queueRender() catch {}; @@ -2275,9 +2265,6 @@ pub fn cursorPosCallback( self: *Surface, pos: apprt.CursorPos, ) !void { - const tracy = trace(@src()); - defer tracy.end(); - // Always show the mouse again if it is hidden if (self.mouse.hidden) self.showMouse(); diff --git a/src/apprt/glfw.zig b/src/apprt/glfw.zig index 9b19b501b..554786741 100644 --- a/src/apprt/glfw.zig +++ b/src/apprt/glfw.zig @@ -8,7 +8,6 @@ const builtin = @import("builtin"); const build_config = @import("../build_config.zig"); const assert = std.debug.assert; const Allocator = std.mem.Allocator; -const trace = @import("tracy").trace; const glfw = @import("glfw"); const macos = @import("macos"); const objc = @import("objc"); @@ -741,9 +740,6 @@ pub const Surface = struct { } fn charCallback(window: glfw.Window, codepoint: u21) void { - const tracy = trace(@src()); - defer tracy.end(); - const core_win = window.getUserPointer(CoreSurface) orelse return; // We need a key event in order to process the charcallback. If it @@ -780,8 +776,6 @@ pub const Surface = struct { glfw_action: glfw.Action, glfw_mods: glfw.Mods, ) void { - const tracy = trace(@src()); - defer tracy.end(); _ = scancode; const core_win = window.getUserPointer(CoreSurface) orelse return; @@ -954,9 +948,6 @@ pub const Surface = struct { } fn focusCallback(window: glfw.Window, focused: bool) void { - const tracy = trace(@src()); - defer tracy.end(); - const core_win = window.getUserPointer(CoreSurface) orelse return; core_win.focusCallback(focused) catch |err| { log.err("error in focus callback err={}", .{err}); @@ -965,9 +956,6 @@ pub const Surface = struct { } fn refreshCallback(window: glfw.Window) void { - const tracy = trace(@src()); - defer tracy.end(); - const core_win = window.getUserPointer(CoreSurface) orelse return; core_win.refreshCallback() catch |err| { log.err("error in refresh callback err={}", .{err}); @@ -976,9 +964,6 @@ pub const Surface = struct { } fn scrollCallback(window: glfw.Window, xoff: f64, yoff: f64) void { - const tracy = trace(@src()); - defer tracy.end(); - // Glfw doesn't support any of the scroll mods. const scroll_mods: input.ScrollMods = .{}; @@ -994,9 +979,6 @@ pub const Surface = struct { unscaled_xpos: f64, unscaled_ypos: f64, ) void { - const tracy = trace(@src()); - defer tracy.end(); - const core_win = window.getUserPointer(CoreSurface) orelse return; // Convert our unscaled x/y to scaled. @@ -1026,9 +1008,6 @@ pub const Surface = struct { glfw_action: glfw.Action, glfw_mods: glfw.Mods, ) void { - const tracy = trace(@src()); - defer tracy.end(); - const core_win = window.getUserPointer(CoreSurface) orelse return; // Convert glfw button to input button @@ -1061,9 +1040,6 @@ pub const Surface = struct { } fn dropCallback(window: glfw.Window, paths: [][*:0]const u8) void { - const tracy = trace(@src()); - defer tracy.end(); - const surface = window.getUserPointer(CoreSurface) orelse return; var list = std.ArrayList(u8).init(surface.alloc); diff --git a/src/build_config.zig b/src/build_config.zig index 867d1da51..184dd6ac3 100644 --- a/src/build_config.zig +++ b/src/build_config.zig @@ -10,6 +10,37 @@ const apprt = @import("apprt.zig"); const font = @import("font/main.zig"); const rendererpkg = @import("renderer.zig"); +/// The build configuratin options. This may not be all available options +/// to `zig build` but it contains all the options that the Ghostty source +/// needs to know about at comptime. +/// +/// We put this all in a single struct so that we can check compatibility +/// between options, make it easy to copy and mutate options for different +/// build types, etc. +pub const BuildConfig = struct { + app_runtime: apprt.Runtime = .none, + renderer: rendererpkg.Impl = .opengl, + font_backend: font.Backend = .freetype, + + /// Configure the build options with our values. + pub fn addOptions(self: BuildConfig, step: *std.Build.Step.Options) void { + // We need to break these down individual because addOption doesn't + // support all types. + step.addOption(apprt.Runtime, "app_runtime", self.app_runtime); + step.addOption(font.Backend, "font_backend", self.font_backend); + step.addOption(rendererpkg.Impl, "renderer", self.renderer_impl); + } + + /// Rehydrate our BuildConfig from the comptime options. + pub fn fromOptions() BuildConfig { + return .{ + .app_runtime = std.meta.stringToEnum(apprt.Runtime, @tagName(options.app_runtime)).?, + .font_backend = std.meta.stringToEnum(font.Backend, @tagName(options.font_backend)).?, + .renderer = std.meta.stringToEnum(rendererpkg.Impl, @tagName(options.renderer)).?, + }; + } +}; + /// The semantic version of this build. pub const version = options.app_version; pub const version_string = options.app_version_string; @@ -18,23 +49,11 @@ pub const version_string = options.app_version_string; /// building a standalone exe, an embedded lib, etc. pub const artifact = Artifact.detect(); -/// The runtime to back exe artifacts with. -pub const app_runtime: apprt.Runtime = switch (artifact) { - .lib => .none, - else => std.meta.stringToEnum(apprt.Runtime, @tagName(options.app_runtime)).?, -}; - -/// The font backend desired for the build. -pub const font_backend: font.Backend = std.meta.stringToEnum( - font.Backend, - @tagName(options.font_backend), -).?; - -/// The renderer implementation to use. -pub const renderer: rendererpkg.Impl = std.meta.stringToEnum( - rendererpkg.Impl, - @tagName(options.renderer), -).?; +/// Our build configuration. +pub const config = BuildConfig.fromOptions(); +pub const app_runtime: apprt.Runtime = config.app_runtime; +pub const font_backend: font.Backend = config.font_backend; +pub const renderer: rendererpkg.Impl = config.renderer; /// We want to integrate with Flatpak APIs. pub const flatpak = options.flatpak; diff --git a/src/font/shaper/harfbuzz.zig b/src/font/shaper/harfbuzz.zig index da94afbf5..601b642fe 100644 --- a/src/font/shaper/harfbuzz.zig +++ b/src/font/shaper/harfbuzz.zig @@ -2,7 +2,6 @@ const std = @import("std"); const assert = std.debug.assert; const Allocator = std.mem.Allocator; const harfbuzz = @import("harfbuzz"); -const trace = @import("tracy").trace; const font = @import("../main.zig"); const Face = font.Face; const DeferredFace = font.DeferredFace; @@ -106,9 +105,6 @@ pub const Shaper = struct { /// /// If there is not enough space in the cell buffer, an error is returned. pub fn shape(self: *Shaper, run: font.shape.TextRun) ![]const font.shape.Cell { - const tracy = trace(@src()); - defer tracy.end(); - // We only do shaping if the font is not a special-case. For special-case // fonts, the codepoint == glyph_index so we don't need to run any shaping. if (run.font_index.special() == null) { diff --git a/src/font/shaper/run.zig b/src/font/shaper/run.zig index dd5b93be6..7b75b574d 100644 --- a/src/font/shaper/run.zig +++ b/src/font/shaper/run.zig @@ -4,7 +4,6 @@ const Allocator = std.mem.Allocator; const font = @import("../main.zig"); const shape = @import("../shape.zig"); const terminal = @import("../../terminal/main.zig"); -const trace = @import("tracy").trace; /// A single text run. A text run is only valid for one Shaper instance and /// until the next run is created. A text run never goes across multiple @@ -33,9 +32,6 @@ pub const RunIterator = struct { i: usize = 0, pub fn next(self: *RunIterator, alloc: Allocator) !?TextRun { - const tracy = trace(@src()); - defer tracy.end(); - // Trim the right side of a row that might be empty const max: usize = max: { var j: usize = self.row.lenCells(); diff --git a/src/main.zig b/src/main.zig index 74690a272..a761f359e 100644 --- a/src/main.zig +++ b/src/main.zig @@ -7,7 +7,6 @@ const glfw = @import("glfw"); const glslang = @import("glslang"); const macos = @import("macos"); const oni = @import("oniguruma"); -const tracy = @import("tracy"); const cli = @import("cli.zig"); const internal_os = @import("os/main.zig"); const xev = @import("xev"); @@ -167,7 +166,6 @@ pub const GlobalState = struct { gpa: ?GPA, alloc: std.mem.Allocator, - tracy: if (tracy.enabled) ?tracy.Allocator(null) else void, action: ?cli.Action, logging: Logging, @@ -189,7 +187,6 @@ pub const GlobalState = struct { self.* = .{ .gpa = null, .alloc = undefined, - .tracy = undefined, .action = null, .logging = .{ .stderr = {} }, .resources_dir = null, @@ -213,19 +210,12 @@ pub const GlobalState = struct { break :gpa GPA{}; }; - self.alloc = alloc: { - const base = if (self.gpa) |*value| - value.allocator() - else if (builtin.link_libc) - std.heap.c_allocator - else - unreachable; - - // If we're tracing, wrap the allocator - if (!tracy.enabled) break :alloc base; - self.tracy = tracy.allocator(base, null); - break :alloc self.tracy.?.allocator(); - }; + self.alloc = if (self.gpa) |*value| + value.allocator() + else if (builtin.link_libc) + std.heap.c_allocator + else + unreachable; // We first try to parse any action that we may be executing. self.action = try cli.Action.detectCLI(self.alloc); @@ -292,10 +282,6 @@ pub const GlobalState = struct { // the point at which it will output if there were safety violations. _ = value.deinit(); } - - if (tracy.enabled) { - self.tracy = null; - } } }; test { diff --git a/src/renderer/OpenGL.zig b/src/renderer/OpenGL.zig index af6910c0a..b4ebfb476 100644 --- a/src/renderer/OpenGL.zig +++ b/src/renderer/OpenGL.zig @@ -19,7 +19,6 @@ const renderer = @import("../renderer.zig"); const terminal = @import("../terminal/main.zig"); const Terminal = terminal.Terminal; const gl = @import("opengl"); -const trace = @import("tracy").trace; const math = @import("../math.zig"); const Surface = @import("../Surface.zig"); @@ -946,9 +945,6 @@ pub fn rebuildCells( cursor_style_: ?renderer.CursorStyle, color_palette: *const terminal.color.Palette, ) !void { - const t = trace(@src()); - defer t.end(); - // Bg cells at most will need space for the visible screen size self.cells_bg.clearRetainingCapacity(); try self.cells_bg.ensureTotalCapacity(self.alloc, screen.rows * screen.cols); @@ -1344,9 +1340,6 @@ fn updateCell( x: usize, y: usize, ) !bool { - const t = trace(@src()); - defer t.end(); - const BgFg = struct { /// Background is optional because in un-inverted mode /// it may just be equivalent to the default background in @@ -1781,9 +1774,6 @@ fn flushAtlas(self: *OpenGL) !void { /// Render renders the current cell state. This will not modify any of /// the cells. pub fn drawFrame(self: *OpenGL, surface: *apprt.Surface) !void { - const t = trace(@src()); - defer t.end(); - // If we're in single-threaded more we grab a lock since we use shared data. if (single_threaded_draw) self.draw_mutex.lock(); defer if (single_threaded_draw) self.draw_mutex.unlock(); diff --git a/src/renderer/Thread.zig b/src/renderer/Thread.zig index 447d54d1a..2ad4145cf 100644 --- a/src/renderer/Thread.zig +++ b/src/renderer/Thread.zig @@ -9,8 +9,6 @@ const renderer = @import("../renderer.zig"); const apprt = @import("../apprt.zig"); const configpkg = @import("../config.zig"); const BlockingQueue = @import("../blocking_queue.zig").BlockingQueue; -const tracy = @import("tracy"); -const trace = tracy.trace; const App = @import("../App.zig"); const Allocator = std.mem.Allocator; @@ -177,7 +175,6 @@ pub fn threadMain(self: *Thread) void { fn threadMain_(self: *Thread) !void { defer log.debug("renderer thread exited", .{}); - tracy.setThreadName("renderer"); // Run our thread start/end callbacks. This is important because some // renderers have to do per-thread setup. For example, OpenGL has to set @@ -242,9 +239,6 @@ fn stopDrawTimer(self: *Thread) void { /// Drain the mailbox. fn drainMailbox(self: *Thread) !void { - const zone = trace(@src()); - defer zone.end(); - while (self.mailbox.pop()) |message| { log.debug("mailbox message={}", .{message}); switch (message) { @@ -358,9 +352,6 @@ fn wakeupCallback( return .rearm; }; - const zone = trace(@src()); - defer zone.end(); - const t = self_.?; // When we wake up, we check the mailbox. Mailbox producers should @@ -425,9 +416,6 @@ fn renderCallback( _: *xev.Completion, r: xev.Timer.RunError!void, ) xev.CallbackAction { - const zone = trace(@src()); - defer zone.end(); - _ = r catch unreachable; const t = self_ orelse { // This shouldn't happen so we log it. @@ -470,9 +458,6 @@ fn cursorTimerCallback( _: *xev.Completion, r: xev.Timer.RunError!void, ) xev.CallbackAction { - const zone = trace(@src()); - defer zone.end(); - _ = r catch |err| switch (err) { // This is sent when our timer is canceled. That's fine. error.Canceled => return .disarm, diff --git a/src/terminal/Parser.zig b/src/terminal/Parser.zig index 200803647..b242ba6fd 100644 --- a/src/terminal/Parser.zig +++ b/src/terminal/Parser.zig @@ -6,7 +6,6 @@ const Parser = @This(); const std = @import("std"); const builtin = @import("builtin"); -const trace = @import("tracy").trace; const testing = std.testing; const table = @import("parse_table.zig").table; const osc = @import("osc.zig"); @@ -231,9 +230,6 @@ pub fn deinit(self: *Parser) void { /// Up to 3 actions may need to be executed -- in order -- representing /// the state exit, transition, and entry actions. pub fn next(self: *Parser, c: u8) [3]?Action { - const tracy = trace(@src()); - defer tracy.end(); - // If we're processing UTF-8, we handle this manually. if (self.state == .utf8) { return .{ self.next_utf8(c), null, null }; diff --git a/src/terminal/Screen.zig b/src/terminal/Screen.zig index 9f9c88678..1d2c0cfb7 100644 --- a/src/terminal/Screen.zig +++ b/src/terminal/Screen.zig @@ -58,7 +58,6 @@ const assert = std.debug.assert; const Allocator = std.mem.Allocator; const ziglyph = @import("ziglyph"); -const trace = @import("tracy").trace; const ansi = @import("ansi.zig"); const modes = @import("modes.zig"); const sgr = @import("sgr.zig"); @@ -803,9 +802,6 @@ pub const RowIndexTag = enum { /// so it is 1-indexed. If the value is zero, it means that this /// section of the screen is empty or disabled. pub inline fn maxLen(self: RowIndexTag, screen: *const Screen) usize { - const tracy = trace(@src()); - defer tracy.end(); - return switch (self) { // Screen can be any of the written rows .screen => screen.rowsWritten(), @@ -1177,9 +1173,6 @@ pub fn getCellPtr(self: *Screen, tag: RowIndexTag, y: usize, x: usize) *Cell { /// from index zero of the given row index type. This can therefore iterate /// from row 0 of the active area, history, viewport, etc. pub fn rowIterator(self: *Screen, tag: RowIndexTag) RowIterator { - const tracy = trace(@src()); - defer tracy.end(); - return .{ .screen = self, .tag = tag, @@ -1234,9 +1227,6 @@ pub fn getLine(self: *Screen, pt: point.ScreenPoint) ?Line { /// Returns the row at the given index. This row is writable, although /// only the active area should probably be written to. pub fn getRow(self: *Screen, index: RowIndex) Row { - const tracy = trace(@src()); - defer tracy.end(); - // Get our offset into storage const offset = index.toScreen(self).screen * (self.cols + 1); @@ -1288,9 +1278,6 @@ pub fn copyRow(self: *Screen, dst: RowIndex, src: RowIndex) !void { /// /// This can be used to implement terminal scroll regions efficiently. pub fn scrollRegionUp(self: *Screen, top: RowIndex, bottom: RowIndex, count_req: usize) void { - const tracy = trace(@src()); - defer tracy.end(); - // Avoid a lot of work if we're doing nothing. if (count_req == 0) return; @@ -2091,9 +2078,6 @@ fn scrollRow(self: *Screen, idx: RowIndex) void { } fn scrollDelta(self: *Screen, delta: isize, viewport_only: bool) Allocator.Error!void { - const tracy = trace(@src()); - defer tracy.end(); - // Just in case, to avoid a bunch of stuff below. if (delta == 0) return; @@ -2585,9 +2569,6 @@ fn selectionSlices(self: *Screen, sel_raw: Selection) SelectionSlices { /// be truncated as they are shrunk. If they are grown, the new space is filled /// with zeros. pub fn resizeWithoutReflow(self: *Screen, rows: usize, cols: usize) !void { - const tracy = trace(@src()); - defer tracy.end(); - // If we're resizing to the same size, do nothing. if (self.cols == cols and self.rows == rows) return; diff --git a/src/terminal/Terminal.zig b/src/terminal/Terminal.zig index a486144e3..a092b7480 100644 --- a/src/terminal/Terminal.zig +++ b/src/terminal/Terminal.zig @@ -18,7 +18,6 @@ const csi = @import("csi.zig"); const kitty = @import("kitty.zig"); const sgr = @import("sgr.zig"); const Tabstops = @import("Tabstops.zig"); -const trace = @import("tracy").trace; const color = @import("color.zig"); const Screen = @import("Screen.zig"); const mouse_shape = @import("mouse_shape.zig"); @@ -213,9 +212,6 @@ pub fn alternateScreen( alloc: Allocator, options: AlternateScreenOptions, ) void { - const tracy = trace(@src()); - defer tracy.end(); - //log.info("alt screen active={} options={} cursor={}", .{ self.active_screen, options, self.screen.cursor }); // TODO: test @@ -255,9 +251,6 @@ pub fn primaryScreen( alloc: Allocator, options: AlternateScreenOptions, ) void { - const tracy = trace(@src()); - defer tracy.end(); - //log.info("primary screen active={} options={}", .{ self.active_screen, options }); // TODO: test @@ -296,9 +289,6 @@ pub const DeccolmMode = enum(u1) { /// with the window. This will fix the grid at either 80 or 132 columns. /// The rows will continue to be variable. pub fn deccolm(self: *Terminal, alloc: Allocator, mode: DeccolmMode) !void { - const tracy = trace(@src()); - defer tracy.end(); - // If DEC mode 40 isn't enabled, then this is ignored. We also make // sure that we don't have deccolm set because we want to fully ignore // set mode. @@ -327,9 +317,6 @@ pub fn deccolm(self: *Terminal, alloc: Allocator, mode: DeccolmMode) !void { /// Resize the underlying terminal. pub fn resize(self: *Terminal, alloc: Allocator, cols: usize, rows: usize) !void { - const tracy = trace(@src()); - defer tracy.end(); - // If our cols/rows didn't change then we're done if (self.cols == cols and self.rows == rows) return; @@ -469,9 +456,6 @@ pub fn restoreCursor(self: *Terminal) void { /// TODO: test pub fn setAttribute(self: *Terminal, attr: sgr.Attribute) !void { - const tracy = trace(@src()); - defer tracy.end(); - switch (attr) { .unset => { self.screen.cursor.pen.fg = .none; @@ -732,9 +716,6 @@ pub fn printString(self: *Terminal, str: []const u8) !void { } pub fn print(self: *Terminal, c: u21) !void { - const tracy = trace(@src()); - defer tracy.end(); - // log.debug("print={x} y={} x={}", .{ c, self.screen.cursor.y, self.screen.cursor.x }); // If we're not on the main display, do nothing for now @@ -971,9 +952,6 @@ pub fn print(self: *Terminal, c: u21) !void { } fn printCell(self: *Terminal, unmapped_c: u21) *Screen.Cell { - // const tracy = trace(@src()); - // defer tracy.end(); - const c: u21 = c: { // TODO: non-utf8 handling, gr @@ -1034,9 +1012,6 @@ fn printCell(self: *Terminal, unmapped_c: u21) *Screen.Cell { } fn printWrap(self: *Terminal) !void { - const tracy = trace(@src()); - defer tracy.end(); - const row = self.screen.getRow(.{ .active = self.screen.cursor.y }); row.setWrapped(true); @@ -1068,9 +1043,6 @@ pub fn printRepeat(self: *Terminal, count_req: usize) !void { /// /// Sets the cursor to the top left corner. pub fn decaln(self: *Terminal) !void { - const tracy = trace(@src()); - defer tracy.end(); - // Reset margins, also sets cursor to top-left self.scrolling_region = .{ .top = 0, @@ -1117,9 +1089,6 @@ pub fn decaln(self: *Terminal) !void { /// /// This unsets the pending wrap state without wrapping. pub fn index(self: *Terminal) !void { - const tracy = trace(@src()); - defer tracy.end(); - // Unset pending wrap state self.screen.cursor.pending_wrap = false; @@ -1170,9 +1139,6 @@ pub fn index(self: *Terminal) !void { /// * If the cursor is not on the top-most line of the scrolling region: /// move the cursor one line up pub fn reverseIndex(self: *Terminal) !void { - const tracy = trace(@src()); - defer tracy.end(); - if (self.screen.cursor.y != self.scrolling_region.top or self.screen.cursor.x < self.scrolling_region.left or self.screen.cursor.x > self.scrolling_region.right) @@ -1191,9 +1157,6 @@ pub fn reverseIndex(self: *Terminal) !void { // greater than the bottom-most row it is adjusted to the bottom-most // row. pub fn setCursorPos(self: *Terminal, row_req: usize, col_req: usize) void { - const tracy = trace(@src()); - defer tracy.end(); - // If cursor origin mode is set the cursor row will be moved relative to // the top margin row and adjusted to be above or at bottom-most row in // the current scroll region. @@ -1233,9 +1196,6 @@ pub fn eraseDisplay( mode: csi.EraseDisplay, protected_req: bool, ) void { - const tracy = trace(@src()); - defer tracy.end(); - // Erasing clears all attributes / colors _except_ the background const pen: Screen.Cell = switch (self.screen.cursor.pen.bg) { .none => .{}, @@ -1384,9 +1344,6 @@ pub fn eraseLine( mode: csi.EraseLine, protected_req: bool, ) void { - const tracy = trace(@src()); - defer tracy.end(); - // We always fill with the background const pen: Screen.Cell = switch (self.screen.cursor.pen.bg) { .none => .{}, @@ -1463,9 +1420,6 @@ pub fn eraseLine( /// /// Does not change the cursor position. pub fn deleteChars(self: *Terminal, count: usize) !void { - const tracy = trace(@src()); - defer tracy.end(); - if (count == 0) return; // If our cursor is outside the margins then do nothing. We DO reset @@ -1510,9 +1464,6 @@ pub fn deleteChars(self: *Terminal, count: usize) !void { } pub fn eraseChars(self: *Terminal, count_req: usize) void { - const tracy = trace(@src()); - defer tracy.end(); - const count = @max(count_req, 1); // This resets the pending wrap state @@ -1556,9 +1507,6 @@ pub fn eraseChars(self: *Terminal, count_req: usize) void { /// Move the cursor to the left amount cells. If amount is 0, adjust it to 1. pub fn cursorLeft(self: *Terminal, count_req: usize) void { - const tracy = trace(@src()); - defer tracy.end(); - // Wrapping behavior depends on various terminal modes const WrapMode = enum { none, reverse, reverse_extended }; const wrap_mode: WrapMode = wrap_mode: { @@ -1665,9 +1613,6 @@ pub fn cursorLeft(self: *Terminal, count_req: usize) void { /// This sequence will not scroll the screen or scroll region. If amount is /// 0, adjust it to 1. pub fn cursorRight(self: *Terminal, count_req: usize) void { - const tracy = trace(@src()); - defer tracy.end(); - // Always resets pending wrap self.screen.cursor.pending_wrap = false; @@ -1685,9 +1630,6 @@ pub fn cursorRight(self: *Terminal, count_req: usize) void { /// move distance then it is internally adjusted to the maximum. This sequence /// will not scroll the screen or scroll region. If amount is 0, adjust it to 1. pub fn cursorDown(self: *Terminal, count_req: usize) void { - const tracy = trace(@src()); - defer tracy.end(); - // Always resets pending wrap self.screen.cursor.pending_wrap = false; @@ -1705,9 +1647,6 @@ pub fn cursorDown(self: *Terminal, count_req: usize) void { /// move distance then it is internally adjusted to the maximum. If amount is /// 0, adjust it to 1. pub fn cursorUp(self: *Terminal, count_req: usize) void { - const tracy = trace(@src()); - defer tracy.end(); - // Always resets pending wrap self.screen.cursor.pending_wrap = false; @@ -1723,18 +1662,12 @@ pub fn cursorUp(self: *Terminal, count_req: usize) void { /// Backspace moves the cursor back a column (but not less than 0). pub fn backspace(self: *Terminal) void { - const tracy = trace(@src()); - defer tracy.end(); - self.cursorLeft(1); } /// Horizontal tab moves the cursor to the next tabstop, clearing /// the screen to the left the tabstop. pub fn horizontalTab(self: *Terminal) !void { - const tracy = trace(@src()); - defer tracy.end(); - while (self.screen.cursor.x < self.scrolling_region.right) { // Move the cursor right self.screen.cursor.x += 1; @@ -1748,9 +1681,6 @@ pub fn horizontalTab(self: *Terminal) !void { // Same as horizontalTab but moves to the previous tabstop instead of the next. pub fn horizontalTabBack(self: *Terminal) !void { - const tracy = trace(@src()); - defer tracy.end(); - // With origin mode enabled, our leftmost limit is the left margin. const left_limit = if (self.modes.get(.origin)) self.scrolling_region.left else 0; @@ -1786,9 +1716,6 @@ pub fn tabReset(self: *Terminal) void { /// Carriage return moves the cursor to the first column. pub fn carriageReturn(self: *Terminal) void { - const tracy = trace(@src()); - defer tracy.end(); - // Always reset pending wrap state self.screen.cursor.pending_wrap = false; @@ -1803,9 +1730,6 @@ pub fn carriageReturn(self: *Terminal) void { /// Linefeed moves the cursor to the next line. pub fn linefeed(self: *Terminal) !void { - const tracy = trace(@src()); - defer tracy.end(); - try self.index(); if (self.modes.get(.linefeed)) self.carriageReturn(); } @@ -1818,9 +1742,6 @@ pub fn linefeed(self: *Terminal) !void { /// /// The inserted cells are colored according to the current SGR state. pub fn insertBlanks(self: *Terminal, count: usize) void { - const tracy = trace(@src()); - defer tracy.end(); - // Unset pending wrap state without wrapping. Note: this purposely // happens BEFORE the scroll region check below, because that's what // xterm does. @@ -1901,9 +1822,6 @@ pub fn insertBlanks(self: *Terminal, count: usize) void { /// /// Moves the cursor to the left margin. pub fn insertLines(self: *Terminal, count: usize) !void { - const tracy = trace(@src()); - defer tracy.end(); - // Rare, but happens if (count == 0) return; @@ -1965,9 +1883,6 @@ pub fn insertLines(self: *Terminal, count: usize) !void { /// /// Moves the cursor to the left margin. pub fn deleteLines(self: *Terminal, count: usize) !void { - const tracy = trace(@src()); - defer tracy.end(); - // If the cursor is outside the scroll region we do nothing. if (self.screen.cursor.y < self.scrolling_region.top or self.screen.cursor.y > self.scrolling_region.bottom or @@ -2024,9 +1939,6 @@ pub fn deleteLines(self: *Terminal, count: usize) !void { /// Scroll the text down by one row. pub fn scrollDown(self: *Terminal, count: usize) !void { - const tracy = trace(@src()); - defer tracy.end(); - // Preserve the cursor const cursor = self.screen.cursor; defer self.screen.cursor = cursor; @@ -2045,9 +1957,6 @@ pub fn scrollDown(self: *Terminal, count: usize) !void { /// /// Does not change the (absolute) cursor position. pub fn scrollUp(self: *Terminal, count: usize) !void { - const tracy = trace(@src()); - defer tracy.end(); - // Preserve the cursor const cursor = self.screen.cursor; defer self.screen.cursor = cursor; @@ -2072,9 +1981,6 @@ pub const ScrollViewport = union(enum) { /// Scroll the viewport of the terminal grid. pub fn scrollViewport(self: *Terminal, behavior: ScrollViewport) !void { - const tracy = trace(@src()); - defer tracy.end(); - try self.screen.scroll(switch (behavior) { .top => .{ .top = {} }, .bottom => .{ .bottom = {} }, @@ -2095,9 +2001,6 @@ pub fn scrollViewport(self: *Terminal, behavior: ScrollViewport) !void { /// /// Top and bottom are 1-indexed. pub fn setTopAndBottomMargin(self: *Terminal, top_req: usize, bottom_req: usize) void { - const tracy = trace(@src()); - defer tracy.end(); - const top = @max(1, top_req); const bottom = @min(self.rows, if (bottom_req == 0) self.rows else bottom_req); if (top >= bottom) return; @@ -2109,9 +2012,6 @@ pub fn setTopAndBottomMargin(self: *Terminal, top_req: usize, bottom_req: usize) /// DECSLRM pub fn setLeftAndRightMargin(self: *Terminal, left_req: usize, right_req: usize) void { - const tracy = trace(@src()); - defer tracy.end(); - // We must have this mode enabled to do anything if (!self.modes.get(.enable_left_and_right_margin)) return; diff --git a/src/terminal/stream.zig b/src/terminal/stream.zig index 218c2dee8..bb25b7c10 100644 --- a/src/terminal/stream.zig +++ b/src/terminal/stream.zig @@ -8,7 +8,6 @@ const kitty = @import("kitty.zig"); const modes = @import("modes.zig"); const osc = @import("osc.zig"); const sgr = @import("sgr.zig"); -const trace = @import("tracy").trace; const MouseShape = @import("mouse_shape.zig").MouseShape; const log = std.log.scoped(.stream); @@ -44,17 +43,11 @@ pub fn Stream(comptime Handler: type) type { /// Process a string of characters. pub fn nextSlice(self: *Self, c: []const u8) !void { - const tracy = trace(@src()); - defer tracy.end(); for (c) |single| try self.next(single); } /// Process the next character and call any callbacks if necessary. pub fn next(self: *Self, c: u8) !void { - const tracy = trace(@src()); - tracy.value(@as(u64, @intCast(c))); - defer tracy.end(); - // log.debug("char: {c}", .{c}); const actions = self.parser.next(c); for (actions) |action_opt| { @@ -108,10 +101,6 @@ pub fn Stream(comptime Handler: type) type { } pub fn execute(self: *Self, c: u8) !void { - const tracy = trace(@src()); - tracy.value(@as(u64, @intCast(c))); - defer tracy.end(); - switch (@as(ansi.C0, @enumFromInt(c))) { // We ignore SOH/STX: https://github.com/microsoft/terminal/issues/10786 .NUL, .SOH, .STX => {}, diff --git a/src/termio/Exec.zig b/src/termio/Exec.zig index 909a2ce49..a7196948c 100644 --- a/src/termio/Exec.zig +++ b/src/termio/Exec.zig @@ -16,8 +16,6 @@ const terminal = @import("../terminal/main.zig"); const terminfo = @import("../terminfo/main.zig"); const xev = @import("xev"); const renderer = @import("../renderer.zig"); -const tracy = @import("tracy"); -const trace = tracy.trace; const apprt = @import("../apprt.zig"); const fastmem = @import("../fastmem.zig"); const internal_os = @import("../os/main.zig"); @@ -1514,9 +1512,6 @@ const ReadThread = struct { ev: *EventData, buf: []const u8, ) void { - const zone = trace(@src()); - defer zone.end(); - // log.info("DATA: {d}", .{n}); // log.info("DATA: {any}", .{buf[0..@intCast(usize, n)]}); diff --git a/src/termio/Thread.zig b/src/termio/Thread.zig index 61b2e3fba..2698f8064 100644 --- a/src/termio/Thread.zig +++ b/src/termio/Thread.zig @@ -7,8 +7,6 @@ const builtin = @import("builtin"); const xev = @import("xev"); const termio = @import("../termio.zig"); const BlockingQueue = @import("../blocking_queue.zig").BlockingQueue; -const tracy = @import("tracy"); -const trace = tracy.trace; const Allocator = std.mem.Allocator; const log = std.log.scoped(.io_thread); @@ -142,7 +140,6 @@ pub fn threadMain(self: *Thread) void { fn threadMain_(self: *Thread) !void { defer log.debug("IO thread exited", .{}); - tracy.setThreadName("pty io"); // Run our thread start/end callbacks. This allows the implementation // to hook into the event loop as needed. @@ -162,9 +159,6 @@ fn threadMain_(self: *Thread) !void { /// Drain the mailbox, handling all the messages in our terminal implementation. fn drainMailbox(self: *Thread) !void { - const zone = trace(@src()); - defer zone.end(); - // This holds the mailbox lock for the duration of the drain. The // expectation is that all our message handlers will be non-blocking // ENOUGH to not mess up throughput on producers. @@ -290,9 +284,6 @@ fn wakeupCallback( return .rearm; }; - const zone = trace(@src()); - defer zone.end(); - const t = self_.?; // When we wake up, we check the mailbox. Mailbox producers should From dfa55988d61eba62cdbb5412f94758c3a10150f9 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Sat, 13 Jan 2024 15:08:37 -0800 Subject: [PATCH 3/8] build: use BuildConfig struct --- build.zig | 39 ++++++++++++++++++--------------------- src/build_config.zig | 2 +- 2 files changed, 19 insertions(+), 22 deletions(-) diff --git a/build.zig b/build.zig index 7eeb15d91..3ee3cf9de 100644 --- a/build.zig +++ b/build.zig @@ -9,6 +9,7 @@ const font = @import("src/font/main.zig"); const renderer = @import("src/renderer.zig"); const terminfo = @import("src/terminfo/main.zig"); const config_vim = @import("src/config/vim.zig"); +const BuildConfig = @import("src/build_config.zig").BuildConfig; const WasmTarget = @import("src/os/wasm/target.zig").Target; const LibtoolStep = @import("src/build/LibtoolStep.zig"); const LipoStep = @import("src/build/LipoStep.zig"); @@ -36,10 +37,8 @@ const app_version = std.SemanticVersion{ .major = 0, .minor = 1, .patch = 0 }; /// Build options, see the build options help for more info. var flatpak: bool = false; -var app_runtime: apprt.Runtime = .none; -var renderer_impl: renderer.Impl = .opengl; -var font_backend: font.Backend = .freetype; var libadwaita: bool = false; +var config: BuildConfig = .{}; pub fn build(b: *std.Build) !void { const optimize = b.standardOptimizeOption(.{}); @@ -67,30 +66,30 @@ pub fn build(b: *std.Build) !void { "Build for Flatpak (integrates with Flatpak APIs). Only has an effect targeting Linux.", ) orelse false; - font_backend = b.option( + config.font_backend = b.option( font.Backend, "font-backend", "The font backend to use for discovery and rasterization.", ) orelse font.Backend.default(target.result, wasm_target); - app_runtime = b.option( + config.app_runtime = b.option( apprt.Runtime, "app-runtime", "The app runtime to use. Not all values supported on all platforms.", ) orelse apprt.Runtime.default(target.result); + config.renderer = b.option( + renderer.Impl, + "renderer", + "The app runtime to use. Not all values supported on all platforms.", + ) orelse renderer.Impl.default(target.result, wasm_target); + libadwaita = b.option( bool, "gtk-libadwaita", "Enables the use of libadwaita when using the gtk rendering backend.", ) orelse true; - renderer_impl = b.option( - renderer.Impl, - "renderer", - "The app runtime to use. Not all values supported on all platforms.", - ) orelse renderer.Impl.default(target.result, wasm_target); - const static = b.option( bool, "static", @@ -182,7 +181,7 @@ pub fn build(b: *std.Build) !void { try benchSteps(b, target, optimize, emit_bench); // We only build an exe if we have a runtime set. - const exe_: ?*std.Build.Step.Compile = if (app_runtime != .none) b.addExecutable(.{ + const exe_: ?*std.Build.Step.Compile = if (config.app_runtime != .none) b.addExecutable(.{ .name = "ghostty", .root_source_file = .{ .path = "src/main.zig" }, .target = target, @@ -190,6 +189,7 @@ pub fn build(b: *std.Build) !void { }) else null; const exe_options = b.addOptions(); + config.addOptions(exe_options); exe_options.addOption(std.SemanticVersion, "app_version", version); exe_options.addOption([:0]const u8, "app_version_string", try std.fmt.allocPrintZ( b.allocator, @@ -197,9 +197,6 @@ pub fn build(b: *std.Build) !void { .{version}, )); exe_options.addOption(bool, "flatpak", flatpak); - exe_options.addOption(apprt.Runtime, "app_runtime", app_runtime); - exe_options.addOption(font.Backend, "font_backend", font_backend); - exe_options.addOption(renderer.Impl, "renderer", renderer_impl); exe_options.addOption(bool, "libadwaita", libadwaita); // Exe @@ -246,7 +243,7 @@ pub fn build(b: *std.Build) !void { // If we're installing, we get the install step so we can add // additional dependencies to it. - const install_step = if (app_runtime != .none) step: { + const install_step = if (config.app_runtime != .none) step: { const step = b.addInstallArtifact(exe, .{}); b.getInstallStep().dependOn(&step.step); break :step step; @@ -742,7 +739,7 @@ fn addDeps( .cpu = cpu_opts, .optimize = step.root_module.optimize.?, .@"enable-freetype" = true, - .@"enable-coretext" = font_backend.hasCoretext(), + .@"enable-coretext" = config.font_backend.hasCoretext(), }); const ziglyph_dep = b.dependency("ziglyph", .{ .target = target_triple, @@ -782,7 +779,7 @@ fn addDeps( // We always need the Zig packages // TODO: This can't be the right way to use the new Zig modules system, // so take a closer look at this again later. - if (font_backend.hasFontconfig()) step.root_module.addImport( + if (config.font_backend.hasFontconfig()) step.root_module.addImport( "fontconfig", fontconfig_dep.module("fontconfig"), ); @@ -828,7 +825,7 @@ fn addDeps( step.linkSystemLibrary2("pixman-1", dynamic_link_opts); step.linkSystemLibrary2("zlib", dynamic_link_opts); - if (font_backend.hasFontconfig()) { + if (config.font_backend.hasFontconfig()) { step.linkSystemLibrary2("fontconfig", dynamic_link_opts); } } @@ -857,7 +854,7 @@ fn addDeps( try static_libs.append(pixman_dep.artifact("pixman").getEmittedBin()); // Only Linux gets fontconfig - if (font_backend.hasFontconfig()) { + if (config.font_backend.hasFontconfig()) { // Fontconfig step.linkLibrary(fontconfig_dep.artifact("fontconfig")); } @@ -875,7 +872,7 @@ fn addDeps( // get access to glib for dbus. if (flatpak) step.linkSystemLibrary2("gtk4", dynamic_link_opts); - switch (app_runtime) { + switch (config.app_runtime) { .none => {}, .glfw => { diff --git a/src/build_config.zig b/src/build_config.zig index 184dd6ac3..312b54378 100644 --- a/src/build_config.zig +++ b/src/build_config.zig @@ -28,7 +28,7 @@ pub const BuildConfig = struct { // support all types. step.addOption(apprt.Runtime, "app_runtime", self.app_runtime); step.addOption(font.Backend, "font_backend", self.font_backend); - step.addOption(rendererpkg.Impl, "renderer", self.renderer_impl); + step.addOption(rendererpkg.Impl, "renderer", self.renderer); } /// Rehydrate our BuildConfig from the comptime options. From d4b53cac06260ac48653467c1d94d1cfd8055ced Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Sat, 13 Jan 2024 15:11:28 -0800 Subject: [PATCH 4/8] build: move more options to BuildConfig --- build.zig | 14 +++++--------- src/build_config.zig | 6 ++++++ 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/build.zig b/build.zig index 3ee3cf9de..490600d3a 100644 --- a/build.zig +++ b/build.zig @@ -36,8 +36,6 @@ comptime { const app_version = std.SemanticVersion{ .major = 0, .minor = 1, .patch = 0 }; /// Build options, see the build options help for more info. -var flatpak: bool = false; -var libadwaita: bool = false; var config: BuildConfig = .{}; pub fn build(b: *std.Build) !void { @@ -60,7 +58,7 @@ pub fn build(b: *std.Build) !void { var env = try std.process.getEnvMap(b.allocator); defer env.deinit(); - flatpak = b.option( + config.flatpak = b.option( bool, "flatpak", "Build for Flatpak (integrates with Flatpak APIs). Only has an effect targeting Linux.", @@ -84,7 +82,7 @@ pub fn build(b: *std.Build) !void { "The app runtime to use. Not all values supported on all platforms.", ) orelse renderer.Impl.default(target.result, wasm_target); - libadwaita = b.option( + config.libadwaita = b.option( bool, "gtk-libadwaita", "Enables the use of libadwaita when using the gtk rendering backend.", @@ -196,8 +194,6 @@ pub fn build(b: *std.Build) !void { "{}", .{version}, )); - exe_options.addOption(bool, "flatpak", flatpak); - exe_options.addOption(bool, "libadwaita", libadwaita); // Exe if (exe_) |exe| { @@ -411,7 +407,7 @@ pub fn build(b: *std.Build) !void { // https://developer.gnome.org/documentation/guidelines/maintainer/integrating.html // Desktop file so that we have an icon and other metadata - if (flatpak) { + if (config.flatpak) { b.installFile("dist/linux/app-flatpak.desktop", "share/applications/com.mitchellh.ghostty.desktop"); } else { b.installFile("dist/linux/app.desktop", "share/applications/com.mitchellh.ghostty.desktop"); @@ -870,7 +866,7 @@ fn addDeps( // When we're targeting flatpak we ALWAYS link GTK so we // get access to glib for dbus. - if (flatpak) step.linkSystemLibrary2("gtk4", dynamic_link_opts); + if (config.flatpak) step.linkSystemLibrary2("gtk4", dynamic_link_opts); switch (config.app_runtime) { .none => {}, @@ -882,7 +878,7 @@ fn addDeps( .gtk => { step.linkSystemLibrary2("gtk4", dynamic_link_opts); - if (libadwaita) step.linkSystemLibrary2("adwaita-1", dynamic_link_opts); + if (config.libadwaita) step.linkSystemLibrary2("adwaita-1", dynamic_link_opts); }, } } diff --git a/src/build_config.zig b/src/build_config.zig index 312b54378..f8b2c8553 100644 --- a/src/build_config.zig +++ b/src/build_config.zig @@ -18,6 +18,8 @@ const rendererpkg = @import("renderer.zig"); /// between options, make it easy to copy and mutate options for different /// build types, etc. pub const BuildConfig = struct { + flatpak: bool = false, + libadwaita: bool = false, app_runtime: apprt.Runtime = .none, renderer: rendererpkg.Impl = .opengl, font_backend: font.Backend = .freetype, @@ -26,6 +28,8 @@ pub const BuildConfig = struct { pub fn addOptions(self: BuildConfig, step: *std.Build.Step.Options) void { // We need to break these down individual because addOption doesn't // support all types. + step.addOption(bool, "flatpak", self.flatpak); + step.addOption(bool, "libadwaita", self.libadwaita); step.addOption(apprt.Runtime, "app_runtime", self.app_runtime); step.addOption(font.Backend, "font_backend", self.font_backend); step.addOption(rendererpkg.Impl, "renderer", self.renderer); @@ -34,6 +38,8 @@ pub const BuildConfig = struct { /// Rehydrate our BuildConfig from the comptime options. pub fn fromOptions() BuildConfig { return .{ + .flatpak = options.flatpak, + .libadwaita = options.libadwaita, .app_runtime = std.meta.stringToEnum(apprt.Runtime, @tagName(options.app_runtime)).?, .font_backend = std.meta.stringToEnum(font.Backend, @tagName(options.font_backend)).?, .renderer = std.meta.stringToEnum(rendererpkg.Impl, @tagName(options.renderer)).?, From bfe3c356f0542ba8badb8da209d56ed5103651ef Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Sat, 13 Jan 2024 15:18:45 -0800 Subject: [PATCH 5/8] build: move our configuration out of globals --- build.zig | 66 ++++++++++++++++++++++++++++++++++---------- src/build_config.zig | 5 +++- 2 files changed, 55 insertions(+), 16 deletions(-) diff --git a/build.zig b/build.zig index 490600d3a..898f8d8fe 100644 --- a/build.zig +++ b/build.zig @@ -35,9 +35,6 @@ comptime { /// The version of the next release. const app_version = std.SemanticVersion{ .major = 0, .minor = 1, .patch = 0 }; -/// Build options, see the build options help for more info. -var config: BuildConfig = .{}; - pub fn build(b: *std.Build) !void { const optimize = b.standardOptimizeOption(.{}); const target = target: { @@ -58,6 +55,11 @@ pub fn build(b: *std.Build) !void { var env = try std.process.getEnvMap(b.allocator); defer env.deinit(); + // Our build configuration. This is all on a struct so that we can easily + // modify it for specific build types (for example, wasm we strictly + // control our backends). + var config: BuildConfig = .{}; + config.flatpak = b.option( bool, "flatpak", @@ -88,7 +90,7 @@ pub fn build(b: *std.Build) !void { "Enables the use of libadwaita when using the gtk rendering backend.", ) orelse true; - const static = b.option( + config.static = b.option( bool, "static", "Statically build as much as possible for the exe", @@ -176,7 +178,7 @@ pub fn build(b: *std.Build) !void { b.enable_wasmtime = true; // Add our benchmarks - try benchSteps(b, target, optimize, emit_bench); + try benchSteps(b, target, optimize, config, emit_bench); // We only build an exe if we have a runtime set. const exe_: ?*std.Build.Step.Compile = if (config.app_runtime != .none) b.addExecutable(.{ @@ -200,7 +202,7 @@ pub fn build(b: *std.Build) !void { exe.root_module.addOptions("build_options", exe_options); // Add the shared dependencies - _ = try addDeps(b, exe, static); + _ = try addDeps(b, exe, config); // If we're in NixOS but not in the shell environment then we issue // a warning because the rpath may not be setup properly. @@ -428,6 +430,17 @@ pub fn build(b: *std.Build) !void { // On Mac we can build the embedding library. This only handles the macOS lib. if (builtin.target.isDarwin() and target.result.os.tag == .macos) { + // Modify our build configuration for macOS builds. + const macos_config: BuildConfig = config: { + var copy = config; + + // Always static for the macOS app because we want all of our + // dependencies in a fat static library. + copy.static = true; + + break :config copy; + }; + const static_lib_aarch64 = lib: { const lib = b.addStaticLibrary(.{ .name = "ghostty", @@ -444,7 +457,7 @@ pub fn build(b: *std.Build) !void { lib.root_module.addOptions("build_options", exe_options); // Create a single static lib with all our dependencies merged - var lib_list = try addDeps(b, lib, true); + var lib_list = try addDeps(b, lib, macos_config); try lib_list.append(lib.getEmittedBin()); const libtool = LibtoolStep.create(b, .{ .name = "ghostty", @@ -473,7 +486,7 @@ pub fn build(b: *std.Build) !void { lib.root_module.addOptions("build_options", exe_options); // Create a single static lib with all our dependencies merged - var lib_list = try addDeps(b, lib, true); + var lib_list = try addDeps(b, lib, macos_config); try lib_list.append(lib.getEmittedBin()); const libtool = LibtoolStep.create(b, .{ .name = "ghostty", @@ -539,6 +552,20 @@ pub fn build(b: *std.Build) !void { }), }; + // Modify our build configuration for wasm builds. + const wasm_config: BuildConfig = config: { + var copy = config; + + // Always static for the wasm app because we want all of our + // dependencies in a fat static library. + copy.static = true; + + // Backends that are fixed for wasm + copy.font_backend = .web_canvas; + + break :config copy; + }; + // Whether we're using wasm shared memory. Some behaviors change. // For now we require this but I wanted to make the code handle both // up front. @@ -567,7 +594,7 @@ pub fn build(b: *std.Build) !void { wasm.root_module.stack_protector = false; // Wasm-specific deps - _ = try addDeps(b, wasm, true); + _ = try addDeps(b, wasm, wasm_config); // Install const wasm_install = b.addInstallArtifact(wasm, .{}); @@ -587,7 +614,7 @@ pub fn build(b: *std.Build) !void { }); main_test.root_module.addOptions("build_options", exe_options); - _ = try addDeps(b, main_test, true); + _ = try addDeps(b, main_test, wasm_config); test_step.dependOn(&main_test.step); } @@ -624,7 +651,11 @@ pub fn build(b: *std.Build) !void { { if (emit_test_exe) b.installArtifact(main_test); - _ = try addDeps(b, main_test, true); + _ = try addDeps(b, main_test, config: { + var copy = config; + copy.static = true; + break :config copy; + }); main_test.root_module.addOptions("build_options", exe_options); const test_run = b.addRunArtifact(main_test); @@ -640,7 +671,7 @@ const LazyPathList = std.ArrayList(std.Build.LazyPath); fn addDeps( b: *std.Build, step: *std.Build.Step.Compile, - static: bool, + config: BuildConfig, ) !LazyPathList { var static_libs = LazyPathList.init(b.allocator); errdefer static_libs.deinit(); @@ -811,7 +842,7 @@ fn addDeps( try static_libs.append(spirv_cross_dep.artifact("spirv_cross").getEmittedBin()); // Dynamic link - if (!static) { + if (!config.static) { step.addIncludePath(freetype_dep.path("")); step.linkSystemLibrary2("bzip2", dynamic_link_opts); step.linkSystemLibrary2("freetype2", dynamic_link_opts); @@ -827,7 +858,7 @@ fn addDeps( } // Other dependencies, we may dynamically link - if (static) { + if (config.static) { step.linkLibrary(oniguruma_dep.artifact("oniguruma")); try static_libs.append(oniguruma_dep.artifact("oniguruma").getEmittedBin()); @@ -890,6 +921,7 @@ fn benchSteps( b: *std.Build, target: std.Build.ResolvedTarget, optimize: std.builtin.OptimizeMode, + config: BuildConfig, install: bool, ) !void { // Open the directory ./src/bench @@ -924,7 +956,11 @@ fn benchSteps( // .main_pkg_path = .{ .path = "./src" }, }); if (install) b.installArtifact(c_exe); - _ = try addDeps(b, c_exe, true); + _ = try addDeps(b, c_exe, config: { + var copy = config; + copy.static = true; + break :config copy; + }); } } diff --git a/src/build_config.zig b/src/build_config.zig index f8b2c8553..8109cb519 100644 --- a/src/build_config.zig +++ b/src/build_config.zig @@ -18,6 +18,7 @@ const rendererpkg = @import("renderer.zig"); /// between options, make it easy to copy and mutate options for different /// build types, etc. pub const BuildConfig = struct { + static: bool = false, flatpak: bool = false, libadwaita: bool = false, app_runtime: apprt.Runtime = .none, @@ -35,7 +36,9 @@ pub const BuildConfig = struct { step.addOption(rendererpkg.Impl, "renderer", self.renderer); } - /// Rehydrate our BuildConfig from the comptime options. + /// Rehydrate our BuildConfig from the comptime options. Note that not all + /// options are available at comptime, so look closely at this implementation + /// to see what is and isn't available. pub fn fromOptions() BuildConfig { return .{ .flatpak = options.flatpak, From f61eaea4d063c1b0b911594a54a1d8e23cd08611 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Sat, 13 Jan 2024 15:29:12 -0800 Subject: [PATCH 6/8] build: update our macOS checks to check for macOS specifically --- build.zig | 28 ++++++++++++++++++---------- src/build_config.zig | 8 ++++---- 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/build.zig b/build.zig index 898f8d8fe..dbb9ea498 100644 --- a/build.zig +++ b/build.zig @@ -40,10 +40,18 @@ pub fn build(b: *std.Build) !void { const target = target: { var result = b.standardTargetOptions(.{}); - if (result.result.isDarwin()) { - if (result.query.os_version_min == null) { - result.query.os_version_min = .{ .semver = .{ .major = 12, .minor = 0, .patch = 0 } }; - } + // On macOS, we specify a minimum supported version. This is important + // to set since header files will use this to determine the availability + // of certain APIs and I believe it is also encoded in the Mach-O + // binaries. + if (result.result.os.tag == .macos and + result.query.os_version_min == null) + { + result.query.os_version_min = .{ .semver = .{ + .major = 12, + .minor = 0, + .patch = 0, + } }; } break :target result; @@ -261,7 +269,7 @@ pub fn build(b: *std.Build) !void { } // App (Mac) - if (target.result.isDarwin()) { + if (target.result.os.tag == .macos) { const bin_install = b.addInstallFile( exe.getEmittedBin(), "Ghostty.app/Contents/MacOS/ghostty", @@ -282,7 +290,7 @@ pub fn build(b: *std.Build) !void { }); b.getInstallStep().dependOn(&install.step); - if (target.result.isDarwin() and exe_ != null) { + if (target.result.os.tag == .macos and exe_ != null) { const mac_install = b.addInstallDirectory(options: { var copy = install.options; copy.install_dir = .{ @@ -305,7 +313,7 @@ pub fn build(b: *std.Build) !void { }); b.getInstallStep().dependOn(&install.step); - if (target.result.isDarwin() and exe_ != null) { + if (target.result.os.tag == .macos and exe_ != null) { const mac_install = b.addInstallDirectory(options: { var copy = install.options; copy.install_dir = .{ @@ -329,7 +337,7 @@ pub fn build(b: *std.Build) !void { const src_source = wf.add("share/terminfo/ghostty.terminfo", str.items); const src_install = b.addInstallFile(src_source, "share/terminfo/ghostty.terminfo"); b.getInstallStep().dependOn(&src_install.step); - if (target.result.isDarwin() and exe_ != null) { + if (target.result.os.tag == .macos and exe_ != null) { const mac_src_install = b.addInstallFile( src_source, "Ghostty.app/Contents/Resources/terminfo/ghostty.terminfo", @@ -350,7 +358,7 @@ pub fn build(b: *std.Build) !void { const cap_install = b.addInstallFile(out_source, "share/terminfo/ghostty.termcap"); b.getInstallStep().dependOn(&cap_install.step); - if (target.result.isDarwin() and exe_ != null) { + if (target.result.os.tag == .macos and exe_ != null) { const mac_cap_install = b.addInstallFile( out_source, "Ghostty.app/Contents/Resources/terminfo/ghostty.termcap", @@ -379,7 +387,7 @@ pub fn build(b: *std.Build) !void { b.getInstallStep().dependOn(©_step.step); } - if (target.result.isDarwin() and exe_ != null) { + if (target.result.os.tag == .macos and exe_ != null) { const copy_step = RunStep.create(b, "copy terminfo db"); copy_step.addArgs(&.{ "cp", "-R" }); copy_step.addFileArg(path); diff --git a/src/build_config.zig b/src/build_config.zig index 8109cb519..6a9a55085 100644 --- a/src/build_config.zig +++ b/src/build_config.zig @@ -58,15 +58,15 @@ pub const version_string = options.app_version_string; /// building a standalone exe, an embedded lib, etc. pub const artifact = Artifact.detect(); -/// Our build configuration. +/// Our build configuration. We re-export a lot of these back at the +/// top-level so its a bit cleaner to use throughout the code. See the doc +/// comments in BuildConfig for details on each. pub const config = BuildConfig.fromOptions(); +pub const flatpak = options.flatpak; pub const app_runtime: apprt.Runtime = config.app_runtime; pub const font_backend: font.Backend = config.font_backend; pub const renderer: rendererpkg.Impl = config.renderer; -/// We want to integrate with Flatpak APIs. -pub const flatpak = options.flatpak; - pub const Artifact = enum { /// Standalone executable exe, From ac0994e3ded18dd5ab52f2fa92dbd5066942713f Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Sat, 13 Jan 2024 15:31:04 -0800 Subject: [PATCH 7/8] nix: update build hash --- nix/zigCacheHash.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nix/zigCacheHash.nix b/nix/zigCacheHash.nix index 7b0bd5cb5..886e06916 100644 --- a/nix/zigCacheHash.nix +++ b/nix/zigCacheHash.nix @@ -1,3 +1,3 @@ # This file is auto-generated! check build-support/check-zig-cache-hash.sh for # more details. -"sha256-1qlnSOyr2C9DtUdf+4QRNrBr4vUM1nVnv/mVUXxE5fA=" +"sha256-1dYTlmmBVvLyWxcJV2mPetOe3ECDzL6UfqnKr2Azl8M=" From 09bc49ae8e975f8badee7680caecf7fbac4c1325 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Sat, 13 Jan 2024 15:36:36 -0800 Subject: [PATCH 8/8] build: remove non-existent tracy dep --- build.zig.zon | 1 - 1 file changed, 1 deletion(-) diff --git a/build.zig.zon b/build.zig.zon index 536b5c1a1..8a811305c 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -35,7 +35,6 @@ .oniguruma = .{ .path = "./pkg/oniguruma" }, .opengl = .{ .path = "./pkg/opengl" }, .pixman = .{ .path = "./pkg/pixman" }, - .tracy = .{ .path = "./pkg/tracy" }, .zlib = .{ .path = "./pkg/zlib" }, // Shader translation