Files
6soz/build.zig

118 lines
3.8 KiB
Zig

const std = @import("std");
pub fn build(b: *std.Build) void {
const target = b.standardTargetOptions(.{});
const optimize = b.standardOptimizeOption(.{});
const cpu_mod = b.createModule(.{
.target = target,
.optimize = optimize,
.root_source_file = b.path("src/cpu/root.zig"),
});
const lib = b.addLibrary(.{
.name = "cpu",
.root_module = cpu_mod,
.linkage = .static,
});
b.installArtifact(lib);
const contract_mod = b.createModule(.{
.target = target,
.optimize = optimize,
.root_source_file = b.path("src/contract/root.zig"),
});
const system_mod = b.createModule(.{
.target = target,
.optimize = optimize,
.root_source_file = b.path("src/system/root.zig"),
});
system_mod.addImport("contract", contract_mod);
system_mod.addImport("cpu", cpu_mod);
const platform_mod = b.createModule(.{
.target = target,
.optimize = optimize,
.root_source_file = b.path("src/platform/root.zig"),
});
platform_mod.addImport("contract", contract_mod);
const frontend_mod = b.createModule(.{
.target = target,
.optimize = optimize,
.root_source_file = b.path("src/frontend/root.zig"),
});
frontend_mod.addImport("contract", contract_mod);
frontend_mod.addImport("platform", platform_mod);
frontend_mod.addImport("system", system_mod);
const exe_mod = b.createModule(.{
.target = target,
.optimize = optimize,
.root_source_file = b.path("src/main.zig"),
});
exe_mod.addImport("contract", contract_mod);
exe_mod.addImport("system", system_mod);
exe_mod.addImport("platform", platform_mod);
exe_mod.addImport("frontend", frontend_mod);
const exe = b.addExecutable(.{
.name = "6soz",
.root_module = exe_mod,
});
if (b.lazyDependency("raylib", .{
.target = target,
.optimize = optimize,
})) |raylib_dep| {
const raylib_lib = raylib_dep.artifact("raylib");
exe_mod.linkLibrary(raylib_lib);
const raylib_c = b.addTranslateC(.{
.target = target,
.optimize = optimize,
.root_source_file = raylib_dep.path("src/raylib.h"),
});
const craylib_mod = raylib_c.createModule();
platform_mod.addImport("c_raylib", craylib_mod);
exe_mod.addImport("c_raylib", craylib_mod);
}
b.installArtifact(exe);
// Test Step Configuration
const test_step = b.step("test", "Run 6soz tests");
const test_options = b.addOptions();
const roms_dep = b.dependency("nes_test_roms", .{});
test_options.addOption(?[]const u8, "nes_test_roms_dir", roms_dep.path("").getPath(b));
const func_dep = b.dependency("m6502_functional_tests", .{});
test_options.addOption(?[]const u8, "m6502_functional_tests_dir", func_dep.path("").getPath(b));
const options_mod = test_options.createModule();
const cpu_test_mod = b.createModule(.{
.target = target,
.optimize = optimize,
.root_source_file = b.path("src/cpu/root.zig"),
});
cpu_test_mod.addImport("build_options", options_mod);
const system_test_mod = b.createModule(.{
.target = target,
.optimize = optimize,
.root_source_file = b.path("src/system/root.zig"),
});
system_test_mod.addImport("contract", contract_mod);
system_test_mod.addImport("cpu", cpu_test_mod);
system_test_mod.addImport("build_options", options_mod);
inline for (&.{ cpu_test_mod, contract_mod, system_test_mod, platform_mod, frontend_mod, exe_mod }) |mod| {
const mod_test = b.addTest(.{ .root_module = mod });
const mod_cmd = b.addRunArtifact(mod_test);
test_step.dependOn(&mod_cmd.step);
}
}