diff --git a/bin/84372336-a816-11e9-9669-5b66bd3072d3-broken b/bin/84372336-a816-11e9-9669-5b66bd3072d3-broken
deleted file mode 100755
index 0598c92..0000000
--- a/bin/84372336-a816-11e9-9669-5b66bd3072d3-broken
+++ /dev/null
Binary files differ
diff --git a/bin/98880972-a816-11e9-80c0-33dd338bc3b2-broken b/bin/98880972-a816-11e9-80c0-33dd338bc3b2-broken
deleted file mode 100755
index 622bde3..0000000
--- a/bin/98880972-a816-11e9-80c0-33dd338bc3b2-broken
+++ /dev/null
Binary files differ
diff --git a/bin/aarch64-linux-android-c++ b/bin/aarch64-linux-android-c++
deleted file mode 120000
index 348d40b..0000000
--- a/bin/aarch64-linux-android-c++
+++ /dev/null
@@ -1 +0,0 @@
-aarch64-linux-android-g++
\ No newline at end of file
diff --git a/bin/aarch64-linux-android-cpp-broken b/bin/aarch64-linux-android-cpp-broken
deleted file mode 100755
index 66615d5..0000000
--- a/bin/aarch64-linux-android-cpp-broken
+++ /dev/null
Binary files differ
diff --git a/bin/aarch64-linux-android-g++-broken b/bin/aarch64-linux-android-g++-broken
deleted file mode 100755
index 4fe6430..0000000
--- a/bin/aarch64-linux-android-g++-broken
+++ /dev/null
@@ -1,77 +0,0 @@
-#!/usr/bin/python
-
-from __future__ import print_function
-import os
-import sys
-import time
-
-class CompilerWrapper():
-  def __init__(self, argv):
-    self.args = argv
-    self.execargs = []
-    self.real_compiler = None
-    self.argv0 = None
-    self.append_flags = []
-    self.prepend_flags = []
-    self.custom_flags = {
-      '--gomacc-path': None
-    }
-
-  def set_real_compiler(self):
-    """Find the real compiler with the absolute path."""
-    compiler_path = os.path.dirname(os.path.abspath(__file__))
-    if os.path.islink(__file__):
-      compiler = os.path.basename(os.readlink(__file__))
-    else:
-      compiler = os.path.basename(os.path.abspath(__file__))
-    self.real_compiler = os.path.join(
-        compiler_path,
-        "98880972-a816-11e9-80c0-33dd338bc3b2")
-    self.argv0 = self.real_compiler
-
-  def process_gomacc_command(self):
-    """Return the gomacc command if '--gomacc-path' is set."""
-    gomacc = self.custom_flags['--gomacc-path']
-    if gomacc and os.path.isfile(gomacc):
-      self.argv0 = gomacc
-      self.execargs += [gomacc]
-
-  def parse_custom_flags(self):
-    i = 0
-    args = []
-    while i < len(self.args):
-      if self.args[i] in self.custom_flags:
-        self.custom_flags[self.args[i]] = self.args[i + 1]
-        i = i + 2
-      else:
-        args.append(self.args[i])
-        i = i + 1
-    self.args = args
-
-  def add_flags(self):
-    self.args = self.prepend_flags + self.args + self.append_flags
-
-  def print_deprecation_warning(self):
-    print("Android GCC has been deprecated in favor of Clang, and will be removed from\n"
-          "Android in 2020-01 as per the deprecation plan in:\n"
-          "https://android.googlesource.com/platform/prebuilts/clang/host/linux-x86/+/master/GCC_4_9_DEPRECATION.md\n\n",
-          file=sys.stderr)
-
-
-  def invoke_compiler(self):
-    self.print_deprecation_warning()
-    self.set_real_compiler()
-    self.parse_custom_flags()
-    self.process_gomacc_command()
-    self.add_flags()
-    self.execargs += [self.real_compiler] + self.args
-    time.sleep(3)
-    os.execv(self.argv0, self.execargs)
-
-
-def main(argv):
-  cw = CompilerWrapper(argv[1:])
-  cw.invoke_compiler()
-
-if __name__ == "__main__":
-  main(sys.argv)
diff --git a/bin/aarch64-linux-android-gcc-4.9 b/bin/aarch64-linux-android-gcc-4.9
deleted file mode 120000
index 347842f..0000000
--- a/bin/aarch64-linux-android-gcc-4.9
+++ /dev/null
@@ -1 +0,0 @@
-aarch64-linux-android-gcc
\ No newline at end of file
diff --git a/bin/aarch64-linux-android-gcc-4.9.x-broken b/bin/aarch64-linux-android-gcc-4.9.x-broken
deleted file mode 100755
index 0598c92..0000000
--- a/bin/aarch64-linux-android-gcc-4.9.x-broken
+++ /dev/null
Binary files differ
diff --git a/bin/aarch64-linux-android-gcc-broken b/bin/aarch64-linux-android-gcc-broken
deleted file mode 100755
index aea6314..0000000
--- a/bin/aarch64-linux-android-gcc-broken
+++ /dev/null
@@ -1,77 +0,0 @@
-#!/usr/bin/python
-
-from __future__ import print_function
-import os
-import sys
-import time
-
-class CompilerWrapper():
-  def __init__(self, argv):
-    self.args = argv
-    self.execargs = []
-    self.real_compiler = None
-    self.argv0 = None
-    self.append_flags = []
-    self.prepend_flags = []
-    self.custom_flags = {
-      '--gomacc-path': None
-    }
-
-  def set_real_compiler(self):
-    """Find the real compiler with the absolute path."""
-    compiler_path = os.path.dirname(os.path.abspath(__file__))
-    if os.path.islink(__file__):
-      compiler = os.path.basename(os.readlink(__file__))
-    else:
-      compiler = os.path.basename(os.path.abspath(__file__))
-    self.real_compiler = os.path.join(
-        compiler_path,
-        "84372336-a816-11e9-9669-5b66bd3072d3")
-    self.argv0 = self.real_compiler
-
-  def process_gomacc_command(self):
-    """Return the gomacc command if '--gomacc-path' is set."""
-    gomacc = self.custom_flags['--gomacc-path']
-    if gomacc and os.path.isfile(gomacc):
-      self.argv0 = gomacc
-      self.execargs += [gomacc]
-
-  def parse_custom_flags(self):
-    i = 0
-    args = []
-    while i < len(self.args):
-      if self.args[i] in self.custom_flags:
-        self.custom_flags[self.args[i]] = self.args[i + 1]
-        i = i + 2
-      else:
-        args.append(self.args[i])
-        i = i + 1
-    self.args = args
-
-  def add_flags(self):
-    self.args = self.prepend_flags + self.args + self.append_flags
-
-  def print_deprecation_warning(self):
-    print("Android GCC has been deprecated in favor of Clang, and will be removed from\n"
-          "Android in 2020-01 as per the deprecation plan in:\n"
-          "https://android.googlesource.com/platform/prebuilts/clang/host/linux-x86/+/master/GCC_4_9_DEPRECATION.md\n\n",
-          file=sys.stderr)
-
-
-  def invoke_compiler(self):
-    self.print_deprecation_warning()
-    self.set_real_compiler()
-    self.parse_custom_flags()
-    self.process_gomacc_command()
-    self.add_flags()
-    self.execargs += [self.real_compiler] + self.args
-    time.sleep(3)
-    os.execv(self.argv0, self.execargs)
-
-
-def main(argv):
-  cw = CompilerWrapper(argv[1:])
-  cw.invoke_compiler()
-
-if __name__ == "__main__":
-  main(sys.argv)
diff --git a/bin/aarch64-linux-androidkernel-cpp b/bin/aarch64-linux-androidkernel-cpp
deleted file mode 120000
index 7057f43..0000000
--- a/bin/aarch64-linux-androidkernel-cpp
+++ /dev/null
@@ -1 +0,0 @@
-aarch64-linux-android-cpp
\ No newline at end of file
diff --git a/bin/aarch64-linux-androidkernel-gcc b/bin/aarch64-linux-androidkernel-gcc
deleted file mode 120000
index 347842f..0000000
--- a/bin/aarch64-linux-androidkernel-gcc
+++ /dev/null
@@ -1 +0,0 @@
-aarch64-linux-android-gcc
\ No newline at end of file
