diff --git a/bin/real-x86_64-linux-android-g++-broken b/bin/real-x86_64-linux-android-g++-broken
deleted file mode 100755
index 5c8990a..0000000
--- a/bin/real-x86_64-linux-android-g++-broken
+++ /dev/null
Binary files differ
diff --git a/bin/real-x86_64-linux-android-gcc-broken b/bin/real-x86_64-linux-android-gcc-broken
deleted file mode 100755
index 7c272ef..0000000
--- a/bin/real-x86_64-linux-android-gcc-broken
+++ /dev/null
Binary files differ
diff --git a/bin/x86_64-linux-android-c++ b/bin/x86_64-linux-android-c++
deleted file mode 120000
index 425d82a..0000000
--- a/bin/x86_64-linux-android-c++
+++ /dev/null
@@ -1 +0,0 @@
-x86_64-linux-android-g++
\ No newline at end of file
diff --git a/bin/x86_64-linux-android-cpp-broken b/bin/x86_64-linux-android-cpp-broken
deleted file mode 100755
index 65cf353..0000000
--- a/bin/x86_64-linux-android-cpp-broken
+++ /dev/null
Binary files differ
diff --git a/bin/x86_64-linux-android-g++-broken b/bin/x86_64-linux-android-g++-broken
deleted file mode 100755
index 54944a2..0000000
--- a/bin/x86_64-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/x86_64-linux-android-gcc-4.9 b/bin/x86_64-linux-android-gcc-4.9
deleted file mode 120000
index c953618..0000000
--- a/bin/x86_64-linux-android-gcc-4.9
+++ /dev/null
@@ -1 +0,0 @@
-x86_64-linux-android-gcc
\ No newline at end of file
diff --git a/bin/x86_64-linux-android-gcc-4.9.x-broken b/bin/x86_64-linux-android-gcc-4.9.x-broken
deleted file mode 100755
index 7c272ef..0000000
--- a/bin/x86_64-linux-android-gcc-4.9.x-broken
+++ /dev/null
Binary files differ
diff --git a/bin/x86_64-linux-android-gcc-broken b/bin/x86_64-linux-android-gcc-broken
deleted file mode 100755
index 54944a2..0000000
--- a/bin/x86_64-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/x86_64-linux-androidkernel-cpp b/bin/x86_64-linux-androidkernel-cpp
deleted file mode 120000
index 8163a00..0000000
--- a/bin/x86_64-linux-androidkernel-cpp
+++ /dev/null
@@ -1 +0,0 @@
-x86_64-linux-android-cpp
\ No newline at end of file
diff --git a/bin/x86_64-linux-androidkernel-gcc b/bin/x86_64-linux-androidkernel-gcc
deleted file mode 120000
index c953618..0000000
--- a/bin/x86_64-linux-androidkernel-gcc
+++ /dev/null
@@ -1 +0,0 @@
-x86_64-linux-android-gcc
\ No newline at end of file
