}
fn init(builder: *std.build.Builder) !Maker {
- // const commit_hash = @embedFile(".git/refs/heads/master");
const target = builder.standardTargetOptions(.{});
+ const zig_version = @import("builtin").zig_version_string;
+ const commit_hash = try std.ChildProcess.exec(
+ .{ .allocator = builder.allocator, .argv = &.{ "git", "rev-parse", "HEAD" } },
+ );
const config_header = builder.addConfigHeader(
.{ .style = .blank, .include_path = "build-info.h" },
.{
.BUILD_NUMBER = 0,
- .BUILD_COMMIT = "12345", // omit newline
- .BUILD_COMPILER = "Zig 0.11.0",
+ .BUILD_COMMIT = commit_hash.stdout[0 .. commit_hash.stdout.len - 1], // omit newline
+ .BUILD_COMPILER = builder.fmt("Zig {s}", .{zig_version}),
.BUILD_TARGET = try target.allocDescription(builder.allocator),
},
);
fn obj(m: *const Maker, name: []const u8, src: []const u8) *Compile {
const o = m.builder.addObject(.{ .name = name, .target = m.target, .optimize = m.optimize });
+ if (o.target.getAbi() != .msvc)
+ o.defineCMacro("_GNU_SOURCE", null);
+ o.addConfigHeader(m.config_header);
if (std.mem.endsWith(u8, src, ".c")) {
o.addCSourceFiles(&.{src}, m.cflags.items);
o.linkLibC();
} else {
o.addCSourceFiles(&.{src}, m.cxxflags.items);
- o.linkLibCpp();
+ if (o.target.getAbi() == .msvc) {
+ o.linkLibC(); // need winsdk + crt
+ } else {
+ // linkLibCpp already add (libc++ + libunwind + libc)
+ o.linkLibCpp();
+ }
}
o.addConfigHeader(m.config_header);
for (m.include_dirs.items) |i| o.addIncludePath(.{ .path = i });
for (deps) |d| e.addObject(d);
for (m.objs.items) |o| e.addObject(o);
for (m.include_dirs.items) |i| e.addIncludePath(.{ .path = i });
- e.linkLibC();
- e.linkLibCpp();
+
+ // https://github.com/ziglang/zig/issues/15448
+ if (e.target.getAbi() == .msvc) {
+ e.linkLibC(); // need winsdk + crt
+ } else {
+ // linkLibCpp already add (libc++ + libunwind + libc)
+ e.linkLibCpp();
+ }
e.addConfigHeader(m.config_header);
m.builder.installArtifact(e);
e.want_lto = m.enable_lto;
const ggml_alloc = make.obj("ggml-alloc", "ggml-alloc.c");
const llama = make.obj("llama", "llama.cpp");
const common = make.obj("common", "common/common.cpp");
- const console = make.obj("common", "common/console.cpp");
+ const console = make.obj("console", "common/console.cpp");
const grammar_parser = make.obj("grammar-parser", "common/grammar-parser.cpp");
const train = make.obj("train", "common/train.cpp");