const std = @import("std");
const microzig = @import("microzig");

const MicroBuild = microzig.MicroBuild(.{
    .rp2xxx = true,
});

pub fn build(b: *std.Build) void {
    const mz_dep = b.dependency("microzig", .{});
    const mb = MicroBuild.init(b, mz_dep) orelse return;

    const pr11 = mb.add_firmware(.{
        .name = "pr11",
        .target = mb.ports.rp2xxx.boards.raspberrypi.pico,
        .optimize = .ReleaseSmall,
        .root_source_file = b.path("src/pr11.zig"),
    });
    mb.install_firmware(pr11, .{});

    const pr21 = mb.add_firmware(.{
        .name = "pr21",
        .target = mb.ports.rp2xxx.boards.raspberrypi.pico,
        .optimize = .ReleaseSmall,
        .root_source_file = b.path("src/pr21.zig"),
    });
    mb.install_firmware(pr21, .{});

    const pr22 = mb.add_firmware(.{
        .name = "pr22",
        .target = mb.ports.rp2xxx.boards.raspberrypi.pico,
        .optimize = .ReleaseSmall,
        .root_source_file = b.path("src/pr22.zig"),
    });
    mb.install_firmware(pr22, .{});

    const pr41 = mb.add_firmware(.{
        .name = "pr41",
        .target = mb.ports.rp2xxx.boards.raspberrypi.pico,
        .optimize = .ReleaseSmall,
        .root_source_file = b.path("src/pr41.zig"),
    });
    mb.install_firmware(pr41, .{});

    const pr42 = mb.add_firmware(.{
        .name = "pr42",
        .target = mb.ports.rp2xxx.boards.raspberrypi.pico,
        .optimize = .ReleaseSmall,
        .root_source_file = b.path("src/pr42.zig"),
    });
    mb.install_firmware(pr42, .{});

    const pr51 = mb.add_firmware(.{
        .name = "pr51",
        .target = mb.ports.rp2xxx.boards.raspberrypi.pico,
        .optimize = .ReleaseSmall,
        .root_source_file = b.path("src/pr51.zig"),
    });
    mb.install_firmware(pr51, .{});

    const pr61 = mb.add_firmware(.{
        .name = "pr61",
        .target = mb.ports.rp2xxx.boards.raspberrypi.pico,
        .optimize = .ReleaseSmall,
        .root_source_file = b.path("src/pr61.zig"),
    });
    mb.install_firmware(pr61, .{});

    const pr62 = mb.add_firmware(.{
        .name = "pr62",
        .target = mb.ports.rp2xxx.boards.raspberrypi.pico,
        .optimize = .ReleaseSmall,
        .root_source_file = b.path("src/pr62.zig"),
    });
    mb.install_firmware(pr62, .{});

    const pr071 = mb.add_firmware(.{
        .name = "pr071",
        .target = mb.ports.rp2xxx.boards.raspberrypi.pico,
        .optimize = .ReleaseSmall,
        .root_source_file = b.path("src/071-serial_usb.zig"),
    });
    mb.install_firmware(pr071, .{});

    const pr091 = mb.add_firmware(.{
        .name = "pr091",
        .target = mb.ports.rp2xxx.boards.raspberrypi.pico,
        .optimize = .ReleaseSmall,
        .root_source_file = b.path("src/091-potmeter.zig"),
    });
    mb.install_firmware(pr091, .{});

    const pr101 = mb.add_firmware(.{
        .name = "pr101",
        .target = mb.ports.rp2xxx.boards.raspberrypi.pico,
        .optimize = .ReleaseSmall,
        .root_source_file = b.path("src/101-potmeter_ledblock.zig"),
    });
    mb.install_firmware(pr101, .{});

    const pr102 = mb.add_firmware(.{
        .name = "pr102",
        .target = mb.ports.rp2xxx.boards.raspberrypi.pico,
        .optimize = .ReleaseSmall,
        .root_source_file = b.path("src/102-potmeter_rgbled.zig"),
    });
    mb.install_firmware(pr102, .{});

    const pr111 = mb.add_firmware(.{
        .name = "pr111",
        .target = mb.ports.rp2xxx.boards.raspberrypi.pico,
        .optimize = .ReleaseSmall,
        .root_source_file = b.path("src/111-photores_led.zig"),
    });
    mb.install_firmware(pr111, .{});

    const pr131 = mb.add_firmware(.{
        .name = "pr131",
        .target = mb.ports.rp2xxx.boards.raspberrypi.pico,
        .optimize = .ReleaseSmall,
        .root_source_file = b.path("src/131-joystick.zig"),
    });
    mb.install_firmware(pr131, .{});

    // We call this twice to demonstrate that the default binary output for
    // RP2040 is UF2, but we can also output other formats easily
    // mb.install_firmware(firmware, .{ .format = .elf });
}