120 lines
2.4 KiB
Zig
120 lines
2.4 KiB
Zig
const builtin = @import("builtin");
|
|
|
|
const std = @import("std");
|
|
|
|
pub fn build(b: *std.Build) !void {
|
|
const target = b.standardTargetOptions(.{});
|
|
const optimize = b.standardOptimizeOption(.{});
|
|
|
|
const sokol_dependency = b.dependency("sokol", .{
|
|
.target = target,
|
|
.optimize = optimize,
|
|
});
|
|
|
|
const coral_module = b.createModule(.{
|
|
.root_source_file = b.path("src/coral/coral.zig"),
|
|
});
|
|
|
|
const flow_module = b.createModule(.{
|
|
.root_source_file = b.path("src/flow/flow.zig"),
|
|
|
|
.imports = &.{
|
|
.{
|
|
.name = "coral",
|
|
.module = coral_module,
|
|
},
|
|
}
|
|
});
|
|
|
|
const ona_module = b.createModule(.{
|
|
.root_source_file = b.path("src/ona/ona.zig"),
|
|
|
|
.imports = &.{
|
|
.{
|
|
.name = "sokol",
|
|
.module = sokol_dependency.module("sokol"),
|
|
},
|
|
|
|
.{
|
|
.name = "coral",
|
|
.module = coral_module,
|
|
},
|
|
|
|
.{
|
|
.name = "flow",
|
|
.module = flow_module,
|
|
},
|
|
},
|
|
});
|
|
|
|
ona_module.addIncludePath(b.path("ext/"));
|
|
ona_module.linkLibrary(build_spirvcross(b, target, optimize));
|
|
|
|
b.step("test", "Run unit tests").dependOn(create: {
|
|
const tests = b.addTest(.{
|
|
.root_source_file = b.path("src/main.zig"),
|
|
.target = target,
|
|
.optimize = optimize,
|
|
});
|
|
|
|
break: create &tests.step;
|
|
});
|
|
|
|
b.installArtifact(add: {
|
|
const exe = b.addExecutable(.{
|
|
.name = "main",
|
|
.root_source_file = b.path("src/main.zig"),
|
|
.target = target,
|
|
.optimize = optimize,
|
|
});
|
|
|
|
exe.root_module.addImport("ona", ona_module);
|
|
exe.root_module.addImport("coral", coral_module);
|
|
exe.linkLibC();
|
|
exe.linkSystemLibrary("SDL2");
|
|
|
|
break: add exe;
|
|
});
|
|
}
|
|
|
|
fn build_spirvcross(
|
|
b: *std.Build,
|
|
target: std.Build.ResolvedTarget,
|
|
mode: std.builtin.OptimizeMode,
|
|
) *std.Build.Step.Compile {
|
|
const dir = "ext/spirv-cross/";
|
|
|
|
const sources = [_][]const u8{
|
|
"spirv_cross.cpp",
|
|
"spirv_parser.cpp",
|
|
"spirv_cross_parsed_ir.cpp",
|
|
"spirv_cfg.cpp",
|
|
"spirv_glsl.cpp",
|
|
"spirv_msl.cpp",
|
|
"spirv_hlsl.cpp",
|
|
"spirv_reflect.cpp",
|
|
"spirv_cross_util.cpp",
|
|
"spirv_cross_c.cpp",
|
|
};
|
|
|
|
const lib = b.addStaticLibrary(.{
|
|
.name = "spirvcross",
|
|
.target = target,
|
|
.optimize = mode,
|
|
});
|
|
|
|
switch (lib.rootModuleTarget().abi) {
|
|
.msvc => lib.linkLibC(),
|
|
else => lib.linkLibCpp(),
|
|
}
|
|
|
|
inline for (sources) |src| {
|
|
lib.addCSourceFile(.{
|
|
.file = b.path(dir ++ src),
|
|
.flags = &.{"-fstrict-aliasing", "-DSPIRV_CROSS_C_API_GLSL", "-DSPIRV_CROSS_C_API_HLSL", "-DSPIRV_CROSS_C_API_MSL"},
|
|
});
|
|
}
|
|
|
|
return lib;
|
|
}
|