blob: 619eb8e4494a85e59cc022cad378907ea748247e [file] [log] [blame]
Jean-Baptiste Querude8788e2010-08-17 19:31:25 -07001#!/usr/bin/env bash
2
3# Copyright (C) 2010 The Android Open Source Project
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16
17# This script auto-generates the scripts that manage the handling of the
18# proprietary blobs necessary to build the Android Open-Source Project code
Jean-Baptiste Queru2a977f72011-06-10 10:22:20 -070019# for a variety of hardware targets
Jean-Baptiste Querude8788e2010-08-17 19:31:25 -070020
21# It needs to be run from the root of a source tree that can repo sync,
22# runs builds with and without the vendor tree, and uses the difference
23# to generate the scripts.
24
25# It can optionally upload the results to a Gerrit server for review.
26
27# WARNING: It destroys the source tree. Don't leave anything precious there.
28
29# Caveat: this script does many full builds (2 per device). It takes a while
30# to run. It's best # suited for overnight runs on multi-CPU machines
31# with a lot of RAM.
32
33# Syntax: device/common/generate-blob-scripts.sh -f|--force [<server> <branch>]
34#
35# If the server and branch paramters are both present, the script will upload
36# new files (if there's been any change) to the mentioned Gerrit server,
37# in the specified branch.
38
39if test "$1" != "-f" -a "$1" != "--force"
40then
41 echo This script must be run with the --force option
42 exit 1
43fi
44shift
45
Jean-Baptiste Queru7d452652012-01-23 15:38:47 -080046DEVICES="crespo crespo4g stingray wingray panda toro torospr maguro"
Jean-Baptiste Querude8788e2010-08-17 19:31:25 -070047
Jean-Baptiste Queru66247cd2011-06-10 10:04:50 -070048repo sync
49repo sync
50repo sync
51
Jean-Baptiste Querude8788e2010-08-17 19:31:25 -070052ARCHIVEDIR=archive-$(date +%s)
Jean-Baptiste Queru66247cd2011-06-10 10:04:50 -070053if test -d archive-ref
54then
55 cp -R archive-ref $ARCHIVEDIR
56else
57 mkdir $ARCHIVEDIR
Jean-Baptiste Querude8788e2010-08-17 19:31:25 -070058
Jean-Baptiste Queru66247cd2011-06-10 10:04:50 -070059 . build/envsetup.sh
60 for DEVICENAME in $DEVICES
61 do
62 rm -rf out
63 lunch full_$DEVICENAME-user
64 make -j32
65 cat out/target/product/$DEVICENAME/installed-files.txt |
66 cut -b 15- |
67 sort -f > $ARCHIVEDIR/$DEVICENAME-with.txt
68 done
69 rm -rf vendor
70 for DEVICENAME in $DEVICES
71 do
72 rm -rf out
73 lunch full_$DEVICENAME-user
74 make -j32
75 cat out/target/product/$DEVICENAME/installed-files.txt |
76 cut -b 15- |
77 sort -f > $ARCHIVEDIR/$DEVICENAME-without.txt
78 done
79fi
Jean-Baptiste Querude8788e2010-08-17 19:31:25 -070080
81for DEVICENAME in $DEVICES
82do
83 MANUFACTURERNAME=$( find device -type d | grep [^/]\*/[^/]\*/$DEVICENAME\$ | cut -f 2 -d / )
84 for FILESTYLE in extract unzip
85 do
86 (
87 echo '#!/bin/sh'
88 echo
89 echo '# Copyright (C) 2010 The Android Open Source Project'
90 echo '#'
91 echo '# Licensed under the Apache License, Version 2.0 (the "License");'
92 echo '# you may not use this file except in compliance with the License.'
93 echo '# You may obtain a copy of the License at'
94 echo '#'
95 echo '# http://www.apache.org/licenses/LICENSE-2.0'
96 echo '#'
97 echo '# Unless required by applicable law or agreed to in writing, software'
98 echo '# distributed under the License is distributed on an "AS IS" BASIS,'
99 echo '# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.'
100 echo '# See the License for the specific language governing permissions and'
101 echo '# limitations under the License.'
102 echo
103 echo '# This file is generated by device/common/generate-blob-scripts.sh - DO NOT EDIT'
104 echo
105 echo DEVICE=$DEVICENAME
106 echo MANUFACTURER=$MANUFACTURERNAME
107 echo
108 echo 'mkdir -p ../../../vendor/$MANUFACTURER/$DEVICE/proprietary'
109
110 diff $ARCHIVEDIR/$DEVICENAME-without.txt $ARCHIVEDIR/$DEVICENAME-with.txt |
Jean-Baptiste Queru1b83f682011-06-06 10:44:27 -0700111 grep -v '\.odex$' |
Jean-Baptiste Querude8788e2010-08-17 19:31:25 -0700112 grep '>' |
113 cut -b 3- |
114 while read FULLPATH
115 do
116 if test $FILESTYLE = extract
117 then
118 echo adb pull $FULLPATH ../../../vendor/\$MANUFACTURER/\$DEVICE/proprietary/$(basename $FULLPATH)
119 else
120 echo unzip -j -o ../../../\${DEVICE}_update.zip $(echo $FULLPATH | cut -b 2-) -d ../../../vendor/\$MANUFACTURER/\$DEVICE/proprietary
121 fi
Jean-Baptiste Queru21927ce2011-10-01 11:35:35 -0700122 if test $(basename $FULLPATH) = akmd -o $(basename $FULLPATH) = mm-venc-omx-test -o $(basename $FULLPATH) = parse_radio_log -o $(basename $FULLPATH) = akmd8973 -o $(basename $FULLPATH) = gpsd -o $(basename $FULLPATH) = pvrsrvinit -o $(basename $FULLPATH) = fRom
Jean-Baptiste Querude8788e2010-08-17 19:31:25 -0700123 then
124 echo chmod 755 ../../../vendor/\$MANUFACTURER/\$DEVICE/proprietary/$(basename $FULLPATH)
125 fi
126 done
127 echo
128
129 echo -n '(cat << EOF) | sed s/__DEVICE__/$DEVICE/g | sed s/__MANUFACTURER__/$MANUFACTURER/g > ../../../vendor/$MANUFACTURER/$DEVICE/'
Jean-Baptiste Queru548297c2010-09-22 10:15:03 -0700130 echo 'device-vendor-blobs.mk'
Jean-Baptiste Querude8788e2010-08-17 19:31:25 -0700131
132 echo '# Copyright (C) 2010 The Android Open Source Project'
133 echo '#'
134 echo '# Licensed under the Apache License, Version 2.0 (the "License");'
135 echo '# you may not use this file except in compliance with the License.'
136 echo '# You may obtain a copy of the License at'
137 echo '#'
138 echo '# http://www.apache.org/licenses/LICENSE-2.0'
139 echo '#'
140 echo '# Unless required by applicable law or agreed to in writing, software'
141 echo '# distributed under the License is distributed on an "AS IS" BASIS,'
142 echo '# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.'
143 echo '# See the License for the specific language governing permissions and'
144 echo '# limitations under the License.'
145 echo
146 echo -n '# This file is generated by device/__MANUFACTURER__/__DEVICE__/'
147 echo -n $FILESTYLE
148 echo '-files.sh - DO NOT EDIT'
149
150 FOUND=false
151 diff $ARCHIVEDIR/$DEVICENAME-without.txt $ARCHIVEDIR/$DEVICENAME-with.txt |
Jean-Baptiste Queru1b83f682011-06-06 10:44:27 -0700152 grep -v '\.odex$' |
Jean-Baptiste Querude8788e2010-08-17 19:31:25 -0700153 grep '>' |
154 cut -b 3- |
155 while read FULLPATH
156 do
Jean-Baptiste Queru90e32d52010-09-24 14:14:26 -0700157 if test $(basename $FULLPATH) = libgps.so -o $(basename $FULLPATH) = libcamera.so -o $(basename $FULLPATH) = libsecril-client.so
Jean-Baptiste Querude8788e2010-08-17 19:31:25 -0700158 then
159 if test $FOUND = false
160 then
161 echo
162 echo '# Prebuilt libraries that are needed to build open-source libraries'
163 echo 'PRODUCT_COPY_FILES := \\'
164 else
165 echo \ \\\\
166 fi
167 FOUND=true
168 echo -n \ \ \ \ vendor/__MANUFACTURER__/__DEVICE__/proprietary/$(basename $FULLPATH):obj/lib/$(basename $FULLPATH)
169 fi
170 done
171 echo
172
173 FOUND=false
174 diff $ARCHIVEDIR/$DEVICENAME-without.txt $ARCHIVEDIR/$DEVICENAME-with.txt |
Jean-Baptiste Queru1b83f682011-06-06 10:44:27 -0700175 grep -v '\.odex$' |
Jean-Baptiste Queru4ef11672011-06-08 17:12:18 -0700176 grep -v '\.apk$' |
Jean-Baptiste Querude8788e2010-08-17 19:31:25 -0700177 grep '>' |
178 cut -b 3- |
179 while read FULLPATH
180 do
181 if test $FOUND = false
182 then
183 echo
184 echo -n '# All the blobs necessary for '
185 echo $DEVICENAME
186 echo 'PRODUCT_COPY_FILES += \\'
187 else
188 echo \ \\\\
189 fi
190 FOUND=true
191 echo -n \ \ \ \ vendor/__MANUFACTURER__/__DEVICE__/proprietary/$(basename $FULLPATH):$(echo $FULLPATH | cut -b 2-)
192 done
193 echo
Jean-Baptiste Queruc6df0e52011-06-09 15:44:26 -0700194
195 FOUND=false
196 diff $ARCHIVEDIR/$DEVICENAME-without.txt $ARCHIVEDIR/$DEVICENAME-with.txt |
197 grep '\.apk$' |
198 grep '>' |
199 cut -b 3- |
200 while read FULLPATH
201 do
202 if test $FOUND = false
203 then
204 echo
205 echo -n '# All the apks necessary for '
206 echo $DEVICENAME
207 echo 'PRODUCT_PACKAGES += \\'
208 else
209 echo \ \\\\
210 fi
211 FOUND=true
212 echo -n \ \ \ \
213 echo -n $(basename $FULLPATH) | sed 's/\.apk//g'
214 done
215 echo
216
Jean-Baptiste Queru70bda672011-06-10 13:41:18 -0700217 echo
Jean-Baptiste Queruc6df0e52011-06-09 15:44:26 -0700218 echo 'EOF'
219
Jean-Baptiste Queru70bda672011-06-10 13:41:18 -0700220 echo
221
Jean-Baptiste Queruc6df0e52011-06-09 15:44:26 -0700222 echo -n '(cat << EOF) | sed s/__DEVICE__/$DEVICE/g | sed s/__MANUFACTURER__/$MANUFACTURER/g > ../../../vendor/$MANUFACTURER/$DEVICE/'
223 echo 'proprietary/Android.mk'
224
225 echo '# Copyright (C) 2011 The Android Open Source Project'
226 echo '#'
227 echo '# Licensed under the Apache License, Version 2.0 (the "License");'
228 echo '# you may not use this file except in compliance with the License.'
229 echo '# You may obtain a copy of the License at'
230 echo '#'
231 echo '# http://www.apache.org/licenses/LICENSE-2.0'
232 echo '#'
233 echo '# Unless required by applicable law or agreed to in writing, software'
234 echo '# distributed under the License is distributed on an "AS IS" BASIS,'
235 echo '# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.'
236 echo '# See the License for the specific language governing permissions and'
237 echo '# limitations under the License.'
238 echo
239 echo -n '# This file is generated by device/__MANUFACTURER__/__DEVICE__/'
240 echo -n $FILESTYLE
241 echo '-files.sh - DO NOT EDIT'
Jean-Baptiste Queru74426d82011-06-10 09:40:04 -0700242 echo
243 echo ifeq \(\\\$\(TARGET_DEVICE\),$DEVICENAME\)
244 echo LOCAL_PATH:=\\\$\(call my-dir\)
Jean-Baptiste Queruc6df0e52011-06-09 15:44:26 -0700245
246 FOUND=false
247 diff $ARCHIVEDIR/$DEVICENAME-without.txt $ARCHIVEDIR/$DEVICENAME-with.txt |
248 grep '\.apk$' |
249 grep '>' |
250 cut -b 3- |
251 while read FULLPATH
252 do
253 if test $FOUND = false
254 then
255 echo
Jean-Baptiste Queru74426d82011-06-10 09:40:04 -0700256 echo -n '# Module makefile rules for apks on '
Jean-Baptiste Queruc6df0e52011-06-09 15:44:26 -0700257 echo $DEVICENAME
258 fi
259 FOUND=true
260 echo
261 echo -n '# '
262 echo $(basename $FULLPATH) | sed 's/\.apk//g'
263 echo
Jean-Baptiste Queru74426d82011-06-10 09:40:04 -0700264 echo include \\\$\(CLEAR_VARS\)
Jean-Baptiste Queruc6df0e52011-06-09 15:44:26 -0700265 echo
266 echo LOCAL_MODULE := $(basename $FULLPATH) | sed 's/\.apk//g'
Jean-Baptiste Queru74426d82011-06-10 09:40:04 -0700267 echo LOCAL_SRC_FILES := \\\$\(LOCAL_MODULE\).apk
Jean-Baptiste Queruc6df0e52011-06-09 15:44:26 -0700268 echo LOCAL_MODULE_CLASS := APPS
269 echo LOCAL_MODULE_TAGS := optional
270 echo LOCAL_CERTIFICATE := PRESIGNED
Jean-Baptiste Queru74426d82011-06-10 09:40:04 -0700271 echo LOCAL_MODULE_SUFFIX := \\\$\(COMMON_ANDROID_PACKAGE_SUFFIX\)
272 echo include \\\$\(BUILD_PREBUILT\)
Jean-Baptiste Queruc6df0e52011-06-09 15:44:26 -0700273 done
Jean-Baptiste Queru74426d82011-06-10 09:40:04 -0700274 echo
275 echo endif
Jean-Baptiste Queruc6df0e52011-06-09 15:44:26 -0700276 echo
277
Jean-Baptiste Querude8788e2010-08-17 19:31:25 -0700278 echo 'EOF'
279 echo
280 echo './setup-makefiles.sh'
281
282 ) > $ARCHIVEDIR/$DEVICENAME-$FILESTYLE-files.sh
283 cp $ARCHIVEDIR/$DEVICENAME-$FILESTYLE-files.sh device/$MANUFACTURERNAME/$DEVICENAME/$FILESTYLE-files.sh
Jean-Baptiste Queru1a9cdef2011-04-15 15:28:48 -0700284 chmod a+x device/$MANUFACTURERNAME/$DEVICENAME/$FILESTYLE-files.sh
Jean-Baptiste Querude8788e2010-08-17 19:31:25 -0700285 done
286
287 (
288 cd device/$MANUFACTURERNAME/$DEVICENAME
289 git add .
Jean-Baptiste Queru2d580f22011-09-09 13:20:35 -0700290 git commit -m "$(echo -e 'auto-generated blob-handling scripts\n\nBug: 4295425')"
Jean-Baptiste Querude8788e2010-08-17 19:31:25 -0700291 if test "$1" != "" -a "$2" != ""
292 then
293 echo uploading to server $1 branch $2
Jean-Baptiste Querue5583512011-07-30 20:48:01 -0700294 git push ssh://$1:29418/device/$MANUFACTURERNAME/$DEVICENAME.git HEAD:refs/for/$2/autoblobs
Jean-Baptiste Querude8788e2010-08-17 19:31:25 -0700295 fi
296 )
297
298done
299
300echo * device/* |
301 tr \ \\n |
302 grep -v ^archive- |
303 grep -v ^device$ |
304 grep -v ^device/common$ |
305 xargs rm -rf