const std = @import("std"); // fn thisDir() []const u8 { // return std.fs.path.dirname(@src().file) orelse "."; // } pub fn build(b: *std.build.Builder) void { // TODO Use mode to set debug flags in MiniFB const mode = b.standardReleaseOptions(); const target = b.standardTargetOptions(.{}); var main_tests = b.addTest("src/minifb.zig"); main_tests.setBuildMode(mode); main_tests.setTarget(target); link(b, main_test); const test_step = b.step("test", "Run library tests"); test_step.dependOn(&main_tests.step); } pub fn link(b: *std.build.Builder, step: *std.build.LibExeObjStep) void { const lib = buildLibrary(b, step); step.linkLibrary(lib); } fn fromHere(allocator: *std.mem.Allocator, path: []const u8) []const u8 { const here = std.fs.path.dirname(@src().file) orelse "."; return std.fs.path.join(allocator, &.{here, path}) catch unreachable; } fn buildLibrary(b: *std.build.Builder, step: *std.build.LibExeObjStep) *std.build.LibExeObjStep { // var main_abs = std.fs.path.join(b.allocator, &.{thisDir(), "src/minifb.zig"}) catch unreachable; const lib = b.addStaticLibrary("minifb", fromHere(b.allocator, "src/minifb.zig")); lib.setBuildMode(step.build_mode); var sources = std.ArrayList([]const u8) .init(b.allocator); for ([_][]const u8{ "upstream/src/MiniFB_common.c", "upstream/src/MiniFB_internal.c", //"upstream/src/MiniFB_internal.h", "upstream/src/MiniFB_timer.c", //"upstream/src/WindowData.h", //"upstream/src/windows/WindowData_Win.h", "upstream/src/windows/WinMiniFB.c", }) |path| { // const abs_path = std.fs.path.join(b.allocator, &.{ thisDir(), path}) catch unreachable; sources.append(fromHere(b.allocator, path)) catch unreachable; } // TODO More than Windows lib.addCSourceFiles(sources.items, &[_][]const u8{ "-Wall", "-Wextra", "-pedantic", "-Wno-switch", "-Wno-unused-function", "-Wno-implicit-fallthrough", "-std=c11", }); const include_abs = fromHere(b.allocator, "upstream/include"); const src_abs = fromHere(b.allocator, "upstream/src"); lib.addIncludeDir(include_abs); lib.addIncludeDir(src_abs); step.addIncludeDir(include_abs); step.addIncludeDir(src_abs); lib.linkSystemLibraryName("gdi32"); lib.linkLibC(); lib.install(); return lib; }