aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDario Nieuwenhuis <[email protected]>2023-03-20 02:11:22 +0100
committerDario Nieuwenhuis <[email protected]>2023-03-20 02:38:12 +0100
commit0b49b588a2890096f95bef2f8c6d8644acdc5401 (patch)
tree59bfd1e3383d02d1f0cfccd6105ee23581e43e68
parentb6663a013f8632cefbc6d6ab9a9aa7afbcd1314b (diff)
stm32: use stm32-metapac from crates.io, remove stm32-data submodule.
-rw-r--r--.github/workflows/doc.yml1
-rw-r--r--.gitignore4
-rw-r--r--.gitmodules3
-rwxr-xr-xci.sh20
-rw-r--r--docs/modules/ROOT/examples/layer-by-layer/Cargo.toml1
-rw-r--r--docs/modules/ROOT/examples/layer-by-layer/blinky-pac/Cargo.toml2
-rw-r--r--embassy-stm32/Cargo.toml64
m---------stm32-data0
-rw-r--r--stm32-gen-features/.cargo/config.toml3
-rw-r--r--stm32-gen-features/.gitignore1
-rw-r--r--stm32-gen-features/Cargo.toml11
-rw-r--r--stm32-gen-features/src/lib.rs169
-rw-r--r--stm32-gen-features/src/main.rs25
-rw-r--r--stm32-metapac-gen/Cargo.toml15
-rw-r--r--stm32-metapac-gen/src/data.rs124
-rw-r--r--stm32-metapac-gen/src/lib.rs380
-rw-r--r--stm32-metapac-gen/src/main.rs36
-rw-r--r--stm32-metapac/Cargo.toml1332
-rw-r--r--stm32-metapac/build.rs77
-rw-r--r--stm32-metapac/build_pregenerated.rs39
-rw-r--r--stm32-metapac/src/lib.rs18
-rw-r--r--stm32-metapac/src/metadata.rs106
-rw-r--r--xtask/.cargo/config.toml6
-rw-r--r--xtask/Cargo.toml11
-rw-r--r--xtask/src/main.rs221
25 files changed, 34 insertions, 2635 deletions
diff --git a/.github/workflows/doc.yml b/.github/workflows/doc.yml
index 4bc73fdcf..cb222803b 100644
--- a/.github/workflows/doc.yml
+++ b/.github/workflows/doc.yml
@@ -54,7 +54,6 @@ jobs:
54 run: | 54 run: |
55 mkdir crates 55 mkdir crates
56 builder ./embassy-stm32 crates/embassy-stm32/git.zup 56 builder ./embassy-stm32 crates/embassy-stm32/git.zup
57 builder ./stm32-metapac crates/stm32-metapac/git.zup
58 57
59 - name: build-rest 58 - name: build-rest
60 if: ${{ matrix.crates=='rest' }} 59 if: ${{ matrix.crates=='rest' }}
diff --git a/.gitignore b/.gitignore
index 144dd703f..1c221e876 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,8 +4,4 @@ target_ci_stable
4Cargo.lock 4Cargo.lock
5third_party 5third_party
6/Cargo.toml 6/Cargo.toml
7stm32-metapac-gen/out/
8stm32-metapac-backup
9stm32-metapac/src/chips
10stm32-metapac/src/peripherals
11out/ 7out/
diff --git a/.gitmodules b/.gitmodules
deleted file mode 100644
index 8157e36ef..000000000
--- a/.gitmodules
+++ /dev/null
@@ -1,3 +0,0 @@
1[submodule "stm32-data"]
2 path = stm32-data
3 url = https://github.com/embassy-rs/stm32-data.git
diff --git a/ci.sh b/ci.sh
index bbcb26bdb..d86c93520 100755
--- a/ci.sh
+++ b/ci.sh
@@ -8,28 +8,12 @@ export DEFMT_LOG=trace
8 8
9TARGET=$(rustc -vV | sed -n 's|host: ||p') 9TARGET=$(rustc -vV | sed -n 's|host: ||p')
10 10
11BUILD_EXTRA=""
11if [ $TARGET = "x86_64-unknown-linux-gnu" ]; then 12if [ $TARGET = "x86_64-unknown-linux-gnu" ]; then
12 BUILD_EXTRA="--- build --release --manifest-path examples/std/Cargo.toml --target $TARGET --out-dir out/examples/std" 13 BUILD_EXTRA="--- build --release --manifest-path examples/std/Cargo.toml --target $TARGET --out-dir out/examples/std"
13else
14 BUILD_EXTRA=""
15fi 14fi
16 15
17find . -name '*.rs' -not -path '*target*' -not -path '*stm32-metapac-gen/out/*' -not -path '*stm32-metapac/src/*' | xargs rustfmt --check --skip-children --unstable-features --edition 2018 16find . -name '*.rs' -not -path '*target*' | xargs rustfmt --check --skip-children --unstable-features --edition 2018
18
19# Generate stm32-metapac
20if [ ! -d "stm32-metapac-backup" ]
21then
22 cp -r stm32-metapac stm32-metapac-backup
23fi
24
25rm -rf stm32-metapac
26cp -r stm32-metapac-backup stm32-metapac
27
28# for some reason Cargo stomps the cache if we don't specify --target.
29# This happens with vanilla Cargo, not just cargo-batch. Bug?
30(cd stm32-metapac-gen; cargo run --release --target $TARGET)
31rm -rf stm32-metapac
32mv stm32-metapac-gen/out stm32-metapac
33 17
34cargo batch \ 18cargo batch \
35 --- build --release --manifest-path embassy-executor/Cargo.toml --target thumbv7em-none-eabi --features nightly \ 19 --- build --release --manifest-path embassy-executor/Cargo.toml --target thumbv7em-none-eabi --features nightly \
diff --git a/docs/modules/ROOT/examples/layer-by-layer/Cargo.toml b/docs/modules/ROOT/examples/layer-by-layer/Cargo.toml
index 9048d9302..943249a17 100644
--- a/docs/modules/ROOT/examples/layer-by-layer/Cargo.toml
+++ b/docs/modules/ROOT/examples/layer-by-layer/Cargo.toml
@@ -10,7 +10,6 @@ members = [
10[patch.crates-io] 10[patch.crates-io]
11embassy-executor = { path = "../../../../../embassy-executor" } 11embassy-executor = { path = "../../../../../embassy-executor" }
12embassy-stm32 = { path = "../../../../../embassy-stm32" } 12embassy-stm32 = { path = "../../../../../embassy-stm32" }
13stm32-metapac = { path = "../../../../../stm32-metapac" }
14 13
15[profile.release] 14[profile.release]
16codegen-units = 1 15codegen-units = 1
diff --git a/docs/modules/ROOT/examples/layer-by-layer/blinky-pac/Cargo.toml b/docs/modules/ROOT/examples/layer-by-layer/blinky-pac/Cargo.toml
index a077f1828..f872b94cb 100644
--- a/docs/modules/ROOT/examples/layer-by-layer/blinky-pac/Cargo.toml
+++ b/docs/modules/ROOT/examples/layer-by-layer/blinky-pac/Cargo.toml
@@ -7,7 +7,7 @@ license = "MIT OR Apache-2.0"
7[dependencies] 7[dependencies]
8cortex-m = "0.7" 8cortex-m = "0.7"
9cortex-m-rt = "0.7" 9cortex-m-rt = "0.7"
10stm32-metapac = { version = "0.1.0", features = ["stm32l475vg", "memory-x"] } 10stm32-metapac = { version = "1", features = ["stm32l475vg", "memory-x"] }
11 11
12defmt = "0.3.0" 12defmt = "0.3.0"
13defmt-rtt = "0.3.0" 13defmt-rtt = "0.3.0"
diff --git a/embassy-stm32/Cargo.toml b/embassy-stm32/Cargo.toml
index 1f430c7c6..b66d724d5 100644
--- a/embassy-stm32/Cargo.toml
+++ b/embassy-stm32/Cargo.toml
@@ -60,7 +60,7 @@ sdio-host = "0.5.0"
60embedded-sdmmc = { git = "https://github.com/embassy-rs/embedded-sdmmc-rs", rev = "46d1b1c2ff13e31e282ec1e352421721694f126a", optional = true } 60embedded-sdmmc = { git = "https://github.com/embassy-rs/embedded-sdmmc-rs", rev = "46d1b1c2ff13e31e282ec1e352421721694f126a", optional = true }
61critical-section = "1.1" 61critical-section = "1.1"
62atomic-polyfill = "1.0.1" 62atomic-polyfill = "1.0.1"
63stm32-metapac = { version = "0.1.0", path = "../stm32-metapac", features = ["rt"] } 63stm32-metapac = { version = "1", features = ["rt"] }
64vcell = "0.1.3" 64vcell = "0.1.3"
65bxcan = "0.7.0" 65bxcan = "0.7.0"
66nb = "1.0.0" 66nb = "1.0.0"
@@ -72,7 +72,7 @@ embedded-io = { version = "0.4.0", features = ["async"], optional = true }
72[build-dependencies] 72[build-dependencies]
73proc-macro2 = "1.0.36" 73proc-macro2 = "1.0.36"
74quote = "1.0.15" 74quote = "1.0.15"
75stm32-metapac = { version = "0.1.0", path = "../stm32-metapac", default-features = false, features = ["metadata"]} 75stm32-metapac = { version = "1", default-features = false, features = ["metadata"]}
76 76
77[features] 77[features]
78defmt = ["dep:defmt", "bxcan/unstable-defmt", "embassy-sync/defmt", "embassy-executor/defmt", "embassy-embedded-hal/defmt", "embassy-hal-common/defmt", "embedded-io?/defmt", "embassy-usb-driver?/defmt", "embassy-net-driver/defmt"] 78defmt = ["dep:defmt", "bxcan/unstable-defmt", "embassy-sync/defmt", "embassy-executor/defmt", "embassy-embedded-hal/defmt", "embassy-hal-common/defmt", "embedded-io?/defmt", "embassy-usb-driver?/defmt", "embassy-net-driver/defmt"]
@@ -107,8 +107,7 @@ unstable-pac = []
107# Implement embedded-hal-async traits if `nightly` is set as well. 107# Implement embedded-hal-async traits if `nightly` is set as well.
108unstable-traits = ["embedded-hal-1", "dep:embedded-hal-nb"] 108unstable-traits = ["embedded-hal-1", "dep:embedded-hal-nb"]
109 109
110# BEGIN GENERATED FEATURES 110# Chip-selection features
111# Generated by stm32-gen-features. DO NOT EDIT.
112stm32c011d6 = [ "stm32-metapac/stm32c011d6" ] 111stm32c011d6 = [ "stm32-metapac/stm32c011d6" ]
113stm32c011f4 = [ "stm32-metapac/stm32c011f4" ] 112stm32c011f4 = [ "stm32-metapac/stm32c011f4" ]
114stm32c011f6 = [ "stm32-metapac/stm32c011f6" ] 113stm32c011f6 = [ "stm32-metapac/stm32c011f6" ]
@@ -1070,89 +1069,89 @@ stm32l083rz = [ "stm32-metapac/stm32l083rz" ]
1070stm32l083v8 = [ "stm32-metapac/stm32l083v8" ] 1069stm32l083v8 = [ "stm32-metapac/stm32l083v8" ]
1071stm32l083vb = [ "stm32-metapac/stm32l083vb" ] 1070stm32l083vb = [ "stm32-metapac/stm32l083vb" ]
1072stm32l083vz = [ "stm32-metapac/stm32l083vz" ] 1071stm32l083vz = [ "stm32-metapac/stm32l083vz" ]
1073stm32l100c6-a = [ "stm32-metapac/stm32l100c6-a" ]
1074stm32l100c6 = [ "stm32-metapac/stm32l100c6" ] 1072stm32l100c6 = [ "stm32-metapac/stm32l100c6" ]
1075stm32l100r8-a = [ "stm32-metapac/stm32l100r8-a" ] 1073stm32l100c6-a = [ "stm32-metapac/stm32l100c6-a" ]
1076stm32l100r8 = [ "stm32-metapac/stm32l100r8" ] 1074stm32l100r8 = [ "stm32-metapac/stm32l100r8" ]
1077stm32l100rb-a = [ "stm32-metapac/stm32l100rb-a" ] 1075stm32l100r8-a = [ "stm32-metapac/stm32l100r8-a" ]
1078stm32l100rb = [ "stm32-metapac/stm32l100rb" ] 1076stm32l100rb = [ "stm32-metapac/stm32l100rb" ]
1077stm32l100rb-a = [ "stm32-metapac/stm32l100rb-a" ]
1079stm32l100rc = [ "stm32-metapac/stm32l100rc" ] 1078stm32l100rc = [ "stm32-metapac/stm32l100rc" ]
1080stm32l151c6-a = [ "stm32-metapac/stm32l151c6-a" ]
1081stm32l151c6 = [ "stm32-metapac/stm32l151c6" ] 1079stm32l151c6 = [ "stm32-metapac/stm32l151c6" ]
1082stm32l151c8-a = [ "stm32-metapac/stm32l151c8-a" ] 1080stm32l151c6-a = [ "stm32-metapac/stm32l151c6-a" ]
1083stm32l151c8 = [ "stm32-metapac/stm32l151c8" ] 1081stm32l151c8 = [ "stm32-metapac/stm32l151c8" ]
1084stm32l151cb-a = [ "stm32-metapac/stm32l151cb-a" ] 1082stm32l151c8-a = [ "stm32-metapac/stm32l151c8-a" ]
1085stm32l151cb = [ "stm32-metapac/stm32l151cb" ] 1083stm32l151cb = [ "stm32-metapac/stm32l151cb" ]
1084stm32l151cb-a = [ "stm32-metapac/stm32l151cb-a" ]
1086stm32l151cc = [ "stm32-metapac/stm32l151cc" ] 1085stm32l151cc = [ "stm32-metapac/stm32l151cc" ]
1087stm32l151qc = [ "stm32-metapac/stm32l151qc" ] 1086stm32l151qc = [ "stm32-metapac/stm32l151qc" ]
1088stm32l151qd = [ "stm32-metapac/stm32l151qd" ] 1087stm32l151qd = [ "stm32-metapac/stm32l151qd" ]
1089stm32l151qe = [ "stm32-metapac/stm32l151qe" ] 1088stm32l151qe = [ "stm32-metapac/stm32l151qe" ]
1090stm32l151r6-a = [ "stm32-metapac/stm32l151r6-a" ]
1091stm32l151r6 = [ "stm32-metapac/stm32l151r6" ] 1089stm32l151r6 = [ "stm32-metapac/stm32l151r6" ]
1092stm32l151r8-a = [ "stm32-metapac/stm32l151r8-a" ] 1090stm32l151r6-a = [ "stm32-metapac/stm32l151r6-a" ]
1093stm32l151r8 = [ "stm32-metapac/stm32l151r8" ] 1091stm32l151r8 = [ "stm32-metapac/stm32l151r8" ]
1094stm32l151rb-a = [ "stm32-metapac/stm32l151rb-a" ] 1092stm32l151r8-a = [ "stm32-metapac/stm32l151r8-a" ]
1095stm32l151rb = [ "stm32-metapac/stm32l151rb" ] 1093stm32l151rb = [ "stm32-metapac/stm32l151rb" ]
1096stm32l151rc-a = [ "stm32-metapac/stm32l151rc-a" ] 1094stm32l151rb-a = [ "stm32-metapac/stm32l151rb-a" ]
1097stm32l151rc = [ "stm32-metapac/stm32l151rc" ] 1095stm32l151rc = [ "stm32-metapac/stm32l151rc" ]
1096stm32l151rc-a = [ "stm32-metapac/stm32l151rc-a" ]
1098stm32l151rd = [ "stm32-metapac/stm32l151rd" ] 1097stm32l151rd = [ "stm32-metapac/stm32l151rd" ]
1099stm32l151re = [ "stm32-metapac/stm32l151re" ] 1098stm32l151re = [ "stm32-metapac/stm32l151re" ]
1100stm32l151uc = [ "stm32-metapac/stm32l151uc" ] 1099stm32l151uc = [ "stm32-metapac/stm32l151uc" ]
1101stm32l151v8-a = [ "stm32-metapac/stm32l151v8-a" ]
1102stm32l151v8 = [ "stm32-metapac/stm32l151v8" ] 1100stm32l151v8 = [ "stm32-metapac/stm32l151v8" ]
1103stm32l151vb-a = [ "stm32-metapac/stm32l151vb-a" ] 1101stm32l151v8-a = [ "stm32-metapac/stm32l151v8-a" ]
1104stm32l151vb = [ "stm32-metapac/stm32l151vb" ] 1102stm32l151vb = [ "stm32-metapac/stm32l151vb" ]
1105stm32l151vc-a = [ "stm32-metapac/stm32l151vc-a" ] 1103stm32l151vb-a = [ "stm32-metapac/stm32l151vb-a" ]
1106stm32l151vc = [ "stm32-metapac/stm32l151vc" ] 1104stm32l151vc = [ "stm32-metapac/stm32l151vc" ]
1107stm32l151vd-x = [ "stm32-metapac/stm32l151vd-x" ] 1105stm32l151vc-a = [ "stm32-metapac/stm32l151vc-a" ]
1108stm32l151vd = [ "stm32-metapac/stm32l151vd" ] 1106stm32l151vd = [ "stm32-metapac/stm32l151vd" ]
1107stm32l151vd-x = [ "stm32-metapac/stm32l151vd-x" ]
1109stm32l151ve = [ "stm32-metapac/stm32l151ve" ] 1108stm32l151ve = [ "stm32-metapac/stm32l151ve" ]
1110stm32l151zc = [ "stm32-metapac/stm32l151zc" ] 1109stm32l151zc = [ "stm32-metapac/stm32l151zc" ]
1111stm32l151zd = [ "stm32-metapac/stm32l151zd" ] 1110stm32l151zd = [ "stm32-metapac/stm32l151zd" ]
1112stm32l151ze = [ "stm32-metapac/stm32l151ze" ] 1111stm32l151ze = [ "stm32-metapac/stm32l151ze" ]
1113stm32l152c6-a = [ "stm32-metapac/stm32l152c6-a" ]
1114stm32l152c6 = [ "stm32-metapac/stm32l152c6" ] 1112stm32l152c6 = [ "stm32-metapac/stm32l152c6" ]
1115stm32l152c8-a = [ "stm32-metapac/stm32l152c8-a" ] 1113stm32l152c6-a = [ "stm32-metapac/stm32l152c6-a" ]
1116stm32l152c8 = [ "stm32-metapac/stm32l152c8" ] 1114stm32l152c8 = [ "stm32-metapac/stm32l152c8" ]
1117stm32l152cb-a = [ "stm32-metapac/stm32l152cb-a" ] 1115stm32l152c8-a = [ "stm32-metapac/stm32l152c8-a" ]
1118stm32l152cb = [ "stm32-metapac/stm32l152cb" ] 1116stm32l152cb = [ "stm32-metapac/stm32l152cb" ]
1117stm32l152cb-a = [ "stm32-metapac/stm32l152cb-a" ]
1119stm32l152cc = [ "stm32-metapac/stm32l152cc" ] 1118stm32l152cc = [ "stm32-metapac/stm32l152cc" ]
1120stm32l152qc = [ "stm32-metapac/stm32l152qc" ] 1119stm32l152qc = [ "stm32-metapac/stm32l152qc" ]
1121stm32l152qd = [ "stm32-metapac/stm32l152qd" ] 1120stm32l152qd = [ "stm32-metapac/stm32l152qd" ]
1122stm32l152qe = [ "stm32-metapac/stm32l152qe" ] 1121stm32l152qe = [ "stm32-metapac/stm32l152qe" ]
1123stm32l152r6-a = [ "stm32-metapac/stm32l152r6-a" ]
1124stm32l152r6 = [ "stm32-metapac/stm32l152r6" ] 1122stm32l152r6 = [ "stm32-metapac/stm32l152r6" ]
1125stm32l152r8-a = [ "stm32-metapac/stm32l152r8-a" ] 1123stm32l152r6-a = [ "stm32-metapac/stm32l152r6-a" ]
1126stm32l152r8 = [ "stm32-metapac/stm32l152r8" ] 1124stm32l152r8 = [ "stm32-metapac/stm32l152r8" ]
1127stm32l152rb-a = [ "stm32-metapac/stm32l152rb-a" ] 1125stm32l152r8-a = [ "stm32-metapac/stm32l152r8-a" ]
1128stm32l152rb = [ "stm32-metapac/stm32l152rb" ] 1126stm32l152rb = [ "stm32-metapac/stm32l152rb" ]
1129stm32l152rc-a = [ "stm32-metapac/stm32l152rc-a" ] 1127stm32l152rb-a = [ "stm32-metapac/stm32l152rb-a" ]
1130stm32l152rc = [ "stm32-metapac/stm32l152rc" ] 1128stm32l152rc = [ "stm32-metapac/stm32l152rc" ]
1129stm32l152rc-a = [ "stm32-metapac/stm32l152rc-a" ]
1131stm32l152rd = [ "stm32-metapac/stm32l152rd" ] 1130stm32l152rd = [ "stm32-metapac/stm32l152rd" ]
1132stm32l152re = [ "stm32-metapac/stm32l152re" ] 1131stm32l152re = [ "stm32-metapac/stm32l152re" ]
1133stm32l152uc = [ "stm32-metapac/stm32l152uc" ] 1132stm32l152uc = [ "stm32-metapac/stm32l152uc" ]
1134stm32l152v8-a = [ "stm32-metapac/stm32l152v8-a" ]
1135stm32l152v8 = [ "stm32-metapac/stm32l152v8" ] 1133stm32l152v8 = [ "stm32-metapac/stm32l152v8" ]
1136stm32l152vb-a = [ "stm32-metapac/stm32l152vb-a" ] 1134stm32l152v8-a = [ "stm32-metapac/stm32l152v8-a" ]
1137stm32l152vb = [ "stm32-metapac/stm32l152vb" ] 1135stm32l152vb = [ "stm32-metapac/stm32l152vb" ]
1138stm32l152vc-a = [ "stm32-metapac/stm32l152vc-a" ] 1136stm32l152vb-a = [ "stm32-metapac/stm32l152vb-a" ]
1139stm32l152vc = [ "stm32-metapac/stm32l152vc" ] 1137stm32l152vc = [ "stm32-metapac/stm32l152vc" ]
1140stm32l152vd-x = [ "stm32-metapac/stm32l152vd-x" ] 1138stm32l152vc-a = [ "stm32-metapac/stm32l152vc-a" ]
1141stm32l152vd = [ "stm32-metapac/stm32l152vd" ] 1139stm32l152vd = [ "stm32-metapac/stm32l152vd" ]
1140stm32l152vd-x = [ "stm32-metapac/stm32l152vd-x" ]
1142stm32l152ve = [ "stm32-metapac/stm32l152ve" ] 1141stm32l152ve = [ "stm32-metapac/stm32l152ve" ]
1143stm32l152zc = [ "stm32-metapac/stm32l152zc" ] 1142stm32l152zc = [ "stm32-metapac/stm32l152zc" ]
1144stm32l152zd = [ "stm32-metapac/stm32l152zd" ] 1143stm32l152zd = [ "stm32-metapac/stm32l152zd" ]
1145stm32l152ze = [ "stm32-metapac/stm32l152ze" ] 1144stm32l152ze = [ "stm32-metapac/stm32l152ze" ]
1146stm32l162qc = [ "stm32-metapac/stm32l162qc" ] 1145stm32l162qc = [ "stm32-metapac/stm32l162qc" ]
1147stm32l162qd = [ "stm32-metapac/stm32l162qd" ] 1146stm32l162qd = [ "stm32-metapac/stm32l162qd" ]
1148stm32l162rc-a = [ "stm32-metapac/stm32l162rc-a" ]
1149stm32l162rc = [ "stm32-metapac/stm32l162rc" ] 1147stm32l162rc = [ "stm32-metapac/stm32l162rc" ]
1148stm32l162rc-a = [ "stm32-metapac/stm32l162rc-a" ]
1150stm32l162rd = [ "stm32-metapac/stm32l162rd" ] 1149stm32l162rd = [ "stm32-metapac/stm32l162rd" ]
1151stm32l162re = [ "stm32-metapac/stm32l162re" ] 1150stm32l162re = [ "stm32-metapac/stm32l162re" ]
1152stm32l162vc-a = [ "stm32-metapac/stm32l162vc-a" ]
1153stm32l162vc = [ "stm32-metapac/stm32l162vc" ] 1151stm32l162vc = [ "stm32-metapac/stm32l162vc" ]
1154stm32l162vd-x = [ "stm32-metapac/stm32l162vd-x" ] 1152stm32l162vc-a = [ "stm32-metapac/stm32l162vc-a" ]
1155stm32l162vd = [ "stm32-metapac/stm32l162vd" ] 1153stm32l162vd = [ "stm32-metapac/stm32l162vd" ]
1154stm32l162vd-x = [ "stm32-metapac/stm32l162vd-x" ]
1156stm32l162ve = [ "stm32-metapac/stm32l162ve" ] 1155stm32l162ve = [ "stm32-metapac/stm32l162ve" ]
1157stm32l162zc = [ "stm32-metapac/stm32l162zc" ] 1156stm32l162zc = [ "stm32-metapac/stm32l162zc" ]
1158stm32l162zd = [ "stm32-metapac/stm32l162zd" ] 1157stm32l162zd = [ "stm32-metapac/stm32l162zd" ]
@@ -1370,4 +1369,3 @@ stm32wle5cc = [ "stm32-metapac/stm32wle5cc" ]
1370stm32wle5j8 = [ "stm32-metapac/stm32wle5j8" ] 1369stm32wle5j8 = [ "stm32-metapac/stm32wle5j8" ]
1371stm32wle5jb = [ "stm32-metapac/stm32wle5jb" ] 1370stm32wle5jb = [ "stm32-metapac/stm32wle5jb" ]
1372stm32wle5jc = [ "stm32-metapac/stm32wle5jc" ] 1371stm32wle5jc = [ "stm32-metapac/stm32wle5jc" ]
1373# END GENERATED FEATURES
diff --git a/stm32-data b/stm32-data
deleted file mode 160000
Subproject 66252982939014e94fc4a1b7423c30c3d108ae0
diff --git a/stm32-gen-features/.cargo/config.toml b/stm32-gen-features/.cargo/config.toml
deleted file mode 100644
index 17d81c14d..000000000
--- a/stm32-gen-features/.cargo/config.toml
+++ /dev/null
@@ -1,3 +0,0 @@
1[profile.dev]
2opt-level = 3
3lto = false
diff --git a/stm32-gen-features/.gitignore b/stm32-gen-features/.gitignore
deleted file mode 100644
index ea8c4bf7f..000000000
--- a/stm32-gen-features/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
1/target
diff --git a/stm32-gen-features/Cargo.toml b/stm32-gen-features/Cargo.toml
deleted file mode 100644
index f4aa08ebe..000000000
--- a/stm32-gen-features/Cargo.toml
+++ /dev/null
@@ -1,11 +0,0 @@
1[package]
2name = "gen_features"
3version = "0.1.0"
4edition = "2021"
5license = "MIT OR Apache-2.0"
6
7# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
8
9[dependencies]
10glob = "0.3.0"
11yaml-rust = "0.4.5"
diff --git a/stm32-gen-features/src/lib.rs b/stm32-gen-features/src/lib.rs
deleted file mode 100644
index 7aaad9da3..000000000
--- a/stm32-gen-features/src/lib.rs
+++ /dev/null
@@ -1,169 +0,0 @@
1//! FIXME discuss about which errors to print and when to panic
2
3use std::path::Path;
4
5const SEPARATOR_START: &str = "# BEGIN GENERATED FEATURES\n";
6const SEPARATOR_END: &str = "# END GENERATED FEATURES\n";
7const HELP: &str = "# Generated by stm32-gen-features. DO NOT EDIT.\n";
8
9/// Get the list of all the chips and their supported cores
10///
11/// Print errors to `stderr` when something is returned by the glob but is not in the returned
12/// [`Vec`]
13///
14/// This function is slow because all the yaml files are parsed.
15pub fn chip_names_and_cores() -> Vec<(String, Vec<String>)> {
16 glob::glob("../stm32-data/data/chips/*.json")
17 .unwrap()
18 .filter_map(|entry| entry.map_err(|e| eprintln!("{:?}", e)).ok())
19 .filter_map(|entry| {
20 if let Some(name) = entry.file_stem().and_then(|stem| stem.to_str()) {
21 Some((name.to_lowercase(), chip_cores(&entry)))
22 } else {
23 eprintln!("{:?} is not a regular file", entry);
24 None
25 }
26 })
27 .collect()
28}
29
30/// Get the list of the cores of a chip by its associated file
31///
32/// # Panic
33/// Panics if the file does not exist or if it contains yaml syntax errors.
34/// Panics if "cores" is not an array.
35fn chip_cores(path: &Path) -> Vec<String> {
36 let file_contents = std::fs::read_to_string(path).unwrap();
37 let doc = &yaml_rust::YamlLoader::load_from_str(&file_contents).unwrap()[0];
38 doc["cores"]
39 .as_vec()
40 .unwrap_or_else(|| panic!("{:?}:[cores] is not an array", path))
41 .iter()
42 .enumerate()
43 .map(|(i, core)| {
44 core["name"]
45 .as_str()
46 .unwrap_or_else(|| panic!("{:?}:[cores][{}][name] is not a string", path, i))
47 .to_owned()
48 })
49 .collect()
50}
51
52/// Generate data needed in `../embassy-stm32/Cargo.toml`
53///
54/// Print errors to `stderr` when something is returned by the glob but is not in the returned
55/// [`Vec`]
56///
57/// # Panic
58/// Panics if a file contains yaml syntax errors or if a value does not have a consistent type
59pub fn embassy_stm32_needed_data(names_and_cores: &[(String, Vec<String>)]) -> String {
60 let mut result = String::new();
61 for (chip_name, cores) in names_and_cores {
62 if cores.len() > 1 {
63 for core_name in cores.iter() {
64 result += &format!(
65 "{chip}-{core} = [ \"stm32-metapac/{chip}-{core}\" ]\n",
66 chip = chip_name,
67 core = core_name
68 );
69 }
70 } else {
71 result += &format!("{chip} = [ \"stm32-metapac/{chip}\" ]\n", chip = chip_name);
72 }
73 }
74 result
75}
76
77/// Generate data needed in `../stm32-metapac/Cargo.toml`
78///
79/// Print errors to `stderr` when something is returned by the glob but is not in the returned
80/// [`Vec`]
81///
82/// # Panic
83/// Panics if a file contains yaml syntax errors or if a value does not have a consistent type
84pub fn stm32_metapac_needed_data(names_and_cores: &[(String, Vec<String>)]) -> String {
85 let mut result = String::new();
86 for (chip_name, cores) in names_and_cores {
87 if cores.len() > 1 {
88 for core_name in cores {
89 result += &format!("{}-{} = []\n", chip_name, core_name);
90 }
91 } else {
92 result += &format!("{} = []\n", chip_name);
93 }
94 }
95 result
96}
97
98/// Get contents before and after generated contents
99///
100/// # Panic
101/// Panics when a separator cound not be not found
102fn split_cargo_toml_contents(contents: &str) -> (&str, &str) {
103 let (before, remainder) = contents
104 .split_once(SEPARATOR_START)
105 .unwrap_or_else(|| panic!("missing \"{}\" tag", SEPARATOR_START));
106 let (_, after) = remainder
107 .split_once(SEPARATOR_END)
108 .unwrap_or_else(|| panic!("missing \"{}\" tag", SEPARATOR_END));
109
110 (before, after)
111}
112
113/// Generates new contents for Cargo.toml
114///
115/// # Panic
116/// Panics when a separator cound not be not found
117pub fn generate_cargo_toml_file(previous_text: &str, new_contents: &str) -> String {
118 let (before, after) = split_cargo_toml_contents(previous_text);
119 before.to_owned() + SEPARATOR_START + HELP + new_contents + SEPARATOR_END + after
120}
121
122#[cfg(test)]
123mod tests {
124 use super::*;
125
126 #[test]
127 #[ignore]
128 fn stm32f407vg_yaml_file_exists() {
129 assert!(chip_names_and_cores()
130 .as_slice()
131 .into_iter()
132 .any(|(name, _)| { name == "stm32f407vg" }))
133 }
134
135 #[test]
136 fn keeps_text_around_separators() {
137 let initial = "\
138before
139# BEGIN GENERATED FEATURES
140# END GENERATED FEATURES
141after
142";
143
144 let expected = "\
145before
146# BEGIN GENERATED FEATURES
147# Generated by stm32-gen-features. DO NOT EDIT.
148a = [\"b\"]
149# END GENERATED FEATURES
150after
151";
152
153 let new_contents = String::from("a = [\"b\"]\n");
154 assert_eq!(generate_cargo_toml_file(initial, &new_contents), expected);
155 }
156
157 #[test]
158 #[should_panic]
159 fn does_not_generate_if_separators_are_missing() {
160 let initial = "\
161before
162# END GENERATED FEATURES
163after
164";
165
166 let new_contents = String::from("a = [\"b\"]\n");
167 generate_cargo_toml_file(initial, &new_contents);
168 }
169}
diff --git a/stm32-gen-features/src/main.rs b/stm32-gen-features/src/main.rs
deleted file mode 100644
index f40925169..000000000
--- a/stm32-gen-features/src/main.rs
+++ /dev/null
@@ -1,25 +0,0 @@
1use gen_features::{
2 chip_names_and_cores, embassy_stm32_needed_data, generate_cargo_toml_file, stm32_metapac_needed_data,
3};
4
5fn main() {
6 let names_and_cores = chip_names_and_cores();
7 update_cargo_file(
8 "../embassy-stm32/Cargo.toml",
9 &embassy_stm32_needed_data(&names_and_cores),
10 );
11 update_cargo_file(
12 "../stm32-metapac/Cargo.toml",
13 &stm32_metapac_needed_data(&names_and_cores),
14 );
15}
16
17/// Update a Cargo.toml file
18///
19/// Update the content between "# BEGIN GENERATED FEATURES" and "# END GENERATED FEATURES"
20/// with the given content
21fn update_cargo_file(path: &str, new_contents: &str) {
22 let previous_text = std::fs::read_to_string(path).unwrap();
23 let new_text = generate_cargo_toml_file(&previous_text, new_contents);
24 std::fs::write(path, new_text).unwrap();
25}
diff --git a/stm32-metapac-gen/Cargo.toml b/stm32-metapac-gen/Cargo.toml
deleted file mode 100644
index 6d136ba6b..000000000
--- a/stm32-metapac-gen/Cargo.toml
+++ /dev/null
@@ -1,15 +0,0 @@
1[package]
2name = "stm32-metapac-gen"
3version = "0.1.0"
4edition = "2021"
5license = "MIT OR Apache-2.0"
6
7
8[dependencies]
9regex = "1.5.4"
10chiptool = { git = "https://github.com/embassy-rs/chiptool", rev = "1d9e0a39a6acc291e50cabc4ed617a87f06d5e89" }
11serde = { version = "1.0.130", features = [ "derive" ] }
12serde_json = "1.0.87"
13serde_yaml = "0.8.21"
14proc-macro2 = "1.0.29"
15
diff --git a/stm32-metapac-gen/src/data.rs b/stm32-metapac-gen/src/data.rs
deleted file mode 100644
index 17eccfe9a..000000000
--- a/stm32-metapac-gen/src/data.rs
+++ /dev/null
@@ -1,124 +0,0 @@
1use serde::Deserialize;
2
3#[derive(Debug, Eq, PartialEq, Clone, Deserialize)]
4pub struct Chip {
5 pub name: String,
6 pub family: String,
7 pub line: String,
8 pub cores: Vec<Core>,
9 pub memory: Vec<MemoryRegion>,
10 pub packages: Vec<Package>,
11}
12
13#[derive(Debug, Eq, PartialEq, Clone, Deserialize)]
14pub struct MemoryRegion {
15 pub name: String,
16 pub kind: MemoryRegionKind,
17 pub address: u32,
18 pub size: u32,
19 pub settings: Option<FlashSettings>,
20}
21
22#[derive(Debug, Eq, PartialEq, Clone, Deserialize)]
23pub struct FlashSettings {
24 pub erase_size: u32,
25 pub write_size: u32,
26 pub erase_value: u8,
27}
28
29#[derive(Debug, Eq, PartialEq, Clone, Deserialize)]
30pub enum MemoryRegionKind {
31 #[serde(rename = "flash")]
32 Flash,
33 #[serde(rename = "ram")]
34 Ram,
35}
36
37#[derive(Debug, Eq, PartialEq, Clone, Deserialize)]
38pub struct Core {
39 pub name: String,
40 pub peripherals: Vec<Peripheral>,
41 pub interrupts: Vec<Interrupt>,
42 pub dma_channels: Vec<DmaChannel>,
43}
44
45#[derive(Debug, Eq, PartialEq, Clone, Deserialize)]
46pub struct Interrupt {
47 pub name: String,
48 pub number: u32,
49}
50
51#[derive(Debug, Eq, PartialEq, Clone, Deserialize)]
52pub struct Package {
53 pub name: String,
54 pub package: String,
55}
56
57#[derive(Debug, Eq, PartialEq, Clone, Deserialize)]
58pub struct Peripheral {
59 pub name: String,
60 pub address: u64,
61 #[serde(default)]
62 pub registers: Option<PeripheralRegisters>,
63 #[serde(default)]
64 pub rcc: Option<PeripheralRcc>,
65 #[serde(default)]
66 pub pins: Vec<PeripheralPin>,
67 #[serde(default)]
68 pub dma_channels: Vec<PeripheralDmaChannel>,
69 #[serde(default)]
70 pub interrupts: Vec<PeripheralInterrupt>,
71}
72
73#[derive(Debug, Eq, PartialEq, Clone, Deserialize)]
74pub struct PeripheralInterrupt {
75 pub signal: String,
76 pub interrupt: String,
77}
78
79#[derive(Debug, Eq, PartialEq, Clone, Deserialize)]
80pub struct PeripheralRcc {
81 pub clock: String,
82 #[serde(default)]
83 pub enable: Option<PeripheralRccRegister>,
84 #[serde(default)]
85 pub reset: Option<PeripheralRccRegister>,
86}
87
88#[derive(Debug, Eq, PartialEq, Clone, Deserialize)]
89pub struct PeripheralRccRegister {
90 pub register: String,
91 pub field: String,
92}
93
94#[derive(Debug, Eq, PartialEq, Clone, Deserialize)]
95pub struct PeripheralPin {
96 pub pin: String,
97 pub signal: String,
98 pub af: Option<u8>,
99}
100
101#[derive(Debug, Eq, PartialEq, Clone, Deserialize)]
102pub struct DmaChannel {
103 pub name: String,
104 pub dma: String,
105 pub channel: u32,
106 pub dmamux: Option<String>,
107 pub dmamux_channel: Option<u32>,
108}
109
110#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Hash)]
111pub struct PeripheralDmaChannel {
112 pub signal: String,
113 pub channel: Option<String>,
114 pub dmamux: Option<String>,
115 pub dma: Option<String>,
116 pub request: Option<u32>,
117}
118
119#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Hash)]
120pub struct PeripheralRegisters {
121 pub kind: String,
122 pub version: String,
123 pub block: String,
124}
diff --git a/stm32-metapac-gen/src/lib.rs b/stm32-metapac-gen/src/lib.rs
deleted file mode 100644
index 64045986e..000000000
--- a/stm32-metapac-gen/src/lib.rs
+++ /dev/null
@@ -1,380 +0,0 @@
1use std::collections::{BTreeMap, HashMap, HashSet};
2use std::fmt::{Debug, Write as _};
3use std::fs;
4use std::fs::File;
5use std::io::Write;
6use std::path::{Path, PathBuf};
7use std::str::FromStr;
8
9use chiptool::generate::CommonModule;
10use chiptool::{generate, ir, transform};
11use proc_macro2::TokenStream;
12use regex::Regex;
13
14mod data;
15use data::*;
16
17#[derive(Debug, Eq, PartialEq, Clone)]
18struct Metadata<'a> {
19 name: &'a str,
20 family: &'a str,
21 line: &'a str,
22 memory: &'a [MemoryRegion],
23 peripherals: &'a [Peripheral],
24 interrupts: &'a [Interrupt],
25 dma_channels: &'a [DmaChannel],
26}
27
28pub struct Options {
29 pub chips: Vec<String>,
30 pub out_dir: PathBuf,
31 pub data_dir: PathBuf,
32}
33
34pub struct Gen {
35 opts: Options,
36 all_peripheral_versions: HashSet<(String, String)>,
37 metadata_dedup: HashMap<String, String>,
38}
39
40impl Gen {
41 pub fn new(opts: Options) -> Self {
42 Self {
43 opts,
44 all_peripheral_versions: HashSet::new(),
45 metadata_dedup: HashMap::new(),
46 }
47 }
48
49 fn gen_chip(&mut self, chip_core_name: &str, chip: &Chip, core: &Core, core_index: usize) {
50 let mut ir = ir::IR::new();
51
52 let mut dev = ir::Device {
53 interrupts: Vec::new(),
54 peripherals: Vec::new(),
55 };
56
57 let mut peripheral_versions: BTreeMap<String, String> = BTreeMap::new();
58
59 let gpio_base = core.peripherals.iter().find(|p| p.name == "GPIOA").unwrap().address as u32;
60 let gpio_stride = 0x400;
61
62 for p in &core.peripherals {
63 let mut ir_peri = ir::Peripheral {
64 name: p.name.clone(),
65 array: None,
66 base_address: p.address,
67 block: None,
68 description: None,
69 interrupts: HashMap::new(),
70 };
71
72 if let Some(bi) = &p.registers {
73 if let Some(old_version) = peripheral_versions.insert(bi.kind.clone(), bi.version.clone()) {
74 if old_version != bi.version {
75 panic!(
76 "Peripheral {} has multiple versions: {} and {}",
77 bi.kind, old_version, bi.version
78 );
79 }
80 }
81 ir_peri.block = Some(format!("{}::{}", bi.kind, bi.block));
82
83 if bi.kind == "gpio" {
84 assert_eq!(0, (p.address as u32 - gpio_base) % gpio_stride);
85 }
86 }
87
88 dev.peripherals.push(ir_peri);
89 }
90
91 for irq in &core.interrupts {
92 dev.interrupts.push(ir::Interrupt {
93 name: irq.name.clone(),
94 description: None,
95 value: irq.number,
96 });
97 }
98
99 ir.devices.insert("".to_string(), dev);
100
101 let mut extra = format!(
102 "pub fn GPIO(n: usize) -> gpio::Gpio {{
103 gpio::Gpio(({} + {}*n) as _)
104 }}",
105 gpio_base, gpio_stride,
106 );
107
108 for (module, version) in &peripheral_versions {
109 self.all_peripheral_versions.insert((module.clone(), version.clone()));
110 write!(
111 &mut extra,
112 "#[path=\"../../peripherals/{}_{}.rs\"] pub mod {};\n",
113 module, version, module
114 )
115 .unwrap();
116 }
117 write!(&mut extra, "pub const CORE_INDEX: usize = {};\n", core_index).unwrap();
118
119 let flash = chip.memory.iter().find(|r| r.name == "BANK_1").unwrap();
120 let settings = flash.settings.as_ref().unwrap();
121 write!(&mut extra, "pub const FLASH_BASE: usize = {};\n", flash.address).unwrap();
122 write!(&mut extra, "pub const FLASH_SIZE: usize = {};\n", flash.size).unwrap();
123 write!(&mut extra, "pub const ERASE_SIZE: usize = {};\n", settings.erase_size).unwrap();
124 write!(&mut extra, "pub const WRITE_SIZE: usize = {};\n", settings.write_size).unwrap();
125 write!(&mut extra, "pub const ERASE_VALUE: u8 = {};\n", settings.erase_value).unwrap();
126
127 // Cleanups!
128 transform::sort::Sort {}.run(&mut ir).unwrap();
129 transform::Sanitize {}.run(&mut ir).unwrap();
130
131 // ==============================
132 // Setup chip dir
133
134 let chip_dir = self
135 .opts
136 .out_dir
137 .join("src/chips")
138 .join(chip_core_name.to_ascii_lowercase());
139 fs::create_dir_all(&chip_dir).unwrap();
140
141 // ==============================
142 // generate pac.rs
143
144 let data = generate::render(&ir, &gen_opts()).unwrap().to_string();
145 let data = data.replace("] ", "]\n");
146
147 // Remove inner attributes like #![no_std]
148 let data = Regex::new("# *! *\\[.*\\]").unwrap().replace_all(&data, "");
149
150 let mut file = File::create(chip_dir.join("pac.rs")).unwrap();
151 file.write_all(data.as_bytes()).unwrap();
152 file.write_all(extra.as_bytes()).unwrap();
153
154 let mut device_x = String::new();
155
156 for irq in &core.interrupts {
157 write!(&mut device_x, "PROVIDE({} = DefaultHandler);\n", irq.name).unwrap();
158 }
159
160 // ==============================
161 // generate metadata.rs
162
163 // (peripherals, interrupts, dma_channels) are often equal across multiple chips.
164 // To reduce bloat, deduplicate them.
165 let mut data = String::new();
166 write!(
167 &mut data,
168 "
169 const PERIPHERALS: &'static [Peripheral] = {};
170 const INTERRUPTS: &'static [Interrupt] = {};
171 const DMA_CHANNELS: &'static [DmaChannel] = {};
172 ",
173 stringify(&core.peripherals),
174 stringify(&core.interrupts),
175 stringify(&core.dma_channels),
176 )
177 .unwrap();
178
179 let out_dir = self.opts.out_dir.clone();
180 let n = self.metadata_dedup.len();
181 let deduped_file = self.metadata_dedup.entry(data.clone()).or_insert_with(|| {
182 let file = format!("metadata_{:04}.rs", n);
183 let path = out_dir.join("src/chips").join(&file);
184 fs::write(path, data).unwrap();
185
186 file
187 });
188
189 let data = format!(
190 "include!(\"../{}\");
191 pub const METADATA: Metadata = Metadata {{
192 name: {:?},
193 family: {:?},
194 line: {:?},
195 memory: {},
196 peripherals: PERIPHERALS,
197 interrupts: INTERRUPTS,
198 dma_channels: DMA_CHANNELS,
199 }};",
200 deduped_file,
201 &chip.name,
202 &chip.family,
203 &chip.line,
204 stringify(&chip.memory),
205 );
206
207 let mut file = File::create(chip_dir.join("metadata.rs")).unwrap();
208 file.write_all(data.as_bytes()).unwrap();
209
210 // ==============================
211 // generate device.x
212
213 File::create(chip_dir.join("device.x"))
214 .unwrap()
215 .write_all(device_x.as_bytes())
216 .unwrap();
217
218 // ==============================
219 // generate default memory.x
220 gen_memory_x(&chip_dir, &chip);
221 }
222
223 fn load_chip(&mut self, name: &str) -> Chip {
224 let chip_path = self.opts.data_dir.join("chips").join(&format!("{}.json", name));
225 let chip = fs::read(chip_path).expect(&format!("Could not load chip {}", name));
226 serde_json::from_slice(&chip).unwrap()
227 }
228
229 pub fn gen(&mut self) {
230 fs::create_dir_all(self.opts.out_dir.join("src/peripherals")).unwrap();
231 fs::create_dir_all(self.opts.out_dir.join("src/chips")).unwrap();
232
233 let mut chip_core_names: Vec<String> = Vec::new();
234
235 for chip_name in &self.opts.chips.clone() {
236 println!("Generating {}...", chip_name);
237
238 let mut chip = self.load_chip(chip_name);
239
240 // Cleanup
241 for core in &mut chip.cores {
242 for irq in &mut core.interrupts {
243 irq.name = irq.name.to_ascii_uppercase();
244 }
245 for p in &mut core.peripherals {
246 for irq in &mut p.interrupts {
247 irq.interrupt = irq.interrupt.to_ascii_uppercase();
248 }
249 }
250 }
251
252 // Generate
253 for (core_index, core) in chip.cores.iter().enumerate() {
254 let chip_core_name = match chip.cores.len() {
255 1 => chip_name.clone(),
256 _ => format!("{}-{}", chip_name, core.name),
257 };
258
259 chip_core_names.push(chip_core_name.clone());
260 self.gen_chip(&chip_core_name, &chip, core, core_index)
261 }
262 }
263
264 for (module, version) in &self.all_peripheral_versions {
265 println!("loading {} {}", module, version);
266
267 let regs_path = Path::new(&self.opts.data_dir)
268 .join("registers")
269 .join(&format!("{}_{}.yaml", module, version));
270
271 let mut ir: ir::IR = serde_yaml::from_reader(File::open(regs_path).unwrap()).unwrap();
272
273 transform::expand_extends::ExpandExtends {}.run(&mut ir).unwrap();
274
275 transform::map_names(&mut ir, |k, s| match k {
276 transform::NameKind::Block => *s = format!("{}", s),
277 transform::NameKind::Fieldset => *s = format!("regs::{}", s),
278 transform::NameKind::Enum => *s = format!("vals::{}", s),
279 _ => {}
280 });
281
282 transform::sort::Sort {}.run(&mut ir).unwrap();
283 transform::Sanitize {}.run(&mut ir).unwrap();
284
285 let items = generate::render(&ir, &gen_opts()).unwrap();
286 let mut file = File::create(
287 self.opts
288 .out_dir
289 .join("src/peripherals")
290 .join(format!("{}_{}.rs", module, version)),
291 )
292 .unwrap();
293 let data = items.to_string().replace("] ", "]\n");
294
295 // Remove inner attributes like #![no_std]
296 let re = Regex::new("# *! *\\[.*\\]").unwrap();
297 let data = re.replace_all(&data, "");
298 file.write_all(data.as_bytes()).unwrap();
299 }
300
301 // Generate Cargo.toml
302 const BUILDDEP_BEGIN: &[u8] = b"# BEGIN BUILD DEPENDENCIES";
303 const BUILDDEP_END: &[u8] = b"# END BUILD DEPENDENCIES";
304
305 let mut contents = include_bytes!("../../stm32-metapac/Cargo.toml").to_vec();
306 let begin = bytes_find(&contents, BUILDDEP_BEGIN).unwrap();
307 let end = bytes_find(&contents, BUILDDEP_END).unwrap() + BUILDDEP_END.len();
308 contents.drain(begin..end);
309 fs::write(self.opts.out_dir.join("Cargo.toml"), contents).unwrap();
310
311 // copy misc files
312 fs::write(
313 self.opts.out_dir.join("build.rs"),
314 include_bytes!("../../stm32-metapac/build_pregenerated.rs"),
315 )
316 .unwrap();
317 fs::write(
318 self.opts.out_dir.join("src/lib.rs"),
319 include_bytes!("../../stm32-metapac/src/lib.rs"),
320 )
321 .unwrap();
322 fs::write(
323 self.opts.out_dir.join("src/common.rs"),
324 chiptool::generate::COMMON_MODULE,
325 )
326 .unwrap();
327 fs::write(
328 self.opts.out_dir.join("src/metadata.rs"),
329 include_bytes!("../../stm32-metapac/src/metadata.rs"),
330 )
331 .unwrap();
332 }
333}
334
335fn bytes_find(haystack: &[u8], needle: &[u8]) -> Option<usize> {
336 haystack.windows(needle.len()).position(|window| window == needle)
337}
338
339fn stringify<T: Debug>(metadata: T) -> String {
340 let mut metadata = format!("{:?}", metadata);
341 if metadata.starts_with('[') {
342 metadata = format!("&{}", metadata);
343 }
344 metadata = metadata.replace(": [", ": &[");
345 metadata = metadata.replace("kind: Ram", "kind: MemoryRegionKind::Ram");
346 metadata = metadata.replace("kind: Flash", "kind: MemoryRegionKind::Flash");
347 metadata
348}
349
350fn gen_opts() -> generate::Options {
351 generate::Options {
352 common_module: CommonModule::External(TokenStream::from_str("crate::common").unwrap()),
353 }
354}
355
356fn gen_memory_x(out_dir: &PathBuf, chip: &Chip) {
357 let mut memory_x = String::new();
358
359 let flash = chip.memory.iter().find(|r| r.name == "BANK_1").unwrap();
360 let ram = chip.memory.iter().find(|r| r.name == "SRAM").unwrap();
361
362 write!(memory_x, "MEMORY\n{{\n").unwrap();
363 write!(
364 memory_x,
365 " FLASH : ORIGIN = 0x{:x}, LENGTH = {}\n",
366 flash.address, flash.size,
367 )
368 .unwrap();
369 write!(
370 memory_x,
371 " RAM : ORIGIN = 0x{:x}, LENGTH = {}\n",
372 ram.address, ram.size,
373 )
374 .unwrap();
375 write!(memory_x, "}}").unwrap();
376
377 fs::create_dir_all(out_dir.join("memory_x")).unwrap();
378 let mut file = File::create(out_dir.join("memory_x").join("memory.x")).unwrap();
379 file.write_all(memory_x.as_bytes()).unwrap();
380}
diff --git a/stm32-metapac-gen/src/main.rs b/stm32-metapac-gen/src/main.rs
deleted file mode 100644
index 40a73adf8..000000000
--- a/stm32-metapac-gen/src/main.rs
+++ /dev/null
@@ -1,36 +0,0 @@
1use std::env::args;
2use std::path::PathBuf;
3
4use stm32_metapac_gen::*;
5
6fn main() {
7 let out_dir = PathBuf::from("out");
8 let data_dir = PathBuf::from("../stm32-data/data");
9
10 let args: Vec<String> = args().collect();
11
12 let mut chips = match &args[..] {
13 [_, chip] => {
14 vec![chip.clone()]
15 }
16 [_] => {
17 std::fs::read_dir(data_dir.join("chips"))
18 .unwrap()
19 .filter_map(|res| res.unwrap().file_name().to_str().map(|s| s.to_string()))
20 .filter(|s| s.ends_with(".json"))
21 .filter(|s| !s.starts_with("STM32GBK")) // cursed weird STM32G4
22 .map(|s| s.strip_suffix(".json").unwrap().to_string())
23 .collect()
24 }
25 _ => panic!("usage: stm32-metapac-gen [chip?]"),
26 };
27
28 chips.sort();
29
30 let opts = Options {
31 out_dir,
32 data_dir,
33 chips,
34 };
35 Gen::new(opts).gen();
36}
diff --git a/stm32-metapac/Cargo.toml b/stm32-metapac/Cargo.toml
deleted file mode 100644
index 2605cf3d3..000000000
--- a/stm32-metapac/Cargo.toml
+++ /dev/null
@@ -1,1332 +0,0 @@
1[package]
2name = "stm32-metapac"
3version = "0.1.0"
4edition = "2021"
5license = "MIT OR Apache-2.0"
6repository = "https://github.com/embassy-rs/embassy"
7description = "Peripheral Access Crate (PAC) for all STM32 chips, including metadata."
8
9# `cargo publish` is unable to figure out which .rs files are needed due to the include! magic.
10include = [
11 "**/*.rs",
12 "**/*.x",
13 "Cargo.toml",
14]
15
16[package.metadata.docs.rs]
17features = ["stm32h755zi-cm7", "pac", "metadata"]
18default-target = "thumbv7em-none-eabihf"
19targets = []
20
21[package.metadata.embassy_docs]
22features = ["pac", "metadata"]
23flavors = [
24 { regex_feature = "stm32f0.*", target = "thumbv6m-none-eabi" },
25 { regex_feature = "stm32f1.*", target = "thumbv7m-none-eabi" },
26 { regex_feature = "stm32f2.*", target = "thumbv7m-none-eabi" },
27 { regex_feature = "stm32f3.*", target = "thumbv7em-none-eabi" },
28 { regex_feature = "stm32f4.*", target = "thumbv7em-none-eabi" },
29 { regex_feature = "stm32f7.*", target = "thumbv7em-none-eabi" },
30 { regex_feature = "stm32c0.*", target = "thumbv6m-none-eabi" },
31 { regex_feature = "stm32g0.*", target = "thumbv6m-none-eabi" },
32 { regex_feature = "stm32g4.*", target = "thumbv7em-none-eabi" },
33 { regex_feature = "stm32h7.*", target = "thumbv7em-none-eabi" },
34 { regex_feature = "stm32l0.*", target = "thumbv6m-none-eabi" },
35 { regex_feature = "stm32l1.*", target = "thumbv7m-none-eabi" },
36 { regex_feature = "stm32l4.*", target = "thumbv7em-none-eabi" },
37 { regex_feature = "stm32l5.*", target = "thumbv8m.main-none-eabihf" },
38 { regex_feature = "stm32u5.*", target = "thumbv8m.main-none-eabihf" },
39 { regex_feature = "stm32wb.*", target = "thumbv7em-none-eabi" },
40 { regex_feature = "stm32wl.*", target = "thumbv7em-none-eabi" },
41]
42
43[dependencies]
44cortex-m = "0.7.6"
45cortex-m-rt = { version = ">=0.6.15,<0.8", optional = true }
46
47# BEGIN BUILD DEPENDENCIES
48# These are removed when generating the pre-generated crate using the tool at gen/.
49[build-dependencies]
50stm32-metapac-gen = { path = "../stm32-metapac-gen" }
51regex = "1.5.4"
52# END BUILD DEPENDENCIES
53
54[features]
55default = ["pac"]
56
57# Build the actual PAC. Set by default.
58# If you just want the metadata, unset it with `default-features = false`.
59pac = []
60
61# Build the chip metadata.
62# If set, a const `stm32_metapac::METADATA` will be exported, containing all the
63# metadata for the currently selected chip.
64metadata = []
65
66rt = ["cortex-m-rt/device"]
67memory-x = []
68
69# BEGIN GENERATED FEATURES
70# Generated by stm32-gen-features. DO NOT EDIT.
71stm32c011d6 = []
72stm32c011f4 = []
73stm32c011f6 = []
74stm32c011j4 = []
75stm32c011j6 = []
76stm32c031c4 = []
77stm32c031c6 = []
78stm32c031f4 = []
79stm32c031f6 = []
80stm32c031g4 = []
81stm32c031g6 = []
82stm32c031k4 = []
83stm32c031k6 = []
84stm32f030c6 = []
85stm32f030c8 = []
86stm32f030cc = []
87stm32f030f4 = []
88stm32f030k6 = []
89stm32f030r8 = []
90stm32f030rc = []
91stm32f031c4 = []
92stm32f031c6 = []
93stm32f031e6 = []
94stm32f031f4 = []
95stm32f031f6 = []
96stm32f031g4 = []
97stm32f031g6 = []
98stm32f031k4 = []
99stm32f031k6 = []
100stm32f038c6 = []
101stm32f038e6 = []
102stm32f038f6 = []
103stm32f038g6 = []
104stm32f038k6 = []
105stm32f042c4 = []
106stm32f042c6 = []
107stm32f042f4 = []
108stm32f042f6 = []
109stm32f042g4 = []
110stm32f042g6 = []
111stm32f042k4 = []
112stm32f042k6 = []
113stm32f042t6 = []
114stm32f048c6 = []
115stm32f048g6 = []
116stm32f048t6 = []
117stm32f051c4 = []
118stm32f051c6 = []
119stm32f051c8 = []
120stm32f051k4 = []
121stm32f051k6 = []
122stm32f051k8 = []
123stm32f051r4 = []
124stm32f051r6 = []
125stm32f051r8 = []
126stm32f051t8 = []
127stm32f058c8 = []
128stm32f058r8 = []
129stm32f058t8 = []
130stm32f070c6 = []
131stm32f070cb = []
132stm32f070f6 = []
133stm32f070rb = []
134stm32f071c8 = []
135stm32f071cb = []
136stm32f071rb = []
137stm32f071v8 = []
138stm32f071vb = []
139stm32f072c8 = []
140stm32f072cb = []
141stm32f072r8 = []
142stm32f072rb = []
143stm32f072v8 = []
144stm32f072vb = []
145stm32f078cb = []
146stm32f078rb = []
147stm32f078vb = []
148stm32f091cb = []
149stm32f091cc = []
150stm32f091rb = []
151stm32f091rc = []
152stm32f091vb = []
153stm32f091vc = []
154stm32f098cc = []
155stm32f098rc = []
156stm32f098vc = []
157stm32f100c4 = []
158stm32f100c6 = []
159stm32f100c8 = []
160stm32f100cb = []
161stm32f100r4 = []
162stm32f100r6 = []
163stm32f100r8 = []
164stm32f100rb = []
165stm32f100rc = []
166stm32f100rd = []
167stm32f100re = []
168stm32f100v8 = []
169stm32f100vb = []
170stm32f100vc = []
171stm32f100vd = []
172stm32f100ve = []
173stm32f100zc = []
174stm32f100zd = []
175stm32f100ze = []
176stm32f101c4 = []
177stm32f101c6 = []
178stm32f101c8 = []
179stm32f101cb = []
180stm32f101r4 = []
181stm32f101r6 = []
182stm32f101r8 = []
183stm32f101rb = []
184stm32f101rc = []
185stm32f101rd = []
186stm32f101re = []
187stm32f101rf = []
188stm32f101rg = []
189stm32f101t4 = []
190stm32f101t6 = []
191stm32f101t8 = []
192stm32f101tb = []
193stm32f101v8 = []
194stm32f101vb = []
195stm32f101vc = []
196stm32f101vd = []
197stm32f101ve = []
198stm32f101vf = []
199stm32f101vg = []
200stm32f101zc = []
201stm32f101zd = []
202stm32f101ze = []
203stm32f101zf = []
204stm32f101zg = []
205stm32f102c4 = []
206stm32f102c6 = []
207stm32f102c8 = []
208stm32f102cb = []
209stm32f102r4 = []
210stm32f102r6 = []
211stm32f102r8 = []
212stm32f102rb = []
213stm32f103c4 = []
214stm32f103c6 = []
215stm32f103c8 = []
216stm32f103cb = []
217stm32f103r4 = []
218stm32f103r6 = []
219stm32f103r8 = []
220stm32f103rb = []
221stm32f103rc = []
222stm32f103rd = []
223stm32f103re = []
224stm32f103rf = []
225stm32f103rg = []
226stm32f103t4 = []
227stm32f103t6 = []
228stm32f103t8 = []
229stm32f103tb = []
230stm32f103v8 = []
231stm32f103vb = []
232stm32f103vc = []
233stm32f103vd = []
234stm32f103ve = []
235stm32f103vf = []
236stm32f103vg = []
237stm32f103zc = []
238stm32f103zd = []
239stm32f103ze = []
240stm32f103zf = []
241stm32f103zg = []
242stm32f105r8 = []
243stm32f105rb = []
244stm32f105rc = []
245stm32f105v8 = []
246stm32f105vb = []
247stm32f105vc = []
248stm32f107rb = []
249stm32f107rc = []
250stm32f107vb = []
251stm32f107vc = []
252stm32f205rb = []
253stm32f205rc = []
254stm32f205re = []
255stm32f205rf = []
256stm32f205rg = []
257stm32f205vb = []
258stm32f205vc = []
259stm32f205ve = []
260stm32f205vf = []
261stm32f205vg = []
262stm32f205zc = []
263stm32f205ze = []
264stm32f205zf = []
265stm32f205zg = []
266stm32f207ic = []
267stm32f207ie = []
268stm32f207if = []
269stm32f207ig = []
270stm32f207vc = []
271stm32f207ve = []
272stm32f207vf = []
273stm32f207vg = []
274stm32f207zc = []
275stm32f207ze = []
276stm32f207zf = []
277stm32f207zg = []
278stm32f215re = []
279stm32f215rg = []
280stm32f215ve = []
281stm32f215vg = []
282stm32f215ze = []
283stm32f215zg = []
284stm32f217ie = []
285stm32f217ig = []
286stm32f217ve = []
287stm32f217vg = []
288stm32f217ze = []
289stm32f217zg = []
290stm32f301c6 = []
291stm32f301c8 = []
292stm32f301k6 = []
293stm32f301k8 = []
294stm32f301r6 = []
295stm32f301r8 = []
296stm32f302c6 = []
297stm32f302c8 = []
298stm32f302cb = []
299stm32f302cc = []
300stm32f302k6 = []
301stm32f302k8 = []
302stm32f302r6 = []
303stm32f302r8 = []
304stm32f302rb = []
305stm32f302rc = []
306stm32f302rd = []
307stm32f302re = []
308stm32f302vb = []
309stm32f302vc = []
310stm32f302vd = []
311stm32f302ve = []
312stm32f302zd = []
313stm32f302ze = []
314stm32f303c6 = []
315stm32f303c8 = []
316stm32f303cb = []
317stm32f303cc = []
318stm32f303k6 = []
319stm32f303k8 = []
320stm32f303r6 = []
321stm32f303r8 = []
322stm32f303rb = []
323stm32f303rc = []
324stm32f303rd = []
325stm32f303re = []
326stm32f303vb = []
327stm32f303vc = []
328stm32f303vd = []
329stm32f303ve = []
330stm32f303zd = []
331stm32f303ze = []
332stm32f318c8 = []
333stm32f318k8 = []
334stm32f328c8 = []
335stm32f334c4 = []
336stm32f334c6 = []
337stm32f334c8 = []
338stm32f334k4 = []
339stm32f334k6 = []
340stm32f334k8 = []
341stm32f334r6 = []
342stm32f334r8 = []
343stm32f358cc = []
344stm32f358rc = []
345stm32f358vc = []
346stm32f373c8 = []
347stm32f373cb = []
348stm32f373cc = []
349stm32f373r8 = []
350stm32f373rb = []
351stm32f373rc = []
352stm32f373v8 = []
353stm32f373vb = []
354stm32f373vc = []
355stm32f378cc = []
356stm32f378rc = []
357stm32f378vc = []
358stm32f398ve = []
359stm32f401cb = []
360stm32f401cc = []
361stm32f401cd = []
362stm32f401ce = []
363stm32f401rb = []
364stm32f401rc = []
365stm32f401rd = []
366stm32f401re = []
367stm32f401vb = []
368stm32f401vc = []
369stm32f401vd = []
370stm32f401ve = []
371stm32f405oe = []
372stm32f405og = []
373stm32f405rg = []
374stm32f405vg = []
375stm32f405zg = []
376stm32f407ie = []
377stm32f407ig = []
378stm32f407ve = []
379stm32f407vg = []
380stm32f407ze = []
381stm32f407zg = []
382stm32f410c8 = []
383stm32f410cb = []
384stm32f410r8 = []
385stm32f410rb = []
386stm32f410t8 = []
387stm32f410tb = []
388stm32f411cc = []
389stm32f411ce = []
390stm32f411rc = []
391stm32f411re = []
392stm32f411vc = []
393stm32f411ve = []
394stm32f412ce = []
395stm32f412cg = []
396stm32f412re = []
397stm32f412rg = []
398stm32f412ve = []
399stm32f412vg = []
400stm32f412ze = []
401stm32f412zg = []
402stm32f413cg = []
403stm32f413ch = []
404stm32f413mg = []
405stm32f413mh = []
406stm32f413rg = []
407stm32f413rh = []
408stm32f413vg = []
409stm32f413vh = []
410stm32f413zg = []
411stm32f413zh = []
412stm32f415og = []
413stm32f415rg = []
414stm32f415vg = []
415stm32f415zg = []
416stm32f417ie = []
417stm32f417ig = []
418stm32f417ve = []
419stm32f417vg = []
420stm32f417ze = []
421stm32f417zg = []
422stm32f423ch = []
423stm32f423mh = []
424stm32f423rh = []
425stm32f423vh = []
426stm32f423zh = []
427stm32f427ag = []
428stm32f427ai = []
429stm32f427ig = []
430stm32f427ii = []
431stm32f427vg = []
432stm32f427vi = []
433stm32f427zg = []
434stm32f427zi = []
435stm32f429ag = []
436stm32f429ai = []
437stm32f429be = []
438stm32f429bg = []
439stm32f429bi = []
440stm32f429ie = []
441stm32f429ig = []
442stm32f429ii = []
443stm32f429ne = []
444stm32f429ng = []
445stm32f429ni = []
446stm32f429ve = []
447stm32f429vg = []
448stm32f429vi = []
449stm32f429ze = []
450stm32f429zg = []
451stm32f429zi = []
452stm32f437ai = []
453stm32f437ig = []
454stm32f437ii = []
455stm32f437vg = []
456stm32f437vi = []
457stm32f437zg = []
458stm32f437zi = []
459stm32f439ai = []
460stm32f439bg = []
461stm32f439bi = []
462stm32f439ig = []
463stm32f439ii = []
464stm32f439ng = []
465stm32f439ni = []
466stm32f439vg = []
467stm32f439vi = []
468stm32f439zg = []
469stm32f439zi = []
470stm32f446mc = []
471stm32f446me = []
472stm32f446rc = []
473stm32f446re = []
474stm32f446vc = []
475stm32f446ve = []
476stm32f446zc = []
477stm32f446ze = []
478stm32f469ae = []
479stm32f469ag = []
480stm32f469ai = []
481stm32f469be = []
482stm32f469bg = []
483stm32f469bi = []
484stm32f469ie = []
485stm32f469ig = []
486stm32f469ii = []
487stm32f469ne = []
488stm32f469ng = []
489stm32f469ni = []
490stm32f469ve = []
491stm32f469vg = []
492stm32f469vi = []
493stm32f469ze = []
494stm32f469zg = []
495stm32f469zi = []
496stm32f479ag = []
497stm32f479ai = []
498stm32f479bg = []
499stm32f479bi = []
500stm32f479ig = []
501stm32f479ii = []
502stm32f479ng = []
503stm32f479ni = []
504stm32f479vg = []
505stm32f479vi = []
506stm32f479zg = []
507stm32f479zi = []
508stm32f722ic = []
509stm32f722ie = []
510stm32f722rc = []
511stm32f722re = []
512stm32f722vc = []
513stm32f722ve = []
514stm32f722zc = []
515stm32f722ze = []
516stm32f723ic = []
517stm32f723ie = []
518stm32f723vc = []
519stm32f723ve = []
520stm32f723zc = []
521stm32f723ze = []
522stm32f730i8 = []
523stm32f730r8 = []
524stm32f730v8 = []
525stm32f730z8 = []
526stm32f732ie = []
527stm32f732re = []
528stm32f732ve = []
529stm32f732ze = []
530stm32f733ie = []
531stm32f733ve = []
532stm32f733ze = []
533stm32f745ie = []
534stm32f745ig = []
535stm32f745ve = []
536stm32f745vg = []
537stm32f745ze = []
538stm32f745zg = []
539stm32f746be = []
540stm32f746bg = []
541stm32f746ie = []
542stm32f746ig = []
543stm32f746ne = []
544stm32f746ng = []
545stm32f746ve = []
546stm32f746vg = []
547stm32f746ze = []
548stm32f746zg = []
549stm32f750n8 = []
550stm32f750v8 = []
551stm32f750z8 = []
552stm32f756bg = []
553stm32f756ig = []
554stm32f756ng = []
555stm32f756vg = []
556stm32f756zg = []
557stm32f765bg = []
558stm32f765bi = []
559stm32f765ig = []
560stm32f765ii = []
561stm32f765ng = []
562stm32f765ni = []
563stm32f765vg = []
564stm32f765vi = []
565stm32f765zg = []
566stm32f765zi = []
567stm32f767bg = []
568stm32f767bi = []
569stm32f767ig = []
570stm32f767ii = []
571stm32f767ng = []
572stm32f767ni = []
573stm32f767vg = []
574stm32f767vi = []
575stm32f767zg = []
576stm32f767zi = []
577stm32f768ai = []
578stm32f769ag = []
579stm32f769ai = []
580stm32f769bg = []
581stm32f769bi = []
582stm32f769ig = []
583stm32f769ii = []
584stm32f769ng = []
585stm32f769ni = []
586stm32f777bi = []
587stm32f777ii = []
588stm32f777ni = []
589stm32f777vi = []
590stm32f777zi = []
591stm32f778ai = []
592stm32f779ai = []
593stm32f779bi = []
594stm32f779ii = []
595stm32f779ni = []
596stm32g030c6 = []
597stm32g030c8 = []
598stm32g030f6 = []
599stm32g030j6 = []
600stm32g030k6 = []
601stm32g030k8 = []
602stm32g031c4 = []
603stm32g031c6 = []
604stm32g031c8 = []
605stm32g031f4 = []
606stm32g031f6 = []
607stm32g031f8 = []
608stm32g031g4 = []
609stm32g031g6 = []
610stm32g031g8 = []
611stm32g031j4 = []
612stm32g031j6 = []
613stm32g031k4 = []
614stm32g031k6 = []
615stm32g031k8 = []
616stm32g031y8 = []
617stm32g041c6 = []
618stm32g041c8 = []
619stm32g041f6 = []
620stm32g041f8 = []
621stm32g041g6 = []
622stm32g041g8 = []
623stm32g041j6 = []
624stm32g041k6 = []
625stm32g041k8 = []
626stm32g041y8 = []
627stm32g050c6 = []
628stm32g050c8 = []
629stm32g050f6 = []
630stm32g050k6 = []
631stm32g050k8 = []
632stm32g051c6 = []
633stm32g051c8 = []
634stm32g051f6 = []
635stm32g051f8 = []
636stm32g051g6 = []
637stm32g051g8 = []
638stm32g051k6 = []
639stm32g051k8 = []
640stm32g061c6 = []
641stm32g061c8 = []
642stm32g061f6 = []
643stm32g061f8 = []
644stm32g061g6 = []
645stm32g061g8 = []
646stm32g061k6 = []
647stm32g061k8 = []
648stm32g070cb = []
649stm32g070kb = []
650stm32g070rb = []
651stm32g071c6 = []
652stm32g071c8 = []
653stm32g071cb = []
654stm32g071eb = []
655stm32g071g6 = []
656stm32g071g8 = []
657stm32g071gb = []
658stm32g071k6 = []
659stm32g071k8 = []
660stm32g071kb = []
661stm32g071r6 = []
662stm32g071r8 = []
663stm32g071rb = []
664stm32g081cb = []
665stm32g081eb = []
666stm32g081gb = []
667stm32g081kb = []
668stm32g081rb = []
669stm32g0b0ce = []
670stm32g0b0ke = []
671stm32g0b0re = []
672stm32g0b0ve = []
673stm32g0b1cb = []
674stm32g0b1cc = []
675stm32g0b1ce = []
676stm32g0b1kb = []
677stm32g0b1kc = []
678stm32g0b1ke = []
679stm32g0b1mb = []
680stm32g0b1mc = []
681stm32g0b1me = []
682stm32g0b1ne = []
683stm32g0b1rb = []
684stm32g0b1rc = []
685stm32g0b1re = []
686stm32g0b1vb = []
687stm32g0b1vc = []
688stm32g0b1ve = []
689stm32g0c1cc = []
690stm32g0c1ce = []
691stm32g0c1kc = []
692stm32g0c1ke = []
693stm32g0c1mc = []
694stm32g0c1me = []
695stm32g0c1ne = []
696stm32g0c1rc = []
697stm32g0c1re = []
698stm32g0c1vc = []
699stm32g0c1ve = []
700stm32g431c6 = []
701stm32g431c8 = []
702stm32g431cb = []
703stm32g431k6 = []
704stm32g431k8 = []
705stm32g431kb = []
706stm32g431m6 = []
707stm32g431m8 = []
708stm32g431mb = []
709stm32g431r6 = []
710stm32g431r8 = []
711stm32g431rb = []
712stm32g431v6 = []
713stm32g431v8 = []
714stm32g431vb = []
715stm32g441cb = []
716stm32g441kb = []
717stm32g441mb = []
718stm32g441rb = []
719stm32g441vb = []
720stm32g471cc = []
721stm32g471ce = []
722stm32g471mc = []
723stm32g471me = []
724stm32g471qc = []
725stm32g471qe = []
726stm32g471rc = []
727stm32g471re = []
728stm32g471vc = []
729stm32g471ve = []
730stm32g473cb = []
731stm32g473cc = []
732stm32g473ce = []
733stm32g473mb = []
734stm32g473mc = []
735stm32g473me = []
736stm32g473pb = []
737stm32g473pc = []
738stm32g473pe = []
739stm32g473qb = []
740stm32g473qc = []
741stm32g473qe = []
742stm32g473rb = []
743stm32g473rc = []
744stm32g473re = []
745stm32g473vb = []
746stm32g473vc = []
747stm32g473ve = []
748stm32g474cb = []
749stm32g474cc = []
750stm32g474ce = []
751stm32g474mb = []
752stm32g474mc = []
753stm32g474me = []
754stm32g474pb = []
755stm32g474pc = []
756stm32g474pe = []
757stm32g474qb = []
758stm32g474qc = []
759stm32g474qe = []
760stm32g474rb = []
761stm32g474rc = []
762stm32g474re = []
763stm32g474vb = []
764stm32g474vc = []
765stm32g474ve = []
766stm32g483ce = []
767stm32g483me = []
768stm32g483pe = []
769stm32g483qe = []
770stm32g483re = []
771stm32g483ve = []
772stm32g484ce = []
773stm32g484me = []
774stm32g484pe = []
775stm32g484qe = []
776stm32g484re = []
777stm32g484ve = []
778stm32g491cc = []
779stm32g491ce = []
780stm32g491kc = []
781stm32g491ke = []
782stm32g491mc = []
783stm32g491me = []
784stm32g491rc = []
785stm32g491re = []
786stm32g491vc = []
787stm32g491ve = []
788stm32g4a1ce = []
789stm32g4a1ke = []
790stm32g4a1me = []
791stm32g4a1re = []
792stm32g4a1ve = []
793stm32h723ve = []
794stm32h723vg = []
795stm32h723ze = []
796stm32h723zg = []
797stm32h725ae = []
798stm32h725ag = []
799stm32h725ie = []
800stm32h725ig = []
801stm32h725re = []
802stm32h725rg = []
803stm32h725ve = []
804stm32h725vg = []
805stm32h725ze = []
806stm32h725zg = []
807stm32h730ab = []
808stm32h730ib = []
809stm32h730vb = []
810stm32h730zb = []
811stm32h733vg = []
812stm32h733zg = []
813stm32h735ag = []
814stm32h735ig = []
815stm32h735rg = []
816stm32h735vg = []
817stm32h735zg = []
818stm32h742ag = []
819stm32h742ai = []
820stm32h742bg = []
821stm32h742bi = []
822stm32h742ig = []
823stm32h742ii = []
824stm32h742vg = []
825stm32h742vi = []
826stm32h742xg = []
827stm32h742xi = []
828stm32h742zg = []
829stm32h742zi = []
830stm32h743ag = []
831stm32h743ai = []
832stm32h743bg = []
833stm32h743bi = []
834stm32h743ig = []
835stm32h743ii = []
836stm32h743vg = []
837stm32h743vi = []
838stm32h743xg = []
839stm32h743xi = []
840stm32h743zg = []
841stm32h743zi = []
842stm32h745bg-cm7 = []
843stm32h745bg-cm4 = []
844stm32h745bi-cm7 = []
845stm32h745bi-cm4 = []
846stm32h745ig-cm7 = []
847stm32h745ig-cm4 = []
848stm32h745ii-cm7 = []
849stm32h745ii-cm4 = []
850stm32h745xg-cm7 = []
851stm32h745xg-cm4 = []
852stm32h745xi-cm7 = []
853stm32h745xi-cm4 = []
854stm32h745zg-cm7 = []
855stm32h745zg-cm4 = []
856stm32h745zi-cm7 = []
857stm32h745zi-cm4 = []
858stm32h747ag-cm7 = []
859stm32h747ag-cm4 = []
860stm32h747ai-cm7 = []
861stm32h747ai-cm4 = []
862stm32h747bg-cm7 = []
863stm32h747bg-cm4 = []
864stm32h747bi-cm7 = []
865stm32h747bi-cm4 = []
866stm32h747ig-cm7 = []
867stm32h747ig-cm4 = []
868stm32h747ii-cm7 = []
869stm32h747ii-cm4 = []
870stm32h747xg-cm7 = []
871stm32h747xg-cm4 = []
872stm32h747xi-cm7 = []
873stm32h747xi-cm4 = []
874stm32h747zi-cm7 = []
875stm32h747zi-cm4 = []
876stm32h750ib = []
877stm32h750vb = []
878stm32h750xb = []
879stm32h750zb = []
880stm32h753ai = []
881stm32h753bi = []
882stm32h753ii = []
883stm32h753vi = []
884stm32h753xi = []
885stm32h753zi = []
886stm32h755bi-cm7 = []
887stm32h755bi-cm4 = []
888stm32h755ii-cm7 = []
889stm32h755ii-cm4 = []
890stm32h755xi-cm7 = []
891stm32h755xi-cm4 = []
892stm32h755zi-cm7 = []
893stm32h755zi-cm4 = []
894stm32h757ai-cm7 = []
895stm32h757ai-cm4 = []
896stm32h757bi-cm7 = []
897stm32h757bi-cm4 = []
898stm32h757ii-cm7 = []
899stm32h757ii-cm4 = []
900stm32h757xi-cm7 = []
901stm32h757xi-cm4 = []
902stm32h757zi-cm7 = []
903stm32h757zi-cm4 = []
904stm32h7a3ag = []
905stm32h7a3ai = []
906stm32h7a3ig = []
907stm32h7a3ii = []
908stm32h7a3lg = []
909stm32h7a3li = []
910stm32h7a3ng = []
911stm32h7a3ni = []
912stm32h7a3qi = []
913stm32h7a3rg = []
914stm32h7a3ri = []
915stm32h7a3vg = []
916stm32h7a3vi = []
917stm32h7a3zg = []
918stm32h7a3zi = []
919stm32h7b0ab = []
920stm32h7b0ib = []
921stm32h7b0rb = []
922stm32h7b0vb = []
923stm32h7b0zb = []
924stm32h7b3ai = []
925stm32h7b3ii = []
926stm32h7b3li = []
927stm32h7b3ni = []
928stm32h7b3qi = []
929stm32h7b3ri = []
930stm32h7b3vi = []
931stm32h7b3zi = []
932stm32l010c6 = []
933stm32l010f4 = []
934stm32l010k4 = []
935stm32l010k8 = []
936stm32l010r8 = []
937stm32l010rb = []
938stm32l011d3 = []
939stm32l011d4 = []
940stm32l011e3 = []
941stm32l011e4 = []
942stm32l011f3 = []
943stm32l011f4 = []
944stm32l011g3 = []
945stm32l011g4 = []
946stm32l011k3 = []
947stm32l011k4 = []
948stm32l021d4 = []
949stm32l021f4 = []
950stm32l021g4 = []
951stm32l021k4 = []
952stm32l031c4 = []
953stm32l031c6 = []
954stm32l031e4 = []
955stm32l031e6 = []
956stm32l031f4 = []
957stm32l031f6 = []
958stm32l031g4 = []
959stm32l031g6 = []
960stm32l031k4 = []
961stm32l031k6 = []
962stm32l041c4 = []
963stm32l041c6 = []
964stm32l041e6 = []
965stm32l041f6 = []
966stm32l041g6 = []
967stm32l041k6 = []
968stm32l051c6 = []
969stm32l051c8 = []
970stm32l051k6 = []
971stm32l051k8 = []
972stm32l051r6 = []
973stm32l051r8 = []
974stm32l051t6 = []
975stm32l051t8 = []
976stm32l052c6 = []
977stm32l052c8 = []
978stm32l052k6 = []
979stm32l052k8 = []
980stm32l052r6 = []
981stm32l052r8 = []
982stm32l052t6 = []
983stm32l052t8 = []
984stm32l053c6 = []
985stm32l053c8 = []
986stm32l053r6 = []
987stm32l053r8 = []
988stm32l062c8 = []
989stm32l062k8 = []
990stm32l063c8 = []
991stm32l063r8 = []
992stm32l071c8 = []
993stm32l071cb = []
994stm32l071cz = []
995stm32l071k8 = []
996stm32l071kb = []
997stm32l071kz = []
998stm32l071rb = []
999stm32l071rz = []
1000stm32l071v8 = []
1001stm32l071vb = []
1002stm32l071vz = []
1003stm32l072cb = []
1004stm32l072cz = []
1005stm32l072kb = []
1006stm32l072kz = []
1007stm32l072rb = []
1008stm32l072rz = []
1009stm32l072v8 = []
1010stm32l072vb = []
1011stm32l072vz = []
1012stm32l073cb = []
1013stm32l073cz = []
1014stm32l073rb = []
1015stm32l073rz = []
1016stm32l073v8 = []
1017stm32l073vb = []
1018stm32l073vz = []
1019stm32l081cb = []
1020stm32l081cz = []
1021stm32l081kz = []
1022stm32l082cz = []
1023stm32l082kb = []
1024stm32l082kz = []
1025stm32l083cb = []
1026stm32l083cz = []
1027stm32l083rb = []
1028stm32l083rz = []
1029stm32l083v8 = []
1030stm32l083vb = []
1031stm32l083vz = []
1032stm32l100c6-a = []
1033stm32l100c6 = []
1034stm32l100r8-a = []
1035stm32l100r8 = []
1036stm32l100rb-a = []
1037stm32l100rb = []
1038stm32l100rc = []
1039stm32l151c6-a = []
1040stm32l151c6 = []
1041stm32l151c8-a = []
1042stm32l151c8 = []
1043stm32l151cb-a = []
1044stm32l151cb = []
1045stm32l151cc = []
1046stm32l151qc = []
1047stm32l151qd = []
1048stm32l151qe = []
1049stm32l151r6-a = []
1050stm32l151r6 = []
1051stm32l151r8-a = []
1052stm32l151r8 = []
1053stm32l151rb-a = []
1054stm32l151rb = []
1055stm32l151rc-a = []
1056stm32l151rc = []
1057stm32l151rd = []
1058stm32l151re = []
1059stm32l151uc = []
1060stm32l151v8-a = []
1061stm32l151v8 = []
1062stm32l151vb-a = []
1063stm32l151vb = []
1064stm32l151vc-a = []
1065stm32l151vc = []
1066stm32l151vd-x = []
1067stm32l151vd = []
1068stm32l151ve = []
1069stm32l151zc = []
1070stm32l151zd = []
1071stm32l151ze = []
1072stm32l152c6-a = []
1073stm32l152c6 = []
1074stm32l152c8-a = []
1075stm32l152c8 = []
1076stm32l152cb-a = []
1077stm32l152cb = []
1078stm32l152cc = []
1079stm32l152qc = []
1080stm32l152qd = []
1081stm32l152qe = []
1082stm32l152r6-a = []
1083stm32l152r6 = []
1084stm32l152r8-a = []
1085stm32l152r8 = []
1086stm32l152rb-a = []
1087stm32l152rb = []
1088stm32l152rc-a = []
1089stm32l152rc = []
1090stm32l152rd = []
1091stm32l152re = []
1092stm32l152uc = []
1093stm32l152v8-a = []
1094stm32l152v8 = []
1095stm32l152vb-a = []
1096stm32l152vb = []
1097stm32l152vc-a = []
1098stm32l152vc = []
1099stm32l152vd-x = []
1100stm32l152vd = []
1101stm32l152ve = []
1102stm32l152zc = []
1103stm32l152zd = []
1104stm32l152ze = []
1105stm32l162qc = []
1106stm32l162qd = []
1107stm32l162rc-a = []
1108stm32l162rc = []
1109stm32l162rd = []
1110stm32l162re = []
1111stm32l162vc-a = []
1112stm32l162vc = []
1113stm32l162vd-x = []
1114stm32l162vd = []
1115stm32l162ve = []
1116stm32l162zc = []
1117stm32l162zd = []
1118stm32l162ze = []
1119stm32l412c8 = []
1120stm32l412cb = []
1121stm32l412k8 = []
1122stm32l412kb = []
1123stm32l412r8 = []
1124stm32l412rb = []
1125stm32l412t8 = []
1126stm32l412tb = []
1127stm32l422cb = []
1128stm32l422kb = []
1129stm32l422rb = []
1130stm32l422tb = []
1131stm32l431cb = []
1132stm32l431cc = []
1133stm32l431kb = []
1134stm32l431kc = []
1135stm32l431rb = []
1136stm32l431rc = []
1137stm32l431vc = []
1138stm32l432kb = []
1139stm32l432kc = []
1140stm32l433cb = []
1141stm32l433cc = []
1142stm32l433rb = []
1143stm32l433rc = []
1144stm32l433vc = []
1145stm32l442kc = []
1146stm32l443cc = []
1147stm32l443rc = []
1148stm32l443vc = []
1149stm32l451cc = []
1150stm32l451ce = []
1151stm32l451rc = []
1152stm32l451re = []
1153stm32l451vc = []
1154stm32l451ve = []
1155stm32l452cc = []
1156stm32l452ce = []
1157stm32l452rc = []
1158stm32l452re = []
1159stm32l452vc = []
1160stm32l452ve = []
1161stm32l462ce = []
1162stm32l462re = []
1163stm32l462ve = []
1164stm32l471qe = []
1165stm32l471qg = []
1166stm32l471re = []
1167stm32l471rg = []
1168stm32l471ve = []
1169stm32l471vg = []
1170stm32l471ze = []
1171stm32l471zg = []
1172stm32l475rc = []
1173stm32l475re = []
1174stm32l475rg = []
1175stm32l475vc = []
1176stm32l475ve = []
1177stm32l475vg = []
1178stm32l476je = []
1179stm32l476jg = []
1180stm32l476me = []
1181stm32l476mg = []
1182stm32l476qe = []
1183stm32l476qg = []
1184stm32l476rc = []
1185stm32l476re = []
1186stm32l476rg = []
1187stm32l476vc = []
1188stm32l476ve = []
1189stm32l476vg = []
1190stm32l476ze = []
1191stm32l476zg = []
1192stm32l486jg = []
1193stm32l486qg = []
1194stm32l486rg = []
1195stm32l486vg = []
1196stm32l486zg = []
1197stm32l496ae = []
1198stm32l496ag = []
1199stm32l496qe = []
1200stm32l496qg = []
1201stm32l496re = []
1202stm32l496rg = []
1203stm32l496ve = []
1204stm32l496vg = []
1205stm32l496wg = []
1206stm32l496ze = []
1207stm32l496zg = []
1208stm32l4a6ag = []
1209stm32l4a6qg = []
1210stm32l4a6rg = []
1211stm32l4a6vg = []
1212stm32l4a6zg = []
1213stm32l4p5ae = []
1214stm32l4p5ag = []
1215stm32l4p5ce = []
1216stm32l4p5cg = []
1217stm32l4p5qe = []
1218stm32l4p5qg = []
1219stm32l4p5re = []
1220stm32l4p5rg = []
1221stm32l4p5ve = []
1222stm32l4p5vg = []
1223stm32l4p5ze = []
1224stm32l4p5zg = []
1225stm32l4q5ag = []
1226stm32l4q5cg = []
1227stm32l4q5qg = []
1228stm32l4q5rg = []
1229stm32l4q5vg = []
1230stm32l4q5zg = []
1231stm32l4r5ag = []
1232stm32l4r5ai = []
1233stm32l4r5qg = []
1234stm32l4r5qi = []
1235stm32l4r5vg = []
1236stm32l4r5vi = []
1237stm32l4r5zg = []
1238stm32l4r5zi = []
1239stm32l4r7ai = []
1240stm32l4r7vi = []
1241stm32l4r7zi = []
1242stm32l4r9ag = []
1243stm32l4r9ai = []
1244stm32l4r9vg = []
1245stm32l4r9vi = []
1246stm32l4r9zg = []
1247stm32l4r9zi = []
1248stm32l4s5ai = []
1249stm32l4s5qi = []
1250stm32l4s5vi = []
1251stm32l4s5zi = []
1252stm32l4s7ai = []
1253stm32l4s7vi = []
1254stm32l4s7zi = []
1255stm32l4s9ai = []
1256stm32l4s9vi = []
1257stm32l4s9zi = []
1258stm32l552cc = []
1259stm32l552ce = []
1260stm32l552me = []
1261stm32l552qc = []
1262stm32l552qe = []
1263stm32l552rc = []
1264stm32l552re = []
1265stm32l552vc = []
1266stm32l552ve = []
1267stm32l552zc = []
1268stm32l552ze = []
1269stm32l562ce = []
1270stm32l562me = []
1271stm32l562qe = []
1272stm32l562re = []
1273stm32l562ve = []
1274stm32l562ze = []
1275stm32u575ag = []
1276stm32u575ai = []
1277stm32u575cg = []
1278stm32u575ci = []
1279stm32u575og = []
1280stm32u575oi = []
1281stm32u575qg = []
1282stm32u575qi = []
1283stm32u575rg = []
1284stm32u575ri = []
1285stm32u575vg = []
1286stm32u575vi = []
1287stm32u575zg = []
1288stm32u575zi = []
1289stm32u585ai = []
1290stm32u585ci = []
1291stm32u585oi = []
1292stm32u585qi = []
1293stm32u585ri = []
1294stm32u585vi = []
1295stm32u585zi = []
1296stm32wb10cc = []
1297stm32wb15cc = []
1298stm32wb30ce = []
1299stm32wb35cc = []
1300stm32wb35ce = []
1301stm32wb50cg = []
1302stm32wb55cc = []
1303stm32wb55ce = []
1304stm32wb55cg = []
1305stm32wb55rc = []
1306stm32wb55re = []
1307stm32wb55rg = []
1308stm32wb55vc = []
1309stm32wb55ve = []
1310stm32wb55vg = []
1311stm32wb55vy = []
1312stm32wl54cc-cm4 = []
1313stm32wl54cc-cm0p = []
1314stm32wl54jc-cm4 = []
1315stm32wl54jc-cm0p = []
1316stm32wl55cc-cm4 = []
1317stm32wl55cc-cm0p = []
1318stm32wl55jc-cm4 = []
1319stm32wl55jc-cm0p = []
1320stm32wle4c8 = []
1321stm32wle4cb = []
1322stm32wle4cc = []
1323stm32wle4j8 = []
1324stm32wle4jb = []
1325stm32wle4jc = []
1326stm32wle5c8 = []
1327stm32wle5cb = []
1328stm32wle5cc = []
1329stm32wle5j8 = []
1330stm32wle5jb = []
1331stm32wle5jc = []
1332# END GENERATED FEATURES
diff --git a/stm32-metapac/build.rs b/stm32-metapac/build.rs
deleted file mode 100644
index 0c183fa21..000000000
--- a/stm32-metapac/build.rs
+++ /dev/null
@@ -1,77 +0,0 @@
1use std::env;
2use std::path::PathBuf;
3
4use stm32_metapac_gen::*;
5
6fn parse_chip_core(chip_and_core: &str) -> (String, Option<String>) {
7 let mut s = chip_and_core.split('-');
8 let chip_name: String = s.next().unwrap().to_string();
9 if let Some(c) = s.next() {
10 if c.starts_with("cm") {
11 return (chip_name, Some(c.to_ascii_lowercase()));
12 }
13 }
14
15 (chip_and_core.to_string(), None)
16}
17
18fn main() {
19 let out_dir = PathBuf::from(env::var_os("OUT_DIR").unwrap());
20 let data_dir = PathBuf::from("../stm32-data/data");
21
22 let chip_core_name = env::vars_os()
23 .map(|(a, _)| a.to_string_lossy().to_string())
24 .find(|x| x.starts_with("CARGO_FEATURE_STM32"))
25 .expect("No stm32xx Cargo feature enabled")
26 .strip_prefix("CARGO_FEATURE_")
27 .unwrap()
28 .to_ascii_lowercase()
29 .replace('_', "-");
30
31 let (chip_name, _) = parse_chip_core(&chip_core_name);
32
33 let opts = Options {
34 out_dir: out_dir.clone(),
35 data_dir: data_dir.clone(),
36 chips: vec![chip_name.to_ascii_uppercase()],
37 };
38 Gen::new(opts).gen();
39
40 println!(
41 "cargo:rustc-link-search={}/src/chips/{}",
42 out_dir.display(),
43 chip_core_name,
44 );
45
46 #[cfg(feature = "memory-x")]
47 println!(
48 "cargo:rustc-link-search={}/src/chips/{}/memory_x/",
49 out_dir.display(),
50 chip_core_name
51 );
52 println!(
53 "cargo:rustc-env=STM32_METAPAC_PAC_PATH={}/src/chips/{}/pac.rs",
54 out_dir.display(),
55 chip_core_name
56 );
57 println!(
58 "cargo:rustc-env=STM32_METAPAC_METADATA_PATH={}/src/chips/{}/metadata.rs",
59 out_dir.display(),
60 chip_core_name
61 );
62 println!(
63 "cargo:rustc-env=STM32_METAPAC_COMMON_PATH={}/src/common.rs",
64 out_dir.display(),
65 );
66
67 println!("cargo:rerun-if-changed=build.rs");
68
69 // When the stm32-data chip's JSON changes, we must rebuild
70 println!(
71 "cargo:rerun-if-changed={}/chips/{}.json",
72 data_dir.display(),
73 chip_name.to_uppercase()
74 );
75
76 println!("cargo:rerun-if-changed={}/registers", data_dir.display());
77}
diff --git a/stm32-metapac/build_pregenerated.rs b/stm32-metapac/build_pregenerated.rs
deleted file mode 100644
index 0f0358071..000000000
--- a/stm32-metapac/build_pregenerated.rs
+++ /dev/null
@@ -1,39 +0,0 @@
1use std::env;
2use std::path::PathBuf;
3
4fn main() {
5 let crate_dir = PathBuf::from(env::var_os("CARGO_MANIFEST_DIR").unwrap());
6
7 let chip_core_name = env::vars_os()
8 .map(|(a, _)| a.to_string_lossy().to_string())
9 .find(|x| x.starts_with("CARGO_FEATURE_STM32"))
10 .expect("No stm32xx Cargo feature enabled")
11 .strip_prefix("CARGO_FEATURE_")
12 .unwrap()
13 .to_ascii_lowercase()
14 .replace('_', "-");
15
16 println!(
17 "cargo:rustc-link-search={}/src/chips/{}",
18 crate_dir.display(),
19 chip_core_name,
20 );
21
22 #[cfg(feature = "memory-x")]
23 println!(
24 "cargo:rustc-link-search={}/src/chips/{}/memory_x/",
25 crate_dir.display(),
26 chip_core_name
27 );
28 println!("cargo:rustc-env=STM32_METAPAC_PAC_PATH=chips/{}/pac.rs", chip_core_name);
29 println!(
30 "cargo:rustc-env=STM32_METAPAC_METADATA_PATH=chips/{}/metadata.rs",
31 chip_core_name
32 );
33 println!(
34 "cargo:rustc-env=STM32_METAPAC_COMMON_PATH={}/src/common.rs",
35 crate_dir.display(),
36 );
37
38 println!("cargo:rerun-if-changed=build.rs");
39}
diff --git a/stm32-metapac/src/lib.rs b/stm32-metapac/src/lib.rs
deleted file mode 100644
index 58a1c5e45..000000000
--- a/stm32-metapac/src/lib.rs
+++ /dev/null
@@ -1,18 +0,0 @@
1#![no_std]
2#![allow(non_snake_case)]
3#![allow(unused)]
4#![allow(non_camel_case_types)]
5#![doc(html_no_source)]
6
7pub mod common {
8 include!(env!("STM32_METAPAC_COMMON_PATH"));
9}
10
11#[cfg(feature = "pac")]
12include!(env!("STM32_METAPAC_PAC_PATH"));
13
14#[cfg(feature = "metadata")]
15pub mod metadata {
16 include!("metadata.rs");
17 include!(env!("STM32_METAPAC_METADATA_PATH"));
18}
diff --git a/stm32-metapac/src/metadata.rs b/stm32-metapac/src/metadata.rs
deleted file mode 100644
index d05830e94..000000000
--- a/stm32-metapac/src/metadata.rs
+++ /dev/null
@@ -1,106 +0,0 @@
1#[derive(Debug, Eq, PartialEq, Clone)]
2pub struct Metadata {
3 pub name: &'static str,
4 pub family: &'static str,
5 pub line: &'static str,
6 pub memory: &'static [MemoryRegion],
7 pub peripherals: &'static [Peripheral],
8 pub interrupts: &'static [Interrupt],
9 pub dma_channels: &'static [DmaChannel],
10}
11
12#[derive(Debug, Eq, PartialEq, Clone)]
13pub struct MemoryRegion {
14 pub name: &'static str,
15 pub kind: MemoryRegionKind,
16 pub address: u32,
17 pub size: u32,
18 pub settings: Option<FlashSettings>,
19}
20
21#[derive(Debug, Eq, PartialEq, Clone)]
22pub struct FlashSettings {
23 pub erase_size: u32,
24 pub write_size: u32,
25 pub erase_value: u8,
26}
27
28#[derive(Debug, Eq, PartialEq, Clone)]
29pub enum MemoryRegionKind {
30 Flash,
31 Ram,
32}
33
34#[derive(Debug, Eq, PartialEq, Clone)]
35pub struct Interrupt {
36 pub name: &'static str,
37 pub number: u32,
38}
39
40#[derive(Debug, Eq, PartialEq, Clone)]
41pub struct Package {
42 pub name: &'static str,
43 pub package: &'static str,
44}
45
46#[derive(Debug, Eq, PartialEq, Clone)]
47pub struct Peripheral {
48 pub name: &'static str,
49 pub address: u64,
50 pub registers: Option<PeripheralRegisters>,
51 pub rcc: Option<PeripheralRcc>,
52 pub pins: &'static [PeripheralPin],
53 pub dma_channels: &'static [PeripheralDmaChannel],
54 pub interrupts: &'static [PeripheralInterrupt],
55}
56
57#[derive(Debug, Eq, PartialEq, Clone)]
58pub struct PeripheralRegisters {
59 pub kind: &'static str,
60 pub version: &'static str,
61 pub block: &'static str,
62}
63
64#[derive(Debug, Eq, PartialEq, Clone)]
65pub struct PeripheralInterrupt {
66 pub signal: &'static str,
67 pub interrupt: &'static str,
68}
69
70#[derive(Debug, Eq, PartialEq, Clone)]
71pub struct PeripheralRcc {
72 pub clock: &'static str,
73 pub enable: Option<PeripheralRccRegister>,
74 pub reset: Option<PeripheralRccRegister>,
75}
76
77#[derive(Debug, Eq, PartialEq, Clone)]
78pub struct PeripheralRccRegister {
79 pub register: &'static str,
80 pub field: &'static str,
81}
82
83#[derive(Debug, Eq, PartialEq, Clone)]
84pub struct PeripheralPin {
85 pub pin: &'static str,
86 pub signal: &'static str,
87 pub af: Option<u8>,
88}
89
90#[derive(Debug, Eq, PartialEq, Clone)]
91pub struct DmaChannel {
92 pub name: &'static str,
93 pub dma: &'static str,
94 pub channel: u32,
95 pub dmamux: Option<&'static str>,
96 pub dmamux_channel: Option<u32>,
97}
98
99#[derive(Debug, Eq, PartialEq, Clone)]
100pub struct PeripheralDmaChannel {
101 pub signal: &'static str,
102 pub channel: Option<&'static str>,
103 pub dmamux: Option<&'static str>,
104 pub dma: Option<&'static str>,
105 pub request: Option<u32>,
106}
diff --git a/xtask/.cargo/config.toml b/xtask/.cargo/config.toml
deleted file mode 100644
index 919ec05a4..000000000
--- a/xtask/.cargo/config.toml
+++ /dev/null
@@ -1,6 +0,0 @@
1[alias]
2xtask = "run --package xtask --"
3ci = "run --package xtask -- ci"
4core = "run --package xtask -- core"
5examples = "run --package xtask -- examples"
6fmt = "run --package xtask -- fmt"
diff --git a/xtask/Cargo.toml b/xtask/Cargo.toml
deleted file mode 100644
index 696cfdafe..000000000
--- a/xtask/Cargo.toml
+++ /dev/null
@@ -1,11 +0,0 @@
1[package]
2edition = "2021"
3name = "xtask"
4version = "0.1.0"
5license = "MIT OR Apache-2.0"
6
7[dependencies]
8anyhow = "1.0.43"
9xshell = "0.1.17"
10yaml-rust = "0.4.5"
11walkdir = "2.3.2"
diff --git a/xtask/src/main.rs b/xtask/src/main.rs
deleted file mode 100644
index b8b453fd0..000000000
--- a/xtask/src/main.rs
+++ /dev/null
@@ -1,221 +0,0 @@
1#![allow(dead_code)]
2#![deny(unused_must_use)]
3
4use std::path::{Path, PathBuf};
5use std::{env, format, fs};
6
7use walkdir::WalkDir;
8use xshell::{cmd, Cmd};
9use yaml_rust::YamlLoader;
10
11extern crate yaml_rust;
12
13fn main() -> Result<(), anyhow::Error> {
14 let args = env::args().skip(1).collect::<Vec<_>>();
15 let args = args.iter().map(|s| &**s).collect::<Vec<_>>();
16
17 match &args[..] {
18 ["ci"] => task_ci()?,
19 ["core"] => task_check(Realm::Core)?,
20 ["metapac"] => task_metapac_gen()?,
21 ["examples"] => task_check(Realm::Examples)?,
22 ["fmt-check"] => task_cargo_fmt_check()?,
23 ["fmt"] => task_cargo_fmt()?,
24 _ => {
25 println!("");
26 println!("USAGE: cargo xtask [command]");
27 println!("");
28 println!("Commands:");
29 println!(" ci :: Runs entire CI");
30 println!(" core :: Builds the core");
31 println!(" metapac :: Builds the metapac");
32 println!(" examples :: Builds the examples");
33 println!(" fmt-check :: Checks rustfmt");
34 println!(" fmt :: Performs rustfmt");
35 println!("");
36 }
37 }
38 Ok(())
39}
40
41fn task_ci() -> Result<(), anyhow::Error> {
42 task_check(Realm::Core)?;
43 task_check(Realm::Examples)?;
44 task_metapac_gen()?;
45 task_cargo_fmt_check()?;
46 Ok(())
47}
48
49#[derive(Copy, Clone)]
50enum Realm {
51 All,
52 Core,
53 Examples,
54}
55
56impl Realm {
57 fn accepts(&self, package: &str) -> bool {
58 match self {
59 Realm::All => true,
60 Realm::Core => !package.contains("examples"),
61 Realm::Examples => package.contains("examples"),
62 }
63 }
64}
65
66fn task_check(realm: Realm) -> Result<(), anyhow::Error> {
67 let _e = xshell::pushenv("CI", "true");
68
69 let matrix_yaml = root_dir().join(".github").join("workflows").join("rust.yml");
70
71 let matrix = YamlLoader::load_from_str(&*fs::read_to_string(matrix_yaml).unwrap()).unwrap();
72
73 let matrix = &matrix.get(0).unwrap()["jobs"]["ci"]["strategy"]["matrix"]["include"];
74
75 let entries = matrix.as_vec().unwrap();
76
77 for entry in entries {
78 let package = entry["package"].as_str().unwrap();
79 if !realm.accepts(package) {
80 continue;
81 }
82 let target = entry["target"].as_str().unwrap();
83 let features = entry["features"].as_str();
84 let package_dir = root_dir().join(entry["package"].as_str().unwrap());
85 let _p = xshell::pushd(package_dir)?;
86 banner(&*format!(
87 "Building {} [target={}] [features={}]",
88 package,
89 target,
90 features.unwrap_or("default-features")
91 ));
92
93 let root_cargo_dir = root_dir().join(".cargo");
94 fs::create_dir_all(root_cargo_dir.clone()).unwrap();
95 fs::write(
96 root_cargo_dir.join("config"),
97 "[target.\"cfg(all())\"]\nrustflags = [\"-D\", \"warnings\"]",
98 )
99 .unwrap();
100
101 let mut args = Vec::new();
102 args.push("check");
103 args.push("--target");
104 args.push(target);
105
106 if let Some(features) = features {
107 args.push("--features");
108 args.push(features);
109 }
110
111 let command = Cmd::new(PathBuf::from("cargo"));
112 let command = command.args(args);
113 let result = command.run();
114
115 fs::remove_file(root_cargo_dir.join("config")).unwrap();
116
117 result?;
118 }
119
120 Ok(())
121}
122
123fn task_metapac_gen() -> Result<(), anyhow::Error> {
124 banner("Building metapac");
125 let _p = xshell::pushd(root_dir().join("stm32-metapac-gen"));
126 cmd!("cargo run").run()?;
127 Ok(())
128}
129
130fn task_cargo_fmt() -> Result<(), anyhow::Error> {
131 for entry in WalkDir::new(root_dir())
132 .follow_links(false)
133 .into_iter()
134 .filter_map(|e| e.ok())
135 {
136 let f_name = entry.file_name().to_string_lossy();
137
138 if f_name.ends_with(".rs") {
139 if !is_primary_source(entry.path()) {
140 continue;
141 }
142 let mut args = Vec::new();
143 args.push("--skip-children");
144 args.push("--unstable-features");
145 args.push("--edition=2018");
146 args.push(&*entry.path().to_str().unwrap());
147 let command = Cmd::new("rustfmt");
148 command.args(args).run()?;
149 }
150 }
151
152 Ok(())
153}
154
155fn task_cargo_fmt_check() -> Result<(), anyhow::Error> {
156 let mut actual_result = Ok(());
157 for entry in WalkDir::new(root_dir())
158 .follow_links(false)
159 .into_iter()
160 .filter_map(|e| e.ok())
161 {
162 let f_name = entry.file_name().to_string_lossy();
163
164 if f_name.ends_with(".rs") {
165 if !is_primary_source(entry.path()) {
166 continue;
167 }
168 let mut args = Vec::new();
169 args.push("--check");
170 args.push("--skip-children");
171 args.push("--unstable-features");
172 args.push("--edition=2018");
173 args.push(&*entry.path().to_str().unwrap());
174 let command = Cmd::new("rustfmt");
175 if let Err(result) = command.args(args).run() {
176 actual_result = Err(result.into());
177 }
178 }
179 }
180
181 actual_result
182}
183
184fn root_dir() -> PathBuf {
185 let mut xtask_dir = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
186 xtask_dir.pop();
187 xtask_dir
188}
189
190fn examples_dir() -> PathBuf {
191 root_dir().join("examples")
192}
193
194fn is_primary_source(path: &Path) -> bool {
195 let mut current = path;
196
197 loop {
198 let current_file_name = current.file_name().unwrap().to_str().unwrap();
199 if current_file_name == "target"
200 || current_file_name == "stm32-metapac-gen"
201 || current_file_name == "stm32-data"
202 {
203 return false;
204 }
205
206 if let Some(path) = current.parent() {
207 current = path.into();
208 if current == root_dir() {
209 return true;
210 }
211 } else {
212 return false;
213 }
214 }
215}
216
217fn banner(text: &str) {
218 println!("------------------------------------------------------------------------------------------------------------------------------------------------");
219 println!("== {}", text);
220 println!("------------------------------------------------------------------------------------------------------------------------------------------------");
221}