Home | History | Annotate | Download | only in rs
      1 #!/bin/bash
      2 
      3 # We are currently in frameworks/rs, so compute our top-level directory.
      4 MY_ANDROID_DIR=$PWD/../../
      5 cd $MY_ANDROID_DIR
      6 
      7 if [[ $OSTYPE == darwin* ]];
      8 then
      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 
     18 else
     19 
     20   DARWIN=0
     21   SHORT_OSNAME=linux
     22   SONAME=so
     23   # Target architectures and their system library names.
     24   TARGETS=(arm mips x86 arm64 x86_64)
     25   SYS_NAMES=(generic generic_mips 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 
     29 fi
     30 
     31 echo "Using $NUM_CORES cores"
     32 
     33 # Turn off the build cache and make sure we build all of LLVM from scratch.
     34 export ANDROID_USE_BUILDCACHE=false
     35 export FORCE_BUILD_LLVM_COMPONENTS=true
     36 
     37 # Skip building LLVM and compiler-rt tests while updating prebuilts
     38 export SKIP_LLVM_TESTS=true
     39 
     40 # Ensure that we have constructed the latest "bcc" for the host. Without
     41 # this variable, we don't build the .so files, hence we never construct the
     42 # actual required compiler pieces.
     43 export FORCE_BUILD_RS_COMPAT=true
     44 
     45 # RENDERSCRIPT_V8_JAR is the generated JAVA static lib for RenderScript Support Lib.
     46 RENDERSCRIPT_V8_JAR=out/target/common/obj/JAVA_LIBRARIES/android-support-v8-renderscript_intermediates/classes.jar
     47 
     48 # ANDROID_HOST_OUT is where the new prebuilts will be constructed/copied from.
     49 ANDROID_HOST_OUT=$MY_ANDROID_DIR/out/host/$SHORT_OSNAME-x86/
     50 
     51 # HOST_LIB_DIR allows us to pick up the built librsrt_*.bc libraries.
     52 HOST_LIB_DIR=$ANDROID_HOST_OUT/lib
     53 
     54 # HOST_LIB64_DIR
     55 HOST_LIB64_DIR=$ANDROID_HOST_OUT/lib64
     56 
     57 # PREBUILTS_DIR is where we want to copy our new files to.
     58 PREBUILTS_DIR=$MY_ANDROID_DIR/prebuilts/sdk/
     59 
     60 print_usage() {
     61   echo "USAGE: $0 [-h|--help] [-n|--no-build] [-x]"
     62   echo "OPTIONS:"
     63   echo "    -h, --help     : Display this help message."
     64   echo "    -n, --no-build : Skip the build step and just copy files."
     65   echo "    -x             : Display commands before they are executed."
     66 }
     67 
     68 build_rs_libs() {
     69   echo Building for target $1
     70   lunch $1
     71   # Build the RS runtime libraries.
     72   cd $MY_ANDROID_DIR/frameworks/rs/driver/runtime && mma -j$NUM_CORES && cd - || exit 1
     73   # Build a sample support application to ensure that all the pieces are up to date.
     74   cd $MY_ANDROID_DIR/frameworks/rs/java/tests/RSTest_CompatLib/ && mma -j$NUM_CORES && cd - || exit 2
     75   # Build android-support-v8-renderscript.jar
     76   # We need to explicitly do so, since JACK won't generate a jar by default.
     77   cd $MY_ANDROID_DIR && make $RENDERSCRIPT_V8_JAR -j$NUM_CORES && cd - || exit 3
     78   # Build libcompiler-rt.a
     79   cd $MY_ANDROID_DIR/external/compiler-rt && mma -j$NUM_CORES && cd - || exit 4
     80   # Build the blas libraries.
     81   cd $MY_ANDROID_DIR/external/cblas && mma -j$NUM_CORES && cd - || exit 5
     82 }
     83 
     84 # Build everything by default
     85 build_rs=1
     86 
     87 while [ $# -gt 0 ]; do
     88   case "$1" in
     89     -h|--help)
     90       print_usage
     91       exit 0
     92       ;;
     93     -n|--no-build)
     94       build_rs=0
     95       ;;
     96     -x)
     97       # set lets us enable bash -x mode.
     98       set -x
     99       ;;
    100     *)
    101       echo Unknown argument: "$1"
    102       print_usage
    103       exit 99
    104       break
    105       ;;
    106   esac
    107   shift
    108 done
    109 
    110 if [ $build_rs -eq 1 ]; then
    111 
    112   echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    113   echo !!! BUILDING RS PREBUILTS !!!
    114   echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    115 
    116   source build/envsetup.sh
    117 
    118   for t in ${TARGETS[@]}; do
    119     build_rs_libs aosp_${t}-userdebug
    120   done
    121 
    122   echo DONE BUILDING RS PREBUILTS
    123 
    124 else
    125 
    126   echo SKIPPING BUILD OF RS PREBUILTS
    127 
    128 fi
    129 
    130 DATE=`date +%Y%m%d`
    131 
    132 cd $PREBUILTS_DIR || exit 3
    133 repo start pb_$DATE .
    134 
    135 # Don't copy device prebuilts on Darwin. We don't need/use them.
    136 if [ $DARWIN -eq 0 ]; then
    137   for i in $(seq 0 $((${#TARGETS[@]} - 1))); do
    138     t=${TARGETS[$i]}
    139     sys_name=${SYS_NAMES[$i]}
    140     case "$sys_name" in
    141       *64)
    142         sys_lib_dir=$MY_ANDROID_DIR/out/target/product/$sys_name/system/lib64
    143         ;;
    144       *)
    145         sys_lib_dir=$MY_ANDROID_DIR/out/target/product/$sys_name/system/lib
    146         ;;
    147     esac
    148     obj_lib_dir=$MY_ANDROID_DIR/out/target/product/$sys_name/obj/lib
    149     obj_static_lib_dir=$MY_ANDROID_DIR/out/target/product/$sys_name/obj/STATIC_LIBRARIES
    150 
    151     for a in `find renderscript/lib/$t -name \*.so`; do
    152       file=`basename $a`
    153       cp `find $sys_lib_dir $obj_lib_dir -name $file | head -1` $a || exit 4
    154     done
    155 
    156     for a in `find renderscript/lib/$t -name \*.bc`; do
    157       file=`basename $a`
    158       cp `find $HOST_LIB_DIR $HOST_LIB64_DIR $sys_lib_dir $obj_lib_dir -name $file | head -1` $a || exit 5
    159     done
    160 
    161     for a in `find renderscript/lib/$t -name \*.a`; do
    162       file=`basename $a`
    163       cp `find $obj_static_lib_dir -name $file | head -1` $a || exit 4
    164     done
    165 
    166   done
    167 
    168   # javalib.jar
    169   cp $MY_ANDROID_DIR/$RENDERSCRIPT_V8_JAR renderscript/lib/javalib.jar
    170 
    171 fi
    172 
    173 # Copy header files for compilers
    174 cp $MY_ANDROID_DIR/external/clang/lib/Headers/*.h renderscript/clang-include
    175 cp $MY_ANDROID_DIR/frameworks/rs/scriptc/* renderscript/include
    176 
    177 
    178 # Host-specific tools (bin/ and lib/)
    179 TOOLS_BIN="
    180 bcc_compat
    181 llvm-rs-cc
    182 "
    183 
    184 TOOLS_LIB="
    185 libbcc.$SONAME
    186 libbcinfo.$SONAME
    187 libclang.$SONAME
    188 libc++.$SONAME
    189 libLLVM.$SONAME
    190 "
    191 
    192 TOOLS_LIB32="libc++.$SONAME"
    193 
    194 for a in $TOOLS_BIN; do
    195   cp $ANDROID_HOST_OUT/bin/$a tools/$SHORT_OSNAME/bin
    196   strip tools/$SHORT_OSNAME/bin/$a
    197 done
    198 
    199 for a in $TOOLS_LIB; do
    200   cp $HOST_LIB64_DIR/$a tools/$SHORT_OSNAME/lib64
    201   strip tools/$SHORT_OSNAME/lib64/$a
    202 done
    203 
    204 for a in $TOOLS_LIB32; do
    205   cp $HOST_LIB_DIR/$a tools/$SHORT_OSNAME/lib
    206   strip tools/$SHORT_OSNAME/lib/$a
    207 done
    208 
    209 if [ $DARWIN -eq 0 ]; then
    210   echo "DON'T FORGET TO UPDATE THE DARWIN COMPILER PREBUILTS!!!"
    211 fi
    212