diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..4d63da6 --- /dev/null +++ b/Makefile @@ -0,0 +1,39 @@ +SHELL=/bin/bash + +clean: + rm -rf sources + rm -rf tmp + +metadata: sources/metadata/files.json sources/metadata/mcus.json + +sources/metadata/files.json: + mkdir -p sources/metadata + wget http://stmcufinder.com/API/getFiles.php -O sources/metadata/files.json + +sources/metadata/mcus.json: + mkdir -p sources/metadata + wget http://stmcufinder.com/API/getMCUsForMCUFinderPC.php -O sources/metadata/mcus.json + +sources/files: metadata + mkdir -p sources/files + jq -r .Files[].URL < sources/metadata/files.json | wget -P sources/files/ -N -i - + +svd: sources/.tmp/stm32-rs + mkdir -p sources/svd + ls -1 ./sources/.tmp/stm32-rs/svd/*.formatted | xargs basename | cut -f 1 -d . \ + | awk '{print "sources/.tmp/stm32-rs/svd/" $$0 ".svd.formatted" " " "sources/svd/" $$0 ".svd"}' \ + | xargs -n2 cp + +sources/.tmp/stm32-rs: + rm -rf ./sources/.tmp/stm32-rs + git clone https://github.com/stm32-rs/stm32-rs.git ./sources/.tmp/stm32-rs + cd ./sources/.tmp/stm32-rs && make svdformat + +mcu_dirs: svd metadata + + ls -1 ./sources/.tmp/stm32-rs/svd/*.formatted | xargs basename | cut -f 1 -d . \ + | awk '{print "./sources/.tmp/stm32-rs/svd/" $$0 ".svd.formatted" " sources/mcu/" $$0 "/" $$0 ".svd" }' \ + | tr ' ' '\n' \ + | xargs -n2 cp + + diff --git a/README.md b/README.md index 8f58037..5f39b4e 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ wget http://stmcufinder.com/API/getFiles.php -O sources/files.json wget http://stmcufinder.com/API/getMCUsForMCUFinderPC.php -O sources/mcus.json -jq -r .Files[].URL < sources/files.json | wget -N -i - \ No newline at end of file +jq -r .Files[].URL < sources/files.json | wget -P sources/ -N -i - diff --git a/extract-all.sh b/extract-all.sh index 2e04fde..e3a370e 100755 --- a/extract-all.sh +++ b/extract-all.sh @@ -3,15 +3,15 @@ peri=$1 mkdir -p tmp/$peri -cargo build --release --manifest-path ../svd2rust/Cargo.toml +cargo build --release --manifest-path ../../svd2rust/Cargo.toml for f in `ls sources/svd`; do f=${f#"stm32"} f=${f%".svd"} echo -n processing $f ... - RUST_LOG=info ../svd2rust/target/release/svd4rust extract-peripheral --svd sources/svd/stm32$f.svd --transform transform.yaml --peripheral $peri > tmp/$peri/$f.yaml 2> tmp/$peri/$f.yaml.out + RUST_LOG=info ../../svd2rust/target/release/svd4rust extract-peripheral --svd sources/svd/stm32$f.svd --transform transform.yaml --peripheral $peri > tmp/$peri/$f.yaml 2> tmp/$peri/$f.yaml.out if [ $? -ne 0 ]; then - mv tmp/$peri/$f.yaml.out tmp/$peri/$f.yaml + rm tmp/$peri/$f.yaml echo FAIL else rm tmp/$peri/$f.yaml.out diff --git a/transform.yaml b/transform.yaml new file mode 100644 index 0000000..e2a2e66 --- /dev/null +++ b/transform.yaml @@ -0,0 +1,31 @@ +transforms: + - MergeEnums: + from: CCMR\d_Input_CC\dS + to: CCMR_Input_CCS + check: Layout + + # Remove digits from enum names + - MergeEnums: + from: ([^\d]*)[\d]*([^\d]*)[\d]*([^\d]*)[\d]* + to: $1$2$3 + skip_unmergeable: true + + - MakeFieldArray: + fieldsets: .* + from: ([A-Z]+)\d+ + to: $1 + allow_cursed: true + - MakeRegisterArray: + blocks: .* + from: ([A-Z]+)\d+ + to: $1 + - MergeEnums: + from: '[HL](IFCR|ISR)_(.*)' + to: $2 + - MergeFieldsets: + from: '[HL](IFCR|ISR)' + to: $1 + - MakeRegisterArray: + blocks: .* + from: '[HL](IFCR|ISR)' + to: $1