From 2878ae6e194a591465c42b6d457b884b6ce9d551 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20=22xq=22=20Quei=C3=9Fner?= Date: Wed, 7 Feb 2024 10:23:04 +0100 Subject: [PATCH] Makes microchip/atsam example and bsp work --- .../{ => src}/chips/ATSAMD51J19A.atdf | 0 examples/all-platforms/build.zig | 84 ------------------- examples/all-platforms/build.zig.zon | 38 --------- examples/all-platforms/src/blinky.zig | 20 ----- examples/all-platforms/src/empty.zig | 6 -- examples/build.zig | 28 ------- examples/microchip-atsam/build.zig | 45 ++++++++++ .../microchip-atsam/microzig-package.json | 7 ++ .../src/blinky.zig} | 4 +- examples/next-gen/build.zig | 23 ----- examples/next-gen/build.zig.zon | 22 ----- tools/validate-all-examples.sh | 8 +- 12 files changed, 58 insertions(+), 227 deletions(-) rename board-support/microchip-atsam/{ => src}/chips/ATSAMD51J19A.atdf (100%) delete mode 100644 examples/all-platforms/build.zig delete mode 100644 examples/all-platforms/build.zig.zon delete mode 100644 examples/all-platforms/src/blinky.zig delete mode 100644 examples/all-platforms/src/empty.zig delete mode 100644 examples/build.zig create mode 100644 examples/microchip-atsam/build.zig create mode 100644 examples/microchip-atsam/microzig-package.json rename examples/{next-gen/src/empty.zig => microchip-atsam/src/blinky.zig} (58%) delete mode 100644 examples/next-gen/build.zig delete mode 100644 examples/next-gen/build.zig.zon diff --git a/board-support/microchip-atsam/chips/ATSAMD51J19A.atdf b/board-support/microchip-atsam/src/chips/ATSAMD51J19A.atdf similarity index 100% rename from board-support/microchip-atsam/chips/ATSAMD51J19A.atdf rename to board-support/microchip-atsam/src/chips/ATSAMD51J19A.atdf diff --git a/examples/all-platforms/build.zig b/examples/all-platforms/build.zig deleted file mode 100644 index 6cf3b48..0000000 --- a/examples/all-platforms/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"); - -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 }, -}; - -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 - // `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 }); - } -} - -const TargetDesc = struct { - target: @import("microzig").Target, - name: []const u8, -}; diff --git a/examples/all-platforms/build.zig.zon b/examples/all-platforms/build.zig.zon deleted file mode 100644 index 5513788..0000000 --- a/examples/all-platforms/build.zig.zon +++ /dev/null @@ -1,38 +0,0 @@ -.{ - .name = "microzig-all-platforms-examples", - .version = "0.1.0", - .dependencies = .{ - .microzig = .{ - .url = "https://github.com/ZigEmbeddedGroup/microzig/archive/c6c9ec4516f57638e751141085c9d76120990312.tar.gz", - .hash = "1220af58bdaa721b8189f3a7adfda660517dd354463463388e96d69fe4ceccf80b92", - }, - .rp2040 = .{ - .url = "https://github.com/ZigEmbeddedGroup/raspberrypi-rp2040/archive/67d36eebb0fbd89633db1a51d6d2bcb049f2066a.tar.gz", - .hash = "122094bf268f45b188f3916f9e5964f4257414afaafba98a455ac47d25389a456832", - }, - .stm32 = .{ - .url = "https://github.com/ZigEmbeddedGroup/stmicro-stm32/archive/cb2893707efa6aa289fa72f02959ad5f2d9db2a1.tar.gz", - .hash = "12208cab5f60ef97cac4165ad694f3ba0c7b28f279538c1539b74f7c152f34fe306d", - }, - .lpc = .{ - .url = "https://github.com/ZigEmbeddedGroup/nxp-lpc/archive/130a1316c0892415e7da958a5e9548ed87bba54d.tar.gz", - .hash = "1220165879f85a1d51656d35b3963a95f3585dc665fc7414f76aa6aad4e6635536cf", - }, - .gd32 = .{ - .url = "https://github.com/ZigEmbeddedGroup/gigadevice-gd32/archive/9324753cc3b8e7afe83fcda085bcfe76681a3be3.tar.gz", - .hash = "122043ff4dcbc342f25dbb936b0d9eaa701ac3509e2cbe6764be37b90d31c7a385d0", - }, - .nrf5x = .{ - .url = "https://github.com/ZigEmbeddedGroup/nordic-nrf5x/archive/0ab136860ccf7eb1d07969c3ef523f3cd898e2ff.tar.gz", - .hash = "1220980da06f9634dcff06afefa7aa111bd030018fea49f79e86657dab69621e1d08", - }, - .esp = .{ - .url = "https://github.com/ZigEmbeddedGroup/espressif-esp/archive/59b8ca028915c0d6224ec88dbf4db19afbb559c0.tar.gz", - .hash = "1220f6e5f22416fdc63442cd8869fcaa35f9abf30d878ea3d80073176677dc6f8a65", - }, - .atmega = .{ - .url = "https://github.com/ZigEmbeddedGroup/microchip-atmega/archive/feefcb87a63c0aae31afb783d4e388e90c4d922f.tar.gz", - .hash = "1220048dc5d22729ee119a496f8b8ca3556838af1f3bd32ce6acd5f76480ec942965", - }, - }, -} diff --git a/examples/all-platforms/src/blinky.zig b/examples/all-platforms/src/blinky.zig deleted file mode 100644 index 5632fe3..0000000 --- a/examples/all-platforms/src/blinky.zig +++ /dev/null @@ -1,20 +0,0 @@ -const std = @import("std"); -const microzig = @import("microzig"); -const rp2040 = microzig.hal; -const time = rp2040.time; - -const pin_config = rp2040.pins.GlobalConfiguration{ - .GPIO25 = .{ - .name = "led", - .direction = .out, - }, -}; - -pub fn main() !void { - const pins = pin_config.apply(); - - while (true) { - pins.led.toggle(); - time.sleep_ms(250); - } -} diff --git a/examples/all-platforms/src/empty.zig b/examples/all-platforms/src/empty.zig deleted file mode 100644 index 7c6dbbe..0000000 --- a/examples/all-platforms/src/empty.zig +++ /dev/null @@ -1,6 +0,0 @@ -const std = @import("std"); -const microzig = @import("microzig"); - -pub fn main() void { - // -} diff --git a/examples/build.zig b/examples/build.zig deleted file mode 100644 index bd3f69f..0000000 --- a/examples/build.zig +++ /dev/null @@ -1,28 +0,0 @@ -const std = @import("std"); -const MicroZig = @import("../build/build.zig"); // "microzig-build" - -pub fn build(b: *std.Build) void { - const microzig = MicroZig.createBuildEnvironment(b, .{ - .self = "microzig", // package name of the build package (optional) - .core = "microzig-core", // package name of the core package (optional) - .board_support = &.{ - // package names for BSP packages: - "microzig-bsp-nxp", - "microzig-bsp-rp2040", - }, - }); - - const optimize = b.standardOptimizeOption(.{}); - const target_name = b.option([]const u8, "target", "Select the target to build for.") orelse "board:mbed/lpc1768"; - - const target = microzig.findTarget(target_name).?; - - const firmware = microzig.addFirmware(b, .{ - .name = "blinky", - .target = target, - .optimize = optimize, - .source_file = .{ .path = "src/empty.zig" }, - }); - - microzig.installFirmware(b, firmware, .{}); -} diff --git a/examples/microchip-atsam/build.zig b/examples/microchip-atsam/build.zig new file mode 100644 index 0000000..681cf37 --- /dev/null +++ b/examples/microchip-atsam/build.zig @@ -0,0 +1,45 @@ +const std = @import("std"); +const MicroZig = @import("microzig-build"); + +const available_examples = [_]Example{ + .{ .target = "chip:atsamd51j19", .name = "atsamd51j19-blinky", .file = "src/blinky.zig" }, +}; + +pub fn build(b: *std.Build) void { + const microzig = MicroZig.createBuildEnvironment(b, .{}); + const optimize = b.standardOptimizeOption(.{}); + + const show_targets_step = b.step("show-targets", "Shows all available MicroZig targets"); + show_targets_step.dependOn(microzig.getShowTargetsStep()); + + for (available_examples) |example| { + const target = microzig.findTarget(example.target).?; + + // `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 = example.name, + .target = target, + .optimize = optimize, + .source_file = .{ .path = example.file }, + }); + + // `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 Example = struct { + target: []const u8, + name: []const u8, + file: []const u8, +}; diff --git a/examples/microchip-atsam/microzig-package.json b/examples/microchip-atsam/microzig-package.json new file mode 100644 index 0000000..b0f787b --- /dev/null +++ b/examples/microchip-atsam/microzig-package.json @@ -0,0 +1,7 @@ +{ + "package_name": "microchip/atsam", + "package_type": "example", + "inner_dependencies": [ + "microchip/atsam" + ] +} \ No newline at end of file diff --git a/examples/next-gen/src/empty.zig b/examples/microchip-atsam/src/blinky.zig similarity index 58% rename from examples/next-gen/src/empty.zig rename to examples/microchip-atsam/src/blinky.zig index b292538..db1529a 100644 --- a/examples/next-gen/src/empty.zig +++ b/examples/microchip-atsam/src/blinky.zig @@ -2,7 +2,5 @@ const std = @import("std"); const microzig = @import("microzig"); pub fn main() !void { - while (true) { - asm volatile ("" ::: "memory"); - } + // TODO: Implement the blinky } diff --git a/examples/next-gen/build.zig b/examples/next-gen/build.zig deleted file mode 100644 index fe531f9..0000000 --- a/examples/next-gen/build.zig +++ /dev/null @@ -1,23 +0,0 @@ -const std = @import("std"); -const MicroZig = @import("microzig-build"); - -pub fn build(b: *std.Build) void { - const microzig = MicroZig.createBuildEnvironment(b, .{}); - - const show_targets_step = b.step("show-targets", "Shows all available MicroZig targets"); - show_targets_step.dependOn(microzig.getShowTargetsStep()); - - const optimize = b.standardOptimizeOption(.{}); - const target_name = b.option([]const u8, "target", "Select the target to build for.") orelse "board:mbed/lpc1768"; - - const target = microzig.findTarget(target_name).?; - - const firmware = microzig.addFirmware(b, .{ - .name = "blinky", - .target = target, - .optimize = optimize, - .source_file = .{ .path = "src/empty.zig" }, - }); - - microzig.installFirmware(b, firmware, .{}); -} diff --git a/examples/next-gen/build.zig.zon b/examples/next-gen/build.zig.zon deleted file mode 100644 index 70de7cc..0000000 --- a/examples/next-gen/build.zig.zon +++ /dev/null @@ -1,22 +0,0 @@ -.{ - .name = "microzig-nxp-lpc-examples", - .version = "0.1.0", - .dependencies = .{ - .@"microzig-build" = .{ - .url = "https://public.devspace.random-projects.net/packages/microzig-build.tar.gz", - .hash = "1220e1f1446176832d84fa9b132022a45ea8c21fbaba8a51d787c6b4e0f1d455f4ed", - }, - .@"microzig-core" = .{ - .url = "https://public.devspace.random-projects.net/packages/microzig-core.tar.gz", - .hash = "12207d2604083d414ff3ca7c31c5dc76ee8ac3f1292a22e40ffe8b87fcadbd2e3c7d", - }, - .@"microzig-bsp-nxp" = .{ - .url = "https://public.devspace.random-projects.net/packages/board-support/nxp/lpc.tar.gz", - .hash = "1220ac0aa694eaa23cda453bb5a2711b22d8f58f10a9e0389502439cbb881987fa95", - }, - .@"microzig-bsp-rp2040" = .{ - .url = "https://public.devspace.random-projects.net/packages/board-support/raspberrypi/rp2040.tar.gz", - .hash = "12204d3998590f27f19aa31a8a250576b4314b29bbeb97628e264b42cb488ee6fad7", - }, - }, -} \ No newline at end of file diff --git a/tools/validate-all-examples.sh b/tools/validate-all-examples.sh index bf50cde..817ad58 100755 --- a/tools/validate-all-examples.sh +++ b/tools/validate-all-examples.sh @@ -7,6 +7,8 @@ tmpdir="/tmp/microzig-test" mkdir -p "${tmpdir}" -"${root}/validate-example.py" --build-root "${tmpdir}" --example raspberrypi/rp2040 -"${root}/validate-example.py" --build-root "${tmpdir}" --example stmicro/stm32 -"${root}/validate-example.py" --build-root "${tmpdir}" --example nxp/lpc +examples="espressif/esp stmicro/stm32 nordic/nrf5x gigadevice/gd32 raspberrypi/rp2040 nxp/lpc microchip/atsam" + +for key in ${examples}; do + "${root}/validate-example.py" --build-root "${tmpdir}" --example "$key" +done