blob: 70c1a67a9cf6fef1da7983b90723d81ff5b3ebf5 (
plain)
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
#!/bin/bash
help() {
cat >&2 <<EOF
$0: BSP Generator for the SiFive Freedom E SDK
--help Prints this help text.
--target-name Specify bsp target name.
--target-type Specify bsp target type [rtl | arty].
--sdk-path=* The path to the freedom-e-sdk clone directory, public or private.
--target-dts=*.dts The path to the target device tree that will be used.
EOF
}
warn () {
echo "$0:" "$@" >&2
}
die () {
shift
warn "$@"
exit 1
}
unset DTSFILE
unset CUSTOM_PATH
unset CUSTOM_NAME
unset NO_FIXUP
NO_FIXUP=0
while [ "$1" != "" ]
do
case "$1" in
--help) help "$0"; exit 0;;
--no-fixup) NO_FIXUP=1; shift 1;;
--target-name) CUSTOM_NAME="$2"; shift 2;;
--target-type) CUSTOM_TYPE="$2"; shift 2;;
--sdk-path=*) CUSTOM_PATH="$(echo "$1" | cut -d= -f2-)"; shift 1;;
--sdk-path) CUSTOM_PATH="$2"; shift 2;;
--target-dts=*) DTSFILE="$(echo "$1" | cut -d= -f2-)"; shift 1;;
--target-dts) DTSFILE="$2"; shift 2;;
*) echo "$0: Unknown argument $1" >&2; exit 1;;
esac
done
if [ "$CUSTOM_PATH" == "" -a "$CUSTOM_NAME" == "" -a "$DTSFILE" == "" ]
then
TARGET_LIST="$(ls -d */) "
else
file "$DTSFILE"
if [ ! -f "$DTSFILE" ]
then
echo "[ERROR] $0: $DTSFILE must be a file" >&2
help "$0"
exit 1
fi
if [ "$CUSTOM_NAME" == "" ]
then
echo "[ERROR] $0: --target-name is mandatory" >&2
help "$0"
exit 1
fi
if [ "$CUSTOM_TYPE" == "" ]
then
echo "[INFO] $0: --target-type is not given! Default to rtl" >&2
TARGET_TYPE="rtl"
else
TARGET_TYPE="$CUSTOM_TYPE"
fi
CUSTOM_TARGET="$CUSTOM_PATH/bsp/$CUSTOM_NAME"
if [ ! -d "$CUSTOM_TARGET" ]
then
echo "[INFO] $0: "$CUSTOM_TARGET" not found! Creating one" >&2
mkdir -p $CUSTOM_TARGET
fi
cp $DTSFILE "$CUSTOM_TARGET/design.dts"
TARGET_LIST="$CUSTOM_TARGET "
fi
DTC=dtc
MEE_HEADER_GENERATOR=freedom-metal_header-generator
LDSCRIPT_GENERATOR=freedom-ldscript-generator
MAKEATTRIB_GENERATOR=freedom-makeattributes-generator
BARE_HEADER_GENERATOR=freedom-bare_header-generator
OPENOCDCFG_GENERATOR=freedom-openocdcfg-generator
DTS_FILENAME=design.dts
DTB_FILENAME=temp.dtb
HEADER_FILENAME=metal.h
LDS_DEFAULT_FILENAME=metal.default.lds
LDS_RAMRODATA_FILENAME=metal.ramrodata.lds
LDS_SCRATCHPAD_FILENAME=metal.scratchpad.lds
SETTINGS_FILENAME=settings.mk
BARE_HEADER_FILENAME=metal-platform.h
OPENOCDCFG_FILENAME=openocd.cfg
update_target() {
TARGET=$1
if [ "$TARGET_TYPE" == "" ]; then
TARGET_TYPE=$TARGET
fi
echo "Updating target $TARGET"
if [ $NO_FIXUP != 1 ]; then
../scripts/fixup-dts --dts $TARGET/$DTS_FILENAME || warn "Failed to check $TARGET/$DTS_FILENAME for missing elements"
fi
# Compile temporary .dtb
$DTC -I dts -O dtb -o $TARGET/$DTB_FILENAME $TARGET/$DTS_FILENAME || warn "Failed to compile $TARGET/$DTS_FILENAME to dtb"
# Produce parameterized files
$MEE_HEADER_GENERATOR -d $TARGET/$DTB_FILENAME -o $TARGET/$HEADER_FILENAME || warn "Failed to produce $TARGET/$HEADER_FILENAME"
$LDSCRIPT_GENERATOR -d $TARGET/$DTB_FILENAME -l $TARGET/$LDS_DEFAULT_FILENAME || warn "Failed to produce $TARGET/$LDS_DEFAULT_FILENAME"
$LDSCRIPT_GENERATOR -d $TARGET/$DTB_FILENAME -l $TARGET/$LDS_RAMRODATA_FILENAME --ramrodata || warn "Failed to produce $TARGET/$LDS_RAMRODATA_FILENAME"
$LDSCRIPT_GENERATOR -d $TARGET/$DTB_FILENAME -l $TARGET/$LDS_SCRATCHPAD_FILENAME --scratchpad || warn "Failed to produce $TARGET/$LDS_SCRATCHPAD_FILENAME"
$MAKEATTRIB_GENERATOR -d $TARGET/$DTB_FILENAME -b $TARGET_TYPE -o $TARGET/$SETTINGS_FILENAME || warn "Failed to produce $TARGET/$SETTINGS_FILENAME"
$BARE_HEADER_GENERATOR -d $TARGET/$DTB_FILENAME -o $TARGET/$BARE_HEADER_FILENAME || warn "Failed to produce $TARGET/$BARE_HEADER_FILENAME"
if [[ "$TARGET_TYPE" =~ "arty" || "$TARGET_TYPE" =~ "hifive" ]] ; then
if [ `grep -c "jlink" $TARGET/$SETTINGS_FILENAME` -ne 1 ] ; then
echo "generating openocd.cfg"
$OPENOCDCFG_GENERATOR -d $TARGET/$DTB_FILENAME -b $TARGET_TYPE -o $TARGET/$OPENOCDCFG_FILENAME || warn "Failed to produce $TARGET/$OPENOCDCFG_FILENAME"
fi
fi
# Remove temporary .dtb
rm $TARGET/$DTB_FILENAME
TARGET_TYPE=""
echo ""
}
for TARGET in $TARGET_LIST
do
update_target $TARGET
done
|