diff --git a/build_tools/buildkite/cmake/android/arm64-v8a/benchmark.yml b/build_tools/buildkite/cmake/android/arm64-v8a/benchmark.yml
deleted file mode 100644
index 6f908ac..0000000
--- a/build_tools/buildkite/cmake/android/arm64-v8a/benchmark.yml
+++ /dev/null
@@ -1,85 +0,0 @@
-# Copyright 2021 The IREE Authors
-#
-# Licensed under the Apache License v2.0 with LLVM Exceptions.
-# See https://llvm.org/LICENSE.txt for license information.
-# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-
-steps:
-  - label: "build"
-    commands:
-      - "docker run --user=$(id -u):$(id -g) --volume=\\$PWD:\\$IREE_DOCKER_WORKDIR --workdir=\\$IREE_DOCKER_WORKDIR --rm gcr.io/iree-oss/cmake-android@sha256:7d780787608474301e74e1b5cc2a1bfd1304a79ed9e0774c7ed422c0e4a38625 build_tools/kokoro/gcp_ubuntu/cmake/android/build.sh arm64-v8a"
-      - "python3 build_tools/mako/prepare_benchmark_files.py"
-      - "docker run --user=$(id -u):$(id -g) --volume=\\$PWD:\\$IREE_DOCKER_WORKDIR --workdir=\\$IREE_DOCKER_WORKDIR --rm gcr.io/iree-oss/cmake-android@sha256:7d780787608474301e74e1b5cc2a1bfd1304a79ed9e0774c7ed422c0e4a38625 python3 build_tools/mako/compile_android_modules.py"
-      - "tar -czvf model-Pixel4-artifacts.tgz build-android/iree/tools/iree-benchmark-module *Pixel4*.vmfb"
-      - "tar -czvf model-S20-artifacts.tgz build-android/iree/tools/iree-benchmark-module *S20*.vmfb"
-      - "tar -czvf flagfiles.tgz *_flagfile"
-    agents:
-      - "queue=build"
-    env:
-      IREE_DOCKER_WORKDIR: "/usr/src/github/iree"
-    artifact_paths:
-      - "model-Pixel4-artifacts.tgz"
-      - "model-S20-artifacts.tgz"
-      - "flagfiles.tgz"
-
-  - wait
-
-  - label: "benchmark on Pixel 4 (snapdragon-855, adreno-640)"
-    commands:
-      - "buildkite-agent artifact download --step build model-Pixel4-artifacts.tgz ./"
-      - "buildkite-agent artifact download --step build flagfiles.tgz ./"
-      - "tar xzvf model-Pixel4-artifacts.tgz"
-      - "tar xzvf flagfiles.tgz"
-      - "adb shell mkdir -p /data/local/tmp/benchmark_tmpdir"
-      - "adb push build-android/iree/tools/iree-benchmark-module /data/local/tmp/benchmark_tmpdir"
-      - "adb push *.vmfb /data/local/tmp/benchmark_tmpdir"
-      - "adb push *_flagfile /data/local/tmp/benchmark_tmpdir"
-      - "python3 build_tools/mako/benchmark_modules_on_android.py --git_hash=$(git rev-parse HEAD) Pixel4"
-      - "adb shell rm -rf /data/local/tmp/benchmark_tmpdir"
-    agents:
-      - "android-soc=snapdragon-855"
-      - "android-version=11"
-      - "queue=benchmark-android"
-    env:
-      IREE_DOCKER_WORKDIR: "/usr/src/github/iree"
-    artifact_paths: "mako-*.log"
-    timeout_in_minutes: "15"
-
-  - label: "benchmark on Galaxy S20 (exynos-990, mali-g77)"
-    commands:
-      - "buildkite-agent artifact download --step build model-S20-artifacts.tgz ./"
-      - "buildkite-agent artifact download --step build flagfiles.tgz ./"
-      - "tar xzvf model-S20-artifacts.tgz"
-      - "tar xzvf flagfiles.tgz"
-      - "adb shell mkdir -p /data/local/tmp/benchmark_tmpdir"
-      - "adb push build-android/iree/tools/iree-benchmark-module /data/local/tmp/benchmark_tmpdir"
-      - "adb push *.vmfb /data/local/tmp/benchmark_tmpdir"
-      - "adb push *_flagfile /data/local/tmp/benchmark_tmpdir"
-      - "python3 build_tools/mako/benchmark_modules_on_android.py --git_hash=$(git rev-parse HEAD) S20"
-      - "adb shell rm -rf /data/local/tmp/benchmark_tmpdir"
-    agents:
-      - "android-soc=exynos-990"
-      - "android-version=11"
-      - "queue=benchmark-android"
-    env:
-      IREE_DOCKER_WORKDIR: "/usr/src/github/iree"
-    artifact_paths: "mako-*.log"
-    timeout_in_minutes: "15"
-
-  - wait
-
-  - label: "upload data to Mako"
-    commands:
-      - "gsutil cp gs://iree-benchmark-artifacts/uploader ."
-      - "chmod +x uploader"
-      - "buildkite-agent artifact download mako-*.log ./"
-      - "ls mako-*.log | xargs -n 1 ./uploader --file_path"
-      - "rm mako-*.log"
-    agents:
-      - "test-android=false"
-      - "build=false"
-      - "mako-uploader=true"
-      - "test-desktop-gpu=false"
-    branches: "main"
-    soft_fail:
-      - exit_status: 123
diff --git a/build_tools/mako/benchmark_modules_on_android.py b/build_tools/mako/benchmark_modules_on_android.py
deleted file mode 100644
index 2f5059d..0000000
--- a/build_tools/mako/benchmark_modules_on_android.py
+++ /dev/null
@@ -1,93 +0,0 @@
-#!/usr/bin/env python3
-# Copyright 2021 The IREE Authors
-#
-# Licensed under the Apache License v2.0 with LLVM Exceptions.
-# See https://llvm.org/LICENSE.txt for license information.
-# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-
-# Benchmarks modules generated by compile_android_modules.py and writes
-# performance data to a text proto file, e.g., mako-phone-mako_tag-git_hash.
-#
-# The script benchmarks modules on 7-th big core, ie, run with `taskset 80`.
-
-import argparse
-import datetime
-import subprocess
-import os
-import re
-
-import configuration
-
-PATTERN = re.compile(r"BM_(\w+)(.+)/real_time(\s+) (?P<ms>[.0-9]+) ms")
-DEVICE_ROOT = "/data/local/tmp/benchmark_tmpdir"
-
-
-def parse_arguments():
-  parser = argparse.ArgumentParser()
-  parser.add_argument("--git_hash", default="UNKNOWN")
-  parser.add_argument("phone")
-  args = parser.parse_args()
-  return args
-
-
-def get_mako_sample(value, tag) -> str:
-  return f"""
-samples: {{
-  time: {value}
-  target: "{tag}"
-}}""".strip()
-
-
-def get_mako_metadata(git_hash, timestamp, benchmark_key) -> str:
-  return f"""
-metadata: {{
-  git_hash: "{git_hash}"
-  timestamp_ms: {timestamp}
-  benchmark_key: "{benchmark_key}"
-}}
-""".strip()
-
-
-def benchmark(module_name, flagfile_name, target) -> str:
-  samples = []
-  cmd = [
-      "adb", "shell", "LD_LIBRARY_PATH=/data/local/tmp", "taskset",
-      target.taskset, f"{DEVICE_ROOT}/iree-benchmark-module",
-      f"--flagfile={DEVICE_ROOT}/{flagfile_name}",
-      f"--module_file={DEVICE_ROOT}/{module_name}", f"--driver={target.driver}",
-      "--benchmark_repetitions=10"
-  ] + target.runtime_flags
-  print(f"Running cmd: {' '.join(cmd)}")
-  output = subprocess.run(cmd,
-                          check=True,
-                          capture_output=True,
-                          universal_newlines=True).stdout
-  for line in output.split("\n"):
-    m = PATTERN.match(line)
-    if m is not None:
-      samples.append(get_mako_sample(m.group("ms"), target.mako_tag))
-  return "\n".join(samples)
-
-
-def main(args) -> None:
-  timestamp = int(datetime.datetime.now().timestamp() * 1000)
-  for model_benchmark in configuration.MODEL_BENCHMARKS:
-    for phone in model_benchmark.phones:
-      if phone.name != args.phone:
-        continue
-      mako_log = []
-      for target in phone.targets:
-        module_name = configuration.get_module_name(model_benchmark.name,
-                                                    phone.name, target.mako_tag)
-        flagfile_name = configuration.get_flagfile_name(model_benchmark.name)
-        mako_log.append(benchmark(module_name, flagfile_name, target))
-      mako_log.append(
-          get_mako_metadata(args.git_hash, timestamp, phone.benchmark_key))
-      mako_log = "\n".join(mako_log)
-      filename = f"mako-{model_benchmark.name}-{phone.name}-{args.git_hash}.log"
-      open(filename, "w").write(mako_log)
-      print(mako_log)
-
-
-if __name__ == "__main__":
-  main(parse_arguments())
diff --git a/build_tools/mako/compile_android_modules.py b/build_tools/mako/compile_android_modules.py
deleted file mode 100644
index 1efc9bf..0000000
--- a/build_tools/mako/compile_android_modules.py
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/usr/bin/env python3
-# Copyright 2021 The IREE Authors
-#
-# Licensed under the Apache License v2.0 with LLVM Exceptions.
-# See https://llvm.org/LICENSE.txt for license information.
-# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-
-# Compiles the given model (which is configured in configuration.py) to modules.
-#
-# The scripts is used for benchmarking automation, and it assumes:
-#   1) ANDROID_NDK env is set.
-#   2) IREE is built for the host in `build-host`, e.g. build with
-#      build_tools/cmake/build_android.sh script.
-
-import subprocess
-
-import configuration
-
-IREE_TRANSLATE_PATH = "build-host/iree/tools/iree-translate"
-
-
-def main() -> None:
-  for model_benchmark in configuration.MODEL_BENCHMARKS:
-    for phone in model_benchmark.phones:
-      for target in phone.targets:
-        module_name = configuration.get_module_name(model_benchmark.name,
-                                                    phone.name, target.mako_tag)
-        print(f"Generating {module_name} ...")
-        subprocess.run(args=[
-            IREE_TRANSLATE_PATH, model_benchmark.model_path,
-            "--iree-mlir-to-vm-bytecode-module",
-            f"--iree-hal-target-backends={target.hal_target_backend}", "-o",
-            module_name
-        ] + target.compilation_flags,
-                       check=True)
-
-
-if __name__ == "__main__":
-  main()
diff --git a/build_tools/mako/config/README.md b/build_tools/mako/config/README.md
deleted file mode 100644
index e5ee9ee..0000000
--- a/build_tools/mako/config/README.md
+++ /dev/null
@@ -1,8 +0,0 @@
-This directory collects all Mako related files. The `uploader` is located at
-[iree-mako](https://github.com/hanhanW/iree-mako/tree/iree). The Mako repo is
-not pull in IREE because setting deps is complicated, and IREE only needs simple
-features to upload performance data to Mako server.
-
-To create a new benchmark, see
-[Mako guide](https://github.com/google/mako/blob/master/docs/GUIDE.md) for more
-details.
diff --git a/build_tools/mako/config/benchmark_template.config b/build_tools/mako/config/benchmark_template.config
deleted file mode 100644
index c0a8f91..0000000
--- a/build_tools/mako/config/benchmark_template.config
+++ /dev/null
@@ -1,46 +0,0 @@
-# Copyright 2021 The IREE Authors
-#
-# Licensed under the Apache License v2.0 with LLVM Exceptions.
-# See https://llvm.org/LICENSE.txt for license information.
-# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-
-# This template is used to define/update Mako benchmarks. The input_value_info
-# and metric_info_list should be updated according to the purpose of the
-# benchmark. The benchmark_name and description must be updated. The
-# benchmark_key should not be added before creating the benchmark. You have to
-# fill the server-generated key which is returned by the Mako tool.
-#
-# For more details, see:
-#   https://github.com/google/mako/blob/master/docs/GUIDE.md#preparing-your-benchmark
-
-# benchmark_key: "TBD"
-benchmark_name: "BENCHMARK_NAME (PHONE) (UNIT)"
-project_name: "iree"
-
-# Only owners can write to the benchmark
-owner_list: "hanchung@google.com"
-owner_list: "buildkite-agent@iree-oss.iam.gserviceaccount.com"
-
-# Define the name and type for x-axis of run charts
-input_value_info: {
-  value_key: "t"
-  label: "time"
-  type: NUMERIC
-}
-
-# Three metrics, define the names for y-axis values of both run and aggregate
-# charts.
-metric_info_list: {
-  value_key: "cpu"
-  label: "DYLib_AOT"
-}
-metric_info_list: {
-  value_key: "vmvx3t"
-  label: "VMVX"
-}
-metric_info_list: {
-  value_key: "vlk"
-  label: "Vulkan-SPIRV"
-}
-
-description: "IREE Benchmark Template"
diff --git a/build_tools/mako/config/mobile-bert-f16-s20.config b/build_tools/mako/config/mobile-bert-f16-s20.config
deleted file mode 100644
index f7b24c9..0000000
--- a/build_tools/mako/config/mobile-bert-f16-s20.config
+++ /dev/null
@@ -1,29 +0,0 @@
-# Copyright 2021 The IREE Authors
-#
-# Licensed under the Apache License v2.0 with LLVM Exceptions.
-# See https://llvm.org/LICENSE.txt for license information.
-# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-
-benchmark_key: "4636549841944576"
-benchmark_name: "MobileBert f16 version (S20) (Time Unit: ms)"
-project_name: "iree"
-
-# Only owners can write to the benchmark
-owner_list: "hanchung@google.com"
-owner_list: "buildkite-agent@iree-oss.iam.gserviceaccount.com"
-
-# Define the name and type for x-axis of run charts
-input_value_info: {
-  value_key: "t"
-  label: "time"
-  type: NUMERIC
-}
-
-# Three metrics, define the names for y-axis values of both run and aggregate
-# charts.
-metric_info_list: {
-  value_key: "vlk"
-  label: "Vulkan-SPIRV"
-}
-
-description: "Mobile BERT Q&A model f16 version"
diff --git a/build_tools/mako/config/mobile-bert-pixel4.config b/build_tools/mako/config/mobile-bert-pixel4.config
deleted file mode 100644
index 45c4d96..0000000
--- a/build_tools/mako/config/mobile-bert-pixel4.config
+++ /dev/null
@@ -1,36 +0,0 @@
-# Copyright 2020 The IREE Authors
-#
-# Licensed under the Apache License v2.0 with LLVM Exceptions.
-# See https://llvm.org/LICENSE.txt for license information.
-# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-
-benchmark_key: "5538704950034432"
-benchmark_name: "MobileBert (Pixel 4) (Time Unit: ms)"
-project_name: "iree"
-
-# Only owners can write to the benchmark
-owner_list: "hanchung@google.com"
-owner_list: "buildkite-agent@iree-oss.iam.gserviceaccount.com"
-
-# Define the name and type for x-axis of run charts
-input_value_info: {
-  value_key: "t"
-  label: "time"
-  type: NUMERIC
-}
-
-# Define the names for y-axis values of both run and aggregate charts.
-metric_info_list: {
-  value_key: "cpu"
-  label: "DYLib_AOT-1-thread"
-}
-metric_info_list: {
-  value_key: "cpu3t"
-  label: "DYLib_AOT-3-thread"
-}
-metric_info_list: {
-  value_key: "vlk"
-  label: "Vulkan-SPIRV"
-}
-
-description: "Mobile BERT Q&A model"
diff --git a/build_tools/mako/config/mobile-bert-s20.config b/build_tools/mako/config/mobile-bert-s20.config
deleted file mode 100644
index 9d141bf..0000000
--- a/build_tools/mako/config/mobile-bert-s20.config
+++ /dev/null
@@ -1,36 +0,0 @@
-# Copyright 2021 The IREE Authors
-#
-# Licensed under the Apache License v2.0 with LLVM Exceptions.
-# See https://llvm.org/LICENSE.txt for license information.
-# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-
-benchmark_key: "4699630718681088"
-benchmark_name: "MobileBert (S20) (Time Unit: ms)"
-project_name: "iree"
-
-# Only owners can write to the benchmark
-owner_list: "hanchung@google.com"
-owner_list: "buildkite-agent@iree-oss.iam.gserviceaccount.com"
-
-# Define the name and type for x-axis of run charts
-input_value_info: {
-  value_key: "t"
-  label: "time"
-  type: NUMERIC
-}
-
-# Define the names for y-axis values of both run and aggregate charts.
-metric_info_list: {
-  value_key: "cpu"
-  label: "DYLib_AOT-1-thread"
-}
-metric_info_list: {
-  value_key: "cpu3t"
-  label: "DYLib_AOT-3-thread"
-}
-metric_info_list: {
-  value_key: "vlk"
-  label: "Vulkan-SPIRV"
-}
-
-description: "Mobile BERT Q&A model"
diff --git a/build_tools/mako/config/mobilenet-v2-pixel4.config b/build_tools/mako/config/mobilenet-v2-pixel4.config
deleted file mode 100644
index 9f8534e..0000000
--- a/build_tools/mako/config/mobilenet-v2-pixel4.config
+++ /dev/null
@@ -1,44 +0,0 @@
-# Copyright 2021 The IREE Authors
-#
-# Licensed under the Apache License v2.0 with LLVM Exceptions.
-# See https://llvm.org/LICENSE.txt for license information.
-# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-
-benchmark_key: "6338759231537152"
-benchmark_name: "MobileNet V2 (Pixel 4) (Time Unit: ms)"
-project_name: "iree"
-
-# Only owners can write to the benchmark
-owner_list: "hanchung@google.com"
-owner_list: "buildkite-agent@iree-oss.iam.gserviceaccount.com"
-
-# Define the name and type for x-axis of run charts
-input_value_info: {
-  value_key: "t"
-  label: "time"
-  type: NUMERIC
-}
-
-# Define the names for y-axis values of both run and aggregate charts.
-metric_info_list: {
-  value_key: "cpu"
-  label: "DYLib_AOT-1-thread"
-}
-metric_info_list: {
-  value_key: "cpu3t"
-  label: "DYLib_AOT-3-thread"
-}
-metric_info_list: {
-  value_key: "vmvx3t"
-  label: "VMVX"
-}
-metric_info_list: {
-  value_key: "vlk"
-  label: "Vulkan-SPIRV"
-}
-metric_info_list: {
-  value_key: "cpu2"
-  label: "DYLib_AOT_Linalg-On-Tensors"
-}
-
-description: "Keras Applications: MobileNet V2"
diff --git a/build_tools/mako/config/mobilenet-v2-s20.config b/build_tools/mako/config/mobilenet-v2-s20.config
deleted file mode 100644
index e357726..0000000
--- a/build_tools/mako/config/mobilenet-v2-s20.config
+++ /dev/null
@@ -1,48 +0,0 @@
-# Copyright 2021 The IREE Authors
-#
-# Licensed under the Apache License v2.0 with LLVM Exceptions.
-# See https://llvm.org/LICENSE.txt for license information.
-# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-
-benchmark_key: "5618403088793600"
-benchmark_name: "MobileNet V2 (S20) (Time Unit: ms)"
-project_name: "iree"
-
-# Only owners can write to the benchmark
-owner_list: "hanchung@google.com"
-owner_list: "buildkite-agent@iree-oss.iam.gserviceaccount.com"
-
-# Define the name and type for x-axis of run charts
-input_value_info: {
-  value_key: "t"
-  label: "time"
-  type: NUMERIC
-}
-
-# Define the names for y-axis values of both run and aggregate charts.
-metric_info_list: {
-  value_key: "cpu"
-  label: "DYLib_AOT-1-thread"
-}
-metric_info_list: {
-  value_key: "cpu3t"
-  label: "DYLib_AOT-3-thread"
-}
-metric_info_list: {
-  value_key: "vmvx3t"
-  label: "VMVX"
-}
-metric_info_list: {
-  value_key: "vlk"
-  label: "Vulkan-SPIRV"
-}
-metric_info_list: {
-  value_key: "cpu2"
-  label: "DYLib_AOT_Linalg-On-Tensors"
-}
-metric_info_list: {
-  value_key: "vlk2"
-  label: "Vulkan-SPIRV_Linalg-On-Tensors"
-}
-
-description: "Keras Applications: MobileNet V2"
diff --git a/build_tools/mako/config/project.config b/build_tools/mako/config/project.config
deleted file mode 100644
index fae05ce..0000000
--- a/build_tools/mako/config/project.config
+++ /dev/null
@@ -1,25 +0,0 @@
-# Copyright 2020 The IREE Authors
-#
-# Licensed under the Apache License v2.0 with LLVM Exceptions.
-# See https://llvm.org/LICENSE.txt for license information.
-# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-
-# project_name is always evaluated as lowercase and must be unique
-project_name: "iree"
-
-# project_alias is the display name of the project and will be shown on
-# mako.dev. It does not have to be unique.
-project_alias: "IREE"
-
-# TODO(hanchung): Add other IREE members to owner_list.
-owner_list: "hanchung@google.com"
-
-# By default any automation creating Buganizer work items will be opened under
-# the root buganizer component for benchmarks in this Project.
-# TODO(hanchung): Create a specific component for this, or make it file issues
-# to Github.
-default_issue_tracker : {
-  buganizer_config : {
-    component_id : "646953"
-  }
-}
diff --git a/build_tools/mako/configuration.py b/build_tools/mako/configuration.py
deleted file mode 100644
index 4816ac1..0000000
--- a/build_tools/mako/configuration.py
+++ /dev/null
@@ -1,292 +0,0 @@
-#!/usr/bin/env python3
-# Copyright 2021 The IREE Authors
-#
-# Licensed under the Apache License v2.0 with LLVM Exceptions.
-# See https://llvm.org/LICENSE.txt for license information.
-# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-
-
-class TargetInfo:
-  """Information of a target backend.
-
-  Attributes:
-    driver: The driver used in iree-benchmark-module, e.g., vulkan.
-    hal_target_backend: The target name used in iree-translate, e.g., vulkan-spirv.
-    taskset: The value used for taskset when benchmarking the IREE module.
-    mako_tag: The value_key in Mako config. This will be used in Mako metric
-      info, which should match to the config.
-    compilation_flags: Addition compilation flags. This is useful to target
-      different hardware.
-    runtime_flags: Addition runtime flags. This is useful when benchmarking.
-      E.g., CPU can run with single thread or multi thread.
-  """
-
-  def __init__(self,
-               driver,
-               hal_target_backend,
-               taskset,
-               mako_tag,
-               compilation_flags=None,
-               runtime_flags=None):
-    if compilation_flags is None:
-      compilation_flags = []
-    if runtime_flags is None:
-      runtime_flags = []
-    self.driver = driver
-    self.hal_target_backend = hal_target_backend
-    self.taskset = taskset
-    self.mako_tag = mako_tag
-    # This setup is going to be deprecated. Now we only test mhlo inputs for
-    # Mako setup, hardcoded would make it eaiser.
-    self.compilation_flags = compilation_flags + ['--iree-input-type=mhlo']
-    self.runtime_flags = runtime_flags
-
-  def add_batch_flag(self, size):
-    self.compilation_flags.append(
-        f"--iree-hal-benchmark-dispatch-repeat-count={size}")
-    self.runtime_flags.append(f"--batch_size={size}")
-
-
-class PhoneBenchmarkInfo:
-  """Information of a phone.
-
-  Attributes:
-    name: The name of the phone.
-    targets: A list of TargetInfo which indicates the target config to benchmark
-      on the phone.
-    benchmark_key: Mako benchmark key, which can be found in config/
-  """
-
-  def __init__(self, name, targets, benchmark_key):
-    if "_" in name:
-      raise ValueError("The target name contains invalid char '_'")
-    self.name = name
-    self.targets = targets
-    self.benchmark_key = benchmark_key
-
-
-class ModelBenchmarkInfo:
-  """Information of a model.
-
-  Attributes:
-    name: The name of the model.
-    model_artifacts_name: The filename of model artifacts which locates in
-      Google bucket iree-model-artifacts.
-    model_path: A path to MLIR input file. This can be a relative path.
-    flagfile_path: A path to flagfile. This can be a relative path.
-    phones: A list of PhoneBenchmarkInfo that the benchmarking targets on.
-  """
-
-  def __init__(self, name, model_artifacts_name, model_path, flagfile_path,
-               phones):
-    if "_" in name:
-      raise ValueError("The target name contains invalid char '_'")
-    self.name = name
-    self.model_artifacts_name = model_artifacts_name
-    self.model_path = model_path
-    self.flagfile_path = flagfile_path
-    self.phones = phones
-
-
-def get_pixel4_default_target_list(skipped_target=None,
-                                   batch_config=None,
-                                   compilation_flags=None):
-  if skipped_target is None:
-    skipped_target = []
-  if batch_config is None:
-    batch_config = []
-  if compilation_flags is None:
-    compilation_flags = []
-  targets = [
-      TargetInfo(driver="dylib-sync",
-                 hal_target_backend="dylib-llvm-aot",
-                 taskset="80",
-                 mako_tag="cpu",
-                 compilation_flags=[
-                     "--iree-llvm-target-triple=aarch64-none-linux-android29",
-                     "--iree-flow-inline-constants-max-byte-length=2048",
-                 ]),
-      TargetInfo(driver="dylib",
-                 hal_target_backend="dylib-llvm-aot",
-                 taskset="f0",
-                 mako_tag="cpu3t",
-                 compilation_flags=[
-                     "--iree-llvm-target-triple=aarch64-none-linux-android29",
-                     "--iree-flow-inline-constants-max-byte-length=2048",
-                 ],
-                 runtime_flags=[
-                     "--task_topology_group_count=3",
-                 ]),
-      TargetInfo(driver="vmvx",
-                 hal_target_backend="vmvx",
-                 taskset="f0",
-                 mako_tag="vmvx3t",
-                 compilation_flags=[
-                     "--iree-flow-inline-constants-max-byte-length=2048",
-                 ],
-                 runtime_flags=[
-                     "--task_topology_group_count=3",
-                 ]),
-      TargetInfo(driver="vulkan",
-                 hal_target_backend="vulkan-spirv",
-                 taskset="80",
-                 mako_tag="vlk",
-                 compilation_flags=[
-                     "--iree-vulkan-target-triple=adreno-a640-android11",
-                     "--iree-flow-inline-constants-max-byte-length=2048",
-                     "--iree-flow-dispatch-formation-enable-operand-fusion",
-                     "--iree-enable-fusion-with-reduction-ops",
-                 ])
-  ]
-  targets = [elem for elem in targets if elem.mako_tag not in skipped_target]
-  for target in targets:
-    if target.mako_tag in batch_config:
-      target.add_batch_flag(batch_config[target.mako_tag])
-    if target.mako_tag in compilation_flags:
-      target.compilation_flags += compilation_flags[target.mako_tag]
-  return targets
-
-
-def get_s20_default_target_list(skipped_target=None,
-                                batch_config=None,
-                                compilation_flags=None):
-  if skipped_target is None:
-    skipped_target = []
-  if batch_config is None:
-    batch_config = []
-  if compilation_flags is None:
-    compilation_flags = []
-  targets = [
-      TargetInfo(driver="dylib-sync",
-                 hal_target_backend="dylib-llvm-aot",
-                 taskset="80",
-                 mako_tag="cpu",
-                 compilation_flags=[
-                     "--iree-llvm-target-triple=aarch64-none-linux-android29",
-                     "--iree-flow-inline-constants-max-byte-length=2048",
-                 ]),
-      TargetInfo(driver="dylib",
-                 hal_target_backend="dylib-llvm-aot",
-                 taskset="f0",
-                 mako_tag="cpu3t",
-                 compilation_flags=[
-                     "--iree-llvm-target-triple=aarch64-none-linux-android29",
-                     "--iree-flow-inline-constants-max-byte-length=2048",
-                 ],
-                 runtime_flags=[
-                     "--task_topology_group_count=3",
-                 ]),
-      TargetInfo(driver="vmvx",
-                 hal_target_backend="vmvx",
-                 taskset="f0",
-                 mako_tag="vmvx3t",
-                 compilation_flags=[
-                     "--iree-flow-inline-constants-max-byte-length=2048",
-                 ],
-                 runtime_flags=[
-                     "--task_topology_group_count=3",
-                 ]),
-      TargetInfo(
-          driver="vulkan",
-          hal_target_backend="vulkan-spirv",
-          taskset="80",
-          mako_tag="vlk",
-          compilation_flags=[
-              "--iree-vulkan-target-triple=valhall-g77-android11",
-              # TODO(GH-5330): Revisit the number or delete the flag.
-              "--iree-flow-inline-constants-max-byte-length=16",
-              "--iree-flow-dispatch-formation-enable-operand-fusion"
-          ])
-  ]
-  targets = [elem for elem in targets if elem.mako_tag not in skipped_target]
-  for target in targets:
-    if target.mako_tag in batch_config:
-      target.add_batch_flag(batch_config[target.mako_tag])
-    if target.mako_tag in compilation_flags:
-      target.compilation_flags += compilation_flags[target.mako_tag]
-  return targets
-
-
-# The batch numbers are roughly computed to let it benchmark more than 3
-# seconds.
-# Do not set batch size on Pixel 4 for GPU targets, because it will get killed
-# after 2 seconds. See https://github.com/google/iree/issues/5052
-MODEL_BENCHMARKS = [
-    ModelBenchmarkInfo(
-        name="mobile-bert",
-        model_artifacts_name=
-        "iree-mobile-bert-artifacts-6fe4616e0ab9958eb18f368960a31276f1362029.tar.gz",
-        model_path="tmp/iree/modules/MobileBertSquad/iree_input.mlir",
-        flagfile_path=
-        "tmp/iree/modules/MobileBertSquad/iree_vmla/traces/serving_default/flagfile",
-        phones=[
-            PhoneBenchmarkInfo(name="Pixel4",
-                               benchmark_key="5538704950034432",
-                               targets=get_pixel4_default_target_list(
-                                   skipped_target=["cpu2", "vmvx3t", "vlk2"],)),
-            PhoneBenchmarkInfo(name="S20",
-                               benchmark_key="4699630718681088",
-                               targets=get_s20_default_target_list(
-                                   skipped_target=["cpu2", "vmvx3t", "vlk2"],)),
-        ]),
-    ModelBenchmarkInfo(
-        name="mobilenet-v2",
-        model_artifacts_name="mobilenet-v2.tar.gz",
-        model_path="mobilenet-v2/iree_input.mlir",
-        flagfile_path="mobilenet-v2/flagfile",
-        phones=[
-            PhoneBenchmarkInfo(
-                name="Pixel4",
-                benchmark_key="6338759231537152",
-                targets=get_pixel4_default_target_list(
-                    skipped_target=["vlk2"],
-                    compilation_flags={
-                        'cpu': [
-                            # TODO(GH-5857): Enable this after fixing segfault.
-                            #"--iree-flow-dispatch-formation-enable-operand-fusion",
-                            "-iree-llvm-loop-unrolling=true"
-                        ],
-                        'cpu3t': [
-                            # TODO(GH-5857): Enable this after fixing segfault.
-                            #"--iree-flow-dispatch-formation-enable-operand-fusion",
-                            "-iree-llvm-loop-unrolling=true"
-                        ]
-                    })),
-            PhoneBenchmarkInfo(
-                name="S20",
-                benchmark_key="5618403088793600",
-                targets=get_s20_default_target_list(
-                    compilation_flags={
-                        'cpu': [
-                            # TODO(GH-5857): Enable this after fixing segfault.
-                            #"--iree-flow-dispatch-formation-enable-operand-fusion",
-                            "-iree-llvm-loop-unrolling=true"
-                        ],
-                        'cpu3t': [
-                            # TODO(GH-5857): Enable this after fixing segfault.
-                            #"--iree-flow-dispatch-formation-enable-operand-fusion",
-                            "-iree-llvm-loop-unrolling=true"
-                        ]
-                    })),
-        ]),
-    #ModelBenchmarkInfo(
-    #    name="mobilebert-f16",
-    #    model_artifacts_name="mobilebert-f16.tar.gz",
-    #    model_path="mobilebert-f16/mobilebert-f16.mlir",
-    #    flagfile_path="mobilebert-f16/flagfile",
-    #    phones=[
-    #        PhoneBenchmarkInfo(
-    #            name="S20",
-    #            benchmark_key="4636549841944576",
-    #            targets=get_s20_default_target_list(
-    #                skipped_target=['cpu', 'vmvx3t', 'cpu2', 'vlk2'])),
-    #    ])
-]
-
-
-def get_flagfile_name(model_name):
-  return f"{model_name}_flagfile"
-
-
-def get_module_name(model_name, phone_name, mako_tag):
-  return f"{model_name}_{phone_name}_{mako_tag}.vmfb"
diff --git a/build_tools/mako/prepare_benchmark_files.py b/build_tools/mako/prepare_benchmark_files.py
deleted file mode 100644
index 58b5b05..0000000
--- a/build_tools/mako/prepare_benchmark_files.py
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/usr/bin/env python3
-# Copyright 2021 The IREE Authors
-#
-# Licensed under the Apache License v2.0 with LLVM Exceptions.
-# See https://llvm.org/LICENSE.txt for license information.
-# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-
-# Prepares files for
-#   * compile_android_modules.py
-#   * benchmark_modules_on_android.py
-#
-# The script assumes model artifacts are in google bucket and they are zipped in
-# tar.gz format.
-
-import subprocess
-
-import configuration
-
-
-def main() -> None:
-  for model_benchmark in configuration.MODEL_BENCHMARKS:
-    print(f"Preparing benchmark files for {model_benchmark.name}")
-    subprocess.run(args=[
-        "gsutil", "cp",
-        f"gs://iree-model-artifacts/{model_benchmark.model_artifacts_name}", "."
-    ],
-                   check=True)
-    subprocess.run(args=["tar", "-xvf", model_benchmark.model_artifacts_name],
-                   check=True)
-    subprocess.run(args=[
-        "cp", model_benchmark.flagfile_path,
-        configuration.get_flagfile_name(model_benchmark.name)
-    ],
-                   check=True)
-
-
-if __name__ == "__main__":
-  main()
