diff --git a/Makefile b/Makefile index b0b5522..4d63da6 100644 --- a/Makefile +++ b/Makefile @@ -2,39 +2,37 @@ SHELL=/bin/bash clean: rm -rf sources -prepare: - mkdir -p sources - mkdir -p sources/metadata - mkdir -p sources/files - mkdir -p sources/mcu - mkdir -p sources/svd - mkdir -p sources/.tmp + rm -rf tmp -metadata: prepare +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 -files: metadata +sources/files: metadata + mkdir -p sources/files jq -r .Files[].URL < sources/metadata/files.json | wget -P sources/files/ -N -i - -#mcu_dirs: metadata - #jq -r '.MCUs[] | select(.name|test("STM32.*")) | .name' < sources/metadata/mcus.json \ - #| sed 's/\(STM32[A-Z]*[0-9]*\)\(.*\)/\1/' \ - #| sort | uniq \ - #| awk '{print "sources/mcus/" tolower($0)}' \ - #| xargs mkdir -p +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 -svd: +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: - ls -1 ./sources/.tmp/stm32-rs/svd/*.formatted | xargs basename | cut -f 1 -d . \ - | awk '{print "sources/mcu/" tolower($0)}' \ - | xargs mkdir -p +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/" tolower($0) ".svd.formatted" " sources/mcu/" tolower($0) "/" tolower($0) ".svd" }' \ + | awk '{print "./sources/.tmp/stm32-rs/svd/" $$0 ".svd.formatted" " sources/mcu/" $$0 "/" $$0 ".svd" }' \ | tr ' ' '\n' \ | xargs -n2 cp 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