summaryrefslogtreecommitdiff
path: root/common/templates/clang/build.zig
diff options
context:
space:
mode:
authorbrustybee <bee@4d2.org>2026-03-19 23:43:21 +0530
committerbrustybee <bee@4d2.org>2026-03-19 23:43:21 +0530
commit9d2256adddbb830d33119a5e01e3fad6b4b0652b (patch)
tree958e1de443a6d59a9b09716ba5815c52bfb7bfb3 /common/templates/clang/build.zig
parentf9142a5822a4f212a3031b932cbf51b2d50344a8 (diff)
add flake templates
Diffstat (limited to 'common/templates/clang/build.zig')
-rw-r--r--common/templates/clang/build.zig66
1 files changed, 66 insertions, 0 deletions
diff --git a/common/templates/clang/build.zig b/common/templates/clang/build.zig
new file mode 100644
index 0000000..2953ab7
--- /dev/null
+++ b/common/templates/clang/build.zig
@@ -0,0 +1,66 @@
+const std = @import("std");
+
+pub fn build(b: *std.Build) void {
+ const target = b.standardTargetOptions(.{});
+ const optimize = b.standardOptimizeOption(.{});
+
+ const exe = b.addExecutable(.{
+ .name = "hello-c",
+ .root_module = b.createModule(.{
+ .target = target,
+ .optimize = optimize,
+ }),
+ });
+
+ // 1. Link the C standard library
+ exe.linkLibC();
+
+ // 2. Add your C source files
+ exe.addCSourceFile(.{
+ .file = b.path("src/main.c"),
+ .flags = &.{ "-Wall", "-Wextra", "-O2" },
+ });
+
+ // 3. Declare intent for the executable to be installed
+ b.installArtifact(exe);
+
+ // 4. Create the 'run' step
+ const run_step = b.step("run", "Run the app");
+ const run_cmd = b.addRunArtifact(exe);
+
+ run_step.dependOn(&run_cmd.step);
+ run_cmd.step.dependOn(b.getInstallStep());
+
+ if (b.args) |args| {
+ run_cmd.addArgs(args);
+ }
+
+ // --- 5. Support Testing ---
+ // This creates an executable that runs 'test' blocks in src/test.zig
+ const exe_unit_tests = b.addTest(.{
+ .root_module = b.createModule(.{
+ .root_source_file = b.path("src/test.zig"),
+ .target = target,
+ .optimize = optimize,
+ }),
+ });
+
+ // This exposes our Zig exported functions to the Linux
+ // dynamic symbol table so dlsym() can actually find them.
+ exe_unit_tests.rdynamic = true;
+
+ exe_unit_tests.addCSourceFile(.{
+ .file = b.path("src/main.c"),
+ .flags = &.{ "-Wall", "-Wextra", "-pedantic", "-Dmain=nomain" },
+ });
+
+ // Allow tests to link against C and find your headers
+ exe_unit_tests.linkLibC();
+ exe_unit_tests.addIncludePath(b.path("src"));
+
+ const run_exe_unit_tests = b.addRunArtifact(exe_unit_tests);
+
+ const test_step = b.step("test", "Run unit tests");
+ test_step.dependOn(&run_exe_unit_tests.step);
+}
+