• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/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
19# for a variety of hardware targets
20
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
46DEVICES="panda toro maguro"
47
48repo sync
49repo sync
50repo sync
51
52ARCHIVEDIR=archive-$(date +%s)
53if test -d archive-ref
54then
55  cp -R archive-ref $ARCHIVEDIR
56else
57  mkdir $ARCHIVEDIR
58
59  . 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
80
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 |
111      grep -v '\.odex$' |
112      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
122        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
123        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/'
130    echo 'device-vendor-blobs.mk'
131
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 |
152      grep -v '\.odex$' |
153      grep '>' |
154      cut -b 3- |
155      while read FULLPATH
156      do
157        if test $(basename $FULLPATH) = libgps.so -o $(basename $FULLPATH) = libcamera.so -o $(basename $FULLPATH) = libsecril-client.so
158        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 |
175      grep -v '\.odex$' |
176      grep -v '\.apk$' |
177      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
194
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
217    echo
218    echo 'EOF'
219
220    echo
221
222    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'
242    echo
243    echo ifeq \(\\\$\(TARGET_DEVICE\),$DEVICENAME\)
244    echo LOCAL_PATH:=\\\$\(call my-dir\)
245
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
256          echo -n '# Module makefile rules for apks on '
257          echo $DEVICENAME
258        fi
259        FOUND=true
260        echo
261        echo -n '# '
262        echo $(basename $FULLPATH) | sed 's/\.apk//g'
263        echo
264        echo include \\\$\(CLEAR_VARS\)
265        echo
266        echo LOCAL_MODULE := $(basename $FULLPATH) | sed 's/\.apk//g'
267        echo LOCAL_SRC_FILES := \\\$\(LOCAL_MODULE\).apk
268        echo LOCAL_MODULE_CLASS := APPS
269        echo LOCAL_MODULE_TAGS := optional
270        echo LOCAL_CERTIFICATE := PRESIGNED
271        echo LOCAL_MODULE_SUFFIX := \\\$\(COMMON_ANDROID_PACKAGE_SUFFIX\)
272        echo include \\\$\(BUILD_PREBUILT\)
273      done
274    echo
275    echo endif
276    echo
277
278    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
284    chmod a+x device/$MANUFACTURERNAME/$DEVICENAME/$FILESTYLE-files.sh
285  done
286
287  (
288    cd device/$MANUFACTURERNAME/$DEVICENAME
289    git add .
290    git commit -m "$(echo -e 'auto-generated blob-handling scripts\n\nBug: 4295425')"
291    if test "$1" != "" -a "$2" != ""
292    then
293      echo uploading to server $1 branch $2
294      git push ssh://$1:29418/device/$MANUFACTURERNAME/$DEVICENAME.git HEAD:refs/for/$2/autoblobs
295    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
306