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