]> git.wh0rd.org - home.git/blame - .profile.d/bfin-alias.sh
add more words
[home.git] / .profile.d / bfin-alias.sh
CommitLineData
96ad5ec3
MF
1bfin_path() {
2 (
3 set -C
4 rm -f /tmp/bfin-reset-PATH.$$
5 echo "${PATH}" > /tmp/bfin-reset-PATH.$$
6 )
7 trap "rm -f /tmp/bfin-reset-PATH.$$" EXIT
8
9 eval $(
10 local p
11 local quiet=false use_ccache=true
12 [[ $1 == -q || $1 == --quiet ]] && quiet=true && shift
13 [[ $1 == -nc ]] && use_ccache=false && shift
14 if [[ -z $* ]] ; then
15 if [[ -d /usr/local/src/blackfin/toolchains/current ]] ; then
16 set -- $(eval echo /usr/local/src/blackfin/toolchains/current/{linux-uclibc,uclinux,elf})
17 else
18 for d in /opt/uClinux /opt/uClinux-svn ; do
19 [ -d "$d" ] && set -- $d
20 done
21 fi
22 fi
23 if [[ $# -eq 0 ]] ; then
24 echo "bfin_path: unable to locate a good toolchain" 1>&2
25 echo return 1
26 exit 1
27 elif [[ $# -eq 1 ]] ; then
28 p=""
29 local pp ppp
30 for pp in elf uclinux linux-uclibc ; do
31 if [[ -e $1/out-${pp}/bin ]] ; then
32 p="out-"
33 elif [[ -e $1/bfin-${pp}/bin ]] ; then
34 p="bfin-"
35 else
36 continue
37 fi
38 ppp="${ppp},${pp}"
39 done
40 set -- $(eval echo $1/${p}{${ppp:1}}/bin)
41 fi
42 echo export _BFIN_PATH=\'$*\'
43 for p in "$@" ; do
44 p=$(readlink -f ${p})
45 pushd ${p} > /dev/null || return 1
46 local ccache=$(type -P ccache)
47 ${use_ccache} || ccache=""
48 if [[ -n ${ccache} ]] && [[ ! -d ccache ]] ; then
49 if ! mkdir -p ccache >& /dev/null ; then
50 (
51 echo ""
52 echo "FAIL: ccache creation with $p; please do:"
53 echo " sudo mkdir '${p}/ccache'"
54 echo " sudo chown ${USER}:users '${p}/ccache'"
55 ) 1>&2
56 fi
57 fi
58 if [[ -n ${ccache} ]] && [[ -d ccache ]] ; then
59 if [[ ! -d ccache/scripts ]] ; then
60 mkdir -p ccache/{output,scripts,symlinks}
61 cd ccache
62 local x xx
63
64 cat <<-EOF > scripts/.wrapper
65 #!/bin/bash
66 x=\${0##*/}
67 p=\${0%/*}
68 p=\${p%/ccache/scripts}
69 export CCACHE_DIR=\${p}/ccache/output
70 export PATH=\${p}:\${PATH}
71 exec \${p}/ccache/symlinks/\${x} "\$@"
72 EOF
73 chmod a+rx scripts/.wrapper
74
75 x=$(find .. -maxdepth 1 -name '*-gcc' -printf '%P')
76 xx=${x%-gcc}-ccache
77 cat <<-EOF > scripts/${xx}
78 #!/bin/bash
79 p=\${0%/*}
80 p=\${p%/ccache/scripts}
81 export CCACHE_DIR=\${p}/ccache/output
82 export PATH=\${p}:\${PATH}
83 exec ccache "\$@"
84 EOF
85 chmod a+rx scripts/${xx}
86
87 for x in gcc c++ g++ ; do
88 for xx in $(find .. -maxdepth 1 '(' -name "*-${x}" -o -name "*-${x}-*" ')' -printf '%P ') ; do
89 ln scripts/.wrapper scripts/${xx}
90 ln -fs ${ccache} symlinks/${xx}
91 done
92 done
93 fi
94 echo export UCLINUX_USE_CCACHE=no # we handle it ourself
95 ${quiet} || echo "Adding ${p} (w/ccache)" 1>&2
96 export PATH=${PATH}:${p}/ccache/scripts:${p}
97 echo export PATH=\"${PATH}\"
98 else
99 ${quiet} || echo "Adding ${p} to PATH" 1>&2
100 export PATH=${PATH}:${p}
101 echo export PATH=\"${PATH}\"
102 fi
103 popd > /dev/null
104 done
105 )
106 unset -f bfin_path
107
108 local g
109 for g in bfin-{{linux-uclibc,uclinux,elf}-gdb{,tui},gdbproxy,jtag} ; do
110 type -P ${g} >& /dev/null && alias ${g}="${g} --quiet"
111 type -P ${g} >& /dev/null && alias ${g}="${g} --quiet"
112 done
113
114 bfin-reset() {
115 export PATH=$(</tmp/bfin-reset-PATH.$$)
116 rm -f /tmp/bfin-reset-PATH.$$
117 source /usr/local/src/blackfin/git/toolchain/distribution/snapshots/bfin-alias
118 local g
119 for g in $(alias 2>&1 | sed -n '/^alias bfin-/{s:^alias ::;s:=.*::;p}') ; do
120 unalias ${g}
121 done
122 for g in $(declare 2>&1 | awk '$0 ~ /^bfin-/ { print $1 }') ; do
123 unset -f ${g}
124 done
125 }
126
127 bfin-set-gcc-ver() {
128 local ver=$1
129 if [[ -z ${ver} || -n $2 ]] ; then
130 echo "Usage: bfin-set-gcc-ver <gcc ver>"
131 return 1
132 fi
133
134 local b bb
135 for b in ${_BFIN_PATH} ; do
136 for bb in $(echo ${b}/*-${ver}) ; do
137 b=${bb%-${ver}}
138 if [[ ! -x ${bb} ]] ; then
139 echo "Not found: ${bb}"
140 continue
141 fi
142 rm -f "${b}"
143 cp -a "${b}-${ver}" "${b}"
144 echo "${b##*/} -> ${bb##*/}"
145 done
146 done
147 }
148
149 bfin-cpu-reset() {
150 bfin-jtag <<-EOF
151 cable probe
152 detect
153 bfin emulation enter
154 bfin reset
155 bfin emulation exit
156 quit
157 EOF
158 }
159
160 bfin-cpu-uboot() {
161 local init=$1 elf=$2
162 [[ -z $elf ]] && echo "Usage: bfin-cpu-uboot <init> <elf>" && return 1
163 killall -q bfin-gdbproxy
164 bfin-gdbproxy -q bfin --reset &
165 local pid=$!
166 sleep 3s
167 bfin-elf-gdb -q -batch \
168 --ex "target remote localhost:2000" \
169 --ex "load $init" \
170 --ex c \
171 --ex load \
172 --ex "call memset(&_bss_start, 0, &_bss_end - &_bss_start)" \
173 --ex c \
174 "$elf"
175 kill ${pid}
176 }
177}
178
179switch_svn() {
180 local localserv=$(</usr/local/src/blackfin/.svn.local)
181 local remotserv="svn+ssh://${USER}@firewall-sources.blackfin.uclinux.org"
182 [[ -z ${localserv} ]] && return 1
183
184 normalize_svn_trail() {
185 local var=$1
186 local val=${!var}
187 while [[ ${val} == */svn ]] || [[ ${val} == */ ]] ; do
188 val=${val%/svn}
189 val=${val%/}
190 done
191 eval ${var}="${val}"
192 }
193 normalize_svn_lead() {
194 local var=$1
195 local val=${!var}
196 while [[ ${val} == svn/* ]] || [[ ${val} == /* ]] ; do
197 val=${val#svn/}
198 val=${val#/}
199 done
200 eval ${var}="${val}"
201 }
202
203 normalize_svn_trail localserv
204 normalize_svn_trail remotserv
205
206 local newurl url=$(svn info | grep ^URL:) oldurl
207 [[ -z ${url} ]] && return 1
208 url=${url#URL: }
209 oldurl=${url}
210 case ${url} in
211 ${remotserv}*)
212 url=${url#${remotserv}}
213 normalize_svn_lead url
214 newurl=${localserv}/svn/${url}
215 ;;
216 ${localserv}*)
217 url=${url#${localserv}}
218 normalize_svn_lead url
219 newurl=${remotserv}/svn/${url}
220 ;;
221 *)
222 echo "Unknown url: ${url}; switching to local"
223 remotserv=${url##*//}
224 remotserv=${remotserv#*/}
225 newurl="${localserv}/svn/${remotserv##svn/}"
226 ;;
227 esac
228 (set -x; svn switch --relocate ${oldurl} ${newurl} "$@")
229
230 unset normalize_svn_trail
231 unset normalize_svn_lead
232}