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; }