You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
276 lines
6.9 KiB
276 lines
6.9 KiB
#!/bin/bash
|
|
|
|
# We are currently in frameworks/rs, so compute our top-level directory.
|
|
MY_ANDROID_DIR=$PWD/../../
|
|
cd $MY_ANDROID_DIR
|
|
|
|
if [[ $OSTYPE == darwin* ]];
|
|
then
|
|
|
|
DARWIN=1
|
|
SHORT_OSNAME=darwin
|
|
SONAME=dylib
|
|
# Only build arm on darwin.
|
|
TARGETS=(arm)
|
|
SYS_NAMES=(generic)
|
|
NUM_CORES=`sysctl -n hw.ncpu`
|
|
|
|
else
|
|
|
|
DARWIN=0
|
|
SHORT_OSNAME=linux
|
|
SONAME=so
|
|
# Target architectures and their system library names.
|
|
TARGETS=(arm x86 arm64 x86_64)
|
|
SYS_NAMES=(generic generic_x86 generic_arm64 generic_x86_64)
|
|
NUM_CORES=`cat /proc/cpuinfo | grep processor | tail -n 1 | cut -f 2 -d :`
|
|
NUM_CORES=$(($NUM_CORES+1))
|
|
|
|
fi
|
|
|
|
# Make sure we build all of LLVM from scratch.
|
|
export FORCE_BUILD_LLVM_COMPONENTS=true
|
|
|
|
# Skip building LLVM and compiler-rt tests while updating prebuilts
|
|
export SKIP_LLVM_TESTS=true
|
|
|
|
# RENDERSCRIPT_V8_JAR is the generated JAVA static lib for RenderScript Support Lib.
|
|
RENDERSCRIPT_V8_JAR=out/target/common/obj/JAVA_LIBRARIES/android-support-v8-renderscript_intermediates/classes.jar
|
|
|
|
# ANDROID_HOST_OUT is where the new prebuilts will be constructed/copied from.
|
|
ANDROID_HOST_OUT=$MY_ANDROID_DIR/out/host/$SHORT_OSNAME-x86/
|
|
|
|
# HOST_LIB_DIR allows us to pick up the built librsrt_*.bc libraries.
|
|
HOST_LIB_DIR=$ANDROID_HOST_OUT/lib
|
|
|
|
# HOST_LIB64_DIR
|
|
HOST_LIB64_DIR=$ANDROID_HOST_OUT/lib64
|
|
|
|
# PREBUILTS_DIR is where we want to copy our new files to.
|
|
PREBUILTS_DIR=$MY_ANDROID_DIR/prebuilts/sdk/
|
|
|
|
print_usage() {
|
|
echo "USAGE: $0 [-h|--help] [-j <num>] [-n|--no-build] [--no-start] [-x]"
|
|
echo "OPTIONS:"
|
|
echo " -j <num> : Specify parallelism for builds."
|
|
echo " -h, --help : Display this help message."
|
|
echo " -n, --no-build : Skip the build step and just copy files."
|
|
echo " --no-start : Do not \"repo start\" a new branch for the copied files."
|
|
echo " -x : Display commands before they are executed."
|
|
}
|
|
|
|
build_rs_libs() {
|
|
echo Building for target $1
|
|
lunch $1
|
|
# Build the RS runtime libraries.
|
|
cd $MY_ANDROID_DIR/frameworks/rs/driver/runtime && mma -j$NUM_CORES && cd - || exit 1
|
|
# Build libRSSupport.so
|
|
cd $MY_ANDROID_DIR/frameworks/rs/support && mma -j$NUM_CORES && cd - || exit 2
|
|
# Build android-support-v8-renderscript.jar
|
|
# We need to explicitly do so, since JACK won't generate a jar by default.
|
|
cd $MY_ANDROID_DIR && make $RENDERSCRIPT_V8_JAR -j$NUM_CORES && cd - || exit 3
|
|
# Build libcompiler-rt.a
|
|
cd $MY_ANDROID_DIR/external/compiler-rt && mma -j$NUM_CORES && cd - || exit 4
|
|
# Build the blas libraries.
|
|
cd $MY_ANDROID_DIR/external/cblas && mma -j$NUM_CORES && cd - || exit 5
|
|
}
|
|
|
|
build_rstest_compatlib() {
|
|
echo Building for target $1
|
|
lunch $1
|
|
# Build a sample support application to ensure that all the pieces are up to date.
|
|
cd $MY_ANDROID_DIR/frameworks/rs/tests/java_api/RSTest_CompatLib/ && mma -j$NUM_CORES FORCE_BUILD_RS_COMPAT=true && cd - || exit 6
|
|
}
|
|
|
|
build_rs_host_tools() {
|
|
echo "Building RS host tools (llvm-rs-cc and bcc_compat)"
|
|
lunch aosp_arm64-userdebug
|
|
|
|
cd $MY_ANDROID_DIR/frameworks/compile/slang && mma -j$NUM_CORES && cd - || exit 7
|
|
cd $MY_ANDROID_DIR/frameworks/compile/libbcc && mma -j$NUM_CORES && cd - || exit 8
|
|
}
|
|
|
|
# Build everything by default
|
|
build_rs=1
|
|
|
|
# repo start by default
|
|
repo_start=1
|
|
|
|
while [ $# -gt 0 ]; do
|
|
case "$1" in
|
|
-h|--help)
|
|
print_usage
|
|
exit 0
|
|
;;
|
|
-j)
|
|
if [[ $# -gt 1 && "$2" =~ ^[0-9]+$ ]]; then
|
|
NUM_CORES="$2"
|
|
shift
|
|
else
|
|
echo Expected numeric argument after "$1"
|
|
print_usage
|
|
exit 99
|
|
fi
|
|
;;
|
|
-n|--no-build)
|
|
build_rs=0
|
|
;;
|
|
--no-start)
|
|
repo_start=0
|
|
;;
|
|
-x)
|
|
# set lets us enable bash -x mode.
|
|
set -x
|
|
;;
|
|
*)
|
|
echo Unknown argument: "$1"
|
|
print_usage
|
|
exit 99
|
|
break
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
if [ $build_rs -eq 1 ]; then
|
|
|
|
echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
echo !!! BUILDING RS PREBUILTS !!!
|
|
echo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
|
|
echo "Using $NUM_CORES cores"
|
|
|
|
source build/envsetup.sh
|
|
|
|
build_rs_host_tools
|
|
|
|
for t in ${TARGETS[@]}; do
|
|
build_rs_libs aosp_${t}-userdebug
|
|
done
|
|
|
|
echo DONE BUILDING RS PREBUILTS
|
|
|
|
else
|
|
|
|
echo SKIPPING BUILD OF RS PREBUILTS
|
|
|
|
fi
|
|
|
|
cd $PREBUILTS_DIR || exit 3
|
|
|
|
# Verify that project is "clean"
|
|
if [ `git status --short --untracked-files=no | wc -l` -ne 0 ]; then
|
|
echo $PREBUILTS_DIR contains modified files -- aborting.
|
|
git status --untracked-files=no
|
|
exit 1
|
|
fi
|
|
|
|
if [ $repo_start -eq 1 ]; then
|
|
DATE=`date +%Y%m%d`
|
|
repo start pb_$DATE .
|
|
if [ $? -ne 0 ]; then
|
|
echo repo start failed -- aborting.
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# Don't copy device prebuilts on Darwin. We don't need/use them.
|
|
if [ $DARWIN -eq 0 ]; then
|
|
for i in $(seq 0 $((${#TARGETS[@]} - 1))); do
|
|
t=${TARGETS[$i]}
|
|
sys_name=${SYS_NAMES[$i]}
|
|
case "$sys_name" in
|
|
*64)
|
|
sys_lib_dir=$MY_ANDROID_DIR/out/target/product/$sys_name/system/lib64
|
|
;;
|
|
*)
|
|
sys_lib_dir=$MY_ANDROID_DIR/out/target/product/$sys_name/system/lib
|
|
;;
|
|
esac
|
|
obj_lib_dir=$MY_ANDROID_DIR/out/target/product/$sys_name/obj/SHARED_LIBRARIES
|
|
obj_static_lib_dir=$MY_ANDROID_DIR/out/target/product/$sys_name/obj/STATIC_LIBRARIES
|
|
|
|
for a in `find renderscript/lib/$t -name \*.so`; do
|
|
file=`basename $a`
|
|
name="${file%.*}"
|
|
cp $obj_lib_dir/${name}_intermediates/$file $a || exit 4
|
|
done
|
|
|
|
for a in `find renderscript/lib/$t -name \*.bc`; do
|
|
file=`basename $a`
|
|
cp `find $HOST_LIB_DIR $HOST_LIB64_DIR $sys_lib_dir $obj_lib_dir -name $file | head -1` $a || exit 5
|
|
done
|
|
|
|
for a in `find renderscript/lib/$t -name \*.a`; do
|
|
file=`basename $a`
|
|
name="${file%.*}"
|
|
cp $obj_static_lib_dir/${name}_intermediates/$file $a || exit 4
|
|
done
|
|
|
|
done
|
|
|
|
# javalib.jar
|
|
cp $MY_ANDROID_DIR/$RENDERSCRIPT_V8_JAR renderscript/lib/javalib.jar
|
|
|
|
fi
|
|
|
|
# Copy header files for compilers
|
|
cp $MY_ANDROID_DIR/external/clang/lib/Headers/*.h renderscript/clang-include
|
|
cp $MY_ANDROID_DIR/frameworks/rs/script_api/include/* renderscript/include
|
|
|
|
|
|
# Host-specific tools (bin/ and lib/)
|
|
TOOLS_BIN="
|
|
bcc_compat
|
|
llvm-rs-cc
|
|
"
|
|
|
|
TOOLS_LIB="
|
|
libbcc.$SONAME
|
|
libbcinfo.$SONAME
|
|
libclang_android.$SONAME
|
|
libc++.$SONAME
|
|
libLLVM_android.$SONAME
|
|
"
|
|
|
|
TOOLS_LIB32="libc++.$SONAME"
|
|
|
|
for a in $TOOLS_BIN; do
|
|
cp $ANDROID_HOST_OUT/bin/$a tools/$SHORT_OSNAME/bin
|
|
strip tools/$SHORT_OSNAME/bin/$a
|
|
done
|
|
|
|
for a in $TOOLS_LIB; do
|
|
cp $HOST_LIB64_DIR/$a tools/$SHORT_OSNAME/lib64
|
|
strip tools/$SHORT_OSNAME/lib64/$a
|
|
done
|
|
|
|
for a in $TOOLS_LIB32; do
|
|
cp $HOST_LIB_DIR/$a tools/$SHORT_OSNAME/lib
|
|
strip tools/$SHORT_OSNAME/lib/$a
|
|
done
|
|
|
|
if [ $build_rs -eq 1 ]; then
|
|
|
|
echo BUILDING RSTest_CompatLib with the new prebuilts
|
|
|
|
echo "Using $NUM_CORES cores"
|
|
|
|
source $MY_ANDROID_DIR/build/envsetup.sh
|
|
|
|
for t in ${TARGETS[@]}; do
|
|
build_rstest_compatlib aosp_${t}-userdebug
|
|
done
|
|
|
|
echo DONE BUILDING RSTest_CompatLib
|
|
|
|
else
|
|
|
|
echo SKIPPING BUILD OF RSTest_CompatLib
|
|
|
|
fi
|
|
|
|
if [ $DARWIN -eq 0 ]; then
|
|
echo "DON'T FORGET TO UPDATE THE DARWIN COMPILER PREBUILTS!!!"
|
|
fi
|