@@ -785,6 +785,16 @@ pub fn build(b: *std.Build) void {
785785 run_bininfo .addFileArg (exe .getEmittedBin ());
786786 }
787787
788+ // ---- SNES HiROM hello ----
789+ {
790+ const step = b .step ("snes-hirom-hello" , "Build SNES HiROM hello example" );
791+ const exe = addSnesHiRomExe (b , sdk_src , sdk_libs .snes orelse @panic ("snes libs not built" ), optimize , "snes-hirom-hello" , "snes/hirom-hello/hirom-hello.zig" );
792+ const install = b .addInstallArtifact (exe , .{ .dest_sub_path = "snes-hirom-hello.sfc" });
793+ step .dependOn (& install .step );
794+ b .getInstallStep ().dependOn (& install .step );
795+ run_bininfo .addFileArg (exe .getEmittedBin ());
796+ }
797+
788798 // ---- Atari 8-bit cartridge hello ----
789799 {
790800 const step = b .step ("atari8-cart-hello" , "Build Atari 8-bit standard cartridge hello example" );
@@ -2150,6 +2160,73 @@ fn addSnesExe(
21502160 return exe ;
21512161}
21522162
2163+ fn addSnesHiRomExe (
2164+ b : * std.Build ,
2165+ sdk_src : []const u8 ,
2166+ libs : sdk_mod.Libs ,
2167+ opt : std.builtin.OptimizeMode ,
2168+ name : []const u8 ,
2169+ root_src : []const u8 ,
2170+ ) * std.Build.Step.Compile {
2171+ const target = b .resolveTargetQuery (.{ .cpu_arch = .mos , .os_tag = .snes });
2172+
2173+ const build_root = b .build_root .path orelse "." ;
2174+ const wf = b .addWriteFiles ();
2175+ const wrapper_ld = wf .add ("snes-hirom-wrapper.ld" , b .fmt (
2176+ \\SEARCH_DIR("{s}/mos-platform/common/ldscripts");
2177+ \\INCLUDE "{s}/snes/hirom.ld"
2178+ , .{ sdk_src , build_root }));
2179+
2180+ const exe = b .addExecutable (.{
2181+ .name = name ,
2182+ .root_module = b .createModule (.{
2183+ .root_source_file = b .path (root_src ),
2184+ .target = target ,
2185+ .optimize = opt ,
2186+ .sanitize_c = .off ,
2187+ }),
2188+ });
2189+ exe .bundle_compiler_rt = false ;
2190+ exe .lto = .full ;
2191+ exe .forceUndefinedSymbol ("__zig_call_main_section" );
2192+ exe .forceUndefinedSymbol ("main" );
2193+ exe .root_module .addAssemblyFile (b .path ("snes/crt0.s" ));
2194+ if (libs .mem ) | mem_obj | exe .root_module .addObject (mem_obj );
2195+ const snes_mod = b .createModule (.{
2196+ .root_source_file = b .path ("snes/hardware.zig" ),
2197+ .target = target ,
2198+ .optimize = opt ,
2199+ .sanitize_c = .off ,
2200+ });
2201+ const sneslib_mod = b .createModule (.{
2202+ .root_source_file = b .path ("snes/sneslib.zig" ),
2203+ .target = target ,
2204+ .optimize = opt ,
2205+ .sanitize_c = .off ,
2206+ });
2207+ sneslib_mod .addImport ("snes" , snes_mod );
2208+ exe .root_module .addImport ("snes" , snes_mod );
2209+ exe .root_module .addImport ("sneslib" , sneslib_mod );
2210+ exe .root_module .addImport ("snes_header" , b .createModule (.{
2211+ .root_source_file = b .path ("snes/hirom_header.zig" ),
2212+ .target = target ,
2213+ .optimize = opt ,
2214+ .sanitize_c = .off ,
2215+ }));
2216+ exe .root_module .addImport ("mos_panic" , b .createModule (.{
2217+ .root_source_file = b .path ("sdk/panic.zig" ),
2218+ .target = target ,
2219+ .optimize = opt ,
2220+ .sanitize_c = .off ,
2221+ }));
2222+ exe .root_module .linkLibrary (libs .crt );
2223+ exe .root_module .linkLibrary (libs .crt0 );
2224+ exe .root_module .linkLibrary (libs .c );
2225+ exe .setLinkerScript (wrapper_ld );
2226+
2227+ return exe ;
2228+ }
2229+
21532230fn cx16HeaderMod (
21542231 b : * std.Build ,
21552232 sdk_dep : * std.Build.Dependency ,
0 commit comments