aboutsummaryrefslogtreecommitdiff
path: root/examples/build-options
diff options
context:
space:
mode:
Diffstat (limited to 'examples/build-options')
-rw-r--r--examples/build-options/.gitignore2
-rw-r--r--examples/build-options/.nova/Configuration.json4
-rw-r--r--examples/build-options/.nova/Tasks/Zig Package.json16
-rw-r--r--examples/build-options/build.zig43
-rw-r--r--examples/build-options/build.zig.zon12
-rw-r--r--examples/build-options/src/main.zig15
6 files changed, 92 insertions, 0 deletions
diff --git a/examples/build-options/.gitignore b/examples/build-options/.gitignore
new file mode 100644
index 0000000..3389c86
--- /dev/null
+++ b/examples/build-options/.gitignore
@@ -0,0 +1,2 @@
+.zig-cache/
+zig-out/
diff --git a/examples/build-options/.nova/Configuration.json b/examples/build-options/.nova/Configuration.json
new file mode 100644
index 0000000..44cadf8
--- /dev/null
+++ b/examples/build-options/.nova/Configuration.json
@@ -0,0 +1,4 @@
+{
+ "zls.enable_build_on_save" : false,
+ "zls.zig_exe_path" : "\/opt\/homebrew\/bin\/zig"
+}
diff --git a/examples/build-options/.nova/Tasks/Zig Package.json b/examples/build-options/.nova/Tasks/Zig Package.json
new file mode 100644
index 0000000..216d413
--- /dev/null
+++ b/examples/build-options/.nova/Tasks/Zig Package.json
@@ -0,0 +1,16 @@
+{
+ "extension" : {
+ "identifier" : "at.dcz.nova-zig",
+ "name" : "Zig"
+ },
+ "extensionTemplate" : "zigBuildRun",
+ "extensionValues" : {
+ "runStep" : "run",
+ "userOptions" : [
+ "verbose",
+ "port=9090",
+ "backend=sqlite",
+ "max-conn=256"
+ ]
+ }
+}
diff --git a/examples/build-options/build.zig b/examples/build-options/build.zig
new file mode 100644
index 0000000..5412e8d
--- /dev/null
+++ b/examples/build-options/build.zig
@@ -0,0 +1,43 @@
+const std = @import("std");
+
+pub fn build(b: *std.Build) void {
+ const target = b.standardTargetOptions(.{});
+ const optimize = b.standardOptimizeOption(.{});
+
+ // Boolean flag: -Dverbose
+ const verbose = b.option(bool, "verbose", "Enable verbose logging") orelse false;
+
+ // Integer option: -Dport=<n>
+ const port = b.option(u16, "port", "TCP port to listen on") orelse 8080;
+
+ // Enum option: -Dbackend=<name>
+ const Backend = enum { memory, sqlite, postgres };
+ const backend = b.option(Backend, "backend", "Storage backend") orelse .memory;
+
+ // Hyphenated key option: -Dmax-conn=<n> (tests USER_OPTION_REGEX with hyphens)
+ const max_conn = b.option(u32, "max-conn", "Maximum simultaneous connections") orelse 128;
+
+ const options = b.addOptions();
+ options.addOption(bool, "verbose", verbose);
+ options.addOption(u16, "port", port);
+ options.addOption(Backend, "backend", backend);
+ options.addOption(u32, "max_conn", max_conn);
+
+ const exe = b.addExecutable(.{
+ .name = "build-options-demo",
+ .root_module = b.createModule(.{
+ .root_source_file = b.path("src/main.zig"),
+ .target = target,
+ .optimize = optimize,
+ .imports = &.{
+ .{ .name = "build_options", .module = options.createModule() },
+ },
+ }),
+ });
+ b.installArtifact(exe);
+
+ const run_cmd = b.addRunArtifact(exe);
+ if (b.args) |args| run_cmd.addArgs(args);
+ const run_step = b.step("run", "Run the build-options demo");
+ run_step.dependOn(&run_cmd.step);
+}
diff --git a/examples/build-options/build.zig.zon b/examples/build-options/build.zig.zon
new file mode 100644
index 0000000..7c3e5c0
--- /dev/null
+++ b/examples/build-options/build.zig.zon
@@ -0,0 +1,12 @@
+.{
+ .name = .build_options_demo,
+ .version = "0.1.0",
+ .fingerprint = 0xf453d2b8ee5c2b92,
+ .minimum_zig_version = "0.16.0",
+ .dependencies = .{},
+ .paths = .{
+ "build.zig",
+ "build.zig.zon",
+ "src",
+ },
+}
diff --git a/examples/build-options/src/main.zig b/examples/build-options/src/main.zig
new file mode 100644
index 0000000..5bab011
--- /dev/null
+++ b/examples/build-options/src/main.zig
@@ -0,0 +1,15 @@
+const std = @import("std");
+const opts = @import("build_options");
+
+pub fn main(init: std.process.Init) !void {
+ const io = init.io;
+ var buf: [1024]u8 = undefined;
+ var fw: std.Io.File.Writer = .init(.stdout(), io, &buf);
+ defer fw.interface.flush() catch {};
+ const w = &fw.interface;
+
+ try w.print("verbose = {}\n", .{opts.verbose});
+ try w.print("port = {d}\n", .{opts.port});
+ try w.print("backend = {s}\n", .{@tagName(opts.backend)});
+ try w.print("max_conn = {d}\n", .{opts.max_conn});
+}