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
.lldbinit
.direnv/
__pycache__/

@ -27,7 +27,6 @@ const available_examples = [_]Example{
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");

@ -1,22 +1,27 @@
const std = @import("std");
const stm32 = @import("stm32");
const MicroZig = @import("microzig-build");
const available_examples = [_]Example{
.{ .name = "stm32f103x8", .target = stm32.chips.stm32f103x8, .file = "src/blinky.zig" },
// TODO: .{ .name = "stm32f303vc", .target = stm32.chips.stm32f303vc, .file = "src/blinky.zig" },
// TODO: .{ .name = "stm32f407vg", .target = stm32.chips.stm32f407vg, .file = "src/blinky.zig" },
// TODO: .{ .name = "stm32f429zit6u", .target = stm32.chips.stm32f429zit6u, .file = "src/blinky.zig" },
// TODO: .{ .name = "stm32f3discovery", .target = stm32.boards.stm32f3discovery, .file = "src/blinky.zig" },
// TODO: .{ .name = "stm32f4discovery", .target = stm32.boards.stm32f4discovery, .file = "src/blinky.zig" },
// TODO: .{ .name = "stm3240geval", .target = stm32.boards.stm3240geval, .file = "src/blinky.zig" },
// TODO: .{ .name = "stm32f429idiscovery", .target = stm32.boards.stm32f429idiscovery, .file = "src/blinky.zig" },
.{ .target = "chip:stm32f103x8",.name = "stm32f103x8", .file = "src/blinky.zig" },
// TODO: .{ .target = "chip:stm32f303vc", .name = "stm32f303vc", .file = "src/blinky.zig" },
// TODO: .{ .target = "chip:stm32f407vg", .name = "stm32f407vg", .file = "src/blinky.zig" },
// TODO: .{ .target = "chip:stm32f429zit6u", .name = "stm32f429zit6u", .file = "src/blinky.zig" },
// TODO: .{ .target = "board:stm32f3discovery", .name = "stm32f3discovery", .file = "src/blinky.zig" },
// TODO: .{ .target = "board:stm32f4discovery", .name = "stm32f4discovery", .file = "src/blinky.zig" },
// TODO: .{ .target = "board:stm3240geval", .name = "stm3240geval", .file = "src/blinky.zig" },
// TODO: .{ .target = "board:stm32f429idiscovery", .name = "stm32f429idiscovery", .file = "src/blinky.zig" },
};
pub fn build(b: *std.Build) void {
const microzig = @import("microzig").init(b, "microzig");
const optimize = .ReleaseSmall; // The others are not really an option on AVR
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`.
//
@ -24,7 +29,7 @@ pub fn build(b: *std.Build) void {
// cpu and potentially the board as well.
const firmware = microzig.addFirmware(b, .{
.name = example.name,
.target = example.target,
.target = target,
.optimize = optimize,
.source_file = .{ .path = example.file },
});
@ -41,7 +46,7 @@ pub fn build(b: *std.Build) void {
}
const Example = struct {
target: @import("microzig").Target,
target: []const u8,
name: []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 dataclasses import dataclass, field
from dataclasses_json import dataclass_json, config as dcj_config, Exclude as JsonExclude
@ -18,9 +18,14 @@ import pathspec
import stat
import tarfile
from marshmallow import fields as mm_fields
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]$")
VERBOSE = False
@ -36,7 +41,7 @@ REPO_ROOT = Path(__file__).parent.parent
assert REPO_ROOT.is_dir()
common.VERBOSE = VERBOSE
class PackageType(StrEnum):
build = "build"
@ -138,34 +143,8 @@ FILE_STAT_MAP = {
def file_type(path: Path) -> str:
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():
# ensure we have our tools available:
@ -251,7 +230,7 @@ def get_batch_timestamp():
def main():
check_required_tools()
check_required_tools(REQUIRED_TOOLS)
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