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