Index: zorg/buildbot/builders/sanitizers/buildbot_android.sh =================================================================== --- /dev/null +++ zorg/buildbot/builders/sanitizers/buildbot_android.sh @@ -0,0 +1,71 @@ +#!/usr/bin/env bash + +set -x +set -e +set -u + +HERE="$(cd $(dirname $0) && pwd)" +. ${HERE}/buildbot_functions.sh +. ${HERE}/buildbot_android_functions.sh + +ROOT=`pwd` +PLATFORM=`uname` +export PATH="/usr/local/bin:$PATH" + +CHECK_LIBCXX=${CHECK_LIBCXX:-1} +CHECK_LLD=${CHECK_LLD:-1} +STAGE1_DIR=llvm_build0 +STAGE1_CLOBBER="llvm_build64 compiler_rt_build_android_* llvm_build_android_*" +LLVM=$ROOT/llvm +CMAKE_COMMON_OPTIONS="-GNinja -DCMAKE_BUILD_TYPE=Release -DLLVM_PARALLEL_LINK_JOBS=20" +BUILD_TYPE=Release + +if [ "$BUILDBOT_CLOBBER" != "" ]; then + echo @@@BUILD_STEP clobber@@@ + rm -rf llvm + rm -rf ${STAGE1_DIR} + rm -rf android_ndk + rm -rf platform-tools +fi + +download_android_tools r15 + +# Stage 1 + +build_stage1_clang_at_revison 305968 +### From now on we use just-built Clang as a host compiler ### +CLANG_PATH=${ROOT}/${STAGE1_DIR}/bin + +echo @@@BUILD_STEP update@@@ +buildbot_update + +CMAKE_COMMON_OPTIONS="$CMAKE_COMMON_OPTIONS -DLLVM_ENABLE_ASSERTIONS=ON" + +# Build self-hosted tree with fresh Clang and -Werror. +CMAKE_OPTIONS="${CMAKE_COMMON_OPTIONS} -DLLVM_ENABLE_WERROR=ON -DCMAKE_C_COMPILER=${CLANG_PATH}/clang -DCMAKE_CXX_COMPILER=${CLANG_PATH}/clang++ -DCMAKE_C_FLAGS=-gmlt -DCMAKE_CXX_FLAGS=-gmlt" + +echo @@@BUILD_STEP bootstrap clang@@@ +if [ ! -d llvm_build64 ]; then + mkdir llvm_build64 +fi +(cd llvm_build64 && cmake ${CMAKE_OPTIONS} -DLLVM_BUILD_EXTERNAL_COMPILER_RT=ON $LLVM && ninja) || echo @@@STEP_FAILURE@@ + +CMAKE_COMMON_OPTIONS=-DLLVM_ENABLE_ASSERTIONS=ON + +build_android() { + CPU=$1 + TRIPLE=$2 + build_android_ndk $CPU + build_compiler_rt $CPU $TRIPLE + build_llvm_symbolizer $CPU $TRIPLE +} + +# Testing armv7 instead of plain arm to work around +# https://code.google.com/p/android/issues/detail?id=68779 +build_android arm armv7-linux-androideabi armeabi-v7a +build_android x86 i686-linux-android x86 +build_android arm64 aarch64-linux-android arm64-v8a + +test_android arm armeabi-v7a @@@STEP_FAILURE@@@ +test_android x86 x86 @@@STEP_FAILURE@@@ +test_android arm64 arm64-v8a @@@STEP_FAILURE@@@ Index: zorg/buildbot/builders/sanitizers/buildbot_android_functions.sh =================================================================== --- zorg/buildbot/builders/sanitizers/buildbot_android_functions.sh +++ zorg/buildbot/builders/sanitizers/buildbot_android_functions.sh @@ -1,14 +1,51 @@ #!/usr/bin/env bash +function download_android_tools { + local VERSION=android-ndk-$1 + local FILE_NAME=${VERSION}-linux-x86_64.zip + local NDK_URL=https://dl.google.com/android/repository/${FILE_NAME} + local NDK_DIR=android_ndk + if [[ "$(cat ${NDK_DIR}/android_ndk_url)" != ${NDK_URL} ]] ; then + echo @@@BUILD_STEP downloading Android NDK@@@ + [[ -d ${NDK_DIR} ]] && rm -rf ${NDK_DIR} + [[ -d ${VERSION} ]] && rm -rf ${VERSION} + [[ -f ${FILE_NAME} ]] && rm -f ${FILE_NAME} + wget ${NDK_URL} + unzip ${FILE_NAME} > /dev/null + mv ${VERSION} ${NDK_DIR} + echo ${NDK_URL} > ${NDK_DIR}/android_ndk_url + fi + + if [[ ! -d platform-tools ]] ; then + echo @@@BUILD_STEP downloading Android Platfor Tools@@@ + local FILE_NAME=platform-tools-latest-linux.zip + [[ -f ${FILE_NAME} ]] && rm -f ${FILE_NAME} + wget https://dl.google.com/android/repository/${FILE_NAME} + unzip ${FILE_NAME} > /dev/null + fi + export PATH=$ROOT/platform-tools/:$PATH +} + +function build_android_ndk { + local NDK_DIR=android_ndk + local _arch=$1 + if [[ ! -d $NDK_DIR/standalone-$_arch ]] ; then + echo @@@BUILD_STEP building Android NDK for $_arch@@@ + $NDK_DIR/build/tools/make_standalone_toolchain.py --api 24 --force --arch $_arch --install-dir $NDK_DIR/standalone-$_arch + fi +} + function build_llvm_symbolizer { # ARCH triple local _arch=$1 local _triple=$2 + + echo @@@BUILD_STEP build llvm-symbolizer android/$_arch@@@ rm -rf llvm_build_android_$_arch mkdir llvm_build_android_$_arch cd llvm_build_android_$_arch - local ANDROID_TOOLCHAIN=$ROOT/../../../android-ndk/standalone-$_arch + local ANDROID_TOOLCHAIN=$ROOT/android_ndk/standalone-$_arch local ANDROID_FLAGS="--target=$_triple --sysroot=$ANDROID_TOOLCHAIN/sysroot -B$ANDROID_TOOLCHAIN" cmake -GNinja \ -DCMAKE_BUILD_TYPE=Release \ @@ -19,7 +56,6 @@ -DCMAKE_CXX_FLAGS="$ANDROID_FLAGS" \ -DCMAKE_EXE_LINKER_FLAGS="-pie" \ -DCMAKE_SKIP_RPATH=ON \ - -DANDROID=1 \ -DLLVM_BUILD_RUNTIME=OFF \ -DLLVM_TABLEGEN=$ROOT/llvm_build64/bin/llvm-tblgen \ ${CMAKE_COMMON_OPTIONS} \ @@ -33,7 +69,9 @@ local _arch=$1 local _triple=$2 - local ANDROID_TOOLCHAIN=$ROOT/../../../android-ndk/standalone-$_arch + echo @@@BUILD_STEP build compiler-rt android/$_arch@@@ + + local ANDROID_TOOLCHAIN=$ROOT/android_ndk/standalone-$_arch local ANDROID_LIBRARY_OUTPUT_DIR=$(ls -d $ROOT/llvm_build64/lib/clang/* | tail -1) local ANDROID_EXEC_OUTPUT_DIR=$ROOT/llvm_build64/bin local ANDROID_FLAGS="--target=$_triple --sysroot=$ANDROID_TOOLCHAIN/sysroot -B$ANDROID_TOOLCHAIN" @@ -83,13 +121,14 @@ local _arch=$1 local _abi=$2 local _step_failure=$3 - ANDROID_DEVICES=$(adb devices | grep 'device$' | awk '{print $1}') + ADB=adb + ANDROID_DEVICES=$(${ADB} devices | grep 'device$' | awk '{print $1}') for SERIAL in $ANDROID_DEVICES; do - ABILIST=$(adb -s $SERIAL shell getprop ro.product.cpu.abilist) + ABILIST=$(${ADB} -s $SERIAL shell getprop ro.product.cpu.abilist) patch_abilist $ABILIST ABILIST if [[ $ABILIST == *"$_abi"* ]]; then - BUILD_ID=$(adb -s $SERIAL shell getprop ro.build.id | tr -d '\r') - BUILD_FLAVOR=$(adb -s $SERIAL shell getprop ro.build.flavor | tr -d '\r') + BUILD_ID=$(${ADB} -s $SERIAL shell getprop ro.build.id | tr -d '\r') + BUILD_FLAVOR=$(${ADB} -s $SERIAL shell getprop ro.build.flavor | tr -d '\r') test_android_on_device "$_arch" "$SERIAL" "$BUILD_ID" "$BUILD_FLAVOR" "$_step_failure" fi done @@ -104,10 +143,9 @@ DEVICE_DESCRIPTION=$_arch/$_build_flavor/$_build_id - ANDROID_SDK=$ROOT/../../../android-sdk-linux/ SYMBOLIZER_BIN=$ROOT/llvm_build_android_$_arch/bin/llvm-symbolizer COMPILER_RT_BUILD_DIR=$ROOT/compiler_rt_build_android_$_arch - ADB=$ROOT/../../../bin/adb + ADB=adb DEVICE_ROOT=/data/local/asan_test export ANDROID_SERIAL=$_serial @@ -120,7 +158,8 @@ echo "Device is up" $ADB devices - sleep 2 + ($ADB disable-verity | grep "already disabled") || $ADB reboot + $ADB wait-for-device ADB=$ADB $ROOT/llvm_build64/bin/asan_device_setup sleep 2 @@ -134,7 +173,7 @@ fi # Kill leftover symbolizers. TODO: figure out what's going on. - $ADB shell ps | grep llvm-symbolizer | awk '{print $2}' | xargs $ADB shell kill + $ADB shell pkill llvm-symbolizer || true $ADB push $SYMBOLIZER_BIN /system/bin/ $ADB shell rm -rf $DEVICE_ROOT Index: zorg/buildbot/builders/sanitizers/buildbot_cmake.sh =================================================================== --- zorg/buildbot/builders/sanitizers/buildbot_cmake.sh +++ zorg/buildbot/builders/sanitizers/buildbot_cmake.sh @@ -40,11 +40,6 @@ CMAKE_COMMON_OPTIONS="${CMAKE_COMMON_OPTIONS} -DLLVM_BINUTILS_INCDIR=/usr/include" fi -BUILD_ANDROID=${BUILD_ANDROID:-0} -RUN_ANDROID=${RUN_ANDROID:-0} -if [ $BUILD_ANDROID == 1 -o $RUN_ANDROID == 1 ] ; then - . ${HERE}/buildbot_android_functions.sh -fi CHECK_LIBCXX=${CHECK_LIBCXX:-1} CHECK_SYMBOLIZER=${CHECK_SYMBOLIZER:-$CHECK_LIBCXX} CHECK_LLD=${CHECK_LLD:-1} @@ -305,27 +300,3 @@ check_ninja_with_symbolizer $CHECK_UBSAN ubsan fi fi - -if [ $BUILD_ANDROID == 1 ] ; then - build_android() { - CPU=$1 - TRIPLE=$2 - echo @@@BUILD_STEP build compiler-rt android/$CPU@@@ - build_compiler_rt $CPU $TRIPLE - - echo @@@BUILD_STEP build llvm-symbolizer android/$CPU@@@ - build_llvm_symbolizer $CPU $TRIPLE - } - # Testing armv7 instead of plain arm to work around - # https://code.google.com/p/android/issues/detail?id=68779 - build_android arm armv7-linux-androideabi - build_android x86 i686-linux-android - build_android aarch64 aarch64-linux-android -fi - -if [ $RUN_ANDROID == 1 ] ; then - test_android arm armeabi-v7a @@@STEP_FAILURE@@@ - test_android x86 x86 @@@STEP_FAILURE@@@ - test_android aarch64 arm64-v8a @@@STEP_FAILURE@@@ -fi -