From 9151811918fbc1e916205469a0fbac3220827179 Mon Sep 17 00:00:00 2001 From: Mason Remaley Date: Sun, 7 Sep 2025 13:51:02 -0700 Subject: [PATCH] Updates Zig --- build.zig | 24 +++++++++++++++--------- build.zig.zon | 2 +- src/generate.zig | 31 ++++++++++++++++--------------- 3 files changed, 32 insertions(+), 25 deletions(-) diff --git a/build.zig b/build.zig index 2a3cf97..da5966a 100644 --- a/build.zig +++ b/build.zig @@ -21,10 +21,12 @@ pub fn build(b: *std.Build) void { const upstream = b.dependency("dear-imgui", .{}); // Compile Dear ImGui as a static library - const dear_imgui_lib = b.addStaticLibrary(.{ + const dear_imgui_lib = b.addLibrary(.{ .name = "dear_imgui", - .target = target, - .optimize = optimize_external, + .root_module = b.createModule(.{ + .target = target, + .optimize = optimize_external, + }), }); dear_imgui_lib.addIncludePath(upstream.path("")); dear_imgui_lib.installHeadersDirectory(upstream.path("."), "", .{}); @@ -48,10 +50,12 @@ pub fn build(b: *std.Build) void { b.installArtifact(dear_imgui_lib); // Compile the Vulkan backend as a static library - const dear_imgui_vulkan_lib = b.addStaticLibrary(.{ + const dear_imgui_vulkan_lib = b.addLibrary(.{ .name = "dear_imgui_vulkan", - .target = target, - .optimize = optimize_external, + .root_module = b.createModule(.{ + .target = target, + .optimize = optimize_external, + }), }); dear_imgui_vulkan_lib.linkLibrary(dear_imgui_lib); dear_imgui_vulkan_lib.addCSourceFile(.{ .file = upstream.path("backends/imgui_impl_vulkan.cpp"), .flags = flags }); @@ -68,9 +72,11 @@ pub fn build(b: *std.Build) void { // Compile the generator const generate_exe = b.addExecutable(.{ .name = "generate", - .root_source_file = b.path("src/generate.zig"), - .target = native_target, - .optimize = optimize, + .root_module = b.createModule(.{ + .root_source_file = b.path("src/generate.zig"), + .target = native_target, + .optimize = optimize, + }), }); const generate_cmd = b.addRunArtifact(generate_exe); diff --git a/build.zig.zon b/build.zig.zon index 9848ffe..f84f90a 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -2,7 +2,7 @@ .name = .dear_imgui, .fingerprint = 0xc1cc609af54040bd, .version = "0.0.0", - .minimum_zig_version = "0.14.0", + .minimum_zig_version = "0.15.1", .dependencies = .{ .@"dear-imgui" = .{ .url = "https://github.com/ocornut/imgui/archive/refs/tags/v1.91.0-docking.tar.gz", diff --git a/src/generate.zig b/src/generate.zig index 9392253..3fc47a7 100644 --- a/src/generate.zig +++ b/src/generate.zig @@ -182,8 +182,9 @@ pub fn main() !void { const out = try std.fs.cwd().createFile(out_path, .{}); defer out.close(); - var buf = std.io.bufferedWriter(out.writer()); - const writer = buf.writer(); + var writer_buf: [4096]u8 = undefined; + var file_writer = out.writerStreaming(&writer_buf); + const writer = &file_writer.interface; // Write the prefix if (prefix_path) |p| { @@ -222,7 +223,7 @@ pub fn main() !void { // Get a list of cimgui methods. These were already written as externs, and can be aliased // when we write their respective types. var methods = try Methods.get(allocator, &header.value); - defer methods.deinit(); + defer methods.deinit(allocator); // Write cimgui enums as Zig enums. try writeEnums(allocator, writer, &header.value); @@ -243,7 +244,7 @@ pub fn main() !void { } // Flush and exit - try buf.flush(); + try writer.flush(); } fn getDeclarations(allocator: Allocator, header: *const Header) !Declarations { @@ -347,7 +348,7 @@ fn writeExternFunctions( } try writer.writeAll(", "); } - try writer.writeAll(") callconv(.C) "); + try writer.writeAll(") callconv(.c) "); try writeType(writer, function.return_type, declarations, .{ .is_result = true }); try writer.writeAll(";\n"); } @@ -383,12 +384,12 @@ const Methods = struct { // Initialize an empty method list for each type var types = std.StringArrayHashMap(std.ArrayList([]const u8)).init(allocator); errdefer types.deinit(); - errdefer for (types.values()) |methods| { - methods.deinit(); + errdefer for (types.values()) |*methods| { + methods.deinit(allocator); }; for (header.structs) |ty| { - const methods = std.ArrayList([]const u8).init(allocator); - errdefer methods.deinit(); + var methods: std.ArrayList([]const u8) = .empty; + errdefer methods.deinit(allocator); try types.put(ty.name, methods); } @@ -399,16 +400,16 @@ const Methods = struct { if (function.original_class) |class| { const methods = types.getPtr(class).?; - try methods.append(function.name); + try methods.append(allocator, function.name); } } return .{ .types = types }; } - fn deinit(self: *Methods) void { - for (self.types.values()) |methods| { - methods.deinit(); + fn deinit(self: *Methods, allocator: Allocator) void { + for (self.types.values()) |*methods| { + methods.deinit(allocator); } self.types.deinit(); self.* = undefined; @@ -611,7 +612,7 @@ fn writeType( ty: Header.Type, declarations: *const Declarations, hints: WriteTypeHints, -) @TypeOf(writer).Error!void { +) std.Io.Writer.Error!void { // Handle function pointers which are stored separately. if (ty.type_details) |details| switch (details.flavour) { .function_pointer => return writeFunctionPointer(writer, details, declarations), @@ -637,7 +638,7 @@ fn writeFunctionPointer( try writeType(writer, argument.type, declarations, .{}); try writer.writeAll(", "); } - try writer.writeAll(") callconv(.C) "); + try writer.writeAll(") callconv(.c) "); try writeType(writer, details.return_type.*, declarations, .{}); }