update_rs_prebuilts.sh revision d0c45801692f4ae7b90a923ed1c57a3ec8ed4cb2
1be96565d929af53b8009014fbec224004c64e4faStephen Hines#!/bin/bash 2be96565d929af53b8009014fbec224004c64e4faStephen Hines 3be96565d929af53b8009014fbec224004c64e4faStephen Hines# We are currently in frameworks/rs, so compute our top-level directory. 4be96565d929af53b8009014fbec224004c64e4faStephen HinesMY_ANDROID_DIR=$PWD/../../ 5be96565d929af53b8009014fbec224004c64e4faStephen Hinescd $MY_ANDROID_DIR 6be96565d929af53b8009014fbec224004c64e4faStephen Hines 724461aa7c90cc1b2a83072f42a2d453e3d059732Stephen Hinesif [ $OSTYPE == 'darwin13' ] || [ $OSTYPE == 'darwin14' ]; 8a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hinesthen 9a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines 10a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines DARWIN=1 11a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines SHORT_OSNAME=darwin 12a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines SONAME=dylib 13a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines # Only build arm on darwin. 14a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines TARGETS=(arm) 15a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines SYS_NAMES=(generic) 16971d42af252f7f3e11144e472e0ac3fc313c73a4Stephen Hines NUM_CORES=`sysctl -n hw.ncpu` 17a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines 18a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hineselse 19a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines 20a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines DARWIN=0 21a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines SHORT_OSNAME=linux 22a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines SONAME=so 23a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines # Target architectures and their system library names. 24648a1c137663ef7207684d0d7009dd5518942111Stephen Hines TARGETS=(arm mips x86 arm64) 25648a1c137663ef7207684d0d7009dd5518942111Stephen Hines SYS_NAMES=(generic generic_mips generic_x86 generic_arm64) 26971d42af252f7f3e11144e472e0ac3fc313c73a4Stephen Hines NUM_CORES=`cat /proc/cpuinfo | grep processor | tail -n 1 | cut -f 2 -d :` 27971d42af252f7f3e11144e472e0ac3fc313c73a4Stephen Hines NUM_CORES=$(($NUM_CORES+1)) 28a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines 29a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hinesfi 30a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines 31971d42af252f7f3e11144e472e0ac3fc313c73a4Stephen Hinesecho "Using $NUM_CORES cores" 32971d42af252f7f3e11144e472e0ac3fc313c73a4Stephen Hines 33971d42af252f7f3e11144e472e0ac3fc313c73a4Stephen Hines# Turn off the build cache and make sure we build all of LLVM from scratch. 34971d42af252f7f3e11144e472e0ac3fc313c73a4Stephen Hinesexport ANDROID_USE_BUILDCACHE=false 35971d42af252f7f3e11144e472e0ac3fc313c73a4Stephen Hinesexport FORCE_BUILD_LLVM_COMPONENTS=true 36971d42af252f7f3e11144e472e0ac3fc313c73a4Stephen Hines 37971d42af252f7f3e11144e472e0ac3fc313c73a4Stephen Hines# Ensure that we have constructed the latest "bcc" for the host. Without 38971d42af252f7f3e11144e472e0ac3fc313c73a4Stephen Hines# this variable, we don't build the .so files, hence we never construct the 39971d42af252f7f3e11144e472e0ac3fc313c73a4Stephen Hines# actual required compiler pieces. 40971d42af252f7f3e11144e472e0ac3fc313c73a4Stephen Hinesexport FORCE_BUILD_RS_COMPAT=true 41971d42af252f7f3e11144e472e0ac3fc313c73a4Stephen Hines 42d0c45801692f4ae7b90a923ed1c57a3ec8ed4cb2Miao Wang# RENDERSCRIPT_V8_JAR is the generated JAVA static lib for RenderScript Support Lib. 43d0c45801692f4ae7b90a923ed1c57a3ec8ed4cb2Miao WangRENDERSCRIPT_V8_JAR=out/target/common/obj/JAVA_LIBRARIES/android-support-v8-renderscript_intermediates/classes.jar 444581f03df1786d3a2585dabb599278b9c0257df9Miao Wang 45be96565d929af53b8009014fbec224004c64e4faStephen Hines# ANDROID_HOST_OUT is where the new prebuilts will be constructed/copied from. 46a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen HinesANDROID_HOST_OUT=$MY_ANDROID_DIR/out/host/$SHORT_OSNAME-x86/ 47be96565d929af53b8009014fbec224004c64e4faStephen Hines 48be96565d929af53b8009014fbec224004c64e4faStephen Hines# HOST_LIB_DIR allows us to pick up the built librsrt_*.bc libraries. 49be96565d929af53b8009014fbec224004c64e4faStephen HinesHOST_LIB_DIR=$ANDROID_HOST_OUT/lib 50be96565d929af53b8009014fbec224004c64e4faStephen Hines 51f7dfd22fc82c01ac59f4e61683eb231d8738bab0Tim Murray# HOST_LIB64_DIR 52f7dfd22fc82c01ac59f4e61683eb231d8738bab0Tim MurrayHOST_LIB64_DIR=$ANDROID_HOST_OUT/lib64 53f7dfd22fc82c01ac59f4e61683eb231d8738bab0Tim Murray 54be96565d929af53b8009014fbec224004c64e4faStephen Hines# PREBUILTS_DIR is where we want to copy our new files to. 55be96565d929af53b8009014fbec224004c64e4faStephen HinesPREBUILTS_DIR=$MY_ANDROID_DIR/prebuilts/sdk/ 56be96565d929af53b8009014fbec224004c64e4faStephen Hines 57be96565d929af53b8009014fbec224004c64e4faStephen Hinesprint_usage() { 58be96565d929af53b8009014fbec224004c64e4faStephen Hines echo "USAGE: $0 [-h|--help] [-n|--no-build] [-x]" 59be96565d929af53b8009014fbec224004c64e4faStephen Hines echo "OPTIONS:" 60be96565d929af53b8009014fbec224004c64e4faStephen Hines echo " -h, --help : Display this help message." 61be96565d929af53b8009014fbec224004c64e4faStephen Hines echo " -n, --no-build : Skip the build step and just copy files." 62be96565d929af53b8009014fbec224004c64e4faStephen Hines echo " -x : Display commands before they are executed." 63be96565d929af53b8009014fbec224004c64e4faStephen Hines} 64be96565d929af53b8009014fbec224004c64e4faStephen Hines 65be96565d929af53b8009014fbec224004c64e4faStephen Hinesbuild_rs_libs() { 66be96565d929af53b8009014fbec224004c64e4faStephen Hines echo Building for target $1 67be96565d929af53b8009014fbec224004c64e4faStephen Hines lunch $1 68be96565d929af53b8009014fbec224004c64e4faStephen Hines # Build the RS runtime libraries. 69971d42af252f7f3e11144e472e0ac3fc313c73a4Stephen Hines cd $MY_ANDROID_DIR/frameworks/rs/driver/runtime && mma -j$NUM_CORES && cd - || exit 1 70be96565d929af53b8009014fbec224004c64e4faStephen Hines # Build a sample support application to ensure that all the pieces are up to date. 71971d42af252f7f3e11144e472e0ac3fc313c73a4Stephen Hines cd $MY_ANDROID_DIR/frameworks/rs/java/tests/RSTest_CompatLib/ && mma -j$NUM_CORES && cd - || exit 2 72d0c45801692f4ae7b90a923ed1c57a3ec8ed4cb2Miao Wang # Build android-support-v8-renderscript.jar 73d0c45801692f4ae7b90a923ed1c57a3ec8ed4cb2Miao Wang # We need to explicitly do so, since JACK won't generate a jar by default. 74d0c45801692f4ae7b90a923ed1c57a3ec8ed4cb2Miao Wang cd $MY_ANDROID_DIR && make $RENDERSCRIPT_V8_JAR -j$NUM_CORES && cd - || exit 3 75648a1c137663ef7207684d0d7009dd5518942111Stephen Hines # Build libcompiler-rt.a 76d0c45801692f4ae7b90a923ed1c57a3ec8ed4cb2Miao Wang cd $MY_ANDROID_DIR/external/compiler-rt && mma -j$NUM_CORES && cd - || exit 4 77648a1c137663ef7207684d0d7009dd5518942111Stephen Hines # Build the blas libraries. 78d0c45801692f4ae7b90a923ed1c57a3ec8ed4cb2Miao Wang cd $MY_ANDROID_DIR/external/cblas && mma -j$NUM_CORES && cd - || exit 5 79be96565d929af53b8009014fbec224004c64e4faStephen Hines} 80be96565d929af53b8009014fbec224004c64e4faStephen Hines 81be96565d929af53b8009014fbec224004c64e4faStephen Hines# Build everything by default 82be96565d929af53b8009014fbec224004c64e4faStephen Hinesbuild_rs=1 83be96565d929af53b8009014fbec224004c64e4faStephen Hines 84be96565d929af53b8009014fbec224004c64e4faStephen Hineswhile [ $# -gt 0 ]; do 85be96565d929af53b8009014fbec224004c64e4faStephen Hines case "$1" in 86be96565d929af53b8009014fbec224004c64e4faStephen Hines -h|--help) 87be96565d929af53b8009014fbec224004c64e4faStephen Hines print_usage 88be96565d929af53b8009014fbec224004c64e4faStephen Hines exit 0 89be96565d929af53b8009014fbec224004c64e4faStephen Hines ;; 90be96565d929af53b8009014fbec224004c64e4faStephen Hines -n|--no-build) 91be96565d929af53b8009014fbec224004c64e4faStephen Hines build_rs=0 92be96565d929af53b8009014fbec224004c64e4faStephen Hines ;; 93be96565d929af53b8009014fbec224004c64e4faStephen Hines -x) 94be96565d929af53b8009014fbec224004c64e4faStephen Hines # set lets us enable bash -x mode. 95be96565d929af53b8009014fbec224004c64e4faStephen Hines set -x 96be96565d929af53b8009014fbec224004c64e4faStephen Hines ;; 97be96565d929af53b8009014fbec224004c64e4faStephen Hines *) 98be96565d929af53b8009014fbec224004c64e4faStephen Hines echo Unknown argument: "$1" 99be96565d929af53b8009014fbec224004c64e4faStephen Hines print_usage 100be96565d929af53b8009014fbec224004c64e4faStephen Hines exit 99 101be96565d929af53b8009014fbec224004c64e4faStephen Hines break 102be96565d929af53b8009014fbec224004c64e4faStephen Hines ;; 103be96565d929af53b8009014fbec224004c64e4faStephen Hines esac 104be96565d929af53b8009014fbec224004c64e4faStephen Hines shift 105be96565d929af53b8009014fbec224004c64e4faStephen Hinesdone 106be96565d929af53b8009014fbec224004c64e4faStephen Hines 107be96565d929af53b8009014fbec224004c64e4faStephen Hinesif [ $build_rs -eq 1 ]; then 108be96565d929af53b8009014fbec224004c64e4faStephen Hines 109be96565d929af53b8009014fbec224004c64e4faStephen Hines echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!! 110be96565d929af53b8009014fbec224004c64e4faStephen Hines echo !!! BUILDING RS PREBUILTS !!! 111be96565d929af53b8009014fbec224004c64e4faStephen Hines echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!! 112be96565d929af53b8009014fbec224004c64e4faStephen Hines 113be96565d929af53b8009014fbec224004c64e4faStephen Hines source build/envsetup.sh 114be96565d929af53b8009014fbec224004c64e4faStephen Hines 115be96565d929af53b8009014fbec224004c64e4faStephen Hines for t in ${TARGETS[@]}; do 116be96565d929af53b8009014fbec224004c64e4faStephen Hines build_rs_libs aosp_${t}-userdebug 117be96565d929af53b8009014fbec224004c64e4faStephen Hines done 118be96565d929af53b8009014fbec224004c64e4faStephen Hines 119be96565d929af53b8009014fbec224004c64e4faStephen Hines echo DONE BUILDING RS PREBUILTS 120be96565d929af53b8009014fbec224004c64e4faStephen Hines 121be96565d929af53b8009014fbec224004c64e4faStephen Hineselse 122be96565d929af53b8009014fbec224004c64e4faStephen Hines 123be96565d929af53b8009014fbec224004c64e4faStephen Hines echo SKIPPING BUILD OF RS PREBUILTS 124be96565d929af53b8009014fbec224004c64e4faStephen Hines 125be96565d929af53b8009014fbec224004c64e4faStephen Hinesfi 126be96565d929af53b8009014fbec224004c64e4faStephen Hines 127be96565d929af53b8009014fbec224004c64e4faStephen HinesDATE=`date +%Y%m%d` 128be96565d929af53b8009014fbec224004c64e4faStephen Hines 129be96565d929af53b8009014fbec224004c64e4faStephen Hinescd $PREBUILTS_DIR || exit 3 130be96565d929af53b8009014fbec224004c64e4faStephen Hinesrepo start pb_$DATE . 131be96565d929af53b8009014fbec224004c64e4faStephen Hines 132a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines# Don't copy device prebuilts on Darwin. We don't need/use them. 133a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hinesif [ $DARWIN -eq 0 ]; then 134a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines for i in $(seq 0 $((${#TARGETS[@]} - 1))); do 135a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines t=${TARGETS[$i]} 136648a1c137663ef7207684d0d7009dd5518942111Stephen Hines sys_name=${SYS_NAMES[$i]} 137d0c45801692f4ae7b90a923ed1c57a3ec8ed4cb2Miao Wang case "$sys_name" in 138648a1c137663ef7207684d0d7009dd5518942111Stephen Hines *64) 139648a1c137663ef7207684d0d7009dd5518942111Stephen Hines sys_lib_dir=$MY_ANDROID_DIR/out/target/product/$sys_name/system/lib64 140648a1c137663ef7207684d0d7009dd5518942111Stephen Hines ;; 141648a1c137663ef7207684d0d7009dd5518942111Stephen Hines *) 142648a1c137663ef7207684d0d7009dd5518942111Stephen Hines sys_lib_dir=$MY_ANDROID_DIR/out/target/product/$sys_name/system/lib 143648a1c137663ef7207684d0d7009dd5518942111Stephen Hines ;; 144648a1c137663ef7207684d0d7009dd5518942111Stephen Hines esac 145648a1c137663ef7207684d0d7009dd5518942111Stephen Hines obj_lib_dir=$MY_ANDROID_DIR/out/target/product/$sys_name/obj/lib 146648a1c137663ef7207684d0d7009dd5518942111Stephen Hines obj_static_lib_dir=$MY_ANDROID_DIR/out/target/product/$sys_name/obj/STATIC_LIBRARIES 147648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 148a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines for a in `find renderscript/lib/$t -name \*.so`; do 149a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines file=`basename $a` 1501baebcdcb2f1f3d794c837166b925538fcd28acbStephen Hines cp `find $sys_lib_dir $obj_lib_dir -name $file | head -1` $a || exit 4 151a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines done 152a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines 153a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines for a in `find renderscript/lib/$t -name \*.bc`; do 154a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines file=`basename $a` 155f7dfd22fc82c01ac59f4e61683eb231d8738bab0Tim Murray cp `find $HOST_LIB_DIR $HOST_LIB64_DIR $sys_lib_dir $obj_lib_dir -name $file | head -1` $a || exit 5 156a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines done 157648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 158648a1c137663ef7207684d0d7009dd5518942111Stephen Hines for a in `find renderscript/lib/$t -name \*.a`; do 159648a1c137663ef7207684d0d7009dd5518942111Stephen Hines file=`basename $a` 160648a1c137663ef7207684d0d7009dd5518942111Stephen Hines cp `find $obj_static_lib_dir -name $file | head -1` $a || exit 4 161648a1c137663ef7207684d0d7009dd5518942111Stephen Hines done 162648a1c137663ef7207684d0d7009dd5518942111Stephen Hines 163be96565d929af53b8009014fbec224004c64e4faStephen Hines done 164be96565d929af53b8009014fbec224004c64e4faStephen Hines 165a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines # javalib.jar 166d0c45801692f4ae7b90a923ed1c57a3ec8ed4cb2Miao Wang cp $MY_ANDROID_DIR/$RENDERSCRIPT_V8_JAR renderscript/lib/javalib.jar 167be96565d929af53b8009014fbec224004c64e4faStephen Hines 168a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hinesfi 169be96565d929af53b8009014fbec224004c64e4faStephen Hines 170be96565d929af53b8009014fbec224004c64e4faStephen Hines# Copy header files for compilers 171be96565d929af53b8009014fbec224004c64e4faStephen Hinescp $MY_ANDROID_DIR/external/clang/lib/Headers/*.h renderscript/clang-include 172be96565d929af53b8009014fbec224004c64e4faStephen Hinescp $MY_ANDROID_DIR/frameworks/rs/scriptc/* renderscript/include 173be96565d929af53b8009014fbec224004c64e4faStephen Hines 174be96565d929af53b8009014fbec224004c64e4faStephen Hines 175a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines# Host-specific tools (bin/ and lib/) 176be96565d929af53b8009014fbec224004c64e4faStephen HinesTOOLS_BIN=" 177be96565d929af53b8009014fbec224004c64e4faStephen Hinesbcc_compat 178be96565d929af53b8009014fbec224004c64e4faStephen Hinesllvm-rs-cc 179be96565d929af53b8009014fbec224004c64e4faStephen Hines" 180be96565d929af53b8009014fbec224004c64e4faStephen Hines 181be96565d929af53b8009014fbec224004c64e4faStephen HinesTOOLS_LIB=" 182a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hineslibbcc.$SONAME 183a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hineslibbcinfo.$SONAME 184a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hineslibclang.$SONAME 1851baebcdcb2f1f3d794c837166b925538fcd28acbStephen Hineslibc++.$SONAME 186a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen HineslibLLVM.$SONAME 187be96565d929af53b8009014fbec224004c64e4faStephen Hines" 188be96565d929af53b8009014fbec224004c64e4faStephen Hines 189f562784573ebf580bc0c691509922b292e71b1d2Pirama Arumuga NainarTOOLS_LIB32="libc++.$SONAME" 190f562784573ebf580bc0c691509922b292e71b1d2Pirama Arumuga Nainar 191be96565d929af53b8009014fbec224004c64e4faStephen Hinesfor a in $TOOLS_BIN; do 192f562784573ebf580bc0c691509922b292e71b1d2Pirama Arumuga Nainar cp $ANDROID_HOST_OUT/bin/$a tools/$SHORT_OSNAME/bin 193f562784573ebf580bc0c691509922b292e71b1d2Pirama Arumuga Nainar strip tools/$SHORT_OSNAME/bin/$a 194be96565d929af53b8009014fbec224004c64e4faStephen Hinesdone 195be96565d929af53b8009014fbec224004c64e4faStephen Hines 196be96565d929af53b8009014fbec224004c64e4faStephen Hinesfor a in $TOOLS_LIB; do 197f562784573ebf580bc0c691509922b292e71b1d2Pirama Arumuga Nainar cp $HOST_LIB64_DIR/$a tools/$SHORT_OSNAME/lib64 198f562784573ebf580bc0c691509922b292e71b1d2Pirama Arumuga Nainar strip tools/$SHORT_OSNAME/lib64/$a 199f562784573ebf580bc0c691509922b292e71b1d2Pirama Arumuga Nainardone 200f562784573ebf580bc0c691509922b292e71b1d2Pirama Arumuga Nainar 201f562784573ebf580bc0c691509922b292e71b1d2Pirama Arumuga Nainarfor a in $TOOLS_LIB32; do 202f562784573ebf580bc0c691509922b292e71b1d2Pirama Arumuga Nainar cp $HOST_LIB_DIR/$a tools/$SHORT_OSNAME/lib 203f562784573ebf580bc0c691509922b292e71b1d2Pirama Arumuga Nainar strip tools/$SHORT_OSNAME/lib/$a 204be96565d929af53b8009014fbec224004c64e4faStephen Hinesdone 205be96565d929af53b8009014fbec224004c64e4faStephen Hines 206a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hinesif [ $DARWIN -eq 0 ]; then 207a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines echo "DON'T FORGET TO UPDATE THE DARWIN COMPILER PREBUILTS!!!" 208a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hinesfi 209