Makes stm32 module build again.

wch-ch32v003
Felix "xq" Queißner 8 months ago
parent 2e9df6032d
commit 7a33e6fd55

1
.gitignore vendored

@ -5,3 +5,4 @@ microzig-deploy/
.gdbinit .gdbinit
.lldbinit .lldbinit
.direnv/ .direnv/
__pycache__/

@ -27,7 +27,6 @@ const available_examples = [_]Example{
pub fn build(b: *std.Build) void { pub fn build(b: *std.Build) void {
const microzig = MicroZig.createBuildEnvironment(b, .{}); const microzig = MicroZig.createBuildEnvironment(b, .{});
const optimize = b.standardOptimizeOption(.{}); const optimize = b.standardOptimizeOption(.{});
const show_targets_step = b.step("show-targets", "Shows all available MicroZig targets"); const show_targets_step = b.step("show-targets", "Shows all available MicroZig targets");

@ -1,22 +1,27 @@
const std = @import("std"); const std = @import("std");
const stm32 = @import("stm32"); const MicroZig = @import("microzig-build");
const available_examples = [_]Example{ const available_examples = [_]Example{
.{ .name = "stm32f103x8", .target = stm32.chips.stm32f103x8, .file = "src/blinky.zig" }, .{ .target = "chip:stm32f103x8",.name = "stm32f103x8", .file = "src/blinky.zig" },
// TODO: .{ .name = "stm32f303vc", .target = stm32.chips.stm32f303vc, .file = "src/blinky.zig" }, // TODO: .{ .target = "chip:stm32f303vc", .name = "stm32f303vc", .file = "src/blinky.zig" },
// TODO: .{ .name = "stm32f407vg", .target = stm32.chips.stm32f407vg, .file = "src/blinky.zig" }, // TODO: .{ .target = "chip:stm32f407vg", .name = "stm32f407vg", .file = "src/blinky.zig" },
// TODO: .{ .name = "stm32f429zit6u", .target = stm32.chips.stm32f429zit6u, .file = "src/blinky.zig" }, // TODO: .{ .target = "chip:stm32f429zit6u", .name = "stm32f429zit6u", .file = "src/blinky.zig" },
// TODO: .{ .name = "stm32f3discovery", .target = stm32.boards.stm32f3discovery, .file = "src/blinky.zig" }, // TODO: .{ .target = "board:stm32f3discovery", .name = "stm32f3discovery", .file = "src/blinky.zig" },
// TODO: .{ .name = "stm32f4discovery", .target = stm32.boards.stm32f4discovery, .file = "src/blinky.zig" }, // TODO: .{ .target = "board:stm32f4discovery", .name = "stm32f4discovery", .file = "src/blinky.zig" },
// TODO: .{ .name = "stm3240geval", .target = stm32.boards.stm3240geval, .file = "src/blinky.zig" }, // TODO: .{ .target = "board:stm3240geval", .name = "stm3240geval", .file = "src/blinky.zig" },
// TODO: .{ .name = "stm32f429idiscovery", .target = stm32.boards.stm32f429idiscovery, .file = "src/blinky.zig" }, // TODO: .{ .target = "board:stm32f429idiscovery", .name = "stm32f429idiscovery", .file = "src/blinky.zig" },
}; };
pub fn build(b: *std.Build) void { pub fn build(b: *std.Build) void {
const microzig = @import("microzig").init(b, "microzig"); const microzig = MicroZig.createBuildEnvironment(b, .{});
const optimize = .ReleaseSmall; // The others are not really an option on AVR 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| { for (available_examples) |example| {
const target = microzig.findTarget(example.target).?;
// `addFirmware` basically works like addExecutable, but takes a // `addFirmware` basically works like addExecutable, but takes a
// `microzig.Target` for target instead of a `std.zig.CrossTarget`. // `microzig.Target` for target instead of a `std.zig.CrossTarget`.
// //
@ -24,7 +29,7 @@ pub fn build(b: *std.Build) void {
// cpu and potentially the board as well. // cpu and potentially the board as well.
const firmware = microzig.addFirmware(b, .{ const firmware = microzig.addFirmware(b, .{
.name = example.name, .name = example.name,
.target = example.target, .target = target,
.optimize = optimize, .optimize = optimize,
.source_file = .{ .path = example.file }, .source_file = .{ .path = example.file },
}); });
@ -41,7 +46,7 @@ pub fn build(b: *std.Build) void {
} }
const Example = struct { const Example = struct {
target: @import("microzig").Target, target: []const u8,
name: []const u8, name: []const u8,
file: []const u8, file: []const u8,
}; };

@ -1,14 +0,0 @@
.{
.name = "microzig-stmicro-stm32-examples",
.version = "0.1.0",
.dependencies = .{
.microzig = .{
.url = "https://github.com/ZigEmbeddedGroup/microzig/archive/c6c9ec4516f57638e751141085c9d76120990312.tar.gz",
.hash = "1220af58bdaa721b8189f3a7adfda660517dd354463463388e96d69fe4ceccf80b92",
},
.stm32 = .{
.url = "https://github.com/ZigEmbeddedGroup/stmicro-stm32/archive/237890d49ee795110a63df2c45bdd6f6a0029a72.tar.gz",
.hash = "1220960897777f9713fa1055ffdf1fbad1518b2f62bd2f2ae39b887821dbf0781df0",
},
},
}

@ -0,0 +1,7 @@
{
"package_name": "stmicro/stm32",
"package_type": "example",
"inner_dependencies": [
"stmicro/stm32"
]
}

@ -7,7 +7,7 @@
# #
import sys, os, subprocess,datetime, re, shutil, json, hashlib import sys, os, datetime, re, shutil, json, hashlib
from pathlib import Path, PurePosixPath from pathlib import Path, PurePosixPath
from dataclasses import dataclass, field from dataclasses import dataclass, field
from dataclasses_json import dataclass_json, config as dcj_config, Exclude as JsonExclude from dataclasses_json import dataclass_json, config as dcj_config, Exclude as JsonExclude
@ -18,9 +18,14 @@ import pathspec
import stat import stat
import tarfile import tarfile
from marshmallow import fields as mm_fields from marshmallow import fields as mm_fields
from typing import Optional, Any from typing import Optional, Any
from lib.common import execute_raw, execute, slurp, check_zig_version, check_required_tools
import lib.common as common
LEGAL_PACKAGE_NAME = re.compile("^[A-Za-z]$") LEGAL_PACKAGE_NAME = re.compile("^[A-Za-z]$")
VERBOSE = False VERBOSE = False
@ -36,7 +41,7 @@ REPO_ROOT = Path(__file__).parent.parent
assert REPO_ROOT.is_dir() assert REPO_ROOT.is_dir()
common.VERBOSE = VERBOSE
class PackageType(StrEnum): class PackageType(StrEnum):
build = "build" build = "build"
@ -138,34 +143,8 @@ FILE_STAT_MAP = {
def file_type(path: Path) -> str: def file_type(path: Path) -> str:
return FILE_STAT_MAP[stat.S_IFMT( path.stat().st_mode)] return FILE_STAT_MAP[stat.S_IFMT( path.stat().st_mode)]
def execute_raw(*args,hide_stderr = False,**kwargs):
args = [ str(f) for f in args]
if VERBOSE:
print(*args)
res = subprocess.run(args, **kwargs, check=False)
if res.stderr is not None and (not hide_stderr or res.returncode != 0):
sys.stderr.buffer.write(res.stderr)
if res.returncode != 0:
sys.stderr.write(f"command {' '.join(args)} failed with exit code {res.returncode}")
sys.exit(res.returncode)
return res
def execute(*args,**kwargs):
execute_raw(*args, **kwargs, capture_output=False)
def slurp(*args, **kwargs):
res = execute_raw(*args, **kwargs, capture_output=True)
return res.stdout
def check_required_tools():
for tool in REQUIRED_TOOLS:
slurp("which", tool)
def check_zig_version(expected):
actual = slurp("zig", "version")
if actual.strip() != expected.encode():
raise RuntimeError(f"Unexpected zig version! Expected {expected}, but found {actual.strip()}!")
def build_zig_tools(): def build_zig_tools():
# ensure we have our tools available: # ensure we have our tools available:
@ -251,7 +230,7 @@ def get_batch_timestamp():
def main(): def main():
check_required_tools() check_required_tools(REQUIRED_TOOLS)
check_zig_version("0.11.0") check_zig_version("0.11.0")

@ -0,0 +1,32 @@
import subprocess, sys
VERBOSE = False
def execute_raw(*args,hide_stderr = False,**kwargs):
args = [ str(f) for f in args]
if VERBOSE:
print(*args)
res = subprocess.run(args, **kwargs, check=False)
if res.stderr is not None and (not hide_stderr or res.returncode != 0):
sys.stderr.buffer.write(res.stderr)
if res.returncode != 0:
sys.stderr.write(f"command {' '.join(args)} failed with exit code {res.returncode}")
sys.exit(res.returncode)
return res
def execute(*args,**kwargs):
execute_raw(*args, **kwargs, capture_output=False)
def slurp(*args, **kwargs):
res = execute_raw(*args, **kwargs, capture_output=True)
return res.stdout
def check_zig_version(expected):
actual = slurp("zig", "version")
if actual.strip() != expected.encode():
raise RuntimeError(f"Unexpected zig version! Expected {expected}, but found {actual.strip()}!")
def check_required_tools(tools):
for tool in tools:
slurp("which", tool)

@ -0,0 +1,11 @@
#!/bin/sh
set -e
root="$(dirname "$(realpath "$0")")"
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

@ -0,0 +1,85 @@
#!/usr/bin/env python3
from lib.common import execute_raw, execute, slurp, check_zig_version, check_required_tools
from pathlib import Path, PurePosixPath
import argparse
import sys
import shutil
REQUIRED_TOOLS = ["zig", "curl", "tar", "gunzip"]
def main():
check_required_tools(REQUIRED_TOOLS)
check_zig_version("0.11.0")
parser = argparse.ArgumentParser()
parser.add_argument("--example", type=PurePosixPath, required=True)
parser.add_argument("--build-root", type=Path, required=True)
args = parser.parse_args()
example_id: PurePosixPath = args.example
build_root: Path = args.build_root
if len(example_id.parents) != 2 or str(example_id.parents[1]) != ".":
print(f"example must be <group>/<id>", file=sys.stderr)
exit(1)
example_group: str = example_id.parent.name
example_name: str = example_id.name
if not build_root.is_dir():
print(f"{build_root} is not a directory", file=sys.stderr)
exit(1)
execute(
"curl",
"-o",
f"{example_name}.tar.gz",
f"https://public.devspace.random-projects.net/examples/{example_group}/{example_name}.tar.gz",
cwd=build_root,
)
any_path = slurp(
"tar",
"-tf",
f"{example_name}.tar.gz",
cwd=build_root,
).splitlines()[0].decode()
root_folder_name = any_path.split(sep='/')[0]
example_build_root = build_root / root_folder_name
if example_build_root.exists():
shutil.rmtree(example_build_root)
execute(
"tar",
"-xf",
f"{example_name}.tar.gz",
cwd=build_root,
)
# print(list(example_build_root.glob("*")))
execute(
"zig",
"build",
cwd = example_build_root,
)
out_dir = example_build_root / "zig-out"
print("all files:")
for path in out_dir.rglob("*"):
if path.is_file():
print(f"- {path}")
if __name__ == "__main__":
main()
Loading…
Cancel
Save