-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmake-pacs.sh
executable file
·92 lines (82 loc) · 2.41 KB
/
make-pacs.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#!/bin/sh
# Ensure svd2rust is installed
if ! command -v svd2rust &> /dev/null
then
echo "svd2rust must be installed. Make sure it's installed and \$HOME/.cargo/bin is in your \$PATH."
return
fi
# Ensure form is installed
if ! command -v form &> /dev/null
then
echo "form must be installed. Make sure it's installed and \$HOME/.cargo/bin is in your \$PATH."
return
fi
# Ensure xsltproc is installed
if ! command -v xsltproc &> /dev/null
then
echo "xsltproc must be installed."
return
fi
# Ensure sd is installed
if ! command -v sd &> /dev/null
then
echo "sd must be installed. Make sure it's installed and \$HOME/.cargo/bin is in your \$PATH."
return
fi
function build_pac() {
chip_upper="$(basename "${1}" ".svd")"
chip_lower="$(echo "${chip_upper}" | tr '[:upper:]' '[:lower:]')"
xsl="svd/patches/${chip_lower}.xsl"
pac_dir="pac/${chip_lower}"
mkdir -p "${pac_dir}"
xsltproc -o "${pac_dir}/${chip_upper}.out.1" "svd/patches/expand-dim.xsl" "${1}"
xsltproc \
-o "${pac_dir}/${chip_upper}.out.2" \
"svd/patches/fix-wpkey.xsl" \
"${pac_dir}/${chip_upper}.out.1"
xsltproc "${xsl}" "${pac_dir}/${chip_upper}.out.2" \
| svd2rust \
--target cortex-m \
--strict \
--generic-mod \
--ident-format "peripheral:::" \
--ident-format "peripheral_singleton:::"\
--output-dir "${pac_dir}"
form -i "${pac_dir}/lib.rs" -o "${pac_dir}/src/"
mv "${pac_dir}/generic.rs" "${pac_dir}/src/"
rm "${pac_dir}/lib.rs"
rm "${pac_dir}/${chip_upper}.out.1"
rm "${pac_dir}/${chip_upper}.out.2"
pushd "${pac_dir}"
cargo +nightly fmt
rustfmt +nightly build.rs
# Not entirely sure why these `deny`s are still present.
sd '#!\[deny\(private_in_public\)\]' '' src/lib.rs
sd '#!\[deny\(private_bounds\)\]' '' src/lib.rs
sd '#!\[deny\(private_interfaces\)\]' '' src/lib.rs
popd
}
if [[ -z "$@" ]]
then
echo "No target device(s) provided. Building all PACs."
for svd in svd/*.svd
do
set -xe
build_pac "$svd"
set +xe
done
else
echo "Targets provided: '$@'"
for target_arg in "$@"
do
if [ -f "svd/$1.svd" ]
then
echo "Building PAC for device: $1"
set -xe
build_pac "svd/$1.svd"
set +xe
else
echo "Unknown device: '$1'"
fi
done
fi