merge in studio-1.4-release history after reset to studio-master-dev
diff --git a/build-android.sh b/build-android.sh
new file mode 100755
index 0000000..78d5677
--- /dev/null
+++ b/build-android.sh
@@ -0,0 +1,125 @@
+#!/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)"
+			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" .)
diff --git a/build-darwin.sh b/build-darwin.sh
index 4931155..34aa1d4 100755
--- a/build-darwin.sh
+++ b/build-darwin.sh
@@ -7,65 +7,53 @@
 # exit on error
 set -e
 
-# OS X lacks a "realpath" bash command
-realpath() {
-    [[ "$1" == /* ]] && echo "$1" || echo "$PWD/$1"
-}
+if [ ! "${BASH_SOURCE[1]}" ]; then
+	case "$(uname -s)" in
+		Darwin)
+			ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
+			source "$ROOT_DIR/external/lldb-utils/build.sh" "$@"
+			exit 0
+			;;
+		*)
+			echo "No." > /dev/stderr
+			exit 1
+	esac
+fi
 
-# calculate the root directory from the script path
-# this script lives two directories down from the root
-# external/lldb-utils/build-darwin.sh
-ROOT_DIR="$(realpath "$(dirname "$0")/../..")"
-cd "$ROOT_DIR"
-
-function die() {
-  echo "$*" > /dev/stderr
-  echo "Usage: $0 <out_dir> <dest_dir> <build_number>" > /dev/stderr
-  exit 1
-}
-
-(($# > 3)) && die "[$0] Unknown parameter: $4"
-
-OUT="$1"
-DEST="$2"
-BNUM="$3"
-
-[ ! "$OUT"  ] && die "## Error: Missing out folder"
-[ ! "$DEST" ] && die "## Error: Missing destination folder"
-[ ! "$BNUM" ] && die "## Error: Missing build number"
-
-OUT="$(realpath "$OUT")"
-DEST="$(realpath "$DEST")"
-
-cat <<END_INFO
-## Building android-studio ##
-## Out Dir  : $OUT
-## Dest Dir : $DEST
-## Build Num: $BNUM
-
-END_INFO
-
-LLVM="$ROOT_DIR/external/llvm"
-LLDB="$ROOT_DIR/external/lldb"
-
-ln -fns ../../clang "$LLVM/tools/clang"
 ln -fns ../llvm "$LLDB/llvm"
+ln -fns ../../clang "$LLVM/tools/clang"
 
-PRE="$ROOT_DIR/prebuilts"
+export PATH="$SWIG_DIR/bin:/usr/sbin:/usr/bin:/bin"
 
-export PATH="$PRE/swig/darwin-x86/bin:/usr/sbin:/usr/bin:/bin"
-export SWIG_LIB="$PRE/swig/darwin-x86/share/swig/2.0.11"
+# we don't need code signing
+function codesign() { :; }
+export -f codesign
 
 CONFIG=Release
 
-BUILD="$OUT/lldb/host"
-rm -rf "$BUILD"
-mkdir -p "$BUILD"
+unset XCODEBUILD_OPTIONS
+unset PRUNE
 
-(cd "$LLDB" && xcodebuild -configuration $CONFIG -target desktop OBJROOT="$BUILD" SYMROOT="$BUILD")
+XCODEBUILD_OPTIONS+=(-configuration $CONFIG)
+XCODEBUILD_OPTIONS+=(-target desktop)
+XCODEBUILD_OPTIONS+=(OBJROOT="$BUILD")
+XCODEBUILD_OPTIONS+=(SYMROOT="$BUILD")
+
+(cd "$LLDB" && xcodebuild "${XCODEBUILD_OPTIONS[@]}")
+
+mkdir -p "$INSTALL/host" "$INSTALL/host/include/lldb"
+cp -a "$BUILD/$CONFIG/"{lldb,LLDB.framework}      "$INSTALL/host/"
+cp -a "$LLDB/include/lldb/"{API,Utility,lldb-*.h} "$INSTALL/host/include/lldb/"
+
+find "$INSTALL/host/include/lldb" -name 'lldb-private*.h' -delete
+
+unset PRUNE
+PRUNE+=('(' -name Clang -and -type d ')')
+PRUNE+=( -or -name argdumper)
+PRUNE+=( -or -name darwin-debug)
+PRUNE+=( -or -name lldb-server)
 
 # zip file is huge, need to prune
-find "$BUILD/$CONFIG/LLDB.framework" -name Clang -or -name debugserver -or -name lldb-server -exec rm -rf {} +
+find "$INSTALL/host/LLDB.framework" '(' "${PRUNE[@]}" ')' -exec rm -rf {} +
 
-mkdir -p "$DEST"
-(cd "$BUILD/$CONFIG" && zip -r --symlinks "$DEST/lldb-mac-${BNUM}.zip" lldb LLDB.framework)
+(cd "$INSTALL/host" && zip -r --symlinks "$DEST/lldb-mac-${BNUM}.zip" .)
diff --git a/build-internal.sh b/build-internal.sh
new file mode 100755
index 0000000..783479a
--- /dev/null
+++ b/build-internal.sh
@@ -0,0 +1,108 @@
+#!/bin/bash
+# Expected arguments:
+# $1 = out_dir
+# $2 = dest_dir
+# $3 = build_number
+
+# exit on error
+set -e
+
+# calculate the root directory from the script path
+# this script lives two directories down from the root
+# external/lldb-utils/build-internal.sh
+ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
+source "$ROOT_DIR/external/lldb-utils/build.sh" "$@"
+
+GOOGLE="$ROOT_DIR/tools/vendor/google"
+FRONTEND="$GOOGLE/android-ndk/native/LLDBProtobufFrontend"
+
+CONFIG=Release
+
+BUILD="$OUT/lldb/frontend"
+rm -rf "$BUILD"
+mkdir -p "$BUILD"
+
+unset LLDB_FLAGS
+unset LLDB_LINKER_FLAGS
+unset CMAKE_OPTIONS
+
+CMAKE_OPTIONS+=(-GNinja)
+CMAKE_OPTIONS+=(-DCMAKE_BUILD_TYPE=$CONFIG)
+
+case $OS in
+	linux)
+		CC="$PREBUILTS/clang/linux-x86/host/3.6/bin/clang"
+		TOOLCHAIN="$PREBUILTS/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8"
+
+		LLDB_FLAGS+=(-target x86_64-unknown-linux)
+		LLDB_FLAGS+=(--gcc-toolchain="$TOOLCHAIN")
+		LLDB_FLAGS+=(-B"$TOOLCHAIN/bin/x86_64-linux-")
+
+		CMAKE_OPTIONS+=(-DCMAKE_SYSROOT="$TOOLCHAIN/sysroot")
+		CMAKE_OPTIONS+=(-DCMAKE_C_COMPILER="$CC")
+		CMAKE_OPTIONS+=(-DCMAKE_CXX_COMPILER="$CC++")
+		CMAKE_OPTIONS+=(-DCMAKE_C_FLAGS="${LLDB_FLAGS[*]}")
+		CMAKE_OPTIONS+=(-DCMAKE_CXX_FLAGS="${LLDB_FLAGS[*]}")
+
+		CMAKE_OPTIONS+=("$FRONTEND")
+		CMAKE_OPTIONS+=(-DCMAKE_MAKE_PROGRAM="$NINJA")
+		CMAKE_OPTIONS+=(-DLIBLLDB_DIR="$INSTALL/host/lib")
+		CMAKE_OPTIONS+=(-DCMAKE_INSTALL_PREFIX="$INSTALL/frontend")
+		;;
+	darwin)
+		LLDB_FLAGS+=(-stdlib=libc++)
+		LLDB_FLAGS+=(-mmacosx-version-min=10.8)
+
+		LLDB_LINKER_FLAGS+=(-mmacosx-version-min=10.8)
+
+		CMAKE_OPTIONS+=(-DCMAKE_C_COMPILER=clang)
+		CMAKE_OPTIONS+=(-DCMAKE_CXX_COMPILER=clang++)
+		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+=("$FRONTEND")
+		CMAKE_OPTIONS+=(-DCMAKE_MAKE_PROGRAM="$NINJA")
+		CMAKE_OPTIONS+=(-DLIBLLDB_DIR="$INSTALL/host")
+		CMAKE_OPTIONS+=(-DCMAKE_INSTALL_PREFIX="$INSTALL/frontend")
+		;;
+	windows)
+		# path too long
+		mv "$ROOT_DIR/"{prebuilts,tools} "$TMP/"
+		PREBUILTS="$TMP${PREBUILTS#"$ROOT_DIR"}"
+		NINJA="$PREBUILTS/ninja/${OS}-x86/ninja"
+		CMAKE="$PREBUILTS/cmake/${OS}-x86/bin/cmake"
+		FRONTEND="$TMP${FRONTEND#"$ROOT_DIR"}"
+
+		function finish() {
+			# move these back
+			mv "$LLVM" "$LLDB" "$CLANG" "$ROOT_DIR/external/"
+			mv "$TMP/"{prebuilts,tools} "$ROOT_DIR/"
+			rmdir "$TMP"
+		}
+
+		CMAKE_OPTIONS+=("$(cygpath -w "$FRONTEND")")
+		CMAKE_OPTIONS+=(-DCMAKE_MAKE_PROGRAM="$(cygpath -w "${NINJA}.exe")")
+		CMAKE_OPTIONS+=(-DLIBLLDB_DIR="$(cygpath -w "$INSTALL/host/lib")")
+		CMAKE_OPTIONS+=(-DCMAKE_INSTALL_PREFIX="$(cygpath -w "$INSTALL/frontend")")
+		;;
+esac
+
+case $OS in
+	windows)
+		unset CMD
+		CMD+=(cmd /c "${VS120COMNTOOLS}VsDevCmd.bat")
+		CMD+=('&&' cd "$(cygpath -w "$BUILD")")
+		CMD+=('&&' "$(cygpath -w "${CMAKE}.exe")" "${CMAKE_OPTIONS[@]}")
+		CMD+=('&&' "$(cygpath -w "${NINJA}.exe")" install)
+		PATH="$(cygpath -u 'C:\Windows\System32')" "${CMD[@]}"
+		;;
+	*)
+		(cd "$BUILD" && "$CMAKE" "${CMAKE_OPTIONS[@]}")
+		"$NINJA" -C "$BUILD" install
+		;;
+esac
+
+(cd "$INSTALL/frontend" && zip -r "$DEST/lldb-frontend-$OS-${BNUM}.zip" .)
diff --git a/build-linux.sh b/build-linux.sh
index 4e065bf..0ec2af3 100755
--- a/build-linux.sh
+++ b/build-linux.sh
@@ -7,74 +7,32 @@
 # exit on error
 set -e
 
-# calculate the root directory from the script path
-# this script lives two directories down from the root
-# external/lldb-utils/build-linux.sh
-ROOT_DIR="$(readlink -f "$(dirname "$0")/../..")"
-cd "$ROOT_DIR"
+if [ ! "${BASH_SOURCE[1]}" ]; then
+	case "$(uname -s)" in
+		Linux)
+			ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
+			source "$ROOT_DIR/external/lldb-utils/build.sh" "$@"
+			exit 0
+			;;
+		*)
+			echo "No." > /dev/stderr
+			exit 1
+	esac
+fi
 
-function die() {
-  echo "$*" > /dev/stderr
-  echo "Usage: $0 <out_dir> <dest_dir> <build_number>" > /dev/stderr
-  exit 1
-}
-
-(($# > 3)) && die "[$0] Unknown parameter: $4"
-
-OUT="$1"
-DEST="$2"
-BNUM="$3"
-
-[ ! "$OUT"  ] && die "## Error: Missing out folder"
-[ ! "$DEST" ] && die "## Error: Missing destination folder"
-[ ! "$BNUM" ] && die "## Error: Missing build number"
-
-OUT="$(readlink -f "$OUT")"
-DEST="$(readlink -f "$DEST")"
-
-cat <<END_INFO
-## Building android-studio ##
-## Out Dir  : $OUT
-## Dest Dir : $DEST
-## Build Num: $BNUM
-
-END_INFO
-
-LLVM="$ROOT_DIR/external/llvm"
-LLDB="$ROOT_DIR/external/lldb"
-
-ln -fns ../../clang "$LLVM/tools/clang"
-ln -fns ../../lldb "$LLVM/tools/lldb"
-
-PRE="$ROOT_DIR/prebuilts"
-CMAKE="$PRE/cmake/linux-x86/bin/cmake"
-NINJA="$PRE/ninja/linux-x86/ninja"
-
-export PATH="$(dirname "$NINJA"):/usr/bin:/bin"
-export SWIG_LIB="$PRE/swig/linux-x86/share/swig/2.0.11"
-
-INSTALL="$OUT/lldb/install"
-rm -rf "$INSTALL"
-
-#######################
-##### Linux build #####
-#######################
+export PATH="/usr/bin:/bin"
 
 CONFIG=Release
 
-BUILD="$OUT/lldb/host"
-rm -rf "$BUILD"
-mkdir -p "$BUILD"
-
 unset LLDB_FLAGS
+unset LLDB_LINKER_FLAGS
 unset CMAKE_OPTIONS
 
-CLANG="$PRE/clang/linux-x86/host/3.6/bin/clang"
-TOOLCHAIN="$PRE/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8"
+CC="$PREBUILTS/clang/linux-x86/host/3.6/bin/clang"
+TOOLCHAIN="$PREBUILTS/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8"
 
 LLDB_FLAGS+=(-fuse-ld=gold)
 LLDB_FLAGS+=(-target x86_64-unknown-linux)
-LLDB_FLAGS+=(-Qunused-arguments)
 
 # Necessary because clang recognizes x86_64-linux-gnu
 # as a valid gcc toolchain but not x86_64-linux.
@@ -85,25 +43,31 @@
 # Prefix for gcc, ld, etc.
 LLDB_FLAGS+=(-B"$TOOLCHAIN/bin/x86_64-linux-")
 
-LLDB_FLAGS+=(-I"$PRE/libedit/linux-x86/include")
-LLDB_FLAGS+=(-L"$PRE/libedit/linux-x86/lib")
+LLDB_FLAGS+=(-I"$PREBUILTS/libedit/linux-x86/include")
+
+LLDB_LINKER_FLAGS+=(-L"$PREBUILTS/libedit/linux-x86/lib")
 
 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_C_COMPILER="$CLANG")
-CMAKE_OPTIONS+=(-DCMAKE_CXX_COMPILER="$CLANG++")
+CMAKE_OPTIONS+=(-DCMAKE_C_COMPILER="$CC")
+CMAKE_OPTIONS+=(-DCMAKE_CXX_COMPILER="$CC++")
 CMAKE_OPTIONS+=(-DCMAKE_AR="$TOOLCHAIN/bin/x86_64-linux-ar")
 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+=(-DLLDB_DISABLE_CURSES=1)
-CMAKE_OPTIONS+=(-DSWIG_EXECUTABLE="$PRE/swig/linux-x86/bin/swig")
-CMAKE_OPTIONS+=(-DPYTHON_EXECUTABLE="$PRE/python/linux-x86/bin/python")
-CMAKE_OPTIONS+=(-DPYTHON_LIBRARY="$PRE/python/linux-x86/lib/libpython2.7.so")
-CMAKE_OPTIONS+=(-DPYTHON_INCLUDE_DIR="$PRE/python/linux-x86/include/python2.7")
-CMAKE_OPTIONS+=(-DLLVM_TARGETS_TO_BUILD="ARM;X86;AArch64;Mips")
+CMAKE_OPTIONS+=(-DSWIG_EXECUTABLE="$SWIG_DIR/bin/swig")
+CMAKE_OPTIONS+=(-DPYTHON_EXECUTABLE="$PYTHON_DIR/bin/python")
+CMAKE_OPTIONS+=(-DPYTHON_LIBRARY="$PYTHON_DIR/lib/libpython2.7.so")
+CMAKE_OPTIONS+=(-DPYTHON_INCLUDE_DIR="$PYTHON_DIR/include/python2.7")
+CMAKE_OPTIONS+=(-DLLVM_TARGETS_TO_BUILD="X86;ARM;AArch64;Mips;Hexagon")
 CMAKE_OPTIONS+=(-DCMAKE_INSTALL_PREFIX="$INSTALL/host")
+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 lldb-server finish_swig lib/readline.so
@@ -112,115 +76,27 @@
 #"$NINJA" -C "$BUILD" install
 
 mkdir -p "$INSTALL/host/bin" "$INSTALL/host/lib" "$INSTALL/host/include/lldb"
-cp -a "$BUILD/bin/"lldb*                               "$INSTALL/host/bin/"
-cp -a "$BUILD/lib/"{liblldb.so*,python2.7,readline.so} "$INSTALL/host/lib/"
-cp -a "$PRE/libedit/linux-x86/lib/"libedit.so*         "$INSTALL/host/lib/"
-cp -a "$PRE/python/linux-x86/lib/"libpython2.7.so*     "$INSTALL/host/lib/"
-cp -a "$TOOLCHAIN/sysroot/usr/lib/"libtinfo.so*        "$INSTALL/host/lib/"
-cp -a "$LLDB/include/lldb/API"                         "$INSTALL/host/include/lldb/"
+cp -a "$BUILD/bin/"lldb*                             "$INSTALL/host/bin/"
+cp -a "$BUILD/lib/"{liblldb.so*,readline.so}         "$INSTALL/host/lib/"
+cp -a "$PREBUILTS/libedit/linux-x86/lib/"libedit.so* "$INSTALL/host/lib/"
+cp -a "$TOOLCHAIN/sysroot/usr/lib/"libtinfo.so*      "$INSTALL/host/lib/"
+cp -a "$PYTHON_DIR/lib/"{libpython2.7.so*,python2.7} "$INSTALL/host/lib/"
+cp -a "$BUILD/lib/python2.7/site-packages"           "$INSTALL/host/lib/python2.7"
+cp -a "$LLDB/include/lldb/"{API,Utility,lldb-*.h}    "$INSTALL/host/include/lldb/"
 
-#########################
-##### Android build #####
-#########################
+find "$INSTALL/host/include/lldb" -name 'lldb-private*.h' -delete
 
-CONFIG=MinSizeRel
-HOST="$OUT/lldb/host"
+unset PRUNE
+PRUNE+=(-name 'hashlib.py')
+PRUNE+=(-or -name '*.pyc')
+PRUNE+=(-or -name '*.pyo')
+PRUNE+=(-or -name 'plat-*')
+PRUNE+=(-or -name 'config')
+PRUNE+=(-or -name 'distutils')
+PRUNE+=(-or -name 'idlelib')
+PRUNE+=(-or -name 'lib2to3')
+PRUNE+=(-or -name 'test')
+PRUNE+=(-or -name 'unittest')
+find "$INSTALL/host/lib/python2.7" '(' "${PRUNE[@]}" ')' -prune -exec rm -r {} +
 
-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_LIBS
-unset CMAKE_OPTIONS
-
-ABI=$ARCH
-TRIPLE_ARCH=$ARCH
-SYSROOT_ARCH=$ARCH
-STL_ARCH=$ARCH
-
-case $ARCH in
-    x86)
-        TOOLCHAIN="$PRE/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="$PRE/gcc/linux-x86/x86/x86_64-linux-android-4.9"
-        LLVM_ARCH=X86
-        ;;
-    arm)
-        TOOLCHAIN="$PRE/gcc/linux-x86/arm/arm-linux-androideabi-4.9"
-        LLVM_ARCH=ARM STL_ARCH=armeabi-v7a ABI=armeabi
-        ;;
-    aarch64)
-        TOOLCHAIN="$PRE/gcc/linux-x86/aarch64/aarch64-linux-android-4.9"
-        LLVM_ARCH=AArch64 SYSROOT_ARCH=arm64 STL_ARCH=arm64-v8a
-        ;;
-    mips)
-        TOOLCHAIN="$PRE/gcc/linux-x86/mips/mips64el-linux-android-4.9"
-        LLVM_ARCH=Mips ABI=mips64
-        LLDB_FLAGS+=(-mips32)
-        ;;
-    mips64)
-        TOOLCHAIN="$PRE/gcc/linux-x86/mips/mips64el-linux-android-4.9"
-        LLVM_ARCH=Mips
-        ;;
-esac
-
-SYSROOT="$PRE/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="$PRE/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_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_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+=(-DANDROID_SYSROOT="$SYSROOT")
-CMAKE_OPTIONS+=(-DPYTHON_EXECUTABLE="$PRE/python/linux-x86/bin/python")
-CMAKE_OPTIONS+=(-DLLDB_SYSTEM_LIBS="$LLDB_LIBS")
-
-(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
-
-###############
-##### ZIP #####
-###############
-
-mkdir -p "$DEST"
-(cd "$LLDB" && zip --symlinks -r "$DEST/lldb-tests-${BNUM}.zip" test)
 (cd "$INSTALL/host" && zip --symlinks -r "$DEST/lldb-linux-${BNUM}.zip" .)
-(cd "$INSTALL/android" && zip --symlinks -r "$DEST/lldb-android-${BNUM}.zip" .)
diff --git a/build-windows.sh b/build-windows.sh
index 8073576..d09a05e 100755
--- a/build-windows.sh
+++ b/build-windows.sh
@@ -3,93 +3,84 @@
 # $1 = out_dir
 # $2 = dest_dir
 # $3 = build_number
-#
-# Dependencies:
-# cygwin zip
 
 # exit on error
 set -e
 
-# calculate the root directory from the script path
-# this script lives two directories down from the root
-# external/lldb-utils/build-windows.sh
-ROOT_DIR="$(cygpath -w "$(readlink -f "$(dirname "$0")/../..")")"
-cd "$ROOT_DIR"
+if [ ! "${BASH_SOURCE[1]}" ]; then
+	case "$(uname -s)" in
+		*_NT-*)
+			ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
+			source "$ROOT_DIR/external/lldb-utils/build.sh" "$@"
+			exit 0
+			;;
+		*)
+			echo "No." > /dev/stderr
+			exit 1
+	esac
+fi
 
-function die() {
-  echo "$*" > /dev/stderr
-  echo "Usage: $0 <out_dir> <dest_dir> <build_number>" > /dev/stderr
-  exit 1
+# path too long
+TMP="$(mktemp -d)"
+mv "$LLVM" "$LLDB" "$CLANG" "$TMP/"
+LLVM="$TMP/llvm"
+LLDB="$TMP/lldb"
+CLANG="$TMP/clang"
+
+function finish() {
+	# move these back
+	mv "$LLVM" "$LLDB" "$CLANG" "$ROOT_DIR/external/"
+	rmdir "$TMP"
 }
 
-(($# > 3)) && die "[$0] Unknown parameter: $4"
+trap finish EXIT
 
-OUT="$1"
-DEST="$2"
-BNUM="$3"
-
-[ ! "$OUT"  ] && die "## Error: Missing out folder"
-[ ! "$DEST" ] && die "## Error: Missing destination folder"
-[ ! "$BNUM" ] && die "## Error: Missing build number"
-
-OUT="$(cygpath -w "$(readlink -f "$OUT")")"
-DEST="$(cygpath -w "$(readlink -f "$DEST")")"
-
-cat <<END_INFO
-## Building android-studio ##
-## Out Dir  : $OUT
-## Dest Dir : $DEST
-## Build Num: $BNUM
-
-END_INFO
-
-LLVM="$ROOT_DIR"'\external\llvm'
-LLDB="$ROOT_DIR"'\external\lldb'
-CLANG="$ROOT_DIR"'\external\clang'
-
-PRE="$ROOT_DIR"'\prebuilts'
-CMAKE="$PRE"'\cmake\windows-x86\bin\cmake'
-NINJA="$PRE"'\ninja\windows-x86\ninja'
-
-export SWIG_LIB="$PRE"'\swig\windows-x86\share\swig\2.0.11'
-
-INSTALL="$OUT"'\lldb\install'
-rm -rf "$INSTALL"
+export SWIG_LIB="$(cygpath -w "$SWIG_LIB")"
 
 CONFIG=Release
 
-BUILD="$OUT"'\lldb\host'
-rm -rf "$BUILD"
-mkdir -p "$BUILD"
-
 unset CMAKE_OPTIONS
 CMAKE_OPTIONS+=(-GNinja)
-CMAKE_OPTIONS+=("$LLVM")
+CMAKE_OPTIONS+=("$(cygpath -w "$LLVM")")
+CMAKE_OPTIONS+=(-DCMAKE_MAKE_PROGRAM="$(cygpath -w "${NINJA}.exe")")
 CMAKE_OPTIONS+=(-DCMAKE_BUILD_TYPE=$CONFIG)
-CMAKE_OPTIONS+=(-DSWIG_DIR="$PRE"'\swig\windows-x86')
-CMAKE_OPTIONS+=(-DSWIG_EXECUTABLE="$PRE"'\swig\windows-x86\bin\swig.exe')
-CMAKE_OPTIONS+=(-DPYTHON_HOME="$PRE"'\python\windows-x86\x86')
-CMAKE_OPTIONS+=(-DLLVM_TARGETS_TO_BUILD="ARM;X86;AArch64;Mips")
-CMAKE_OPTIONS+=(-DCMAKE_INSTALL_PREFIX="$INSTALL")
-CMAKE_OPTIONS+=(-DLLVM_EXTERNAL_LLDB_SOURCE_DIR="$LLDB")
-CMAKE_OPTIONS+=(-DLLVM_EXTERNAL_CLANG_SOURCE_DIR="$CLANG")
+CMAKE_OPTIONS+=(-DSWIG_DIR="$(cygpath -w "$SWIG_DIR")")
+CMAKE_OPTIONS+=(-DSWIG_EXECUTABLE="$(cygpath -w "$SWIG_DIR/bin/swig.exe")")
+CMAKE_OPTIONS+=(-DLLDB_RELOCATABLE_PYTHON=1)
+CMAKE_OPTIONS+=(-DPYTHON_HOME="$(cygpath -w "$PYTHON_DIR/x86")")
+CMAKE_OPTIONS+=(-DLLVM_TARGETS_TO_BUILD="X86;ARM;AArch64;Mips;Hexagon")
+CMAKE_OPTIONS+=(-DCMAKE_INSTALL_PREFIX="$(cygpath -w "$INSTALL/host")")
+CMAKE_OPTIONS+=(-DLLVM_EXTERNAL_LLDB_SOURCE_DIR="$(cygpath -w "$LLDB")")
+CMAKE_OPTIONS+=(-DLLVM_EXTERNAL_CLANG_SOURCE_DIR="$(cygpath -w "$CLANG")")
 
 unset CMD
-CMD+=(cmd /c 'C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat')
-CMD+=('&&' cd "$BUILD")
-CMD+=('&&' "$CMAKE" "${CMAKE_OPTIONS[@]}")
-CMD+=('&&' "$NINJA" lldb finish_swig)
+CMD+=(cmd /c "${VS120COMNTOOLS}VsDevCmd.bat")
+CMD+=('&&' cd "$(cygpath -w "$BUILD")")
+CMD+=('&&' "$(cygpath -w "${CMAKE}.exe")" "${CMAKE_OPTIONS[@]}")
+CMD+=('&&' "$(cygpath -w "${NINJA}.exe")" lldb finish_swig)
 
 # Too large and missing site-packages - http://llvm.org/pr24378
 #CMD+=('&&' "$NINJA" install)
 
-PATH="$(cygpath -up "$(dirname "$NINJA")"';C:\Windows\system32')" "${CMD[@]}"
+PATH="$(cygpath -u 'C:\Windows\System32')" "${CMD[@]}"
 
-mkdir -p "$INSTALL"'\bin' "$INSTALL"'\lib' "$INSTALL"'\include\lldb'
-cp -a "$BUILD"'\bin\'{lldb.exe,liblldb.dll}        "$INSTALL"'\bin\'
-cp -a "$PRE"'\python\windows-x86\x86\python27.dll' "$INSTALL"'\bin\'
-cp -a "$BUILD"'\lib\'{liblldb.lib,site-packages}   "$INSTALL"'\lib\'
-cp -a "$LLDB"'\include\lldb\API'                   "$INSTALL"'\include\lldb\'
+mkdir -p "$INSTALL/host/bin" "$INSTALL/host/lib" "$INSTALL/host/include/lldb"
+cp -a "$BUILD/bin/"{lldb.exe,liblldb.dll}         "$INSTALL/host/bin/"
+cp -a "$PYTHON_DIR/x86/python27.dll"              "$INSTALL/host/bin/"
+cp -a "$BUILD/lib/"{liblldb.lib,site-packages}    "$INSTALL/host/lib/"
+cp -a "$PYTHON_DIR/x86/Lib/"*                     "$INSTALL/host/lib/"
+cp -a "$LLDB/include/lldb/"{API,Utility,lldb-*.h} "$INSTALL/host/include/lldb/"
 
-mkdir -p "$DEST"
-(cd "$INSTALL" && zip -r "$DEST"'\'lldb-windows-${BNUM}.zip .)
+find "$INSTALL/host/include/lldb" -name 'lldb-private*.h' -delete
+
+unset PRUNE
+PRUNE+=(-name '*.pyc')
+PRUNE+=(-or -name 'plat-*')
+PRUNE+=(-or -name 'distutils')
+PRUNE+=(-or -name 'idlelib')
+PRUNE+=(-or -name 'lib2to3')
+PRUNE+=(-or -name 'test')
+PRUNE+=(-or -name 'unittest')
+find "$INSTALL/host/lib/" '(' "${PRUNE[@]}" ')' -prune -exec rm -r {} +
+
+(cd "$INSTALL/host" && zip -r "$DEST/lldb-windows-${BNUM}.zip" .)
diff --git a/build.sh b/build.sh
index a5a5662..a5d5c31 100755
--- a/build.sh
+++ b/build.sh
@@ -1,4 +1,72 @@
 #!/bin/bash
-# delete this script once the build servers are pointing directly to
-# external/lldb-utils/build-linux.sh
-external/lldb-utils/build-linux.sh $@
+# Expected arguments:
+# $1 = out_dir
+# $2 = dest_dir
+# $3 = build_number
+
+# exit on error
+set -e
+
+# calculate the root directory from the script path
+# this script lives two directories down from the root
+# external/lldb-utils/build.sh
+ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
+cd "$ROOT_DIR"
+
+function die() {
+	echo "$*" > /dev/stderr
+	echo "Usage: $0 <out_dir> <dest_dir> <build_number>" > /dev/stderr
+	exit 1
+}
+
+(($# > 3)) && die "[$0] Unknown parameter: $4"
+
+OUT="$1"
+DEST="$2"
+BNUM="$3"
+
+[ ! "$OUT"  ] && die "## Error: Missing out folder"
+[ ! "$DEST" ] && die "## Error: Missing destination folder"
+[ ! "$BNUM" ] && die "## Error: Missing build number"
+
+mkdir -p "$OUT" "$DEST"
+OUT="$(cd "$OUT" && pwd)"
+DEST="$(cd "$DEST" && pwd)"
+
+cat <<END_INFO
+## Building android-studio ##
+## Out Dir  : $OUT
+## Dest Dir : $DEST
+## Build Num: $BNUM
+
+END_INFO
+
+LLVM="$ROOT_DIR/external/llvm"
+LLDB="$ROOT_DIR/external/lldb"
+CLANG="$ROOT_DIR/external/clang"
+
+case "$(uname -s)" in
+	Linux)  OS=linux;;
+	Darwin) OS=darwin;;
+	*_NT-*) OS=windows;;
+esac
+
+PREBUILTS="$ROOT_DIR/prebuilts"
+NINJA="$PREBUILTS/ninja/${OS}-x86/ninja"
+CMAKE="$PREBUILTS/cmake/${OS}-x86/bin/cmake"
+SWIG_DIR="$PREBUILTS/swig/${OS}-x86"
+PYTHON_DIR="$PREBUILTS/python/${OS}-x86"
+
+export SWIG_LIB="$SWIG_DIR/share/swig/2.0.11"
+
+BUILD="$OUT/lldb/host"
+INSTALL="$OUT/lldb/install"
+rm -rf "$BUILD" "$INSTALL"
+mkdir -p "$BUILD" "$INSTALL"
+
+source "$ROOT_DIR/external/lldb-utils/build-${OS}.sh"
+
+if [ $OS == linux ]; then
+	source "$ROOT_DIR/external/lldb-utils/build-android.sh"
+	(cd "$LLDB" && zip --symlinks -r "$DEST/lldb-tests-${BNUM}.zip" test resources)
+fi
diff --git a/prebuilts/build-all.sh b/prebuilts/build-all.sh
index a8cc85d..da2df51 100755
--- a/prebuilts/build-all.sh
+++ b/prebuilts/build-all.sh
@@ -4,3 +4,5 @@
 ./build-swig.sh
 ./build-cmake.sh
 ./build-ninja.sh
+./build-glog.sh
+./build-protobuf.sh
diff --git a/prebuilts/build-cmake.sh b/prebuilts/build-cmake.sh
index 265d48b..a202fab 100755
--- a/prebuilts/build-cmake.sh
+++ b/prebuilts/build-cmake.sh
@@ -1,10 +1,10 @@
 #!/bin/bash -ex
-# latest version of this file can be found at 
+# latest version of this file can be found at
 # https://android.googlesource.com/platform/external/lldb-utils
 #
 # Download & build cmake on the local machine
 # works on Linux, OSX, and Windows (Git Bash)
-# leaves output in /tmp/cmake-build/install/
+# leaves output in /tmp/prebuilts/cmake/$OS-x86
 # cmake must be installed on Windows
 
 PROJ=cmake
diff --git a/prebuilts/build-common.sh b/prebuilts/build-common.sh
index 8c7eeb2..6189069 100755
--- a/prebuilts/build-common.sh
+++ b/prebuilts/build-common.sh
@@ -1,64 +1,56 @@
-# latest version of this file can be found at 
-# https://android.googlesource.com/platform/external/lldb-utils
+# latest version of this file can be found at
+# sso://googleplex-android/platform/external/lldb-utils
 #
 # inputs
-# $PROJ - project name (cmake|ninja|swig)
+# $PROJ - project name
 # $VER - project version
 # $1 - name of this file
 #
 # this file does the following:
 #
 # 1) define the following env vars
-# OS - linux|darwin|windows
-# USER - username
-# CORES - numer of cores (for parallel builds)
-# PATH (with appropriate compilers)
-# CFLAGS/CXXFLAGS/LDFLAGS
-# RD - root directory for source and object files
-# INSTALL - install directory/git repo root
-# SCRIPT_FILE=absolute path to the parent build script
-# SCRIPT_DIR=absolute path to the parent build script's directory
-# COMMON_FILE=absolute path to this file
-
-#
+#    OS - linux|darwin|windows
+#    USER - username
+#    CORES - numer of cores (for parallel builds)
+#    PATH (with appropriate compilers)
+#    CFLAGS/CXXFLAGS/LDFLAGS
+#    RD - root directory for source and object files
+#    INSTALL - install directory/git repo root
+#    SCRIPT_FILE - absolute path to the parent build script
+#    SCRIPT_DIR - absolute path to the parent build script's directory
+#    COMMON_FILE - absolute path to this file
 # 2) create an empty tmp directory at /tmp/$PROJ-$USER
 # 3) checkout the destination git repo to /tmp/prebuilts/$PROJ/$OS-x86/$VER
 # 4) cd $RD
 
 UNAME="$(uname)"
+SCRATCH=/tmp
+UPSTREAM=sso://googleplex-android/platform/prebuilts
 case "$UNAME" in
 Linux)
-    SCRATCH=/tmp
     OS='linux'
     INSTALL_VER=$VER
     ;;
 Darwin)
-    SCRATCH=/tmp
     OS='darwin'
-    OSX_MIN=10.6
+    OSX_MIN=10.8
+    export CC=clang
+    export CXX=$CC++
     export CFLAGS="$CFLAGS -mmacosx-version-min=$OSX_MIN"
-    export CXXFLAGS="$CXXFLAGS -mmacosx-version-min=$OSX_MIN"
+    export CXXFLAGS="$CXXFLAGS -mmacosx-version-min=$OSX_MIN -stdlib=libc++"
     export LDFLAGS="$LDFLAGS -mmacosx-version-min=$OSX_MIN"
     INSTALL_VER=$VER
     ;;
 *_NT-*)
-    if [[ "$UNAME" == CYGWIN_NT-* ]]; then
-        PATH_PREFIX=/cygdrive
-    else
-        # MINGW32_NT-*
-        PATH_PREFIX=
-    fi
-    SCRATCH=$PATH_PREFIX/d/src/tmp
     USER=$USERNAME
     OS='windows'
     CORES=$NUMBER_OF_PROCESSORS
     # VS2013 x64 Native Tools Command Prompt
     case "$MSVS" in
     2013)
-        export PATH="$PATH_PREFIX/c/Program Files (x86)/Microsoft Visual Studio 12.0/VC/bin/amd64/":"$PATH_PREFIX/c/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/":"$PATH"
-        export INCLUDE="C:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\VC\\INCLUDE;C:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\VC\\ATLMFC\\INCLUDE;C:\\Program Files (x86)\\Windows Kits\\8.1\\include\\shared;C:\\Program Files (x86)\\Windows Kits\\8.1\\include\\um;C:\\Program Files (x86)\\Windows Kits\\8.1\\include\\winrt;"
-        export LIB="C:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\VC\\LIB\\amd64;C:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\VC\\ATLMFC\\LIB\\amd64;C:\\Program Files (x86)\\Windows Kits\\8.1\\lib\\winv6.3\\um\\x64;"
-        export LIBPATH="C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319;C:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\VC\\LIB\\amd64;C:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\VC\\ATLMFC\\LIB\\amd64;C:\\Program Files (x86)\\Windows Kits\\8.1\\References\\CommonConfiguration\\Neutral;C:\\Program Files (x86)\\Microsoft SDKs\\Windows\\v8.1\\ExtensionSDKs\\Microsoft.VCLibs\\12.0\\References\\CommonConfiguration\\neutral;"
+        devenv() {
+            cmd /c "${VS120COMNTOOLS}VsDevCmd.bat" '&' devenv.com "$@"
+        }
         INSTALL_VER=${VER}_${MSVS}
         ;;
     *)
@@ -79,7 +71,7 @@
 
 # OSX lacks a "realpath" bash command
 realpath() {
-    [[ $1 = /* ]] && echo "$1" || echo "$PWD/${1#./}"
+    [[ "$1" == /* ]] && echo "$1" || echo "$PWD/${1#./}"
 }
 
 SCRIPT_FILE=$(realpath "$0")
@@ -95,31 +87,40 @@
 # clone prebuilt gcc
 case "$OS" in
 linux)
-    GCC_DIR=$RD/gcc
-    GCC_LIB=$GCC_DIR/lib/gcc/x86_64-linux/4.8 # crtbegin.o and libgcc.a
-    GCC_LIB2=$GCC_DIR/x86_64-linux/lib64 # libgcc_s.so
-
     # can't get prebuilt clang working so we're using host clang-3.5 https://b/22748915
+    #CLANG_DIR=$RD/clang
+    #git clone $UPSTREAM/clang/linux-x86/host/3.6 $CLANG_DIR
+    #export CC="$CLANG_DIR/bin/clang"
+    #export CXX="$CC++"
     export CC=clang-3.5
     export CXX=clang++-3.5
-    export CFLAGS="$CFLAGS -fuse-ld=gold --sysroot $GCC_DIR/sysroot -B$GCC_LIB"
-    export CXXFLAGS="$CFLAGS -Ix86_64-linux/include/c++/4.8 -Ix86_64-linux/include/x86_64-linux/c++/4.8"
-    export LDFLAGS="$LDFLAGS -m64 --sysroot $GCC_DIR/sysroot -L$GCC_LIB -L$GCC_LIB2"
-    # lldb uses at least one function from glibc2.12
-    git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8 $GCC_DIR
+
+    GCC_DIR=$RD/gcc
+    git clone $UPSTREAM/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8 $GCC_DIR
+
+    find "$GCC_DIR" -name x86_64-linux -exec ln -fns {} {}-gnu \;
+
+    FLAGS+=(-fuse-ld=gold)
+    FLAGS+=(--gcc-toolchain="$GCC_DIR")
+    FLAGS+=(--sysroot "$GCC_DIR/sysroot")
+    FLAGS+=(-B"$GCC_DIR/bin/x86_64-linux-")
+    export CFLAGS="$CFLAGS ${FLAGS[*]}"
+    export CXXFLAGS="$CXXFLAGS ${FLAGS[*]}"
+    export LDFLAGS="$LDFLAGS -m64"
     ;;
 esac
 
 commit_and_push()
 {
+    BRANCH=studio-master-dev
     # check into a local git clone
     rm -rf $SCRATCH/prebuilts/$PROJ/
     mkdir -p $SCRATCH/prebuilts/$PROJ/
     cd $SCRATCH/prebuilts/$PROJ/
-    git clone https://android.googlesource.com/platform/prebuilts/$PROJ/$OS-x86
+    git clone $UPSTREAM/$PROJ/$OS-x86 -b $BRANCH
     GIT_REPO="$SCRATCH/prebuilts/$PROJ/$OS-x86"
     cd $GIT_REPO
-    git rm -r * || true  # ignore error caused by empty directory
+    rm -rf *
     mv $INSTALL/* $GIT_REPO
     cp $SCRIPT_FILE $GIT_REPO
     cp $COMMON_FILE $GIT_REPO
@@ -128,7 +129,7 @@
     git commit -m "Adding binaries for $INSTALL_VER"
 
     # execute this command to upload
-    #git push origin HEAD:refs/for/master
+    #git push origin HEAD:refs/for/$BRANCH
 
-    rm -rf $RD || true  # ignore error
+    rm -rf $RD
 }
diff --git a/prebuilts/build-editline.sh b/prebuilts/build-editline.sh
index cccb8af..9fb79fc 100755
--- a/prebuilts/build-editline.sh
+++ b/prebuilts/build-editline.sh
@@ -1,10 +1,10 @@
 #!/bin/bash -ex
-# latest version of this file can be found at 
+# latest version of this file can be found at
 # https://android.googlesource.com/platform/external/lldb-utils
 #
-# Download & build swig on the local machine
+# Download & build libedit on the local machine
 # works on Linux, OSX, and Windows (Cygwin)
-# leaves output in /tmp/prebuilts/install/
+# leaves output in /tmp/prebuilts/libedit/$OX-x86
 # cmake must be installed on Windows
 
 PROJ=libedit
diff --git a/prebuilts/build-glog.sh b/prebuilts/build-glog.sh
new file mode 100755
index 0000000..a8802e4
--- /dev/null
+++ b/prebuilts/build-glog.sh
@@ -0,0 +1,48 @@
+#!/bin/bash -ex
+# latest version of this file can be found at
+# https://android.googlesource.com/platform/external/lldb-utils
+#
+# Download & build glog on the local machine
+# works on Linux, OS X, and Windows (Cygwin)
+# leaves output in /tmp/prebuilts/libglog/$OS-x86
+
+PROJ=libglog
+VER=0.3.4
+MSVS=2013
+
+source $(dirname "$0")/build-common.sh build-common.sh
+
+BASE=${PROJ#lib}-$VER
+TGZ=v${VER}.tar.gz
+
+curl -L https://github.com/google/glog/archive/$TGZ -o $TGZ
+
+tar xzf $TGZ || cat $TGZ # if this fails, we're probably getting an http error
+cd $BASE
+case "$OS" in
+	windows)
+		devenv google-glog.sln /Upgrade
+		devenv google-glog.sln /Build Debug
+		devenv google-glog.sln /Build Release
+		cp -a Debug $INSTALL/
+		cp -a Release $INSTALL/
+		mkdir -p $INSTALL/include
+		cp -a src/windows/glog $INSTALL/include/
+		;;
+	linux|darwin)
+		mkdir $RD/build
+		cd $RD/build
+		$RD/$BASE/configure --prefix=$INSTALL
+		make -j$CORES
+		make install
+		;;
+esac
+
+case "$OS" in
+	darwin)
+		LIB=lib/libglog.0.dylib
+		install_name_tool -id @executable_path/../$LIB $INSTALL/$LIB
+		;;
+esac
+
+commit_and_push
diff --git a/prebuilts/build-ninja.sh b/prebuilts/build-ninja.sh
index 720c732..9fa535b 100755
--- a/prebuilts/build-ninja.sh
+++ b/prebuilts/build-ninja.sh
@@ -1,5 +1,5 @@
 #!/bin/bash -ex
-# latest version of this file can be found at 
+# latest version of this file can be found at
 # https://android.googlesource.com/platform/external/lldb-utils
 #
 # Download & build ninja on the local machine
diff --git a/prebuilts/build-protobuf.sh b/prebuilts/build-protobuf.sh
new file mode 100755
index 0000000..d72b998
--- /dev/null
+++ b/prebuilts/build-protobuf.sh
@@ -0,0 +1,65 @@
+#!/bin/bash -ex
+# latest version of this file can be found at
+# https://android.googlesource.com/platform/external/lldb-utils
+#
+# Download & build protobuf on the local machine
+# works on Linux, OS X, and Windows (Cygwin)
+# leaves output in /tmp/prebuilts/libprotobuf/$OS-x86
+# requires autoconf, automake, libtool, chrpath
+
+PROJ=libprotobuf
+VER=2.6.1
+MSVS=2013
+
+source $(dirname "$0")/build-common.sh build-common.sh
+
+BASE=${PROJ#lib}-$VER
+TGZ=v${VER}.tar.gz
+
+curl -L https://github.com/google/protobuf/archive/$TGZ -o $TGZ
+
+tar xzf $TGZ || cat $TGZ # if this fails, we're probably getting an http error
+cd $BASE
+./autogen.sh
+
+case "$OS" in
+	windows)
+		cd vsprojects
+		sed -i 's/\(IntermediateDirectory=\)".*"/\1"$(OutDir)$(ProjectName)"/' *.vcproj
+		devenv protobuf.sln /Upgrade
+		devenv protobuf.sln /Build Debug
+		devenv protobuf.sln /Build Release
+		mkdir -p $INSTALL/Debug $INSTALL/Release
+		cp -a Debug/*.* $INSTALL/Debug
+		cp -a Release/*.* $INSTALL/Release
+		cmd /c extract_includes.bat
+		cp -a include $INSTALL/
+		;;
+	linux|darwin)
+		mkdir $RD/build
+		cd $RD/build
+		$RD/$BASE/configure --prefix=$INSTALL
+		make -j$CORES
+		make install
+		;;
+esac
+
+case "$OS" in
+	linux)
+		for TARGET in $INSTALL/{bin/protoc,lib/libprotoc.so}; do
+			chrpath -r '$ORIGIN/../lib' $TARGET
+		done
+		;;
+	darwin)
+		for LIB in lib/libproto{c,buf{,-lite}}.9.dylib; do
+			install_name_tool -id @executable_path/../$LIB $INSTALL/$LIB
+			for TARGET in $INSTALL/{bin/protoc,lib/libprotoc.dylib}; do
+				ABSOLUTE=$INSTALL/$LIB
+				RELATIVE=@executable_path/../$LIB
+				install_name_tool -change $ABSOLUTE $RELATIVE $TARGET
+			done
+		done
+		;;
+esac
+
+commit_and_push
diff --git a/prebuilts/build-python.sh b/prebuilts/build-python.sh
index 704ad51..99f074b 100755
--- a/prebuilts/build-python.sh
+++ b/prebuilts/build-python.sh
@@ -1,10 +1,10 @@
 #!/bin/bash -ex
-# latest version of this file can be found at 
+# latest version of this file can be found at
 # https://android.googlesource.com/platform/external/lldb-utils
 #
-# Download & build swig on the local machine
+# Download & build python on the local machine
 # works on Linux, OSX, and Windows (Cygwin)
-# leaves output in /tmp/prebuilts/install/
+# leaves output in /tmp/prebuilts/python/$OS-x86
 
 PROJ=python
 VER=2.7.10
@@ -21,12 +21,12 @@
 case "$OS" in
 windows)
 	cp PC/pyconfig.h Include
-	devenv.com PCbuild/pcbuild.sln /Upgrade
+	devenv PCbuild/pcbuild.sln /Upgrade
 	# some projects will fail and that's okay
-    devenv.com PCbuild/pcbuild.sln /Build Debug /Out log.txt || egrep -c "========== Build: 18 succeeded, 7 failed, 0 up-to-date, 1 skipped ==========" log.txt
-    devenv.com PCbuild/pcbuild.sln /Build Release /Out log.txt || egrep -c "========== Build: 17 succeeded, 7 failed, 1 up-to-date, 1 skipped ==========" log.txt
-	devenv.com PCbuild/pcbuild.sln /Build "Release|x64" /Out log.txt || egrep -c "========== Build: 16 succeeded, 7 failed, 2 up-to-date, 1 skipped ==========" log.txt
-	devenv.com PCbuild/pcbuild.sln /Build "Debug|x64" /Out log.txt || egrep -c "========== Build: 16 succeeded, 7 failed, 2 up-to-date, 1 skipped ==========" log.txt
+	devenv PCbuild/pcbuild.sln /Build Debug /Out log.txt || egrep -c "========== Build: 18 succeeded, 7 failed, 0 up-to-date, 1 skipped ==========" log.txt
+	devenv PCbuild/pcbuild.sln /Build Release /Out log.txt || egrep -c "========== Build: 17 succeeded, 7 failed, 1 up-to-date, 1 skipped ==========" log.txt
+	devenv PCbuild/pcbuild.sln /Build "Release|x64" /Out log.txt || egrep -c "========== Build: 16 succeeded, 7 failed, 2 up-to-date, 1 skipped ==========" log.txt
+	devenv PCbuild/pcbuild.sln /Build "Debug|x64" /Out log.txt || egrep -c "========== Build: 16 succeeded, 7 failed, 2 up-to-date, 1 skipped ==========" log.txt
 	curl -L http://llvm.org/svn/llvm-project/lldb/trunk/scripts/install_custom_python.py -o install_custom_python.py
 	python install_custom_python.py --source "$(cygpath -w $RD/Python-$VER)" --dest "$(cygpath -w $INSTALL)" --overwrite --silent
 	;;
@@ -34,11 +34,13 @@
     # can't get prebuilt clang working https://b/22748915
 	mkdir $RD/build
 	cd $RD/build
-	$RD/$BASE/configure --prefix=$INSTALL --enable-shared
+	$RD/$BASE/configure --prefix=$INSTALL --enable-unicode=ucs4 --enable-shared
 	make -j$CORES
 	make install
 	;;
 esac
 
+find $INSTALL '(' -name '*.pyc' -or -name '*.pyo' ')' -exec rm {} +
+
 commit_and_push
 
diff --git a/prebuilts/build-swig.sh b/prebuilts/build-swig.sh
index 74aed98..9a7f0bb 100755
--- a/prebuilts/build-swig.sh
+++ b/prebuilts/build-swig.sh
@@ -1,10 +1,10 @@
 #!/bin/bash -ex
-# latest version of this file can be found at 
+# latest version of this file can be found at
 # https://android.googlesource.com/platform/external/lldb-utils
 #
 # Download & build swig on the local machine
 # works on Linux, OSX, and Windows (Cygwin w/make 4.1, curl, gcc 4.9.2)
-# leaves output in /tmp/prebuilts/install/
+# leaves output in /tmp/prebuilts/swig/$OS-x86
 # cmake must be installed on Windows
 
 PROJ=swig