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