-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbuild.zig
More file actions
110 lines (102 loc) · 6.39 KB
/
build.zig
File metadata and controls
110 lines (102 loc) · 6.39 KB
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
const std = @import("std");
pub fn build(b: *std.Build) void {
const target = b.standardTargetOptions(.{});
const optimize = b.standardOptimizeOption(.{});
// ── Tuk compiler ──────────────────────────────────────────────
const exe = b.addExecutable(.{
.name = "tuk",
.root_source_file = b.path("src/main.zig"),
.target = target,
.optimize = optimize,
});
linkLlvm(exe);
b.installArtifact(exe);
// ── Runtime library (compiled C, linked into Tuk output binaries) ──
const runtime = b.addStaticLibrary(.{
.name = "tuk_runtime",
.target = target,
.optimize = .ReleaseFast,
});
runtime.addCSourceFile(.{ .file = b.path("src/runtime/runtime.c"), .flags = &.{ "-pthread", "-ffunction-sections", "-fdata-sections", "-DTUK_HAVE_ARGON2" } });
runtime.linkLibC();
b.installArtifact(runtime);
// ── WASM runtime (no threads, stubbed process APIs) ──────────────
const wasm_target = b.resolveTargetQuery(.{
.cpu_arch = .wasm32,
.os_tag = .wasi,
});
const wasm_runtime = b.addStaticLibrary(.{
.name = "tuk_runtime_wasm",
.target = wasm_target,
.optimize = .ReleaseSmall,
});
wasm_runtime.addCSourceFile(.{ .file = b.path("src/runtime/runtime.c"), .flags = &.{ "-D__wasm__", "-ffunction-sections", "-fdata-sections" } });
wasm_runtime.linkLibC();
b.installArtifact(wasm_runtime);
// ── Install stdlib ────────────────────────────────────────────
b.installFile("stdlib/alloc.t", "lib/stdlib/alloc.t");
b.installFile("stdlib/native_vec.t", "lib/stdlib/native_vec.t");
b.installFile("stdlib/lexer.t", "lib/stdlib/lexer.t");
b.installFile("stdlib/parser.t", "lib/stdlib/parser.t");
b.installFile("stdlib/sema.t", "lib/stdlib/sema.t");
b.installFile("stdlib/evolve.t", "lib/stdlib/evolve.t");
b.installFile("stdlib/complex.t", "lib/stdlib/complex.t");
b.installFile("stdlib/gboost.t", "lib/stdlib/gboost.t");
b.installFile("stdlib/automl.t", "lib/stdlib/automl.t");
b.installFile("stdlib/ml.t", "lib/stdlib/ml.t");
b.installFile("stdlib/ternary.t", "lib/stdlib/ternary.t");
b.installFile("stdlib/tokenizer.t", "lib/stdlib/tokenizer.t");
b.installFile("stdlib/tukquant.t", "lib/stdlib/tukquant.t");
b.installFile("stdlib/tukgui.t", "lib/stdlib/tukgui.t");
// ── TukLLM stdlib ────────────────────────────────────────────
b.installFile("stdlib/tukllm/tukllm.t", "lib/stdlib/tukllm/tukllm.t");
b.installFile("stdlib/tukllm/core/config.t", "lib/stdlib/tukllm/core/config.t");
b.installFile("stdlib/tukllm/core/tensor_utils.t", "lib/stdlib/tukllm/core/tensor_utils.t");
b.installFile("stdlib/tukllm/core/weight_loader.t", "lib/stdlib/tukllm/core/weight_loader.t");
b.installFile("stdlib/tukllm/nn/linear.t", "lib/stdlib/tukllm/nn/linear.t");
b.installFile("stdlib/tukllm/nn/embedding.t", "lib/stdlib/tukllm/nn/embedding.t");
b.installFile("stdlib/tukllm/nn/layernorm.t", "lib/stdlib/tukllm/nn/layernorm.t");
b.installFile("stdlib/tukllm/nn/rmsnorm.t", "lib/stdlib/tukllm/nn/rmsnorm.t");
b.installFile("stdlib/tukllm/nn/dropout.t", "lib/stdlib/tukllm/nn/dropout.t");
b.installFile("stdlib/tukllm/nn/gelu.t", "lib/stdlib/tukllm/nn/gelu.t");
b.installFile("stdlib/tukllm/ops/gemm.t", "lib/stdlib/tukllm/ops/gemm.t");
b.installFile("stdlib/tukllm/ops/attention.t", "lib/stdlib/tukllm/ops/attention.t");
b.installFile("stdlib/tukllm/ops/rope.t", "lib/stdlib/tukllm/ops/rope.t");
b.installFile("stdlib/tukllm/ops/softmax.t", "lib/stdlib/tukllm/ops/softmax.t");
b.installFile("stdlib/tukllm/ops/layernorm_op.t", "lib/stdlib/tukllm/ops/layernorm_op.t");
b.installFile("stdlib/tukllm/layers/attention_layer.t", "lib/stdlib/tukllm/layers/attention_layer.t");
b.installFile("stdlib/tukllm/layers/mlp.t", "lib/stdlib/tukllm/layers/mlp.t");
b.installFile("stdlib/tukllm/layers/transformer_layer.t", "lib/stdlib/tukllm/layers/transformer_layer.t");
b.installFile("stdlib/tukllm/layers/encoder.t", "lib/stdlib/tukllm/layers/encoder.t");
b.installFile("stdlib/tukllm/layers/decoder.t", "lib/stdlib/tukllm/layers/decoder.t");
b.installFile("stdlib/tukllm/models/model.t", "lib/stdlib/tukllm/models/model.t");
b.installFile("stdlib/tukllm/models/qwen3.t", "lib/stdlib/tukllm/models/qwen3.t");
b.installFile("stdlib/tukllm/models/generate.t", "lib/stdlib/tukllm/models/generate.t");
b.installFile("stdlib/tukllm/utils/tokenizer.t", "lib/stdlib/tukllm/utils/tokenizer.t");
b.installFile("stdlib/tukllm/utils/sampler.t", "lib/stdlib/tukllm/utils/sampler.t");
b.installFile("stdlib/tukllm/utils/kv_cache.t", "lib/stdlib/tukllm/utils/kv_cache.t");
b.installFile("stdlib/tukllm/gguf/header.t", "lib/stdlib/tukllm/gguf/header.t");
b.installFile("stdlib/tukllm/gguf/reader.t", "lib/stdlib/tukllm/gguf/reader.t");
b.installFile("stdlib/tukllm/gguf/loader.t", "lib/stdlib/tukllm/gguf/loader.t");
b.installFile("stdlib/tukllm/gguf.t", "lib/stdlib/tukllm/gguf.t");
b.installFile("stdlib/gguf.t", "lib/stdlib/gguf.t");
// ── Run ───────────────────────────────────────────────────────
const run_cmd = b.addRunArtifact(exe);
run_cmd.step.dependOn(b.getInstallStep());
if (b.args) |args| run_cmd.addArgs(args);
b.step("run", "Run the Tuk compiler").dependOn(&run_cmd.step);
// ── Unit tests ────────────────────────────────────────────────
const unit_tests = b.addTest(.{
.root_source_file = b.path("src/compiler.zig"),
.target = target,
.optimize = optimize,
});
linkLlvm(unit_tests);
b.step("test", "Run unit tests").dependOn(&b.addRunArtifact(unit_tests).step);
}
fn linkLlvm(step: *std.Build.Step.Compile) void {
step.addSystemIncludePath(.{ .cwd_relative = "/usr/lib/llvm-20/include" });
step.addLibraryPath(.{ .cwd_relative = "/usr/lib/llvm-20/lib" });
step.linkSystemLibrary("LLVM-20");
step.linkLibC();
}