From 2423b69f3d9afc72c5c373dcd81e4b596c875793 Mon Sep 17 00:00:00 2001 From: Chinmay Dalal Date: Mon, 5 Jan 2026 16:48:08 -0500 Subject: [PATCH] make it build with zig 0.16 --- build.zig | 74 +++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 47 insertions(+), 27 deletions(-) diff --git a/build.zig b/build.zig index bd7a0721..42bb9e6f 100644 --- a/build.zig +++ b/build.zig @@ -8,46 +8,47 @@ pub fn build(b: *std.Build) !void { const shared = b.option(bool, "build-shared", "Build a shared library") orelse false; const amalgamated = b.option(bool, "amalgamated", "Build using an amalgamated source") orelse false; + var root_module = b.createModule(.{ + .target = target, + .optimize = optimize, + .link_libc = true, + .pic = if (shared) true else null, + }); const lib: *std.Build.Step.Compile = b.addLibrary(.{ .name = "tree-sitter", .linkage = if (shared) .dynamic else .static, - .root_module = b.createModule(.{ - .target = target, - .optimize = optimize, - .link_libc = true, - .pic = if (shared) true else null, - }), + .root_module = root_module, }); if (amalgamated) { - lib.addCSourceFile(.{ + root_module.addCSourceFile(.{ .file = b.path("lib/src/lib.c"), .flags = &.{"-std=c11"}, }); } else { const files = try findSourceFiles(b); defer b.allocator.free(files); - lib.addCSourceFiles(.{ + root_module.addCSourceFiles(.{ .root = b.path("lib/src"), .files = files, .flags = &.{"-std=c11"}, }); } - lib.addIncludePath(b.path("lib/include")); - lib.addIncludePath(b.path("lib/src")); - lib.addIncludePath(b.path("lib/src/wasm")); + root_module.addIncludePath(b.path("lib/include")); + root_module.addIncludePath(b.path("lib/src")); + root_module.addIncludePath(b.path("lib/src/wasm")); - lib.root_module.addCMacro("_POSIX_C_SOURCE", "200112L"); - lib.root_module.addCMacro("_DEFAULT_SOURCE", ""); - lib.root_module.addCMacro("_DARWIN_C_SOURCE", ""); + root_module.addCMacro("_POSIX_C_SOURCE", "200112L"); + root_module.addCMacro("_DEFAULT_SOURCE", ""); + root_module.addCMacro("_DARWIN_C_SOURCE", ""); if (wasm) { if (b.lazyDependency(wasmtimeDep(target.result), .{})) |wasmtime| { - lib.root_module.addCMacro("TREE_SITTER_FEATURE_WASM", ""); - lib.addSystemIncludePath(wasmtime.path("include")); - lib.addLibraryPath(wasmtime.path("lib")); - if (shared) lib.linkSystemLibrary("wasmtime"); + root_module.addCMacro("TREE_SITTER_FEATURE_WASM", ""); + root_module.addSystemIncludePath(wasmtime.path("include")); + root_module.addLibraryPath(wasmtime.path("lib")); + if (shared) root_module.linkSystemLibrary("wasmtime", .{}); } } @@ -124,16 +125,35 @@ pub fn wasmtimeDep(target: std.Target) []const u8 { fn findSourceFiles(b: *std.Build) ![]const []const u8 { var sources: std.ArrayListUnmanaged([]const u8) = .empty; - var dir = try b.build_root.handle.openDir("lib/src", .{ .iterate = true }); - var iter = dir.iterate(); - defer dir.close(); + if (comptime @hasDecl(std.Io, "Threaded")) { + var threaded: std.Io.Threaded = .init_single_threaded; + defer threaded.deinit(); + const io = threaded.io(); - while (try iter.next()) |entry| { - if (entry.kind != .file) continue; - const file = entry.name; - const ext = std.fs.path.extension(file); - if (std.mem.eql(u8, ext, ".c") and !std.mem.eql(u8, file, "lib.c")) { - try sources.append(b.allocator, b.dupe(file)); + var dir = try b.build_root.handle.openDir(io, "lib/src", .{ .iterate = true }); + var iter = dir.iterate(); + defer dir.close(io); + + while (try iter.next(io)) |entry| { + if (entry.kind != .file) continue; + const file = entry.name; + const ext = std.fs.path.extension(file); + if (std.mem.eql(u8, ext, ".c") and !std.mem.eql(u8, file, "lib.c")) { + try sources.append(b.allocator, b.dupe(file)); + } + } + } else { + var dir = try b.build_root.handle.openDir("lib/src", .{ .iterate = true }); + var iter = dir.iterate(); + defer dir.close(); + + while (try iter.next()) |entry| { + if (entry.kind != .file) continue; + const file = entry.name; + const ext = std.fs.path.extension(file); + if (std.mem.eql(u8, ext, ".c") and !std.mem.eql(u8, file, "lib.c")) { + try sources.append(b.allocator, b.dupe(file)); + } } }