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