diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ac3fd43..6688359 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -11,19 +11,19 @@ jobs: strategy: fail-fast: false matrix: + dir: + - all-platforms + - raspberrypi-rp2040 + # TODO: - espressif-esp + # TODO: - gigadevice-gd32 + # TODO: - microchip-atmega + # TODO: - nordic-nrf5x + # TODO: - nxp-lpc + # TODO: - stmicro-stm32 os: - windows-latest - macos-latest - ubuntu-latest - dir: - - all-platforms - - espressif-esp - - gigadevice-gd32 - - microchip-atmega - - nordic-nrf5x - - nxp-lpc - - rp2040 - - stmicro-stm32 steps: - name: Checkout uses: actions/checkout@v2 diff --git a/all-platforms/build.zig b/all-platforms/build.zig index 4064772..6cf3b48 100644 --- a/all-platforms/build.zig +++ b/all-platforms/build.zig @@ -7,57 +7,52 @@ const nrf5x = @import("nrf5x"); const esp = @import("esp"); const atmega = @import("atmega"); -pub fn build(b: *std.Build) void { - const microzig = @import("microzig").init(b, "microzig"); - const optimize = b.standardOptimizeOption(.{}); - - const TargetDesc = struct { - target: @import("microzig").Target, - name: []const u8, - }; +const available_targets = [_]TargetDesc{ + // RP2040 + .{ .name = "pico", .target = rp2040.boards.raspberry_pi.pico }, + .{ .name = "rp2040-eth", .target = rp2040.boards.waveshare.rp2040_eth }, + .{ .name = "rp2040-plus-4m", .target = rp2040.boards.waveshare.rp2040_plus_4m }, + .{ .name = "rp2040-plus-16m", .target = rp2040.boards.waveshare.rp2040_plus_16m }, + .{ .name = "rp2040-matrix", .target = rp2040.boards.waveshare.rp2040_matrix }, - const available_targets = [_]TargetDesc{ - // RP2040 - .{ .name = "pico", .target = rp2040.boards.raspberry_pi.pico }, - .{ .name = "rp2040-eth", .target = rp2040.boards.waveshare.rp2040_eth }, - .{ .name = "rp2040-plus-4m", .target = rp2040.boards.waveshare.rp2040_plus_4m }, - .{ .name = "rp2040-plus-16m", .target = rp2040.boards.waveshare.rp2040_plus_16m }, - .{ .name = "rp2040-matrix", .target = rp2040.boards.waveshare.rp2040_matrix }, + // STM32 + .{ .name = "stm32f103x8", .target = stm32.chips.stm32f103x8 }, + .{ .name = "stm32f303vc", .target = stm32.chips.stm32f303vc }, + .{ .name = "stm32f407vg", .target = stm32.chips.stm32f407vg }, + .{ .name = "stm32f429zit6u", .target = stm32.chips.stm32f429zit6u }, + .{ .name = "stm32f3discovery", .target = stm32.boards.stm32f3discovery }, + .{ .name = "stm32f4discovery", .target = stm32.boards.stm32f4discovery }, + .{ .name = "stm3240geval", .target = stm32.boards.stm3240geval }, + .{ .name = "stm32f429idiscovery", .target = stm32.boards.stm32f429idiscovery }, - // STM32 - .{ .name = "stm32f103x8", .target = stm32.chips.stm32f103x8 }, - .{ .name = "stm32f303vc", .target = stm32.chips.stm32f303vc }, - .{ .name = "stm32f407vg", .target = stm32.chips.stm32f407vg }, - .{ .name = "stm32f429zit6u", .target = stm32.chips.stm32f429zit6u }, - .{ .name = "stm32f3discovery", .target = stm32.boards.stm32f3discovery }, - .{ .name = "stm32f4discovery", .target = stm32.boards.stm32f4discovery }, - .{ .name = "stm3240geval", .target = stm32.boards.stm3240geval }, - .{ .name = "stm32f429idiscovery", .target = stm32.boards.stm32f429idiscovery }, + // NXP LPC + .{ .name = "lpc176x5x", .target = lpc.chips.lpc176x5x }, + .{ .name = "mbed-lpc1768", .target = lpc.boards.mbed.lpc1768 }, - // NXP LPC - .{ .name = "lpc176x5x", .target = lpc.chips.lpc176x5x }, - .{ .name = "mbed-lpc1768", .target = lpc.boards.mbed.lpc1768 }, + // GigaDevice GD32 + .{ .name = "gd32vf103xb", .target = gd32.chips.gd32vf103xb }, + .{ .name = "gd32vf103x8", .target = gd32.chips.gd32vf103x8 }, + .{ .name = "sipeed-longan_nano", .target = gd32.boards.sipeed.longan_nano }, - // GigaDevice GD32 - .{ .name = "gd32vf103xb", .target = gd32.chips.gd32vf103xb }, - .{ .name = "gd32vf103x8", .target = gd32.chips.gd32vf103x8 }, - .{ .name = "sipeed-longan_nano", .target = gd32.boards.sipeed.longan_nano }, + // Nordic Nrf5x + .{ .name = "nrf52832", .target = nrf5x.chips.nrf52832 }, + .{ .name = "nrf52840", .target = nrf5x.chips.nrf52840 }, + .{ .name = "nrf52840-dongle", .target = nrf5x.boards.nordic.nRF52840_Dongle }, // TODO: Add support for DFU files! - // Nordic Nrf5x - .{ .name = "nrf52832", .target = nrf5x.chips.nrf52832 }, - .{ .name = "nrf52840", .target = nrf5x.chips.nrf52840 }, - .{ .name = "nrf52840-dongle", .target = nrf5x.boards.nordic.nRF52840_Dongle }, // TODO: Add support for DFU files! + // RISC-V Espressif ESP + .{ .name = "esp32-c3", .target = esp.chips.esp32_c3 }, // TODO: Add support for Espressif Update Binaries - // RISC-V Espressif ESP - .{ .name = "esp32-c3", .target = esp.chips.esp32_c3 }, // TODO: Add support for Espressif Update Binaries + // Microchip ATmega + // TODO: Fix compiler bugs + // - https://github.com/ziglang/zig/issues/17219 + // .{ .name = "atmega328p", .target = atmega.chips.atmega328p }, + // .{ .name = "arduino-nano", .target = atmega.boards.arduino.nano }, + // .{ .name = "arduino-uno-rev3", .target = atmega.boards.arduino.uno_rev3 }, +}; - // Microchip ATmega - // TODO: Fix compiler bugs - // - https://github.com/ziglang/zig/issues/17219 - // .{ .name = "atmega328p", .target = atmega.chips.atmega328p }, - // .{ .name = "arduino-nano", .target = atmega.boards.arduino.nano }, - // .{ .name = "arduino-uno-rev3", .target = atmega.boards.arduino.uno_rev3 }, - }; +pub fn build(b: *std.Build) void { + const microzig = @import("microzig").init(b, "microzig"); + const optimize = b.standardOptimizeOption(.{}); for (available_targets) |dest| { // `addFirmware` basically works like addExecutable, but takes a @@ -82,3 +77,8 @@ pub fn build(b: *std.Build) void { microzig.installFirmware(b, firmware, .{ .format = .elf }); } } + +const TargetDesc = struct { + target: @import("microzig").Target, + name: []const u8, +}; diff --git a/raspberrypi-rp2040/build.zig b/raspberrypi-rp2040/build.zig new file mode 100644 index 0000000..c584572 --- /dev/null +++ b/raspberrypi-rp2040/build.zig @@ -0,0 +1,62 @@ +const std = @import("std"); +const rp2040 = @import("rp2040"); + +const available_targets = [_]TargetDesc{ + .{ .name = "pico", .target = rp2040.boards.raspberry_pi.pico }, + .{ .name = "rp2040-eth", .target = rp2040.boards.waveshare.rp2040_eth }, + .{ .name = "rp2040-plus-4m", .target = rp2040.boards.waveshare.rp2040_plus_4m }, + .{ .name = "rp2040-plus-16m", .target = rp2040.boards.waveshare.rp2040_plus_16m }, + .{ .name = "rp2040-matrix", .target = rp2040.boards.waveshare.rp2040_matrix }, +}; + +const available_examples = [_][]const u8{ + "src/adc.zig", + "src/blinky.zig", + "src/blinky_core1.zig", + "src/flash_program.zig", + "src/gpio_clk.zig", + "src/i2c_bus_scan.zig", + "src/pwm.zig", + "src/random.zig", + "src/spi_master.zig", + "src/squarewave.zig", + "src/uart.zig", + "src/usb_device.zig", + "src/usb_hid.zig", + "src/ws2812.zig", +}; + +pub fn build(b: *std.Build) void { + const microzig = @import("microzig").init(b, "microzig"); + const optimize = b.standardOptimizeOption(.{}); + + for (available_targets) |target| { + for (available_examples) |example| { + // `addFirmware` basically works like addExecutable, but takes a + // `microzig.Target` for target instead of a `std.zig.CrossTarget`. + // + // The target will convey all necessary information on the chip, + // cpu and potentially the board as well. + const firmware = microzig.addFirmware(b, .{ + .name = b.fmt("{s}-{s}", .{ std.fs.path.stem(example), target.name }), + .target = target.target, + .optimize = optimize, + .source_file = .{ .path = example }, + }); + + // `installFirmware()` is the MicroZig pendant to `Build.installArtifact()` + // and allows installing the firmware as a typical firmware file. + // + // This will also install into `$prefix/firmware` instead of `$prefix/bin`. + microzig.installFirmware(b, firmware, .{}); + + // For debugging, we also always install the firmware as an ELF file + microzig.installFirmware(b, firmware, .{ .format = .elf }); + } + } +} + +const TargetDesc = struct { + target: @import("microzig").Target, + name: []const u8, +}; diff --git a/rp2040/build.zig.zon b/raspberrypi-rp2040/build.zig.zon similarity index 100% rename from rp2040/build.zig.zon rename to raspberrypi-rp2040/build.zig.zon diff --git a/rp2040/scripts/hid_test.py b/raspberrypi-rp2040/scripts/hid_test.py similarity index 100% rename from rp2040/scripts/hid_test.py rename to raspberrypi-rp2040/scripts/hid_test.py diff --git a/rp2040/scripts/usb_device_loopback.py b/raspberrypi-rp2040/scripts/usb_device_loopback.py similarity index 100% rename from rp2040/scripts/usb_device_loopback.py rename to raspberrypi-rp2040/scripts/usb_device_loopback.py diff --git a/rp2040/src/adc.zig b/raspberrypi-rp2040/src/adc.zig similarity index 100% rename from rp2040/src/adc.zig rename to raspberrypi-rp2040/src/adc.zig diff --git a/rp2040/src/blinky.zig b/raspberrypi-rp2040/src/blinky.zig similarity index 100% rename from rp2040/src/blinky.zig rename to raspberrypi-rp2040/src/blinky.zig diff --git a/rp2040/src/blinky_core1.zig b/raspberrypi-rp2040/src/blinky_core1.zig similarity index 100% rename from rp2040/src/blinky_core1.zig rename to raspberrypi-rp2040/src/blinky_core1.zig diff --git a/rp2040/src/flash_program.zig b/raspberrypi-rp2040/src/flash_program.zig similarity index 100% rename from rp2040/src/flash_program.zig rename to raspberrypi-rp2040/src/flash_program.zig diff --git a/rp2040/src/gpio_clk.zig b/raspberrypi-rp2040/src/gpio_clk.zig similarity index 100% rename from rp2040/src/gpio_clk.zig rename to raspberrypi-rp2040/src/gpio_clk.zig diff --git a/rp2040/src/i2c_bus_scan.zig b/raspberrypi-rp2040/src/i2c_bus_scan.zig similarity index 100% rename from rp2040/src/i2c_bus_scan.zig rename to raspberrypi-rp2040/src/i2c_bus_scan.zig diff --git a/rp2040/src/pwm.zig b/raspberrypi-rp2040/src/pwm.zig similarity index 100% rename from rp2040/src/pwm.zig rename to raspberrypi-rp2040/src/pwm.zig diff --git a/rp2040/src/random.zig b/raspberrypi-rp2040/src/random.zig similarity index 100% rename from rp2040/src/random.zig rename to raspberrypi-rp2040/src/random.zig diff --git a/rp2040/src/spi_master.zig b/raspberrypi-rp2040/src/spi_master.zig similarity index 100% rename from rp2040/src/spi_master.zig rename to raspberrypi-rp2040/src/spi_master.zig diff --git a/rp2040/src/squarewave.zig b/raspberrypi-rp2040/src/squarewave.zig similarity index 100% rename from rp2040/src/squarewave.zig rename to raspberrypi-rp2040/src/squarewave.zig diff --git a/rp2040/src/uart.zig b/raspberrypi-rp2040/src/uart.zig similarity index 100% rename from rp2040/src/uart.zig rename to raspberrypi-rp2040/src/uart.zig diff --git a/rp2040/src/usb_device.zig b/raspberrypi-rp2040/src/usb_device.zig similarity index 100% rename from rp2040/src/usb_device.zig rename to raspberrypi-rp2040/src/usb_device.zig diff --git a/rp2040/src/usb_hid.zig b/raspberrypi-rp2040/src/usb_hid.zig similarity index 100% rename from rp2040/src/usb_hid.zig rename to raspberrypi-rp2040/src/usb_hid.zig diff --git a/rp2040/src/ws2812.zig b/raspberrypi-rp2040/src/ws2812.zig similarity index 100% rename from rp2040/src/ws2812.zig rename to raspberrypi-rp2040/src/ws2812.zig diff --git a/rp2040/build.zig b/rp2040/build.zig deleted file mode 100644 index 4064772..0000000 --- a/rp2040/build.zig +++ /dev/null @@ -1,84 +0,0 @@ -const std = @import("std"); -const rp2040 = @import("rp2040"); -const stm32 = @import("stm32"); -const lpc = @import("lpc"); -const gd32 = @import("gd32"); -const nrf5x = @import("nrf5x"); -const esp = @import("esp"); -const atmega = @import("atmega"); - -pub fn build(b: *std.Build) void { - const microzig = @import("microzig").init(b, "microzig"); - const optimize = b.standardOptimizeOption(.{}); - - const TargetDesc = struct { - target: @import("microzig").Target, - name: []const u8, - }; - - const available_targets = [_]TargetDesc{ - // RP2040 - .{ .name = "pico", .target = rp2040.boards.raspberry_pi.pico }, - .{ .name = "rp2040-eth", .target = rp2040.boards.waveshare.rp2040_eth }, - .{ .name = "rp2040-plus-4m", .target = rp2040.boards.waveshare.rp2040_plus_4m }, - .{ .name = "rp2040-plus-16m", .target = rp2040.boards.waveshare.rp2040_plus_16m }, - .{ .name = "rp2040-matrix", .target = rp2040.boards.waveshare.rp2040_matrix }, - - // STM32 - .{ .name = "stm32f103x8", .target = stm32.chips.stm32f103x8 }, - .{ .name = "stm32f303vc", .target = stm32.chips.stm32f303vc }, - .{ .name = "stm32f407vg", .target = stm32.chips.stm32f407vg }, - .{ .name = "stm32f429zit6u", .target = stm32.chips.stm32f429zit6u }, - .{ .name = "stm32f3discovery", .target = stm32.boards.stm32f3discovery }, - .{ .name = "stm32f4discovery", .target = stm32.boards.stm32f4discovery }, - .{ .name = "stm3240geval", .target = stm32.boards.stm3240geval }, - .{ .name = "stm32f429idiscovery", .target = stm32.boards.stm32f429idiscovery }, - - // NXP LPC - .{ .name = "lpc176x5x", .target = lpc.chips.lpc176x5x }, - .{ .name = "mbed-lpc1768", .target = lpc.boards.mbed.lpc1768 }, - - // GigaDevice GD32 - .{ .name = "gd32vf103xb", .target = gd32.chips.gd32vf103xb }, - .{ .name = "gd32vf103x8", .target = gd32.chips.gd32vf103x8 }, - .{ .name = "sipeed-longan_nano", .target = gd32.boards.sipeed.longan_nano }, - - // Nordic Nrf5x - .{ .name = "nrf52832", .target = nrf5x.chips.nrf52832 }, - .{ .name = "nrf52840", .target = nrf5x.chips.nrf52840 }, - .{ .name = "nrf52840-dongle", .target = nrf5x.boards.nordic.nRF52840_Dongle }, // TODO: Add support for DFU files! - - // RISC-V Espressif ESP - .{ .name = "esp32-c3", .target = esp.chips.esp32_c3 }, // TODO: Add support for Espressif Update Binaries - - // Microchip ATmega - // TODO: Fix compiler bugs - // - https://github.com/ziglang/zig/issues/17219 - // .{ .name = "atmega328p", .target = atmega.chips.atmega328p }, - // .{ .name = "arduino-nano", .target = atmega.boards.arduino.nano }, - // .{ .name = "arduino-uno-rev3", .target = atmega.boards.arduino.uno_rev3 }, - }; - - for (available_targets) |dest| { - // `addFirmware` basically works like addExecutable, but takes a - // `microzig.Target` for target instead of a `std.zig.CrossTarget`. - // - // The target will convey all necessary information on the chip, - // cpu and potentially the board as well. - const firmware = microzig.addFirmware(b, .{ - .name = b.fmt("empty-{s}", .{dest.name}), - .target = dest.target, - .optimize = optimize, - .source_file = .{ .path = "src/empty.zig" }, - }); - - // `installFirmware()` is the MicroZig pendant to `Build.installArtifact()` - // and allows installing the firmware as a typical firmware file. - // - // This will also install into `$prefix/firmware` instead of `$prefix/bin`. - microzig.installFirmware(b, firmware, .{}); - - // For debugging, we also always install the firmware as an ELF file - microzig.installFirmware(b, firmware, .{ .format = .elf }); - } -}