WalrusGame/build.zig

95 lines
3.0 KiB
Zig
Raw Normal View History

2024-12-25 04:34:27 +00:00
const std = @import("std");
pub fn build(b: *std.Build) void {
const target = b.standardTargetOptions(.{});
const optimize = b.standardOptimizeOption(.{});
// TODO: rewrite as zig tool
// TODO: reproducible build
const assets = b.addSystemCommand(&[_][]const u8{
"tar",
"-cf",
b.path("assets.tar").getPath(b),
"-C",
b.path("assets").getPath(b),
});
assets.addArgs(&[_][]const u8{
"write.tmx",
"sprites.png",
"walrus.png",
"player.png",
"menu.qoi",
"ui.qoi",
"Shantell_Sans-Informal_Regular.otf",
"Shantell_Sans-Informal_Bold.otf",
"cp863.png",
});
const tmx_dep = b.dependency("tmx", .{ .target = target, .optimize = optimize });
const tmx = b.addStaticLibrary(.{ .name = "tmx", .target = target, .optimize = optimize });
tmx.addCSourceFiles(.{ .root = tmx_dep.path("src/"), .files = &[_][]const u8{ "tmx.c", "tmx_utils.c", "tmx_err.c", "tmx_xml.c", "tmx_mem.c", "tmx_hash.c" }, .flags = &[_][]const u8{ "-Wall", "-O2", "-pthread", "-fno-sanitize=undefined", "-DWANT_ZSTD", "-DWANT_ZLIB" } });
tmx.linkLibC();
tmx.linkSystemLibrary("z");
tmx.linkSystemLibrary("zstd");
tmx.linkSystemLibrary2("libxml-2.0", .{ .use_pkg_config = .force });
tmx.installHeader(tmx_dep.path("src/tmx.h"), "tmx.h");
b.installArtifact(tmx);
const exe = b.addExecutable(.{
.name = "walrus",
.root_source_file = b.path("src/main.zig"),
.target = target,
.optimize = optimize,
});
const strip = b.option(
bool,
"strip",
"Strip debug info to reduce binary size, defaults to false",
) orelse false;
exe.root_module.strip = strip;
const useupx = b.option(
bool,
"upx",
"Use UPX to compress the binary further",
) orelse false;
exe.root_module.addAnonymousImport("assets", .{ .root_source_file = b.path("assets.tar") });
const raylib = b.dependency("raylib", .{ .target = target, .optimize = optimize });
// const raylib = @import("raylib");
// const raylib_artifact = try raylib.addRaylib(b, target, optimize, .{
// .raygui = false,
// });
//exe.addModule("raylib", raylib.module("raylib"));
//exe.installLibraryHeaders(raylib.artifact("raylib"));
//exe.installLibraryHeaders(tmx);
b.installArtifact(exe);
exe.linkLibC();
exe.linkLibrary(raylib.artifact("raylib"));
exe.linkLibrary(tmx);
exe.step.dependOn(&assets.step);
if (useupx) {
const upx = b.addSystemCommand(&[_][]const u8{ "upx", "--brute", "--no-lzma", "--no-progress" });
upx.addArtifactArg(exe);
upx.step.dependOn(&exe.step);
b.default_step.dependOn(&upx.step);
}
const run_cmd = b.addRunArtifact(exe);
run_cmd.step.dependOn(b.getInstallStep());
if (b.args) |args| {
run_cmd.addArgs(args);
}
const run_step = b.step("run", "Run the app");
run_step.dependOn(&run_cmd.step);
}