OSDN Git Service

be6fe465d16232c9e99067515664c32c4a690719
[android-x86/device-common.git] / generate-blob-lists.sh
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 lists of proprietary blobs necessary to build
18 # the Android Open-Source Project code for a variety of hardware targets.
19
20 # It needs to be run from the root of a source tree that can repo sync,
21 # runs builds with and without the vendor tree, and uses the difference
22 # to generate the lists.
23
24 # It can optionally upload the results to a Gerrit server for review.
25
26 # WARNING: It destroys the source tree. Don't leave anything precious there.
27
28 # Caveat: this script does many full builds (2 per device). It takes a while
29 # to run. It's best # suited for overnight runs on multi-CPU machines
30 # with a lot of RAM.
31
32 # Syntax: device/common/generate-blob-lists.sh -f|--force [<server> <branch>]
33 #
34 # If the server and branch paramters are both present, the script will upload
35 # new files (if there's been any change) to the mentioned Gerrit server,
36 # in the specified branch.
37
38 if test "$1" != "-f" -a "$1" != "--force"
39 then
40   echo This script must be run with the --force option
41   exit 1
42 fi
43 shift
44
45 DEVICES="crespo wingray panda maguro grouper"
46 export LC_ALL=C
47
48 repo sync -j32 -n
49 repo sync -j32 -n
50 repo sync -j2 -l
51
52 ARCHIVEDIR=archive-$(date +%s)
53 if test -d archive-ref
54 then
55   cp -R archive-ref $ARCHIVEDIR
56 else
57   mkdir $ARCHIVEDIR
58
59   . build/envsetup.sh
60   for DEVICENAME in $DEVICES
61   do
62     rm -rf out
63     if test $DEVICENAME = maguro
64     then
65       lunch yakju-user
66       make -j32 libdrmdecrypt
67     fi
68     if test $DEVICENAME = toro
69     then
70       lunch mysid-user
71       make -j32 libdrmdecrypt
72     fi
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-with.txt
78   done
79   rm -rf vendor
80   for DEVICENAME in $DEVICES
81   do
82     rm -rf out
83     lunch full_$DEVICENAME-user
84     make -j32
85     cat out/target/product/$DEVICENAME/installed-files.txt |
86       cut -b 15- |
87       sort -f > $ARCHIVEDIR/$DEVICENAME-without.txt
88   done
89 fi
90
91 for DEVICENAME in $DEVICES
92 do
93   MANUFACTURERNAME=$( find device -type d | grep [^/]\*/[^/]\*/$DEVICENAME\$ | cut -f 2 -d / )
94   if test $(wc -l < $ARCHIVEDIR/$DEVICENAME-without.txt) != 0 -a $(wc -l < $ARCHIVEDIR/$DEVICENAME-with.txt) != 0
95   then
96     (
97       echo '# Copyright (C) 2011 The Android Open Source Project'
98       echo '#'
99       echo '# Licensed under the Apache License, Version 2.0 (the "License");'
100       echo '# you may not use this file except in compliance with the License.'
101       echo '# You may obtain a copy of the License at'
102       echo '#'
103       echo '#      http://www.apache.org/licenses/LICENSE-2.0'
104       echo '#'
105       echo '# Unless required by applicable law or agreed to in writing, software'
106       echo '# distributed under the License is distributed on an "AS IS" BASIS,'
107       echo '# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.'
108       echo '# See the License for the specific language governing permissions and'
109       echo '# limitations under the License.'
110       echo
111       echo '# This file is generated by device/common/generate-blob-lists.sh - DO NOT EDIT'
112       echo
113       diff $ARCHIVEDIR/$DEVICENAME-without.txt $ARCHIVEDIR/$DEVICENAME-with.txt |
114         grep -v '\.odex$' |
115         grep '>' |
116         cut -b 3-
117     ) > $ARCHIVEDIR/$DEVICENAME-proprietary-blobs.txt
118     cp $ARCHIVEDIR/$DEVICENAME-proprietary-blobs.txt device/$MANUFACTURERNAME/$DEVICENAME/proprietary-blobs.txt
119
120     (
121       cd device/$MANUFACTURERNAME/$DEVICENAME
122       git add .
123       git commit -m "$(echo -e 'auto-generated blob list\n\nBug: 4295425')"
124       if test "$1" != "" -a "$2" != ""
125       then
126         echo uploading to server $1 branch $2
127         git push ssh://$1:29418/device/$MANUFACTURERNAME/$DEVICENAME.git HEAD:refs/for/$2/autoblobs
128       fi
129     )
130   else
131     (
132       cd device/$MANUFACTURERNAME/$DEVICENAME
133       git commit --allow-empty -m "$(echo -e 'DO NOT SUBMIT - BROKEN BUILD\n\nBug: 4295425')"
134       if test "$1" != "" -a "$2" != ""
135       then
136         echo uploading to server $1 branch $2
137         git push ssh://$1:29418/device/$MANUFACTURERNAME/$DEVICENAME.git HEAD:refs/for/$2/autoblobs
138       fi
139     )
140   fi
141 done
142
143 if true
144 then
145   rm -rf out/
146 elif ! test -d archive-ref
147 then
148   echo * device/* |
149     tr \  \\n |
150     grep -v ^archive- |
151     grep -v ^device$ |
152     grep -v ^device/common$ |
153     xargs rm -rf
154 fi