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