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