Updates Zig

This commit is contained in:
Mason Remaley 2025-09-07 13:51:02 -07:00
parent 7cd8f4c8c4
commit 9151811918
3 changed files with 32 additions and 25 deletions

View file

@ -21,10 +21,12 @@ pub fn build(b: *std.Build) void {
const upstream = b.dependency("dear-imgui", .{}); const upstream = b.dependency("dear-imgui", .{});
// Compile Dear ImGui as a static library // Compile Dear ImGui as a static library
const dear_imgui_lib = b.addStaticLibrary(.{ const dear_imgui_lib = b.addLibrary(.{
.name = "dear_imgui", .name = "dear_imgui",
.target = target, .root_module = b.createModule(.{
.optimize = optimize_external, .target = target,
.optimize = optimize_external,
}),
}); });
dear_imgui_lib.addIncludePath(upstream.path("")); dear_imgui_lib.addIncludePath(upstream.path(""));
dear_imgui_lib.installHeadersDirectory(upstream.path("."), "", .{}); dear_imgui_lib.installHeadersDirectory(upstream.path("."), "", .{});
@ -48,10 +50,12 @@ pub fn build(b: *std.Build) void {
b.installArtifact(dear_imgui_lib); b.installArtifact(dear_imgui_lib);
// Compile the Vulkan backend as a static library // 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", .name = "dear_imgui_vulkan",
.target = target, .root_module = b.createModule(.{
.optimize = optimize_external, .target = target,
.optimize = optimize_external,
}),
}); });
dear_imgui_vulkan_lib.linkLibrary(dear_imgui_lib); dear_imgui_vulkan_lib.linkLibrary(dear_imgui_lib);
dear_imgui_vulkan_lib.addCSourceFile(.{ .file = upstream.path("backends/imgui_impl_vulkan.cpp"), .flags = flags }); 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 // Compile the generator
const generate_exe = b.addExecutable(.{ const generate_exe = b.addExecutable(.{
.name = "generate", .name = "generate",
.root_source_file = b.path("src/generate.zig"), .root_module = b.createModule(.{
.target = native_target, .root_source_file = b.path("src/generate.zig"),
.optimize = optimize, .target = native_target,
.optimize = optimize,
}),
}); });
const generate_cmd = b.addRunArtifact(generate_exe); const generate_cmd = b.addRunArtifact(generate_exe);

View file

@ -2,7 +2,7 @@
.name = .dear_imgui, .name = .dear_imgui,
.fingerprint = 0xc1cc609af54040bd, .fingerprint = 0xc1cc609af54040bd,
.version = "0.0.0", .version = "0.0.0",
.minimum_zig_version = "0.14.0", .minimum_zig_version = "0.15.1",
.dependencies = .{ .dependencies = .{
.@"dear-imgui" = .{ .@"dear-imgui" = .{
.url = "https://github.com/ocornut/imgui/archive/refs/tags/v1.91.0-docking.tar.gz", .url = "https://github.com/ocornut/imgui/archive/refs/tags/v1.91.0-docking.tar.gz",

View file

@ -182,8 +182,9 @@ pub fn main() !void {
const out = try std.fs.cwd().createFile(out_path, .{}); const out = try std.fs.cwd().createFile(out_path, .{});
defer out.close(); defer out.close();
var buf = std.io.bufferedWriter(out.writer()); var writer_buf: [4096]u8 = undefined;
const writer = buf.writer(); var file_writer = out.writerStreaming(&writer_buf);
const writer = &file_writer.interface;
// Write the prefix // Write the prefix
if (prefix_path) |p| { 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 // Get a list of cimgui methods. These were already written as externs, and can be aliased
// when we write their respective types. // when we write their respective types.
var methods = try Methods.get(allocator, &header.value); var methods = try Methods.get(allocator, &header.value);
defer methods.deinit(); defer methods.deinit(allocator);
// Write cimgui enums as Zig enums. // Write cimgui enums as Zig enums.
try writeEnums(allocator, writer, &header.value); try writeEnums(allocator, writer, &header.value);
@ -243,7 +244,7 @@ pub fn main() !void {
} }
// Flush and exit // Flush and exit
try buf.flush(); try writer.flush();
} }
fn getDeclarations(allocator: Allocator, header: *const Header) !Declarations { fn getDeclarations(allocator: Allocator, header: *const Header) !Declarations {
@ -347,7 +348,7 @@ fn writeExternFunctions(
} }
try writer.writeAll(", "); try writer.writeAll(", ");
} }
try writer.writeAll(") callconv(.C) "); try writer.writeAll(") callconv(.c) ");
try writeType(writer, function.return_type, declarations, .{ .is_result = true }); try writeType(writer, function.return_type, declarations, .{ .is_result = true });
try writer.writeAll(";\n"); try writer.writeAll(";\n");
} }
@ -383,12 +384,12 @@ const Methods = struct {
// Initialize an empty method list for each type // Initialize an empty method list for each type
var types = std.StringArrayHashMap(std.ArrayList([]const u8)).init(allocator); var types = std.StringArrayHashMap(std.ArrayList([]const u8)).init(allocator);
errdefer types.deinit(); errdefer types.deinit();
errdefer for (types.values()) |methods| { errdefer for (types.values()) |*methods| {
methods.deinit(); methods.deinit(allocator);
}; };
for (header.structs) |ty| { for (header.structs) |ty| {
const methods = std.ArrayList([]const u8).init(allocator); var methods: std.ArrayList([]const u8) = .empty;
errdefer methods.deinit(); errdefer methods.deinit(allocator);
try types.put(ty.name, methods); try types.put(ty.name, methods);
} }
@ -399,16 +400,16 @@ const Methods = struct {
if (function.original_class) |class| { if (function.original_class) |class| {
const methods = types.getPtr(class).?; const methods = types.getPtr(class).?;
try methods.append(function.name); try methods.append(allocator, function.name);
} }
} }
return .{ .types = types }; return .{ .types = types };
} }
fn deinit(self: *Methods) void { fn deinit(self: *Methods, allocator: Allocator) void {
for (self.types.values()) |methods| { for (self.types.values()) |*methods| {
methods.deinit(); methods.deinit(allocator);
} }
self.types.deinit(); self.types.deinit();
self.* = undefined; self.* = undefined;
@ -611,7 +612,7 @@ fn writeType(
ty: Header.Type, ty: Header.Type,
declarations: *const Declarations, declarations: *const Declarations,
hints: WriteTypeHints, hints: WriteTypeHints,
) @TypeOf(writer).Error!void { ) std.Io.Writer.Error!void {
// Handle function pointers which are stored separately. // Handle function pointers which are stored separately.
if (ty.type_details) |details| switch (details.flavour) { if (ty.type_details) |details| switch (details.flavour) {
.function_pointer => return writeFunctionPointer(writer, details, declarations), .function_pointer => return writeFunctionPointer(writer, details, declarations),
@ -637,7 +638,7 @@ fn writeFunctionPointer(
try writeType(writer, argument.type, declarations, .{}); try writeType(writer, argument.type, declarations, .{});
try writer.writeAll(", "); try writer.writeAll(", ");
} }
try writer.writeAll(") callconv(.C) "); try writer.writeAll(") callconv(.c) ");
try writeType(writer, details.return_type.*, declarations, .{}); try writeType(writer, details.return_type.*, declarations, .{});
} }