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