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 == 'darwin13' ];
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 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
29fi
30
31echo "Using $NUM_CORES cores"
32
33# Turn off the build cache and make sure we build all of LLVM from scratch.
34export ANDROID_USE_BUILDCACHE=false
35export 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.
40export FORCE_BUILD_RS_COMPAT=true
41
42# ANDROID_HOST_OUT is where the new prebuilts will be constructed/copied from.
43ANDROID_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.
46HOST_LIB_DIR=$ANDROID_HOST_OUT/lib
47
48# HOST_LIB64_DIR
49HOST_LIB64_DIR=$ANDROID_HOST_OUT/lib64
50
51# PREBUILTS_DIR is where we want to copy our new files to.
52PREBUILTS_DIR=$MY_ANDROID_DIR/prebuilts/sdk/
53
54print_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
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 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
73build_rs=1
74
75while [ $# -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
96done
97
98if [ $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
112else
113
114  echo SKIPPING BUILD OF RS PREBUILTS
115
116fi
117
118DATE=`date +%Y%m%d`
119
120cd $PREBUILTS_DIR || exit 3
121repo start pb_$DATE .
122
123# Don't copy device prebuilts on Darwin. We don't need/use them.
124if [ $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
143fi
144
145# Copy header files for compilers
146cp $MY_ANDROID_DIR/external/clang/lib/Headers/*.h renderscript/clang-include
147cp $MY_ANDROID_DIR/frameworks/rs/scriptc/* renderscript/include
148
149
150# Host-specific tools (bin/ and lib/)
151TOOLS_BIN="
152bcc_compat
153llvm-rs-cc
154"
155
156TOOLS_LIB="
157libbcc.$SONAME
158libbcinfo.$SONAME
159libclang.$SONAME
160libc++.$SONAME
161libLLVM.$SONAME
162"
163
164for a in $TOOLS_BIN; do
165  cp $ANDROID_HOST_OUT/bin/$a tools/$SHORT_OSNAME/
166  strip tools/$SHORT_OSNAME/$a
167done
168
169for a in $TOOLS_LIB; do
170  cp $ANDROID_HOST_OUT/lib/$a tools/$SHORT_OSNAME/
171  strip tools/$SHORT_OSNAME/$a
172done
173
174if [ $DARWIN -eq 0 ]; then
175  echo "DON'T FORGET TO UPDATE THE DARWIN COMPILER PREBUILTS!!!"
176fi
177