diff --git a/zorg/buildbot/builders/sanitizers/buildbot_android.sh b/zorg/buildbot/builders/sanitizers/buildbot_android.sh --- a/zorg/buildbot/builders/sanitizers/buildbot_android.sh +++ b/zorg/buildbot/builders/sanitizers/buildbot_android.sh @@ -23,16 +23,17 @@ CMAKE_COMMON_OPTIONS="${CMAKE_COMMON_OPTIONS} -DLLVM_BINUTILS_INCDIR=/usr/include" fi -clobber +#clobber -download_android_tools r16 +download_android_tools r21 # Stage 1 build_stage1_clang_at_revison ### From now on we use just-built Clang as a host compiler ### -buildbot_update +#buildbot_update +LLVM=$ROOT/llvm-project/llvm CMAKE_COMMON_OPTIONS="$CMAKE_COMMON_OPTIONS -DLLVM_ENABLE_ASSERTIONS=ON" @@ -41,19 +42,19 @@ # Android NDK has no iconv.h which is requred by LIBXML2. CMAKE_COMMON_OPTIONS="${CMAKE_COMMON_OPTIONS} -DLLVM_LIBXML2_ENABLED=OFF" -build_android_ndk aarch64 arm64 -build_android_ndk arm arm +#build_android_ndk aarch64 arm64 +#build_android_ndk arm arm build_android_ndk i686 x86 echo @@@BUILD_STEP run cmake@@@ -configure_android aarch64 aarch64-linux-android +#configure_android aarch64 aarch64-linux-android # Testing armv7 instead of plain arm to work around # https://code.google.com/p/android/issues/detail?id=68779 -configure_android arm armv7-linux-androideabi +#configure_android arm armv7-linux-androideabi configure_android i686 i686-linux-android -build_android aarch64 -build_android arm +#build_android aarch64 +#build_android arm build_android i686 # Arm hardware is temporarily offline diff --git a/zorg/buildbot/builders/sanitizers/buildbot_android_functions.sh b/zorg/buildbot/builders/sanitizers/buildbot_android_functions.sh --- a/zorg/buildbot/builders/sanitizers/buildbot_android_functions.sh +++ b/zorg/buildbot/builders/sanitizers/buildbot_android_functions.sh @@ -46,13 +46,41 @@ ninja -C llvm_build64 || echo @@@STEP_FAILURE@@@ } +function check_android_api { + if [ -z ${ANDROID_API+x} ]; then + # If ANDROID_API was not specified, then use the one from the device. + ANDROID_API=$(adb shell getprop ro.build.version.sdk) + fi + + # Re-adjust it since the current NDK supports API levels in the range [21,29]. + if [[ $ANDROID_API -gt 29 || $ANDROID_API -lt 21 ]]; then + echo "API level $ANDROID_API is not supported." + ANDROID_API=29 + fi + + echo "Building for Android API level $ANDROID_API" +} + function build_android_ndk { local NDK_DIR=android_ndk local _arch=$1 local _ndk_arch=$2 + + check_android_api 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 $_ndk_arch --stl=libc++ --install-dir $NDK_DIR/standalone-$_arch + $NDK_DIR/build/tools/make_standalone_toolchain.py --api $ANDROID_API --force --arch $_ndk_arch --stl=libc++ --install-dir $NDK_DIR/standalone-$_arch + + # Move the [shared] objects and libraries back to expected sysroot layout. + # Or it won't be able to find -lc++ + local _source=$ROOT/$NDK_DIR/standalone-$_arch/sysroot/usr/lib/$_arch-linux-android + local _target=$ROOT/$NDK_DIR/standalone-$_arch/sysroot/usr/lib + mv $_source/*.so $_target/. + mv $_source/*.a $_target/. + + mv $_source/$ANDROID_API/*.so $_target/. + mv $_source/$ANDROID_API/*.o $_target/. + mv $_source/$ANDROID_API/*.a $_target/. fi } @@ -64,8 +92,10 @@ 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" - local ANDROID_CXX_FLAGS="$ANDROID_FLAGS -stdlib=libstdc++" + local ANDROID_CXX_FLAGS="$ANDROID_FLAGS -stdlib=libc++ -I/$ANDROID_TOOLCHAIN/sysroot/usr/include/c++/v1" + local CLANG_PATH=$ROOT/llvm_build64/bin/clang + local CLANGXX_PATH=$ROOT/llvm_build64/bin/clang++ # Always clobber android build tree. # It has a hidden dependency on clang (through CXX) which is not known to # the build system. @@ -76,8 +106,8 @@ (cd llvm_build_android_$_arch && cmake \ -DLLVM_ENABLE_WERROR=OFF \ - -DCMAKE_C_COMPILER=$ROOT/llvm_build64/bin/clang \ - -DCMAKE_CXX_COMPILER=$ROOT/llvm_build64/bin/clang++ \ + -DCMAKE_C_COMPILER=$CLANG_PATH \ + -DCMAKE_CXX_COMPILER=$CLANGXX_PATH \ -DCMAKE_ASM_FLAGS="$ANDROID_FLAGS" \ -DCMAKE_C_FLAGS="$ANDROID_FLAGS" \ -DCMAKE_CXX_FLAGS="$ANDROID_CXX_FLAGS" \ @@ -91,8 +121,8 @@ local COMPILER_RT_OPTIONS="$(readlink -f $LLVM/../compiler-rt)" (cd compiler_rt_build_android_$_arch && cmake \ - -DCMAKE_C_COMPILER=$ROOT/llvm_build64/bin/clang \ - -DCMAKE_CXX_COMPILER=$ROOT/llvm_build64/bin/clang++ \ + -DCMAKE_C_COMPILER=$CLANG_PATH \ + -DCMAKE_CXX_COMPILER=$CLANGXX_PATH \ -DLLVM_CONFIG_PATH=$ROOT/llvm_build64/bin/llvm-config \ -DCOMPILER_RT_BUILD_BUILTINS=OFF \ -DCOMPILER_RT_INCLUDE_TESTS=ON \ @@ -229,7 +259,7 @@ export DEVICE_DESCRIPTION=$_arch/$_build_flavor/$_build_id ANDROID_TOOLCHAIN=$ROOT/android_ndk/standalone-$_arch - LIBCXX_SHARED=$(find $ANDROID_TOOLCHAIN/ -name libc++_shared.so | head -1) + LIBCXX_SHARED=$ROOT/$NDK_DIR/standalone-$_arch/sysroot/usr/lib/libc++_shared.so SYMBOLIZER_BIN=$ROOT/llvm_build_android_$_arch/bin/llvm-symbolizer RT_DIR=$($ROOT/llvm_build64/bin/clang -print-resource-dir)/lib/linux COMPILER_RT_BUILD_DIR=$ROOT/compiler_rt_build_android_$_arch