Home | History | Annotate | Download | only in common
      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 repo sync -j32 -n
     46 repo sync -j32 -n
     47 repo sync -j2 -l
     48 
     49 DEVICES=$(for i in device/*/*/proprietary-blobs.txt ; do basename $(dirname $i) ; done)
     50 
     51 export LC_ALL=C
     52 
     53 ARCHIVEDIR=archive-$(date +%s)
     54 if test -d archive-ref
     55 then
     56   cp -R archive-ref $ARCHIVEDIR
     57 else
     58   mkdir $ARCHIVEDIR
     59 
     60   . build/envsetup.sh
     61   for DEVICENAME in $DEVICES
     62   do
     63     rm -rf out
     64     lunch aosp_$DEVICENAME-user
     65     make -j64
     66     cat out/target/product/$DEVICENAME/installed-files.txt |
     67       cut -b 15- |
     68       sort -f > $ARCHIVEDIR/$DEVICENAME-with.txt
     69   done
     70   rm -rf vendor
     71   rm -rf hardware/qcom/gps
     72   for DEVICENAME in $DEVICES
     73   do
     74     rm -rf out
     75     lunch aosp_$DEVICENAME-user
     76     make -j64
     77     cat out/target/product/$DEVICENAME/installed-files.txt |
     78       cut -b 15- |
     79       sort -f > $ARCHIVEDIR/$DEVICENAME-without.txt
     80   done
     81 fi
     82 
     83 for DEVICENAME in $DEVICES
     84 do
     85   MANUFACTURERNAME=$( find device -type d | grep ^[^/]\*/[^/]\*/$DEVICENAME\$ | cut -f 2 -d / )
     86   if test $(wc -l < $ARCHIVEDIR/$DEVICENAME-without.txt) != 0 -a $(wc -l < $ARCHIVEDIR/$DEVICENAME-with.txt) != 0
     87   then
     88     (
     89       date +"# Copyright (C) %Y 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-lists.sh - DO NOT EDIT'
    104       echo
    105       comm -13 $ARCHIVEDIR/$DEVICENAME-without.txt $ARCHIVEDIR/$DEVICENAME-with.txt |
    106         grep -v '\.odex$'
    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 for '$DEVICENAME'\n\nBug: 4295425')"
    114       if test "$1" != "" -a "$2" != ""
    115       then
    116         echo uploading to server $1 branch $2
    117         git push $1/device/$MANUFACTURERNAME/$DEVICENAME.git HEAD:refs/for/$2/autoblobs
    118       fi
    119     )
    120   else
    121     (
    122       cd device/$MANUFACTURERNAME/$DEVICENAME
    123       git commit --allow-empty -m "$(echo -e 'DO NOT SUBMIT - BROKEN BUILD\n\nBug: 4295425')"
    124       if test "$1" != "" -a "$2" != ""
    125       then
    126         echo uploading to server $1 branch $2
    127         git push $1/device/$MANUFACTURERNAME/$DEVICENAME.git HEAD:refs/for/$2/autoblobs
    128       fi
    129     )
    130   fi
    131 done
    132 
    133 if true
    134 then
    135   rm -rf out/
    136 elif ! test -d archive-ref
    137 then
    138   echo * device/* |
    139     tr \  \\n |
    140     grep -v ^archive- |
    141     grep -v ^device$ |
    142     grep -v ^device/common$ |
    143     xargs rm -rf
    144 fi
    145