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 == 'darwin13' ];
      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)
     25   SYS_NAMES=(generic generic_mips generic_x86)
     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 # Ensure that we have constructed the latest "bcc" for the host. Without
     38 # this variable, we don't build the .so files, hence we never construct the
     39 # actual required compiler pieces.
     40 export FORCE_BUILD_RS_COMPAT=true
     41 
     42 # ANDROID_HOST_OUT is where the new prebuilts will be constructed/copied from.
     43 ANDROID_HOST_OUT=$MY_ANDROID_DIR/out/host/$SHORT_OSNAME-x86/
     44 
     45 # HOST_LIB_DIR allows us to pick up the built librsrt_*.bc libraries.
     46 HOST_LIB_DIR=$ANDROID_HOST_OUT/lib
     47 
     48 # HOST_LIB64_DIR
     49 HOST_LIB64_DIR=$ANDROID_HOST_OUT/lib64
     50 
     51 # PREBUILTS_DIR is where we want to copy our new files to.
     52 PREBUILTS_DIR=$MY_ANDROID_DIR/prebuilts/sdk/
     53 
     54 print_usage() {
     55   echo "USAGE: $0 [-h|--help] [-n|--no-build] [-x]"
     56   echo "OPTIONS:"
     57   echo "    -h, --help     : Display this help message."
     58   echo "    -n, --no-build : Skip the build step and just copy files."
     59   echo "    -x             : Display commands before they are executed."
     60 }
     61 
     62 build_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 a sample support application to ensure that all the pieces are up to date.
     68   cd $MY_ANDROID_DIR/frameworks/rs/java/tests/RSTest_CompatLib/ && mma -j$NUM_CORES && cd - || exit 2
     69 
     70 }
     71 
     72 # Build everything by default
     73 build_rs=1
     74 
     75 while [ $# -gt 0 ]; do
     76   case "$1" in
     77     -h|--help)
     78       print_usage
     79       exit 0
     80       ;;
     81     -n|--no-build)
     82       build_rs=0
     83       ;;
     84     -x)
     85       # set lets us enable bash -x mode.
     86       set -x
     87       ;;
     88     *)
     89       echo Unknown argument: "$1"
     90       print_usage
     91       exit 99
     92       break
     93       ;;
     94   esac
     95   shift
     96 done
     97 
     98 if [ $build_rs -eq 1 ]; then
     99 
    100   echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    101   echo !!! BUILDING RS PREBUILTS !!!
    102   echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    103 
    104   source build/envsetup.sh
    105 
    106   for t in ${TARGETS[@]}; do
    107     build_rs_libs aosp_${t}-userdebug
    108   done
    109 
    110   echo DONE BUILDING RS PREBUILTS
    111 
    112 else
    113 
    114   echo SKIPPING BUILD OF RS PREBUILTS
    115 
    116 fi
    117 
    118 DATE=`date +%Y%m%d`
    119 
    120 cd $PREBUILTS_DIR || exit 3
    121 repo start pb_$DATE .
    122 
    123 # Don't copy device prebuilts on Darwin. We don't need/use them.
    124 if [ $DARWIN -eq 0 ]; then
    125   for i in $(seq 0 $((${#TARGETS[@]} - 1))); do
    126     t=${TARGETS[$i]}
    127     sys_lib_dir=$MY_ANDROID_DIR/out/target/product/${SYS_NAMES[$i]}/system/lib
    128     obj_lib_dir=$MY_ANDROID_DIR/out/target/product/${SYS_NAMES[$i]}/obj/lib
    129     for a in `find renderscript/lib/$t -name \*.so`; do
    130       file=`basename $a`
    131       cp `find $sys_lib_dir $obj_lib_dir -name $file | head -1` $a || exit 4
    132     done
    133 
    134     for a in `find renderscript/lib/$t -name \*.bc`; do
    135       file=`basename $a`
    136       cp `find $HOST_LIB_DIR $HOST_LIB64_DIR $sys_lib_dir $obj_lib_dir -name $file | head -1` $a || exit 5
    137     done
    138   done
    139 
    140   # javalib.jar
    141   cp $MY_ANDROID_DIR/out/target/common/obj/JAVA_LIBRARIES/android-support-v8-renderscript_intermediates/javalib.jar renderscript/lib
    142 
    143 fi
    144 
    145 # Copy header files for compilers
    146 cp $MY_ANDROID_DIR/external/clang/lib/Headers/*.h renderscript/clang-include
    147 cp $MY_ANDROID_DIR/frameworks/rs/scriptc/* renderscript/include
    148 
    149 
    150 # Host-specific tools (bin/ and lib/)
    151 TOOLS_BIN="
    152 bcc_compat
    153 llvm-rs-cc
    154 "
    155 
    156 TOOLS_LIB="
    157 libbcc.$SONAME
    158 libbcinfo.$SONAME
    159 libclang.$SONAME
    160 libc++.$SONAME
    161 libLLVM.$SONAME
    162 "
    163 
    164 for a in $TOOLS_BIN; do
    165   cp $ANDROID_HOST_OUT/bin/$a tools/$SHORT_OSNAME/
    166   strip tools/$SHORT_OSNAME/$a
    167 done
    168 
    169 for a in $TOOLS_LIB; do
    170   cp $ANDROID_HOST_OUT/lib/$a tools/$SHORT_OSNAME/
    171   strip tools/$SHORT_OSNAME/$a
    172 done
    173 
    174 if [ $DARWIN -eq 0 ]; then
    175   echo "DON'T FORGET TO UPDATE THE DARWIN COMPILER PREBUILTS!!!"
    176 fi
    177