const std = @import("std"); pub fn build(b: *std.Build) void { const optimize = b.standardOptimizeOption(.{ .preferred_optimize_mode = .ReleaseSmall, }); const target = b.resolveTargetQuery(.{ .cpu_arch = .thumb, .cpu_model = .{ .explicit = &std.Target.arm.cpu.cortex_m4, }, .os_tag = .freestanding, .abi = .eabihf, }); const main_mod = b.addModule("Main", .{ .root_source_file = b.path("src/main.zig"), .target = target, .optimize = optimize, .link_libc = false, .strip = false, .single_threaded = true, }); const mcu_mod = b.addModule("Mcu", .{ .root_source_file = b.path("src/microcontroller/mcu.zig"), .target = target, .optimize = optimize, .link_libc = false, .strip = false, .single_threaded = true, }); const stm32G4_mod = b.addModule("main", .{ .root_source_file = b.path("src/microcontroller/stm32g4/startup.zig"), .target = target, .optimize = optimize, .link_libc = false, .strip = false, .single_threaded = true, }); stm32G4_mod.addImport("Mcu", mcu_mod); mcu_mod.addImport("Stm32g4", stm32G4_mod); main_mod.addImport("Mcu", mcu_mod); const exe = b.addExecutable(.{ .name = "zig_stm32g4_test", .linkage = .static, .use_lld = true, .use_llvm = true, .root_module = stm32G4_mod, }); exe.dead_strip_dylibs = true; exe.link_gc_sections = true; exe.link_function_sections = true; exe.link_data_sections = true; exe.lto = .none; exe.discard_local_symbols = true; exe.root_module.addImport("Main", main_mod); const bin = exe.addObjCopy(.{ .format = .bin }); const install_exe = b.addInstallArtifact(exe, .{}); const install_bin = b.addInstallBinFile(bin.getOutput(), bin.basename); exe.setLinkerScript(b.path("stm32g431cbtx.ld")); b.getInstallStep().dependOn(&install_bin.step); install_bin.step.dependOn(&install_exe.step); b.installArtifact(exe); const flash_run = b.addSystemCommand(&.{ "openocd", "-f", "/usr/share/openocd/scripts/board/st_nucleo_g4.cfg", "-c", "init", "-c", "reset halt; flash write_image erase zig-out/bin/zig_stm32g4_test.bin 0x08000000 bin", "-c", "flash verify_image zig-out/bin/zig_stm32g4_test.bin 0x08000000 bin", "-c", "reset run; shutdown", }); const flash_step = b.step("flash", "Flash the code to the target"); flash_run.step.dependOn(&install_bin.step); flash_step.dependOn(&flash_run.step); // run_step.dependOn(&run_cmd.step); // run_cmd.step.dependOn(b.getInstallStep()); // if (b.args) |args| { // run_cmd.addArgs(args); // } // const mod_tests = b.addTest(.{ // .root_module = mod, // }); // const run_mod_tests = b.addRunArtifact(mod_tests); // const exe_tests = b.addTest(.{ // .root_module = exe.root_module, // }); // const run_exe_tests = b.addRunArtifact(exe_tests); // const test_step = b.step("test", "Run tests"); // test_step.dependOn(&run_mod_tests.step); // test_step.dependOn(&run_exe_tests.step); }