first commit
This commit is contained in:
97
lib/zmath/build.zig
Normal file
97
lib/zmath/build.zig
Normal file
@@ -0,0 +1,97 @@
|
||||
const std = @import("std");
|
||||
|
||||
pub const Options = struct {
|
||||
enable_cross_platform_determinism: bool = true,
|
||||
};
|
||||
|
||||
pub const Package = struct {
|
||||
options: Options,
|
||||
zmath: *std.Build.Module,
|
||||
zmath_options: *std.Build.Module,
|
||||
|
||||
pub fn link(pkg: Package, exe: *std.Build.CompileStep) void {
|
||||
exe.addModule("zmath", pkg.zmath);
|
||||
exe.addModule("zmath_options", pkg.zmath_options);
|
||||
}
|
||||
};
|
||||
|
||||
pub fn package(
|
||||
b: *std.Build,
|
||||
_: std.zig.CrossTarget,
|
||||
_: std.builtin.Mode,
|
||||
args: struct {
|
||||
options: Options = .{},
|
||||
},
|
||||
) Package {
|
||||
const step = b.addOptions();
|
||||
step.addOption(
|
||||
bool,
|
||||
"enable_cross_platform_determinism",
|
||||
args.options.enable_cross_platform_determinism,
|
||||
);
|
||||
|
||||
const zmath_options = step.createModule();
|
||||
|
||||
const zmath = b.createModule(.{
|
||||
.source_file = .{ .path = thisDir() ++ "/src/main.zig" },
|
||||
.dependencies = &.{
|
||||
.{ .name = "zmath_options", .module = zmath_options },
|
||||
},
|
||||
});
|
||||
|
||||
return .{
|
||||
.options = args.options,
|
||||
.zmath = zmath,
|
||||
.zmath_options = zmath_options,
|
||||
};
|
||||
}
|
||||
|
||||
pub fn build(b: *std.Build) void {
|
||||
const optimize = b.standardOptimizeOption(.{});
|
||||
const target = b.standardTargetOptions(.{});
|
||||
|
||||
const test_step = b.step("test", "Run zmath tests");
|
||||
test_step.dependOn(runTests(b, optimize, target));
|
||||
|
||||
const benchmark_step = b.step("benchmark", "Run zmath benchmarks");
|
||||
benchmark_step.dependOn(runBenchmarks(b, target));
|
||||
}
|
||||
|
||||
pub fn runTests(
|
||||
b: *std.Build,
|
||||
optimize: std.builtin.Mode,
|
||||
target: std.zig.CrossTarget,
|
||||
) *std.Build.Step {
|
||||
const tests = b.addTest(.{
|
||||
.name = "zmath-tests",
|
||||
.root_source_file = .{ .path = thisDir() ++ "/src/main.zig" },
|
||||
.target = target,
|
||||
.optimize = optimize,
|
||||
});
|
||||
|
||||
const zmath_pkg = package(b, target, optimize, .{});
|
||||
tests.addModule("zmath_options", zmath_pkg.zmath_options);
|
||||
|
||||
return &tests.run().step;
|
||||
}
|
||||
|
||||
pub fn runBenchmarks(
|
||||
b: *std.Build,
|
||||
target: std.zig.CrossTarget,
|
||||
) *std.Build.Step {
|
||||
const exe = b.addExecutable(.{
|
||||
.name = "zmath-benchmarks",
|
||||
.root_source_file = .{ .path = thisDir() ++ "/src/benchmark.zig" },
|
||||
.target = target,
|
||||
.optimize = .ReleaseFast,
|
||||
});
|
||||
|
||||
const zmath_pkg = package(b, target, .ReleaseFast, .{});
|
||||
exe.addModule("zmath", zmath_pkg.zmath);
|
||||
|
||||
return &exe.run().step;
|
||||
}
|
||||
|
||||
inline fn thisDir() []const u8 {
|
||||
return comptime std.fs.path.dirname(@src().file) orelse ".";
|
||||
}
|
||||
Reference in New Issue
Block a user