blob: f0690f747704522b7b11a5faad5d8451fceb227c [file] [log] [blame]
#!/bin/bash
# Expected arguments:
# $1 = out_dir
# $2 = dest_dir
# $3 = build_number
# exit on error
set -e
if [ ! "${BASH_SOURCE[1]}" ]; then
case "$(uname -s)" in
Linux)
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd -P)"
source "$ROOT_DIR/external/lldb-utils/build.sh" "$@"
exit 0
;;
*)
echo "No." > /dev/stderr
exit 1
esac
fi
HOST="$BUILD"
CONFIG=MinSizeRel
for ARCH in x86 x86_64 arm aarch64 mips mips64; do
BUILD="$OUT/lldb/$ARCH"
rm -rf "$BUILD"
mkdir -p "$BUILD"
unset LLDB_FLAGS
unset LLDB_LINKER_FLAGS
unset LLDB_LIBS
unset CMAKE_OPTIONS
ABI=$ARCH
TRIPLE_ARCH=$ARCH
SYSROOT_ARCH=$ARCH
STL_ARCH=$ARCH
case $ARCH in
x86)
TOOLCHAIN="$PREBUILTS/gcc/linux-x86/x86/x86_64-linux-android-4.9"
LLVM_ARCH=X86 TRIPLE_ARCH=i386 ABI=x86_64
LLDB_FLAGS+=(-m32)
;;
x86_64)
TOOLCHAIN="$PREBUILTS/gcc/linux-x86/x86/x86_64-linux-android-4.9"
LLVM_ARCH=X86
;;
arm)
TOOLCHAIN="$PREBUILTS/gcc/linux-x86/arm/arm-linux-androideabi-4.9"
LLVM_ARCH=ARM STL_ARCH=armeabi-v7a ABI=armeabi
;;
aarch64)
TOOLCHAIN="$PREBUILTS/gcc/linux-x86/aarch64/aarch64-linux-android-4.9"
LLVM_ARCH=AArch64 SYSROOT_ARCH=arm64 STL_ARCH=arm64-v8a
;;
mips)
TOOLCHAIN="$PREBUILTS/gcc/linux-x86/mips/mips64el-linux-android-4.9"
LLVM_ARCH=Mips ABI=mips64
LLDB_FLAGS+=(-mips32)
;;
mips64)
TOOLCHAIN="$PREBUILTS/gcc/linux-x86/mips/mips64el-linux-android-4.9"
LLVM_ARCH=Mips
;;
esac
SYSROOT="$PREBUILTS/ndk/current/platforms/android-21/arch-$SYSROOT_ARCH"
# Necessary because mips64el-gcc searches paths relative to lib64.
[ $ARCH == mips ] && mkdir -p "$SYSROOT/usr/lib64"
STL="$PREBUILTS/ndk/current/sources/cxx-stl/gnu-libstdc++/4.9"
LLDB_FLAGS+=(-s) # stripped
LLDB_FLAGS+=(-I"$STL/include")
LLDB_FLAGS+=(-I"$STL/libs/$STL_ARCH/include")
LLDB_LINKER_FLAGS+=(-L"$STL/libs/$STL_ARCH")
LLDB_LIBS="gnustl_static"
# http://b.android.com/182094
[ $ARCH == mips ] && LLDB_LIBS+=";atomic"
TOOLCHAIN_FILE="$LLDB/cmake/platforms/Android.cmake"
CMAKE_OPTIONS+=(-GNinja)
CMAKE_OPTIONS+=("$LLVM")
CMAKE_OPTIONS+=(-Wno-dev)
CMAKE_OPTIONS+=(-DCMAKE_MAKE_PROGRAM="$NINJA")
CMAKE_OPTIONS+=(-DCMAKE_BUILD_TYPE=$CONFIG)
CMAKE_OPTIONS+=(-DCMAKE_TOOLCHAIN_FILE="$TOOLCHAIN_FILE")
CMAKE_OPTIONS+=(-DANDROID_TOOLCHAIN_DIR="$TOOLCHAIN")
CMAKE_OPTIONS+=(-DCMAKE_CXX_COMPILER_VERSION=4.9)
CMAKE_OPTIONS+=(-DANDROID_ABI=$ABI)
CMAKE_OPTIONS+=(-DLLVM_TARGET_ARCH=$LLVM_ARCH)
CMAKE_OPTIONS+=(-DLLVM_TARGETS_TO_BUILD=$LLVM_ARCH)
CMAKE_OPTIONS+=(-DLLVM_HOST_TRIPLE=$TRIPLE_ARCH-unknown-linux-android)
CMAKE_OPTIONS+=(-DLLVM_TABLEGEN="$HOST/bin/llvm-tblgen")
CMAKE_OPTIONS+=(-DCLANG_TABLEGEN="$HOST/bin/clang-tblgen")
CMAKE_OPTIONS+=(-DCMAKE_C_FLAGS="${LLDB_FLAGS[*]}")
CMAKE_OPTIONS+=(-DCMAKE_CXX_FLAGS="${LLDB_FLAGS[*]}")
CMAKE_OPTIONS+=(-DCMAKE_EXE_LINKER_FLAGS="${LLDB_LINKER_FLAGS[*]}")
CMAKE_OPTIONS+=(-DCMAKE_MODULE_LINKER_FLAGS="${LLDB_LINKER_FLAGS[*]}")
CMAKE_OPTIONS+=(-DCMAKE_SHARED_LINKER_FLAGS="${LLDB_LINKER_FLAGS[*]}")
CMAKE_OPTIONS+=(-DANDROID_SYSROOT="$SYSROOT")
CMAKE_OPTIONS+=(-DPYTHON_EXECUTABLE="$PYTHON_DIR/bin/python")
CMAKE_OPTIONS+=(-DLLDB_SYSTEM_LIBS="$LLDB_LIBS")
CMAKE_OPTIONS+=(-DLLVM_EXTERNAL_LLDB_SOURCE_DIR="$LLDB")
CMAKE_OPTIONS+=(-DLLVM_EXTERNAL_CLANG_SOURCE_DIR="$CLANG")
(cd "$BUILD" && "$CMAKE" "${CMAKE_OPTIONS[@]}")
"$NINJA" -C "$BUILD" lldb-server
mkdir -p "$INSTALL/android/$TRIPLE_ARCH"
cp -aL "$BUILD/bin/lldb-server" "$INSTALL/android/$TRIPLE_ARCH/"
done # for ARCH
(cd "$INSTALL/android" && zip --symlinks -r "$DEST/lldb-android-${BNUM}.zip" .)