-
Notifications
You must be signed in to change notification settings - Fork 1
/
build.zig
51 lines (42 loc) · 1.79 KB
/
build.zig
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
const std = @import("std");
pub fn build(b: *std.Build) !void {
const target = b.standardTargetOptions(.{});
const optimize = b.standardOptimizeOption(.{});
const lib = b.addSharedLibrary(.{
.name = "ggml-js",
.root_source_file = .{ .path = "src/main.zig" },
.target = target,
.optimize = optimize,
});
// libc
lib.linkLibC();
// weak-linkage
lib.linker_allow_shlib_undefined = true;
// ggml
lib.addIncludePath(.{ .path = "deps/ggml/include/ggml" });
lib.addIncludePath(.{ .path = "deps/ggml/src" });
lib.addCSourceFile(.{ .file = .{ .path = "deps/ggml/src/ggml.c" }, .flags = &.{ "-std=c11", "-pthread" } });
// Use Metal on macOS
if (target.getOsTag() == .macos) {
lib.defineCMacroRaw("GGML_USE_METAL");
lib.defineCMacroRaw("GGML_METAL_NDEBUG");
lib.addCSourceFiles(.{ .files = &.{"deps/ggml/src/ggml-metal.m"}, .flags = &.{"-std=c11"} });
lib.linkFramework("Foundation");
lib.linkFramework("Metal");
lib.linkFramework("MetalKit");
lib.linkFramework("MetalPerformanceShaders");
// copy the *.metal file so that it can be loaded at runtime
const copy_metal_step = b.addInstallLibFile(.{ .path = "deps/ggml/src/ggml-metal.metal" }, "ggml-metal.metal");
b.getInstallStep().dependOn(©_metal_step.step);
}
const napigen = b.createModule(.{ .source_file = .{ .path = "deps/napigen/napigen.zig" } });
lib.addModule("napigen", napigen);
// build .dylib & copy as .node
b.installArtifact(lib);
const copy_node_step = b.addInstallLibFile(lib.getOutputSource(), try std.fmt.allocPrint(
b.allocator,
"ggml.{s}.node",
.{@tagName(target.getOsTag())},
));
b.getInstallStep().dependOn(©_node_step.step);
}