Home | History | Annotate | Download | only in asio
      1 #! /bin/bash
      2 # Copyright (c) 2016, Intel Corporation
      3 # All rights reserved.
      4 #
      5 # Redistribution and use in source and binary forms, with or without modification,
      6 # are permitted provided that the following conditions are met:
      7 #
      8 # 1. Redistributions of source code must retain the above copyright notice, this
      9 # list of conditions and the following disclaimer.
     10 #
     11 # 2. Redistributions in binary form must reproduce the above copyright notice,
     12 # this list of conditions and the following disclaimer in the documentation and/or
     13 # other materials provided with the distribution.
     14 #
     15 # 3. Neither the name of the copyright holder nor the names of its contributors
     16 # may be used to endorse or promote products derived from this software without
     17 # specific prior written permission.
     18 #
     19 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
     20 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     21 # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
     22 # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
     23 # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
     24 # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     25 # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
     26 # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     27 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
     28 # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     29 
     30 cd "$ANDROID_BUILD_TOP"
     31 . build/envsetup.sh
     32 cd -
     33 
     34 set -eo pipefail
     35 
     36 # INSTRUCTIONS
     37 #
     38 # Prior to running this script you should git-rm the previous content of the
     39 # directory pointed to by the "asio" symbolic link, extract the version you
     40 # want to integrate and finally, make the "asio" symbolic link point to the
     41 # extracted directory. Additionaly, the build environment must be ready; i.e.
     42 # you must have sourced "build/envestup.sh" and lunched any target.
     43 #
     44 # Then, run this script by passing it a list of lunch targets. ASIO will be
     45 # minified based on which files were used when building the Parameter Framework
     46 # on those lunch targets. As results may very among targets, it is advised to
     47 # pass lunch targets of various architectures (ideally, all lunch targets).
     48 
     49 # USAGE
     50 # See the usage() function below
     51 
     52 usage () {
     53     echo "run from the Parameter Framework's git root"
     54     echo "\tsupport/android/asio/asio_shrinker.sh <lunch target> [more lunch targets]"
     55     exit 1
     56 }
     57 
     58 fail () {
     59     code=$?
     60     echo "Asio shrinker error: $1"
     61     exit $code
     62 }
     63 
     64 list_compiled_files () {
     65     directory=$1
     66     output=$2
     67 
     68     # list all files used during compilation. Ignore "grep" errors: some .P
     69     # files may well not contain any "asio" line.
     70     find "$directory/obj" -name "*.P" | \
     71         xargs grep --no-filename 'external/parameter-framework/asio' >> "$output" || true
     72 }
     73 
     74 if [ $# -eq 0 ]; then
     75     echo "Not enough arguments."
     76     usage
     77 fi
     78 
     79 # This script must be run from the Parameter Framework's git root.
     80 cd asio
     81 
     82 asio_includes=$(mktemp)
     83 find include -type f -name '*.[ih]pp' > "$asio_includes"
     84 
     85 # unifdef can't parse multi-line macros. Help him out by removing the wrapping
     86 xargs sed -i -e :a -e '/\\$/N' -e 's@\\ *\n@ @' -e ta < "$asio_includes"
     87 
     88 # apply macro definitions
     89 # "-x 2" means: only exit with a code != 0 if an error happened
     90 # "-m" means: work on multiple files
     91 # -f" means: read define and undef directives from the following file
     92 xargs unifdef -x 2 -m -f ../support/android/asio/asio_defines.txt < "$asio_includes"
     93 rm "$asio_includes"
     94 
     95 
     96 # Take a list of lunch targets as argument and run "mma" on all of them.
     97 # Why? because it seems that different target architectures require different
     98 # sets of files
     99 pushd ..
    100 tmpfile=$(mktemp)
    101 for target in "$@"; do
    102     lunch $target || fail "Failed to lunch $target"
    103 
    104     # compile and list the source files that actually have been used
    105     mma -j$(nproc) || fail "Failed to build $target"
    106     list_compiled_files "$ANDROID_PRODUCT_OUT" $tmpfile
    107 done
    108 popd
    109 list_compiled_files "$ANDROID_HOST_OUT" $tmpfile
    110 
    111 # In .P files, a line may contain several entries and may be terminated by " \"
    112 # or " :" or nothing. Let's make sure we have one entry per line.
    113 sed -r -e 's@^ *([^:\\]*)( [:\\])?$@\1@' \
    114     -e 's@^external/parameter-framework/asio/@@g' \
    115     -e 's@ @\n@' $tmpfile | \
    116         sort -u | \
    117         xargs git add || fail "Failed to git-add some necessary ASIO headers"
    118 rm $tmpfile
    119 
    120 # Add copyright mentions and readmes
    121 git add COPYING LICENSE_1_0.txt README
    122 # Remove asio.hpp because we override it
    123 git rm -f include/asio.hpp || true # it may already have been removed
    124 
    125 cat > README.parameter-framework << __EOF__
    126 This version of ASIO has been minified for lower disk footprint for Android
    127 integraton by support/android/asio/asio_shrinker.sh.
    128 
    129 Although unlikely (thanks to having been tested on all AOSP lunch targets), if
    130 the Parameter Framework fails to compile on your lunch target because of a
    131 missing ASIO header, you may download a vanilla ASIO version from
    132 'http://sourceforge.net/projects/asio/files/asio/1.10.6%20%28Stable%29/' and
    133 run that script anew.
    134 __EOF__
    135 git add README.parameter-framework
    136