diff --git a/cros_run_unit_tests b/cros_run_unit_tests
index ccdd823..4a0e4c7 100755
--- a/cros_run_unit_tests
+++ b/cros_run_unit_tests
@@ -4,136 +4,8 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-# This script builds and runs Chromium OS unit tests.  Note that this script
-# utilizes the src_test stanza in chromeos-base packages.  These stanzas
-# should both build and run the unit tests.
+# TODO(bsimonnet): Remove after July 2015.
+echo "This script is deprecated. Please use cros_run_unit_tests from "
+echo "chromite/bin."
 
-# This script requires that you run build_packages first.
-
-# Special because this can only run inside the chroot.
-. "/usr/lib/crosutils/common.sh" 2> /dev/null ||
-  (echo "Must run within chroot" && false) ||
-  exit 1
-
-# Flags
-DEFINE_string board "${DEFAULT_BOARD}" \
-  "Target board of which tests were built"
-DEFINE_string build_root "${DEFAULT_BUILD_ROOT}" \
-  "Root of build output"
-DEFINE_boolean fast "${DEFAULT_FAST}" \
-  "Call many emerges in parallel."
-DEFINE_string package_file "" \
-  "File with space-separated list of packages to run unit tests" f
-DEFINE_string packages "" \
-  "Optional space-separated list of packages to run unit tests" p
-DEFINE_string blacklist_packages "" \
-  "List of packages to blacklist from unit tests"
-DEFINE_boolean withdebug "${FLAGS_TRUE}" \
-  "Build debug versions of Chromium-OS-specific packages."
-DEFINE_boolean pretend "${FLAGS_FALSE}" \
-  "Only show the packages we would test; don't actually test"
-DEFINE_boolean installed "${FLAGS_TRUE}" \
-  "Only test packages that are already installed"
-
-# List of packages with no unit tests.
-NO_UNITTESTS=""
-
-check_src_test() {
-  egrep '^(src_test|platform_pkg_test)()' "${1}" > /dev/null
-}
-
-# Parse command line and die if unexpected parameters given.
-FLAGS_HELP="usage: ${0} [flags]"
-FLAGS "${@}" || exit 1
-eval set -- "${FLAGS_ARGV}"
-check_flags_only_and_allow_null_arg "${@}" && set --
-
-set -e
-
-[ -z "${FLAGS_board}" ] && die "--board required"
-
-EMERGE_CMD="emerge"
-EMERGE_BOARD_CMD="emerge-${FLAGS_board}"
-if [[ "${FLAGS_fast}" -eq "${FLAGS_TRUE}" ]]; then
-  EMERGE_CMD="${GCLIENT_ROOT}/chromite/bin/parallel_emerge"
-  EMERGE_BOARD_CMD="${EMERGE_CMD} --board=${FLAGS_board}"
-fi
-
-# Create package list from package file and list of packages.
-if [ -n "${FLAGS_package_file}" ]; then
-  if [ -f "${FLAGS_package_file}" ]; then
-    PACKAGE_LIST="$(cat ${FLAGS_package_file})"
-  else
-    warn "Missing package file."
-  fi
-fi
-
-[ -n "${FLAGS_packages}" ] && PACKAGE_LIST="${PACKAGE_LIST} ${FLAGS_packages}"
-
-# If we didn't specify packages, find all packages.
-if [ -z "${FLAGS_package_file}" -a -z "${FLAGS_packages}" ]; then
-  PACKAGE_LIST=$(cros_workon --board "${FLAGS_board}" list --all)
-
-  if [[ ${FLAGS_installed} -eq ${FLAGS_TRUE} ]]; then
-    PACKAGE_LIST=$(qlist-${FLAGS_board} -ICe ${PACKAGE_LIST})
-  fi
-fi
-
-BLACK_LIST_FILE="/usr/share/crostestutils/unit_test_black_list.txt"
-BLACK_LIST_PACKAGES="${FLAGS_blacklist_packages}"
-
-if [ "${FLAGS_withdebug}" -eq "${FLAGS_FALSE}" ]; then
-  export USE="${USE} -cros-debug"
-fi
-
-ALL_PACKAGE_LIST=$(
-  jobs=0
-  for package in ${PACKAGE_LIST}; do
-    (
-    if grep -xq "${package}" "${BLACK_LIST_FILE}" || \
-       [[ " ${BLACK_LIST_PACKAGES} " =~ " ${package} " ]]; then
-      warn "Skipping package ${package} since it is blacklisted."
-      continue
-    fi
-    EBUILD_PATH=$(equery-${FLAGS_board} which ${package} 2>/dev/null) || \
-      warn "${package} not found"
-    if [[ -n ${EBUILD_PATH} ]]; then
-      if check_src_test "${EBUILD_PATH}"; then
-        echo "y:${package}"
-      else
-        echo "n:${package}"
-      fi
-    fi
-    ) &
-    if [[ ${jobs} -ge ${NUM_JOBS} ]]; then
-      jobs=0
-      wait
-    else
-      : $(( jobs += 1 ))
-    fi
-  done | sort
-  wait
-)
-TEST_PACKAGE_LIST=$(echo "${ALL_PACKAGE_LIST}" | sed -n '/^y:/s:^..::p')
-NO_UNITTESTS=$(echo "${ALL_PACKAGE_LIST}" | sed -n '/^n:/s:^..::p')
-
-if [ -n "${NO_UNITTESTS}" ]; then
-  warn "The following packages have no unit tests:"
-  warn "${NO_UNITTESTS}"
-fi
-
-if [ -n "${TEST_PACKAGE_LIST}" ]; then
-  if [[ ${FLAGS_pretend} -eq ${FLAGS_TRUE} ]]; then
-    printf '%s\n' ${TEST_PACKAGE_LIST} | sort
-    exit 0
-  else
-    cmd=( sudo -E PKGDIR="/build/${FLAGS_board}/test-packages"
-          FEATURES="test" ${EMERGE_BOARD_CMD} --nodeps --buildpkgonly )
-    info "Running unit tests with command ${cmd[*]}"
-    info "Unit tests will run for the following packages:"
-    info ${TEST_PACKAGE_LIST}
-    "${cmd[@]}" ${TEST_PACKAGE_LIST}
-  fi
-fi
-
-info "All unit tests passed."
+exit 1
