This allows the library to link better with projects. Otherwise you can end up with a mix of conflicts over that compiler + version to use. Also adds .use_model3d option to mach build system. If set to true, model3d will be linked in statically to target project.
38 lines
1.3 KiB
Zig
38 lines
1.3 KiB
Zig
const std = @import("std");
|
|
|
|
pub const pkg = std.build.Pkg{
|
|
.name = "model3d",
|
|
.source = .{ .path = sdkPath("/src/main.zig") },
|
|
};
|
|
|
|
pub fn build(b: *std.build.Builder) void {
|
|
const mode = b.standardReleaseOptions();
|
|
const target = b.standardTargetOptions(.{});
|
|
const test_step = b.step("test", "Run library tests");
|
|
test_step.dependOn(&testStep(b, mode, target).step);
|
|
}
|
|
|
|
pub fn testStep(b: *std.build.Builder, mode: std.builtin.Mode, target: std.zig.CrossTarget) *std.build.RunStep {
|
|
const main_tests = b.addTestExe("model3d-tests", "src/main.zig");
|
|
main_tests.setBuildMode(mode);
|
|
main_tests.setTarget(target);
|
|
link(b, main_tests);
|
|
main_tests.install();
|
|
return main_tests.run();
|
|
}
|
|
|
|
pub fn link(b: *std.build.Builder, step: *std.build.LibExeObjStep) void {
|
|
const lib = b.addStaticLibrarySource("model3d", null);
|
|
lib.addCSourceFile(sdkPath("/src/c/m3d.c"), &.{ "-std=c89", "-DM3D_ASCII" });
|
|
lib.linkLibC();
|
|
step.addIncludePath(sdkPath("/src/c/"));
|
|
step.linkLibrary(lib);
|
|
}
|
|
|
|
fn sdkPath(comptime suffix: []const u8) []const u8 {
|
|
if (suffix[0] != '/') @compileError("suffix must be an absolute path");
|
|
return comptime blk: {
|
|
const root_dir = std.fs.path.dirname(@src().file) orelse ".";
|
|
break :blk root_dir ++ suffix;
|
|
};
|
|
}
|