1*e1eccf28SAndroid Build Coastguard Worker#!/bin/bash 2*e1eccf28SAndroid Build Coastguard Worker 3*e1eccf28SAndroid Build Coastguard Worker# We are currently in frameworks/rs, so compute our top-level directory. 4*e1eccf28SAndroid Build Coastguard WorkerMY_ANDROID_DIR=$PWD/../../ 5*e1eccf28SAndroid Build Coastguard Workercd $MY_ANDROID_DIR 6*e1eccf28SAndroid Build Coastguard Worker 7*e1eccf28SAndroid Build Coastguard Workerif [[ $OSTYPE == darwin* ]]; 8*e1eccf28SAndroid Build Coastguard Workerthen 9*e1eccf28SAndroid Build Coastguard Worker 10*e1eccf28SAndroid Build Coastguard Worker DARWIN=1 11*e1eccf28SAndroid Build Coastguard Worker SHORT_OSNAME=darwin 12*e1eccf28SAndroid Build Coastguard Worker SONAME=dylib 13*e1eccf28SAndroid Build Coastguard Worker # Only build arm on darwin. 14*e1eccf28SAndroid Build Coastguard Worker TARGETS=(arm) 15*e1eccf28SAndroid Build Coastguard Worker SYS_NAMES=(generic) 16*e1eccf28SAndroid Build Coastguard Worker NUM_CORES=`sysctl -n hw.ncpu` 17*e1eccf28SAndroid Build Coastguard Worker 18*e1eccf28SAndroid Build Coastguard Workerelse 19*e1eccf28SAndroid Build Coastguard Worker 20*e1eccf28SAndroid Build Coastguard Worker DARWIN=0 21*e1eccf28SAndroid Build Coastguard Worker SHORT_OSNAME=linux 22*e1eccf28SAndroid Build Coastguard Worker SONAME=so 23*e1eccf28SAndroid Build Coastguard Worker # Target architectures and their system library names. 24*e1eccf28SAndroid Build Coastguard Worker TARGETS=(arm x86 arm64 x86_64) 25*e1eccf28SAndroid Build Coastguard Worker SYS_NAMES=(generic generic_x86 generic_arm64 generic_x86_64) 26*e1eccf28SAndroid Build Coastguard Worker NUM_CORES=`cat /proc/cpuinfo | grep processor | tail -n 1 | cut -f 2 -d :` 27*e1eccf28SAndroid Build Coastguard Worker NUM_CORES=$(($NUM_CORES+1)) 28*e1eccf28SAndroid Build Coastguard Worker 29*e1eccf28SAndroid Build Coastguard Workerfi 30*e1eccf28SAndroid Build Coastguard Worker 31*e1eccf28SAndroid Build Coastguard Worker# Make sure we build all of LLVM from scratch. 32*e1eccf28SAndroid Build Coastguard Workerexport FORCE_BUILD_LLVM_COMPONENTS=true 33*e1eccf28SAndroid Build Coastguard Worker 34*e1eccf28SAndroid Build Coastguard Worker# Skip building LLVM and compiler-rt tests while updating prebuilts 35*e1eccf28SAndroid Build Coastguard Workerexport SKIP_LLVM_TESTS=true 36*e1eccf28SAndroid Build Coastguard Worker 37*e1eccf28SAndroid Build Coastguard Worker# RENDERSCRIPT_V8_JAR is the generated JAVA static lib for RenderScript Support Lib. 38*e1eccf28SAndroid Build Coastguard WorkerRENDERSCRIPT_V8_JAR=out/target/common/obj/JAVA_LIBRARIES/android-support-v8-renderscript_intermediates/classes.jar 39*e1eccf28SAndroid Build Coastguard Worker 40*e1eccf28SAndroid Build Coastguard Worker# ANDROID_HOST_OUT is where the new prebuilts will be constructed/copied from. 41*e1eccf28SAndroid Build Coastguard WorkerANDROID_HOST_OUT=$MY_ANDROID_DIR/out/host/$SHORT_OSNAME-x86/ 42*e1eccf28SAndroid Build Coastguard Worker 43*e1eccf28SAndroid Build Coastguard Worker# HOST_LIB_DIR allows us to pick up the built librsrt_*.bc libraries. 44*e1eccf28SAndroid Build Coastguard WorkerHOST_LIB_DIR=$ANDROID_HOST_OUT/lib 45*e1eccf28SAndroid Build Coastguard Worker 46*e1eccf28SAndroid Build Coastguard Worker# HOST_LIB64_DIR 47*e1eccf28SAndroid Build Coastguard WorkerHOST_LIB64_DIR=$ANDROID_HOST_OUT/lib64 48*e1eccf28SAndroid Build Coastguard Worker 49*e1eccf28SAndroid Build Coastguard Worker# PREBUILTS_DIR is where we want to copy our new files to. 50*e1eccf28SAndroid Build Coastguard WorkerPREBUILTS_DIR=$MY_ANDROID_DIR/prebuilts/sdk/ 51*e1eccf28SAndroid Build Coastguard Worker 52*e1eccf28SAndroid Build Coastguard Workerprint_usage() { 53*e1eccf28SAndroid Build Coastguard Worker echo "USAGE: $0 [-h|--help] [-j <num>] [-n|--no-build] [--no-start] [-x]" 54*e1eccf28SAndroid Build Coastguard Worker echo "OPTIONS:" 55*e1eccf28SAndroid Build Coastguard Worker echo " -j <num> : Specify parallelism for builds." 56*e1eccf28SAndroid Build Coastguard Worker echo " -h, --help : Display this help message." 57*e1eccf28SAndroid Build Coastguard Worker echo " -n, --no-build : Skip the build step and just copy files." 58*e1eccf28SAndroid Build Coastguard Worker echo " --no-start : Do not \"repo start\" a new branch for the copied files." 59*e1eccf28SAndroid Build Coastguard Worker echo " -x : Display commands before they are executed." 60*e1eccf28SAndroid Build Coastguard Worker} 61*e1eccf28SAndroid Build Coastguard Worker 62*e1eccf28SAndroid Build Coastguard Workerbuild_rs_libs() { 63*e1eccf28SAndroid Build Coastguard Worker echo Building for target $1 64*e1eccf28SAndroid Build Coastguard Worker lunch $1 65*e1eccf28SAndroid Build Coastguard Worker # Build the RS runtime libraries. 66*e1eccf28SAndroid Build Coastguard Worker cd $MY_ANDROID_DIR/frameworks/rs/driver/runtime && mma -j$NUM_CORES && cd - || exit 1 67*e1eccf28SAndroid Build Coastguard Worker # Build libRSSupport.so 68*e1eccf28SAndroid Build Coastguard Worker cd $MY_ANDROID_DIR/frameworks/rs/support && mma -j$NUM_CORES && cd - || exit 2 69*e1eccf28SAndroid Build Coastguard Worker # Build android-support-v8-renderscript.jar 70*e1eccf28SAndroid Build Coastguard Worker # We need to explicitly do so, since JACK won't generate a jar by default. 71*e1eccf28SAndroid Build Coastguard Worker cd $MY_ANDROID_DIR && make $RENDERSCRIPT_V8_JAR -j$NUM_CORES && cd - || exit 3 72*e1eccf28SAndroid Build Coastguard Worker # Build libcompiler-rt.a 73*e1eccf28SAndroid Build Coastguard Worker cd $MY_ANDROID_DIR/external/compiler-rt && mma -j$NUM_CORES && cd - || exit 4 74*e1eccf28SAndroid Build Coastguard Worker # Build the blas libraries. 75*e1eccf28SAndroid Build Coastguard Worker cd $MY_ANDROID_DIR/external/cblas && mma -j$NUM_CORES && cd - || exit 5 76*e1eccf28SAndroid Build Coastguard Worker} 77*e1eccf28SAndroid Build Coastguard Worker 78*e1eccf28SAndroid Build Coastguard Workerbuild_rstest_compatlib() { 79*e1eccf28SAndroid Build Coastguard Worker echo Building for target $1 80*e1eccf28SAndroid Build Coastguard Worker lunch $1 81*e1eccf28SAndroid Build Coastguard Worker # Build a sample support application to ensure that all the pieces are up to date. 82*e1eccf28SAndroid Build Coastguard Worker cd $MY_ANDROID_DIR/frameworks/rs/tests/java_api/RSTest_CompatLib/ && mma -j$NUM_CORES FORCE_BUILD_RS_COMPAT=true && cd - || exit 6 83*e1eccf28SAndroid Build Coastguard Worker} 84*e1eccf28SAndroid Build Coastguard Worker 85*e1eccf28SAndroid Build Coastguard Workerbuild_rs_host_tools() { 86*e1eccf28SAndroid Build Coastguard Worker echo "Building RS host tools (llvm-rs-cc and bcc_compat)" 87*e1eccf28SAndroid Build Coastguard Worker lunch aosp_arm64-userdebug 88*e1eccf28SAndroid Build Coastguard Worker 89*e1eccf28SAndroid Build Coastguard Worker cd $MY_ANDROID_DIR/frameworks/compile/slang && mma -j$NUM_CORES && cd - || exit 7 90*e1eccf28SAndroid Build Coastguard Worker cd $MY_ANDROID_DIR/frameworks/compile/libbcc && mma -j$NUM_CORES && cd - || exit 8 91*e1eccf28SAndroid Build Coastguard Worker} 92*e1eccf28SAndroid Build Coastguard Worker 93*e1eccf28SAndroid Build Coastguard Worker# Build everything by default 94*e1eccf28SAndroid Build Coastguard Workerbuild_rs=1 95*e1eccf28SAndroid Build Coastguard Worker 96*e1eccf28SAndroid Build Coastguard Worker# repo start by default 97*e1eccf28SAndroid Build Coastguard Workerrepo_start=1 98*e1eccf28SAndroid Build Coastguard Worker 99*e1eccf28SAndroid Build Coastguard Workerwhile [ $# -gt 0 ]; do 100*e1eccf28SAndroid Build Coastguard Worker case "$1" in 101*e1eccf28SAndroid Build Coastguard Worker -h|--help) 102*e1eccf28SAndroid Build Coastguard Worker print_usage 103*e1eccf28SAndroid Build Coastguard Worker exit 0 104*e1eccf28SAndroid Build Coastguard Worker ;; 105*e1eccf28SAndroid Build Coastguard Worker -j) 106*e1eccf28SAndroid Build Coastguard Worker if [[ $# -gt 1 && "$2" =~ ^[0-9]+$ ]]; then 107*e1eccf28SAndroid Build Coastguard Worker NUM_CORES="$2" 108*e1eccf28SAndroid Build Coastguard Worker shift 109*e1eccf28SAndroid Build Coastguard Worker else 110*e1eccf28SAndroid Build Coastguard Worker echo Expected numeric argument after "$1" 111*e1eccf28SAndroid Build Coastguard Worker print_usage 112*e1eccf28SAndroid Build Coastguard Worker exit 99 113*e1eccf28SAndroid Build Coastguard Worker fi 114*e1eccf28SAndroid Build Coastguard Worker ;; 115*e1eccf28SAndroid Build Coastguard Worker -n|--no-build) 116*e1eccf28SAndroid Build Coastguard Worker build_rs=0 117*e1eccf28SAndroid Build Coastguard Worker ;; 118*e1eccf28SAndroid Build Coastguard Worker --no-start) 119*e1eccf28SAndroid Build Coastguard Worker repo_start=0 120*e1eccf28SAndroid Build Coastguard Worker ;; 121*e1eccf28SAndroid Build Coastguard Worker -x) 122*e1eccf28SAndroid Build Coastguard Worker # set lets us enable bash -x mode. 123*e1eccf28SAndroid Build Coastguard Worker set -x 124*e1eccf28SAndroid Build Coastguard Worker ;; 125*e1eccf28SAndroid Build Coastguard Worker *) 126*e1eccf28SAndroid Build Coastguard Worker echo Unknown argument: "$1" 127*e1eccf28SAndroid Build Coastguard Worker print_usage 128*e1eccf28SAndroid Build Coastguard Worker exit 99 129*e1eccf28SAndroid Build Coastguard Worker break 130*e1eccf28SAndroid Build Coastguard Worker ;; 131*e1eccf28SAndroid Build Coastguard Worker esac 132*e1eccf28SAndroid Build Coastguard Worker shift 133*e1eccf28SAndroid Build Coastguard Workerdone 134*e1eccf28SAndroid Build Coastguard Worker 135*e1eccf28SAndroid Build Coastguard Workerif [ $build_rs -eq 1 ]; then 136*e1eccf28SAndroid Build Coastguard Worker 137*e1eccf28SAndroid Build Coastguard Worker echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!! 138*e1eccf28SAndroid Build Coastguard Worker echo !!! BUILDING RS PREBUILTS !!! 139*e1eccf28SAndroid Build Coastguard Worker echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!! 140*e1eccf28SAndroid Build Coastguard Worker 141*e1eccf28SAndroid Build Coastguard Worker echo "Using $NUM_CORES cores" 142*e1eccf28SAndroid Build Coastguard Worker 143*e1eccf28SAndroid Build Coastguard Worker source build/envsetup.sh 144*e1eccf28SAndroid Build Coastguard Worker 145*e1eccf28SAndroid Build Coastguard Worker build_rs_host_tools 146*e1eccf28SAndroid Build Coastguard Worker 147*e1eccf28SAndroid Build Coastguard Worker for t in ${TARGETS[@]}; do 148*e1eccf28SAndroid Build Coastguard Worker build_rs_libs aosp_${t}-userdebug 149*e1eccf28SAndroid Build Coastguard Worker done 150*e1eccf28SAndroid Build Coastguard Worker 151*e1eccf28SAndroid Build Coastguard Worker echo DONE BUILDING RS PREBUILTS 152*e1eccf28SAndroid Build Coastguard Worker 153*e1eccf28SAndroid Build Coastguard Workerelse 154*e1eccf28SAndroid Build Coastguard Worker 155*e1eccf28SAndroid Build Coastguard Worker echo SKIPPING BUILD OF RS PREBUILTS 156*e1eccf28SAndroid Build Coastguard Worker 157*e1eccf28SAndroid Build Coastguard Workerfi 158*e1eccf28SAndroid Build Coastguard Worker 159*e1eccf28SAndroid Build Coastguard Workercd $PREBUILTS_DIR || exit 3 160*e1eccf28SAndroid Build Coastguard Worker 161*e1eccf28SAndroid Build Coastguard Worker# Verify that project is "clean" 162*e1eccf28SAndroid Build Coastguard Workerif [ `git status --short --untracked-files=no | wc -l` -ne 0 ]; then 163*e1eccf28SAndroid Build Coastguard Worker echo $PREBUILTS_DIR contains modified files -- aborting. 164*e1eccf28SAndroid Build Coastguard Worker git status --untracked-files=no 165*e1eccf28SAndroid Build Coastguard Worker exit 1 166*e1eccf28SAndroid Build Coastguard Workerfi 167*e1eccf28SAndroid Build Coastguard Worker 168*e1eccf28SAndroid Build Coastguard Workerif [ $repo_start -eq 1 ]; then 169*e1eccf28SAndroid Build Coastguard Worker DATE=`date +%Y%m%d` 170*e1eccf28SAndroid Build Coastguard Worker repo start pb_$DATE . 171*e1eccf28SAndroid Build Coastguard Worker if [ $? -ne 0 ]; then 172*e1eccf28SAndroid Build Coastguard Worker echo repo start failed -- aborting. 173*e1eccf28SAndroid Build Coastguard Worker exit 1 174*e1eccf28SAndroid Build Coastguard Worker fi 175*e1eccf28SAndroid Build Coastguard Workerfi 176*e1eccf28SAndroid Build Coastguard Worker 177*e1eccf28SAndroid Build Coastguard Worker# Don't copy device prebuilts on Darwin. We don't need/use them. 178*e1eccf28SAndroid Build Coastguard Workerif [ $DARWIN -eq 0 ]; then 179*e1eccf28SAndroid Build Coastguard Worker for i in $(seq 0 $((${#TARGETS[@]} - 1))); do 180*e1eccf28SAndroid Build Coastguard Worker t=${TARGETS[$i]} 181*e1eccf28SAndroid Build Coastguard Worker sys_name=${SYS_NAMES[$i]} 182*e1eccf28SAndroid Build Coastguard Worker case "$sys_name" in 183*e1eccf28SAndroid Build Coastguard Worker *64) 184*e1eccf28SAndroid Build Coastguard Worker sys_lib_dir=$MY_ANDROID_DIR/out/target/product/$sys_name/system/lib64 185*e1eccf28SAndroid Build Coastguard Worker ;; 186*e1eccf28SAndroid Build Coastguard Worker *) 187*e1eccf28SAndroid Build Coastguard Worker sys_lib_dir=$MY_ANDROID_DIR/out/target/product/$sys_name/system/lib 188*e1eccf28SAndroid Build Coastguard Worker ;; 189*e1eccf28SAndroid Build Coastguard Worker esac 190*e1eccf28SAndroid Build Coastguard Worker obj_lib_dir=$MY_ANDROID_DIR/out/target/product/$sys_name/obj/SHARED_LIBRARIES 191*e1eccf28SAndroid Build Coastguard Worker obj_static_lib_dir=$MY_ANDROID_DIR/out/target/product/$sys_name/obj/STATIC_LIBRARIES 192*e1eccf28SAndroid Build Coastguard Worker 193*e1eccf28SAndroid Build Coastguard Worker for a in `find renderscript/lib/$t -name \*.so`; do 194*e1eccf28SAndroid Build Coastguard Worker file=`basename $a` 195*e1eccf28SAndroid Build Coastguard Worker name="${file%.*}" 196*e1eccf28SAndroid Build Coastguard Worker cp $obj_lib_dir/${name}_intermediates/$file $a || exit 4 197*e1eccf28SAndroid Build Coastguard Worker done 198*e1eccf28SAndroid Build Coastguard Worker 199*e1eccf28SAndroid Build Coastguard Worker for a in `find renderscript/lib/$t -name \*.bc`; do 200*e1eccf28SAndroid Build Coastguard Worker file=`basename $a` 201*e1eccf28SAndroid Build Coastguard Worker cp `find $HOST_LIB_DIR $HOST_LIB64_DIR $sys_lib_dir $obj_lib_dir -name $file | head -1` $a || exit 5 202*e1eccf28SAndroid Build Coastguard Worker done 203*e1eccf28SAndroid Build Coastguard Worker 204*e1eccf28SAndroid Build Coastguard Worker for a in `find renderscript/lib/$t -name \*.a`; do 205*e1eccf28SAndroid Build Coastguard Worker file=`basename $a` 206*e1eccf28SAndroid Build Coastguard Worker name="${file%.*}" 207*e1eccf28SAndroid Build Coastguard Worker cp $obj_static_lib_dir/${name}_intermediates/$file $a || exit 4 208*e1eccf28SAndroid Build Coastguard Worker done 209*e1eccf28SAndroid Build Coastguard Worker 210*e1eccf28SAndroid Build Coastguard Worker done 211*e1eccf28SAndroid Build Coastguard Worker 212*e1eccf28SAndroid Build Coastguard Worker # javalib.jar 213*e1eccf28SAndroid Build Coastguard Worker cp $MY_ANDROID_DIR/$RENDERSCRIPT_V8_JAR renderscript/lib/javalib.jar 214*e1eccf28SAndroid Build Coastguard Worker 215*e1eccf28SAndroid Build Coastguard Workerfi 216*e1eccf28SAndroid Build Coastguard Worker 217*e1eccf28SAndroid Build Coastguard Worker# Copy header files for compilers 218*e1eccf28SAndroid Build Coastguard Workercp $MY_ANDROID_DIR/external/clang/lib/Headers/*.h renderscript/clang-include 219*e1eccf28SAndroid Build Coastguard Workercp $MY_ANDROID_DIR/frameworks/rs/script_api/include/* renderscript/include 220*e1eccf28SAndroid Build Coastguard Worker 221*e1eccf28SAndroid Build Coastguard Worker 222*e1eccf28SAndroid Build Coastguard Worker# Host-specific tools (bin/ and lib/) 223*e1eccf28SAndroid Build Coastguard WorkerTOOLS_BIN=" 224*e1eccf28SAndroid Build Coastguard Workerbcc_compat 225*e1eccf28SAndroid Build Coastguard Workerllvm-rs-cc 226*e1eccf28SAndroid Build Coastguard Worker" 227*e1eccf28SAndroid Build Coastguard Worker 228*e1eccf28SAndroid Build Coastguard WorkerTOOLS_LIB=" 229*e1eccf28SAndroid Build Coastguard Workerlibbcc.$SONAME 230*e1eccf28SAndroid Build Coastguard Workerlibbcinfo.$SONAME 231*e1eccf28SAndroid Build Coastguard Workerlibclang_android.$SONAME 232*e1eccf28SAndroid Build Coastguard Workerlibc++.$SONAME 233*e1eccf28SAndroid Build Coastguard WorkerlibLLVM_android.$SONAME 234*e1eccf28SAndroid Build Coastguard Worker" 235*e1eccf28SAndroid Build Coastguard Worker 236*e1eccf28SAndroid Build Coastguard WorkerTOOLS_LIB32="libc++.$SONAME" 237*e1eccf28SAndroid Build Coastguard Worker 238*e1eccf28SAndroid Build Coastguard Workerfor a in $TOOLS_BIN; do 239*e1eccf28SAndroid Build Coastguard Worker cp $ANDROID_HOST_OUT/bin/$a tools/$SHORT_OSNAME/bin 240*e1eccf28SAndroid Build Coastguard Worker strip tools/$SHORT_OSNAME/bin/$a 241*e1eccf28SAndroid Build Coastguard Workerdone 242*e1eccf28SAndroid Build Coastguard Worker 243*e1eccf28SAndroid Build Coastguard Workerfor a in $TOOLS_LIB; do 244*e1eccf28SAndroid Build Coastguard Worker cp $HOST_LIB64_DIR/$a tools/$SHORT_OSNAME/lib64 245*e1eccf28SAndroid Build Coastguard Worker strip tools/$SHORT_OSNAME/lib64/$a 246*e1eccf28SAndroid Build Coastguard Workerdone 247*e1eccf28SAndroid Build Coastguard Worker 248*e1eccf28SAndroid Build Coastguard Workerfor a in $TOOLS_LIB32; do 249*e1eccf28SAndroid Build Coastguard Worker cp $HOST_LIB_DIR/$a tools/$SHORT_OSNAME/lib 250*e1eccf28SAndroid Build Coastguard Worker strip tools/$SHORT_OSNAME/lib/$a 251*e1eccf28SAndroid Build Coastguard Workerdone 252*e1eccf28SAndroid Build Coastguard Worker 253*e1eccf28SAndroid Build Coastguard Workerif [ $build_rs -eq 1 ]; then 254*e1eccf28SAndroid Build Coastguard Worker 255*e1eccf28SAndroid Build Coastguard Worker echo BUILDING RSTest_CompatLib with the new prebuilts 256*e1eccf28SAndroid Build Coastguard Worker 257*e1eccf28SAndroid Build Coastguard Worker echo "Using $NUM_CORES cores" 258*e1eccf28SAndroid Build Coastguard Worker 259*e1eccf28SAndroid Build Coastguard Worker source $MY_ANDROID_DIR/build/envsetup.sh 260*e1eccf28SAndroid Build Coastguard Worker 261*e1eccf28SAndroid Build Coastguard Worker for t in ${TARGETS[@]}; do 262*e1eccf28SAndroid Build Coastguard Worker build_rstest_compatlib aosp_${t}-userdebug 263*e1eccf28SAndroid Build Coastguard Worker done 264*e1eccf28SAndroid Build Coastguard Worker 265*e1eccf28SAndroid Build Coastguard Worker echo DONE BUILDING RSTest_CompatLib 266*e1eccf28SAndroid Build Coastguard Worker 267*e1eccf28SAndroid Build Coastguard Workerelse 268*e1eccf28SAndroid Build Coastguard Worker 269*e1eccf28SAndroid Build Coastguard Worker echo SKIPPING BUILD OF RSTest_CompatLib 270*e1eccf28SAndroid Build Coastguard Worker 271*e1eccf28SAndroid Build Coastguard Workerfi 272*e1eccf28SAndroid Build Coastguard Worker 273*e1eccf28SAndroid Build Coastguard Workerif [ $DARWIN -eq 0 ]; then 274*e1eccf28SAndroid Build Coastguard Worker echo "DON'T FORGET TO UPDATE THE DARWIN COMPILER PREBUILTS!!!" 275*e1eccf28SAndroid Build Coastguard Workerfi 276