OSDN Git Service

cd75be05a9995f2add5a2266a20e15027cc7fa28
[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 crespo4g stingray wingray panda toro torospr maguro grouper manta"
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     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
79 fi
80
81 for DEVICENAME in $DEVICES
82 do
83   if test $(wc -l < $ARCHIVEDIR/$DEVICENAME-without.txt) != 0 -a $(wc -l < $ARCHIVEDIR/$DEVICENAME-with.txt) != 0
84   then
85     MANUFACTURERNAME=$( find device -type d | grep [^/]\*/[^/]\*/$DEVICENAME\$ | cut -f 2 -d / )
86     (
87       echo '# Copyright (C) 2011 The Android Open Source Project'
88       echo '#'
89       echo '# Licensed under the Apache License, Version 2.0 (the "License");'
90       echo '# you may not use this file except in compliance with the License.'
91       echo '# You may obtain a copy of the License at'
92       echo '#'
93       echo '#      http://www.apache.org/licenses/LICENSE-2.0'
94       echo '#'
95       echo '# Unless required by applicable law or agreed to in writing, software'
96       echo '# distributed under the License is distributed on an "AS IS" BASIS,'
97       echo '# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.'
98       echo '# See the License for the specific language governing permissions and'
99       echo '# limitations under the License.'
100       echo
101       echo '# This file is generated by device/common/generate-blob-lists.sh - DO NOT EDIT'
102       echo
103       diff $ARCHIVEDIR/$DEVICENAME-without.txt $ARCHIVEDIR/$DEVICENAME-with.txt |
104         grep -v '\.odex$' |
105         grep '>' |
106         cut -b 3-
107     ) > $ARCHIVEDIR/$DEVICENAME-proprietary-blobs.txt
108     cp $ARCHIVEDIR/$DEVICENAME-proprietary-blobs.txt device/$MANUFACTURERNAME/$DEVICENAME/proprietary-blobs.txt
109
110     (
111       cd device/$MANUFACTURERNAME/$DEVICENAME
112       git add .
113       git commit -m "$(echo -e 'auto-generated blob list\n\nBug: 4295425')"
114       if test "$1" != "" -a "$2" != ""
115       then
116         echo uploading to server $1 branch $2
117         git push ssh://$1:29418/device/$MANUFACTURERNAME/$DEVICENAME.git HEAD:refs/for/$2/autoblobs
118       fi
119     )
120   fi
121 done
122
123 if true
124 then
125   rm -rf out/
126 elif ! test -d archive-ref
127 then
128   echo * device/* |
129     tr \  \\n |
130     grep -v ^archive- |
131     grep -v ^device$ |
132     grep -v ^device/common$ |
133     xargs rm -rf
134 fi