From fea4ae1e1f3f0ab7a7ebc0b52d2845557e17d191 Mon Sep 17 00:00:00 2001 From: jinzhongjia Date: Sun, 20 Jul 2025 20:31:23 +0800 Subject: [PATCH] fix(build): add Zig 0.14 compatibility for library and examples - update build.zig to support Zig 0.14 changes in addLibrary/addExecutable APIs - conditionally handle library and executable creation based on Zig version - improve linker flag debug logging for better clarity --- build.zig | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/build.zig b/build.zig index bf296fcf9..bf4abffad 100644 --- a/build.zig +++ b/build.zig @@ -43,7 +43,7 @@ pub fn build(b: *Build) !void { log(.info, .WebUI, "Done.", .{}); } - const webui = if (is_dynamic) b.addSharedLibrary(.{ + const webui = if (builtin.zig_version.minor == 14) (if (is_dynamic) b.addSharedLibrary(.{ .name = lib_name, .target = target, .optimize = optimize, @@ -52,7 +52,18 @@ pub fn build(b: *Build) !void { .name = lib_name, .target = target, .optimize = optimize, + })) else b.addLibrary(.{ + .name = lib_name, + .linkage = if (is_dynamic) .dynamic else .static, + .root_module = b.createModule(.{ + // not, pic enabled, zig will not allow to build a static library + // .pic = is_dynamic, + .pic = if (is_dynamic) is_dynamic else true, + .target = target, + .optimize = optimize, + }), }); + try addLinkerFlags(b, webui, enable_tls, debug_dependencies, enable_webui_log); b.installArtifact(webui); @@ -132,10 +143,12 @@ fn addLinkerFlags( for (webui.root_module.link_objects.items) |lo| { switch (lo) { .c_source_file => |csf| { - log(.debug, .WebUI, "{s} linker flags: {s}", .{ + log(.debug, .WebUI, "{s} linker flags:\n", .{ csf.file.src_path.sub_path, - csf.flags, }); + for (csf.flags) |flag| { + log(.debug, .WebUI, " {s}", .{flag}); + } }, else => {}, } @@ -165,10 +178,17 @@ fn build_examples(b: *Build, webui: *Compile) !void { } const example_name = val.name; - const exe = b.addExecutable(.{ + const exe = b.addExecutable(if (builtin.zig_version.minor == 14) .{ .name = example_name, .target = target, .optimize = optimize, + } else .{ + .name = example_name, + .root_module = b.createModule(.{ + .target = target, + .optimize = optimize, + .pic = true, + }), }); const path = try std.fmt.allocPrint(b.allocator, "examples/C/{s}/main.c", .{example_name}); defer b.allocator.free(path);