diff --git a/bin/mips64el-linux-android-c++ b/bin/mips64el-linux-android-c++
deleted file mode 120000
index a6f5596..0000000
--- a/bin/mips64el-linux-android-c++
+++ /dev/null
@@ -1 +0,0 @@
-mips64el-linux-android-g++
\ No newline at end of file
diff --git a/bin/mips64el-linux-android-cpp-broken b/bin/mips64el-linux-android-cpp-broken
deleted file mode 100755
index 97afafa..0000000
--- a/bin/mips64el-linux-android-cpp-broken
+++ /dev/null
Binary files differ
diff --git a/bin/mips64el-linux-android-g++-broken b/bin/mips64el-linux-android-g++-broken
deleted file mode 100755
index 54944a2..0000000
--- a/bin/mips64el-linux-android-g++-broken
+++ /dev/null
@@ -1,66 +0,0 @@
-#!/usr/bin/python
-
-import os
-import sys
-
-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,
-        "real-" + compiler)
-    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 invoke_compiler(self):
-    self.set_real_compiler()
-    self.parse_custom_flags()
-    self.process_gomacc_command()
-    self.add_flags()
-    self.execargs += [self.real_compiler] + self.args
-    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/mips64el-linux-android-gcc-4.9 b/bin/mips64el-linux-android-gcc-4.9
deleted file mode 120000
index 3c6711b..0000000
--- a/bin/mips64el-linux-android-gcc-4.9
+++ /dev/null
@@ -1 +0,0 @@
-mips64el-linux-android-gcc
\ No newline at end of file
diff --git a/bin/mips64el-linux-android-gcc-4.9.x-broken b/bin/mips64el-linux-android-gcc-4.9.x-broken
deleted file mode 100755
index 2b6bcd8..0000000
--- a/bin/mips64el-linux-android-gcc-4.9.x-broken
+++ /dev/null
Binary files differ
diff --git a/bin/mips64el-linux-android-gcc-broken b/bin/mips64el-linux-android-gcc-broken
deleted file mode 100755
index 54944a2..0000000
--- a/bin/mips64el-linux-android-gcc-broken
+++ /dev/null
@@ -1,66 +0,0 @@
-#!/usr/bin/python
-
-import os
-import sys
-
-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,
-        "real-" + compiler)
-    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 invoke_compiler(self):
-    self.set_real_compiler()
-    self.parse_custom_flags()
-    self.process_gomacc_command()
-    self.add_flags()
-    self.execargs += [self.real_compiler] + self.args
-    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/mips64el-linux-androidkernel-cpp b/bin/mips64el-linux-androidkernel-cpp
deleted file mode 120000
index 5b557d4..0000000
--- a/bin/mips64el-linux-androidkernel-cpp
+++ /dev/null
@@ -1 +0,0 @@
-mips64el-linux-android-cpp
\ No newline at end of file
diff --git a/bin/mips64el-linux-androidkernel-gcc b/bin/mips64el-linux-androidkernel-gcc
deleted file mode 120000
index 3c6711b..0000000
--- a/bin/mips64el-linux-androidkernel-gcc
+++ /dev/null
@@ -1 +0,0 @@
-mips64el-linux-android-gcc
\ No newline at end of file
diff --git a/bin/real-mips64el-linux-android-g++-broken b/bin/real-mips64el-linux-android-g++-broken
deleted file mode 100755
index 0a1cc6a..0000000
--- a/bin/real-mips64el-linux-android-g++-broken
+++ /dev/null
Binary files differ
diff --git a/bin/real-mips64el-linux-android-gcc-broken b/bin/real-mips64el-linux-android-gcc-broken
deleted file mode 100755
index 2b6bcd8..0000000
--- a/bin/real-mips64el-linux-android-gcc-broken
+++ /dev/null
Binary files differ
