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 7a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hinesif [ $OSTYPE == 'darwin13' ]; 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. 24a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines TARGETS=(arm mips x86) 25a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines SYS_NAMES=(generic generic_mips generic_x86) 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 42be96565d929af53b8009014fbec224004c64e4faStephen Hines# ANDROID_HOST_OUT is where the new prebuilts will be constructed/copied from. 43a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen HinesANDROID_HOST_OUT=$MY_ANDROID_DIR/out/host/$SHORT_OSNAME-x86/ 44be96565d929af53b8009014fbec224004c64e4faStephen Hines 45be96565d929af53b8009014fbec224004c64e4faStephen Hines# HOST_LIB_DIR allows us to pick up the built librsrt_*.bc libraries. 46be96565d929af53b8009014fbec224004c64e4faStephen HinesHOST_LIB_DIR=$ANDROID_HOST_OUT/lib 47be96565d929af53b8009014fbec224004c64e4faStephen Hines 482b5c5e131e91dd0c4190220fd35fd81c38768e98Tim Murray# HOST_LIB64_DIR 492b5c5e131e91dd0c4190220fd35fd81c38768e98Tim MurrayHOST_LIB64_DIR=$ANDROID_HOST_OUT/lib64 502b5c5e131e91dd0c4190220fd35fd81c38768e98Tim Murray 51be96565d929af53b8009014fbec224004c64e4faStephen Hines# PREBUILTS_DIR is where we want to copy our new files to. 52be96565d929af53b8009014fbec224004c64e4faStephen HinesPREBUILTS_DIR=$MY_ANDROID_DIR/prebuilts/sdk/ 53be96565d929af53b8009014fbec224004c64e4faStephen Hines 54be96565d929af53b8009014fbec224004c64e4faStephen Hinesprint_usage() { 55be96565d929af53b8009014fbec224004c64e4faStephen Hines echo "USAGE: $0 [-h|--help] [-n|--no-build] [-x]" 56be96565d929af53b8009014fbec224004c64e4faStephen Hines echo "OPTIONS:" 57be96565d929af53b8009014fbec224004c64e4faStephen Hines echo " -h, --help : Display this help message." 58be96565d929af53b8009014fbec224004c64e4faStephen Hines echo " -n, --no-build : Skip the build step and just copy files." 59be96565d929af53b8009014fbec224004c64e4faStephen Hines echo " -x : Display commands before they are executed." 60be96565d929af53b8009014fbec224004c64e4faStephen Hines} 61be96565d929af53b8009014fbec224004c64e4faStephen Hines 62be96565d929af53b8009014fbec224004c64e4faStephen Hinesbuild_rs_libs() { 63be96565d929af53b8009014fbec224004c64e4faStephen Hines echo Building for target $1 64be96565d929af53b8009014fbec224004c64e4faStephen Hines lunch $1 65be96565d929af53b8009014fbec224004c64e4faStephen Hines # Build the RS runtime libraries. 66971d42af252f7f3e11144e472e0ac3fc313c73a4Stephen Hines cd $MY_ANDROID_DIR/frameworks/rs/driver/runtime && mma -j$NUM_CORES && cd - || exit 1 67be96565d929af53b8009014fbec224004c64e4faStephen Hines # Build a sample support application to ensure that all the pieces are up to date. 68971d42af252f7f3e11144e472e0ac3fc313c73a4Stephen Hines cd $MY_ANDROID_DIR/frameworks/rs/java/tests/RSTest_CompatLib/ && mma -j$NUM_CORES && cd - || exit 2 69f38dea949f87ce49d12605ec24af09eb8d68fcb1Tim Murray 70be96565d929af53b8009014fbec224004c64e4faStephen Hines} 71be96565d929af53b8009014fbec224004c64e4faStephen Hines 72be96565d929af53b8009014fbec224004c64e4faStephen Hines# Build everything by default 73be96565d929af53b8009014fbec224004c64e4faStephen Hinesbuild_rs=1 74be96565d929af53b8009014fbec224004c64e4faStephen Hines 75be96565d929af53b8009014fbec224004c64e4faStephen Hineswhile [ $# -gt 0 ]; do 76be96565d929af53b8009014fbec224004c64e4faStephen Hines case "$1" in 77be96565d929af53b8009014fbec224004c64e4faStephen Hines -h|--help) 78be96565d929af53b8009014fbec224004c64e4faStephen Hines print_usage 79be96565d929af53b8009014fbec224004c64e4faStephen Hines exit 0 80be96565d929af53b8009014fbec224004c64e4faStephen Hines ;; 81be96565d929af53b8009014fbec224004c64e4faStephen Hines -n|--no-build) 82be96565d929af53b8009014fbec224004c64e4faStephen Hines build_rs=0 83be96565d929af53b8009014fbec224004c64e4faStephen Hines ;; 84be96565d929af53b8009014fbec224004c64e4faStephen Hines -x) 85be96565d929af53b8009014fbec224004c64e4faStephen Hines # set lets us enable bash -x mode. 86be96565d929af53b8009014fbec224004c64e4faStephen Hines set -x 87be96565d929af53b8009014fbec224004c64e4faStephen Hines ;; 88be96565d929af53b8009014fbec224004c64e4faStephen Hines *) 89be96565d929af53b8009014fbec224004c64e4faStephen Hines echo Unknown argument: "$1" 90be96565d929af53b8009014fbec224004c64e4faStephen Hines print_usage 91be96565d929af53b8009014fbec224004c64e4faStephen Hines exit 99 92be96565d929af53b8009014fbec224004c64e4faStephen Hines break 93be96565d929af53b8009014fbec224004c64e4faStephen Hines ;; 94be96565d929af53b8009014fbec224004c64e4faStephen Hines esac 95be96565d929af53b8009014fbec224004c64e4faStephen Hines shift 96be96565d929af53b8009014fbec224004c64e4faStephen Hinesdone 97be96565d929af53b8009014fbec224004c64e4faStephen Hines 98be96565d929af53b8009014fbec224004c64e4faStephen Hinesif [ $build_rs -eq 1 ]; then 99be96565d929af53b8009014fbec224004c64e4faStephen Hines 100be96565d929af53b8009014fbec224004c64e4faStephen Hines echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!! 101be96565d929af53b8009014fbec224004c64e4faStephen Hines echo !!! BUILDING RS PREBUILTS !!! 102be96565d929af53b8009014fbec224004c64e4faStephen Hines echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!! 103be96565d929af53b8009014fbec224004c64e4faStephen Hines 104be96565d929af53b8009014fbec224004c64e4faStephen Hines source build/envsetup.sh 105be96565d929af53b8009014fbec224004c64e4faStephen Hines 106be96565d929af53b8009014fbec224004c64e4faStephen Hines for t in ${TARGETS[@]}; do 107be96565d929af53b8009014fbec224004c64e4faStephen Hines build_rs_libs aosp_${t}-userdebug 108be96565d929af53b8009014fbec224004c64e4faStephen Hines done 109be96565d929af53b8009014fbec224004c64e4faStephen Hines 110be96565d929af53b8009014fbec224004c64e4faStephen Hines echo DONE BUILDING RS PREBUILTS 111be96565d929af53b8009014fbec224004c64e4faStephen Hines 112be96565d929af53b8009014fbec224004c64e4faStephen Hineselse 113be96565d929af53b8009014fbec224004c64e4faStephen Hines 114be96565d929af53b8009014fbec224004c64e4faStephen Hines echo SKIPPING BUILD OF RS PREBUILTS 115be96565d929af53b8009014fbec224004c64e4faStephen Hines 116be96565d929af53b8009014fbec224004c64e4faStephen Hinesfi 117be96565d929af53b8009014fbec224004c64e4faStephen Hines 118be96565d929af53b8009014fbec224004c64e4faStephen HinesDATE=`date +%Y%m%d` 119be96565d929af53b8009014fbec224004c64e4faStephen Hines 120be96565d929af53b8009014fbec224004c64e4faStephen Hinescd $PREBUILTS_DIR || exit 3 121be96565d929af53b8009014fbec224004c64e4faStephen Hinesrepo start pb_$DATE . 122be96565d929af53b8009014fbec224004c64e4faStephen Hines 123a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines# Don't copy device prebuilts on Darwin. We don't need/use them. 124a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hinesif [ $DARWIN -eq 0 ]; then 125a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines for i in $(seq 0 $((${#TARGETS[@]} - 1))); do 126a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines t=${TARGETS[$i]} 127a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines sys_lib_dir=$MY_ANDROID_DIR/out/target/product/${SYS_NAMES[$i]}/system/lib 1281baebcdcb2f1f3d794c837166b925538fcd28acbStephen Hines obj_lib_dir=$MY_ANDROID_DIR/out/target/product/${SYS_NAMES[$i]}/obj/lib 129a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines for a in `find renderscript/lib/$t -name \*.so`; do 130a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines file=`basename $a` 1311baebcdcb2f1f3d794c837166b925538fcd28acbStephen Hines cp `find $sys_lib_dir $obj_lib_dir -name $file | head -1` $a || exit 4 132a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines done 133a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines 134a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines for a in `find renderscript/lib/$t -name \*.bc`; do 135a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines file=`basename $a` 1362b5c5e131e91dd0c4190220fd35fd81c38768e98Tim Murray cp `find $HOST_LIB_DIR $HOST_LIB64_DIR $sys_lib_dir $obj_lib_dir -name $file | head -1` $a || exit 5 137a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines done 138be96565d929af53b8009014fbec224004c64e4faStephen Hines done 139be96565d929af53b8009014fbec224004c64e4faStephen Hines 140a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines # javalib.jar 141a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines cp $MY_ANDROID_DIR/out/target/common/obj/JAVA_LIBRARIES/android-support-v8-renderscript_intermediates/javalib.jar renderscript/lib 142be96565d929af53b8009014fbec224004c64e4faStephen Hines 143a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hinesfi 144be96565d929af53b8009014fbec224004c64e4faStephen Hines 145be96565d929af53b8009014fbec224004c64e4faStephen Hines# Copy header files for compilers 146be96565d929af53b8009014fbec224004c64e4faStephen Hinescp $MY_ANDROID_DIR/external/clang/lib/Headers/*.h renderscript/clang-include 147be96565d929af53b8009014fbec224004c64e4faStephen Hinescp $MY_ANDROID_DIR/frameworks/rs/scriptc/* renderscript/include 148be96565d929af53b8009014fbec224004c64e4faStephen Hines 149be96565d929af53b8009014fbec224004c64e4faStephen Hines 150a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines# Host-specific tools (bin/ and lib/) 151be96565d929af53b8009014fbec224004c64e4faStephen HinesTOOLS_BIN=" 152be96565d929af53b8009014fbec224004c64e4faStephen Hinesbcc_compat 153be96565d929af53b8009014fbec224004c64e4faStephen Hinesllvm-rs-cc 154be96565d929af53b8009014fbec224004c64e4faStephen Hines" 155be96565d929af53b8009014fbec224004c64e4faStephen Hines 156be96565d929af53b8009014fbec224004c64e4faStephen HinesTOOLS_LIB=" 157a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hineslibbcc.$SONAME 158a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hineslibbcinfo.$SONAME 159a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hineslibclang.$SONAME 1601baebcdcb2f1f3d794c837166b925538fcd28acbStephen Hineslibc++.$SONAME 161a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen HineslibLLVM.$SONAME 162be96565d929af53b8009014fbec224004c64e4faStephen Hines" 163be96565d929af53b8009014fbec224004c64e4faStephen Hines 164be96565d929af53b8009014fbec224004c64e4faStephen Hinesfor a in $TOOLS_BIN; do 165a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines cp $ANDROID_HOST_OUT/bin/$a tools/$SHORT_OSNAME/ 166a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines strip tools/$SHORT_OSNAME/$a 167be96565d929af53b8009014fbec224004c64e4faStephen Hinesdone 168be96565d929af53b8009014fbec224004c64e4faStephen Hines 169be96565d929af53b8009014fbec224004c64e4faStephen Hinesfor a in $TOOLS_LIB; do 170a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines cp $ANDROID_HOST_OUT/lib/$a tools/$SHORT_OSNAME/ 171a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines strip tools/$SHORT_OSNAME/$a 172be96565d929af53b8009014fbec224004c64e4faStephen Hinesdone 173be96565d929af53b8009014fbec224004c64e4faStephen Hines 174a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hinesif [ $DARWIN -eq 0 ]; then 175a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines echo "DON'T FORGET TO UPDATE THE DARWIN COMPILER PREBUILTS!!!" 176a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hinesfi 177