update_rs_prebuilts.sh revision d0c45801692f4ae7b90a923ed1c57a3ec8ed4cb2
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
724461aa7c90cc1b2a83072f42a2d453e3d059732Stephen Hinesif [ $OSTYPE == 'darwin13' ] || [ $OSTYPE == 'darwin14' ];
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.
24648a1c137663ef7207684d0d7009dd5518942111Stephen Hines  TARGETS=(arm mips x86 arm64)
25648a1c137663ef7207684d0d7009dd5518942111Stephen Hines  SYS_NAMES=(generic generic_mips generic_x86 generic_arm64)
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
42d0c45801692f4ae7b90a923ed1c57a3ec8ed4cb2Miao Wang# RENDERSCRIPT_V8_JAR is the generated JAVA static lib for RenderScript Support Lib.
43d0c45801692f4ae7b90a923ed1c57a3ec8ed4cb2Miao WangRENDERSCRIPT_V8_JAR=out/target/common/obj/JAVA_LIBRARIES/android-support-v8-renderscript_intermediates/classes.jar
444581f03df1786d3a2585dabb599278b9c0257df9Miao Wang
45be96565d929af53b8009014fbec224004c64e4faStephen Hines# ANDROID_HOST_OUT is where the new prebuilts will be constructed/copied from.
46a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen HinesANDROID_HOST_OUT=$MY_ANDROID_DIR/out/host/$SHORT_OSNAME-x86/
47be96565d929af53b8009014fbec224004c64e4faStephen Hines
48be96565d929af53b8009014fbec224004c64e4faStephen Hines# HOST_LIB_DIR allows us to pick up the built librsrt_*.bc libraries.
49be96565d929af53b8009014fbec224004c64e4faStephen HinesHOST_LIB_DIR=$ANDROID_HOST_OUT/lib
50be96565d929af53b8009014fbec224004c64e4faStephen Hines
51f7dfd22fc82c01ac59f4e61683eb231d8738bab0Tim Murray# HOST_LIB64_DIR
52f7dfd22fc82c01ac59f4e61683eb231d8738bab0Tim MurrayHOST_LIB64_DIR=$ANDROID_HOST_OUT/lib64
53f7dfd22fc82c01ac59f4e61683eb231d8738bab0Tim Murray
54be96565d929af53b8009014fbec224004c64e4faStephen Hines# PREBUILTS_DIR is where we want to copy our new files to.
55be96565d929af53b8009014fbec224004c64e4faStephen HinesPREBUILTS_DIR=$MY_ANDROID_DIR/prebuilts/sdk/
56be96565d929af53b8009014fbec224004c64e4faStephen Hines
57be96565d929af53b8009014fbec224004c64e4faStephen Hinesprint_usage() {
58be96565d929af53b8009014fbec224004c64e4faStephen Hines  echo "USAGE: $0 [-h|--help] [-n|--no-build] [-x]"
59be96565d929af53b8009014fbec224004c64e4faStephen Hines  echo "OPTIONS:"
60be96565d929af53b8009014fbec224004c64e4faStephen Hines  echo "    -h, --help     : Display this help message."
61be96565d929af53b8009014fbec224004c64e4faStephen Hines  echo "    -n, --no-build : Skip the build step and just copy files."
62be96565d929af53b8009014fbec224004c64e4faStephen Hines  echo "    -x             : Display commands before they are executed."
63be96565d929af53b8009014fbec224004c64e4faStephen Hines}
64be96565d929af53b8009014fbec224004c64e4faStephen Hines
65be96565d929af53b8009014fbec224004c64e4faStephen Hinesbuild_rs_libs() {
66be96565d929af53b8009014fbec224004c64e4faStephen Hines  echo Building for target $1
67be96565d929af53b8009014fbec224004c64e4faStephen Hines  lunch $1
68be96565d929af53b8009014fbec224004c64e4faStephen Hines  # Build the RS runtime libraries.
69971d42af252f7f3e11144e472e0ac3fc313c73a4Stephen Hines  cd $MY_ANDROID_DIR/frameworks/rs/driver/runtime && mma -j$NUM_CORES && cd - || exit 1
70be96565d929af53b8009014fbec224004c64e4faStephen Hines  # Build a sample support application to ensure that all the pieces are up to date.
71971d42af252f7f3e11144e472e0ac3fc313c73a4Stephen Hines  cd $MY_ANDROID_DIR/frameworks/rs/java/tests/RSTest_CompatLib/ && mma -j$NUM_CORES && cd - || exit 2
72d0c45801692f4ae7b90a923ed1c57a3ec8ed4cb2Miao Wang  # Build android-support-v8-renderscript.jar
73d0c45801692f4ae7b90a923ed1c57a3ec8ed4cb2Miao Wang  # We need to explicitly do so, since JACK won't generate a jar by default.
74d0c45801692f4ae7b90a923ed1c57a3ec8ed4cb2Miao Wang  cd $MY_ANDROID_DIR && make $RENDERSCRIPT_V8_JAR -j$NUM_CORES && cd - || exit 3
75648a1c137663ef7207684d0d7009dd5518942111Stephen Hines  # Build libcompiler-rt.a
76d0c45801692f4ae7b90a923ed1c57a3ec8ed4cb2Miao Wang  cd $MY_ANDROID_DIR/external/compiler-rt && mma -j$NUM_CORES && cd - || exit 4
77648a1c137663ef7207684d0d7009dd5518942111Stephen Hines  # Build the blas libraries.
78d0c45801692f4ae7b90a923ed1c57a3ec8ed4cb2Miao Wang  cd $MY_ANDROID_DIR/external/cblas && mma -j$NUM_CORES && cd - || exit 5
79be96565d929af53b8009014fbec224004c64e4faStephen Hines}
80be96565d929af53b8009014fbec224004c64e4faStephen Hines
81be96565d929af53b8009014fbec224004c64e4faStephen Hines# Build everything by default
82be96565d929af53b8009014fbec224004c64e4faStephen Hinesbuild_rs=1
83be96565d929af53b8009014fbec224004c64e4faStephen Hines
84be96565d929af53b8009014fbec224004c64e4faStephen Hineswhile [ $# -gt 0 ]; do
85be96565d929af53b8009014fbec224004c64e4faStephen Hines  case "$1" in
86be96565d929af53b8009014fbec224004c64e4faStephen Hines    -h|--help)
87be96565d929af53b8009014fbec224004c64e4faStephen Hines      print_usage
88be96565d929af53b8009014fbec224004c64e4faStephen Hines      exit 0
89be96565d929af53b8009014fbec224004c64e4faStephen Hines      ;;
90be96565d929af53b8009014fbec224004c64e4faStephen Hines    -n|--no-build)
91be96565d929af53b8009014fbec224004c64e4faStephen Hines      build_rs=0
92be96565d929af53b8009014fbec224004c64e4faStephen Hines      ;;
93be96565d929af53b8009014fbec224004c64e4faStephen Hines    -x)
94be96565d929af53b8009014fbec224004c64e4faStephen Hines      # set lets us enable bash -x mode.
95be96565d929af53b8009014fbec224004c64e4faStephen Hines      set -x
96be96565d929af53b8009014fbec224004c64e4faStephen Hines      ;;
97be96565d929af53b8009014fbec224004c64e4faStephen Hines    *)
98be96565d929af53b8009014fbec224004c64e4faStephen Hines      echo Unknown argument: "$1"
99be96565d929af53b8009014fbec224004c64e4faStephen Hines      print_usage
100be96565d929af53b8009014fbec224004c64e4faStephen Hines      exit 99
101be96565d929af53b8009014fbec224004c64e4faStephen Hines      break
102be96565d929af53b8009014fbec224004c64e4faStephen Hines      ;;
103be96565d929af53b8009014fbec224004c64e4faStephen Hines  esac
104be96565d929af53b8009014fbec224004c64e4faStephen Hines  shift
105be96565d929af53b8009014fbec224004c64e4faStephen Hinesdone
106be96565d929af53b8009014fbec224004c64e4faStephen Hines
107be96565d929af53b8009014fbec224004c64e4faStephen Hinesif [ $build_rs -eq 1 ]; then
108be96565d929af53b8009014fbec224004c64e4faStephen Hines
109be96565d929af53b8009014fbec224004c64e4faStephen Hines  echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
110be96565d929af53b8009014fbec224004c64e4faStephen Hines  echo !!! BUILDING RS PREBUILTS !!!
111be96565d929af53b8009014fbec224004c64e4faStephen Hines  echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
112be96565d929af53b8009014fbec224004c64e4faStephen Hines
113be96565d929af53b8009014fbec224004c64e4faStephen Hines  source build/envsetup.sh
114be96565d929af53b8009014fbec224004c64e4faStephen Hines
115be96565d929af53b8009014fbec224004c64e4faStephen Hines  for t in ${TARGETS[@]}; do
116be96565d929af53b8009014fbec224004c64e4faStephen Hines    build_rs_libs aosp_${t}-userdebug
117be96565d929af53b8009014fbec224004c64e4faStephen Hines  done
118be96565d929af53b8009014fbec224004c64e4faStephen Hines
119be96565d929af53b8009014fbec224004c64e4faStephen Hines  echo DONE BUILDING RS PREBUILTS
120be96565d929af53b8009014fbec224004c64e4faStephen Hines
121be96565d929af53b8009014fbec224004c64e4faStephen Hineselse
122be96565d929af53b8009014fbec224004c64e4faStephen Hines
123be96565d929af53b8009014fbec224004c64e4faStephen Hines  echo SKIPPING BUILD OF RS PREBUILTS
124be96565d929af53b8009014fbec224004c64e4faStephen Hines
125be96565d929af53b8009014fbec224004c64e4faStephen Hinesfi
126be96565d929af53b8009014fbec224004c64e4faStephen Hines
127be96565d929af53b8009014fbec224004c64e4faStephen HinesDATE=`date +%Y%m%d`
128be96565d929af53b8009014fbec224004c64e4faStephen Hines
129be96565d929af53b8009014fbec224004c64e4faStephen Hinescd $PREBUILTS_DIR || exit 3
130be96565d929af53b8009014fbec224004c64e4faStephen Hinesrepo start pb_$DATE .
131be96565d929af53b8009014fbec224004c64e4faStephen Hines
132a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines# Don't copy device prebuilts on Darwin. We don't need/use them.
133a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hinesif [ $DARWIN -eq 0 ]; then
134a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines  for i in $(seq 0 $((${#TARGETS[@]} - 1))); do
135a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines    t=${TARGETS[$i]}
136648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    sys_name=${SYS_NAMES[$i]}
137d0c45801692f4ae7b90a923ed1c57a3ec8ed4cb2Miao Wang    case "$sys_name" in
138648a1c137663ef7207684d0d7009dd5518942111Stephen Hines      *64)
139648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        sys_lib_dir=$MY_ANDROID_DIR/out/target/product/$sys_name/system/lib64
140648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        ;;
141648a1c137663ef7207684d0d7009dd5518942111Stephen Hines      *)
142648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        sys_lib_dir=$MY_ANDROID_DIR/out/target/product/$sys_name/system/lib
143648a1c137663ef7207684d0d7009dd5518942111Stephen Hines        ;;
144648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    esac
145648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    obj_lib_dir=$MY_ANDROID_DIR/out/target/product/$sys_name/obj/lib
146648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    obj_static_lib_dir=$MY_ANDROID_DIR/out/target/product/$sys_name/obj/STATIC_LIBRARIES
147648a1c137663ef7207684d0d7009dd5518942111Stephen Hines
148a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines    for a in `find renderscript/lib/$t -name \*.so`; do
149a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines      file=`basename $a`
1501baebcdcb2f1f3d794c837166b925538fcd28acbStephen Hines      cp `find $sys_lib_dir $obj_lib_dir -name $file | head -1` $a || exit 4
151a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines    done
152a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines
153a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines    for a in `find renderscript/lib/$t -name \*.bc`; do
154a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines      file=`basename $a`
155f7dfd22fc82c01ac59f4e61683eb231d8738bab0Tim Murray      cp `find $HOST_LIB_DIR $HOST_LIB64_DIR $sys_lib_dir $obj_lib_dir -name $file | head -1` $a || exit 5
156a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines    done
157648a1c137663ef7207684d0d7009dd5518942111Stephen Hines
158648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    for a in `find renderscript/lib/$t -name \*.a`; do
159648a1c137663ef7207684d0d7009dd5518942111Stephen Hines      file=`basename $a`
160648a1c137663ef7207684d0d7009dd5518942111Stephen Hines      cp `find $obj_static_lib_dir -name $file | head -1` $a || exit 4
161648a1c137663ef7207684d0d7009dd5518942111Stephen Hines    done
162648a1c137663ef7207684d0d7009dd5518942111Stephen Hines
163be96565d929af53b8009014fbec224004c64e4faStephen Hines  done
164be96565d929af53b8009014fbec224004c64e4faStephen Hines
165a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines  # javalib.jar
166d0c45801692f4ae7b90a923ed1c57a3ec8ed4cb2Miao Wang  cp $MY_ANDROID_DIR/$RENDERSCRIPT_V8_JAR renderscript/lib/javalib.jar
167be96565d929af53b8009014fbec224004c64e4faStephen Hines
168a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hinesfi
169be96565d929af53b8009014fbec224004c64e4faStephen Hines
170be96565d929af53b8009014fbec224004c64e4faStephen Hines# Copy header files for compilers
171be96565d929af53b8009014fbec224004c64e4faStephen Hinescp $MY_ANDROID_DIR/external/clang/lib/Headers/*.h renderscript/clang-include
172be96565d929af53b8009014fbec224004c64e4faStephen Hinescp $MY_ANDROID_DIR/frameworks/rs/scriptc/* renderscript/include
173be96565d929af53b8009014fbec224004c64e4faStephen Hines
174be96565d929af53b8009014fbec224004c64e4faStephen Hines
175a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines# Host-specific tools (bin/ and lib/)
176be96565d929af53b8009014fbec224004c64e4faStephen HinesTOOLS_BIN="
177be96565d929af53b8009014fbec224004c64e4faStephen Hinesbcc_compat
178be96565d929af53b8009014fbec224004c64e4faStephen Hinesllvm-rs-cc
179be96565d929af53b8009014fbec224004c64e4faStephen Hines"
180be96565d929af53b8009014fbec224004c64e4faStephen Hines
181be96565d929af53b8009014fbec224004c64e4faStephen HinesTOOLS_LIB="
182a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hineslibbcc.$SONAME
183a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hineslibbcinfo.$SONAME
184a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hineslibclang.$SONAME
1851baebcdcb2f1f3d794c837166b925538fcd28acbStephen Hineslibc++.$SONAME
186a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen HineslibLLVM.$SONAME
187be96565d929af53b8009014fbec224004c64e4faStephen Hines"
188be96565d929af53b8009014fbec224004c64e4faStephen Hines
189f562784573ebf580bc0c691509922b292e71b1d2Pirama Arumuga NainarTOOLS_LIB32="libc++.$SONAME"
190f562784573ebf580bc0c691509922b292e71b1d2Pirama Arumuga Nainar
191be96565d929af53b8009014fbec224004c64e4faStephen Hinesfor a in $TOOLS_BIN; do
192f562784573ebf580bc0c691509922b292e71b1d2Pirama Arumuga Nainar  cp $ANDROID_HOST_OUT/bin/$a tools/$SHORT_OSNAME/bin
193f562784573ebf580bc0c691509922b292e71b1d2Pirama Arumuga Nainar  strip tools/$SHORT_OSNAME/bin/$a
194be96565d929af53b8009014fbec224004c64e4faStephen Hinesdone
195be96565d929af53b8009014fbec224004c64e4faStephen Hines
196be96565d929af53b8009014fbec224004c64e4faStephen Hinesfor a in $TOOLS_LIB; do
197f562784573ebf580bc0c691509922b292e71b1d2Pirama Arumuga Nainar  cp $HOST_LIB64_DIR/$a tools/$SHORT_OSNAME/lib64
198f562784573ebf580bc0c691509922b292e71b1d2Pirama Arumuga Nainar  strip tools/$SHORT_OSNAME/lib64/$a
199f562784573ebf580bc0c691509922b292e71b1d2Pirama Arumuga Nainardone
200f562784573ebf580bc0c691509922b292e71b1d2Pirama Arumuga Nainar
201f562784573ebf580bc0c691509922b292e71b1d2Pirama Arumuga Nainarfor a in $TOOLS_LIB32; do
202f562784573ebf580bc0c691509922b292e71b1d2Pirama Arumuga Nainar  cp $HOST_LIB_DIR/$a tools/$SHORT_OSNAME/lib
203f562784573ebf580bc0c691509922b292e71b1d2Pirama Arumuga Nainar  strip tools/$SHORT_OSNAME/lib/$a
204be96565d929af53b8009014fbec224004c64e4faStephen Hinesdone
205be96565d929af53b8009014fbec224004c64e4faStephen Hines
206a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hinesif [ $DARWIN -eq 0 ]; then
207a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hines  echo "DON'T FORGET TO UPDATE THE DARWIN COMPILER PREBUILTS!!!"
208a3957aa5ce87ce28fccc758b8410528c2cad0c41Stephen Hinesfi
209