From: sjinzh Date: Sat, 24 Jun 2023 17:03:13 +0000 (+0800) Subject: zig : add zig build system support (#279) X-Git-Tag: upstream/0.0.1642~1390 X-Git-Url: https://git.djapps.eu/?a=commitdiff_plain;h=744e6144f8d283f5bc73b85b90cc2840a7fa089b;p=pkg%2Fggml%2Fsources%2Fggml zig : add zig build system support (#279) * add zig build system support * add zig build system support --- diff --git a/.gitignore b/.gitignore index 7714dd6f..09303190 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,6 @@ CMakeSettings.json src/arm_neon.h tests/arm_neon.h + +zig-out/ +zig-cache/ \ No newline at end of file diff --git a/build.zig b/build.zig new file mode 100644 index 00000000..f32a081d --- /dev/null +++ b/build.zig @@ -0,0 +1,57 @@ +const std = @import("std"); + +// Zig Version: 0.11.0-dev.3379+629f0d23b +pub fn build(b: *std.build.Builder) void { + const target = b.standardTargetOptions(.{}); + const optimize = b.standardOptimizeOption(.{}); + const lib = b.addStaticLibrary(.{ + .name = "ggml", + .target = target, + .optimize = optimize, + }); + lib.linkLibC(); + lib.linkLibCpp(); + lib.addIncludePath("."); + lib.addIncludePath("./include"); + lib.addIncludePath("./include/ggml"); + lib.addIncludePath("./examples"); + lib.addCSourceFiles(&.{ + "src/ggml.c", + }, &.{"-std=c11"}); + b.installArtifact(lib); + + const examples = .{ + "dolly-v2", + "gpt-2", + "gpt-j", + "gpt-neox", + "mnist", + "mpt", + "replit", + "starcoder", + }; + + inline for (examples) |example_name| { + const exe = b.addExecutable(.{ + .name = example_name, + .target = target, + .optimize = optimize, + }); + exe.addIncludePath("."); + exe.addIncludePath("./include"); + exe.addIncludePath("./include/ggml"); + exe.addIncludePath("./examples"); + exe.addCSourceFiles(&.{ + std.fmt.comptimePrint("examples/{s}/{s}.cpp", .{example_name, "main"}), + "examples/common.cpp", + "examples/common-ggml.cpp", + }, &.{"-std=c++11"}); + exe.linkLibrary(lib); + b.installArtifact(exe); + const run_cmd = b.addRunArtifact(exe); + run_cmd.step.dependOn(b.getInstallStep()); + if (b.args) |args| run_cmd.addArgs(args); + const run_step = b.step("run_" ++ example_name, "Run the app"); + run_step.dependOn(&run_cmd.step); + } +} \ No newline at end of file