diff --git a/src/third_party/llvm-project/lldb/scripts/swig_bot.py b/src/third_party/llvm-project/lldb/scripts/swig_bot.py
new file mode 100644
index 0000000..888fc10
--- /dev/null
+++ b/src/third_party/llvm-project/lldb/scripts/swig_bot.py
@@ -0,0 +1,85 @@
+#!/usr/bin/env python
+
+"""
+SWIG generation top-level script.  Supports both local and remote generation
+of SWIG bindings for multiple languages.
+"""
+
+# Python modules
+import argparse
+import logging
+import sys
+import traceback
+
+# LLDB modules
+import use_lldb_suite
+
+# swig_bot modules
+from swig_bot_lib import client
+from swig_bot_lib import server
+
+
+def process_args(args):
+    parser = argparse.ArgumentParser(
+        description='Run swig-bot client or server.')
+
+    # Create and populate subparser arguments for when swig_bot is
+    # run in client or server mode
+    subparsers = parser.add_subparsers(
+        help="Pass --help to a sub-command to print detailed usage")
+    client_parser = subparsers.add_parser("client",
+                                          help="Run SWIG generation client")
+    client.add_subparser_args(client_parser)
+    client_parser.set_defaults(func=run_client)
+
+    server_parser = subparsers.add_parser("server",
+                                          help="Run SWIG generation server")
+    server.add_subparser_args(server_parser)
+    server_parser.set_defaults(func=run_server)
+
+    # Arguments to control logging verbosity.
+    parser.add_argument(
+        "--verbose", "-v",
+        action="store_true",
+        default=False,
+        help="Increase logging verbosity level.")
+
+    options = parser.parse_args(args)
+    # Set logging level.
+    if options.verbose:
+        log_level = logging.DEBUG
+    else:
+        log_level = logging.NOTSET
+    logging.basicConfig(level=log_level)
+    logging.info("logging is using level: %d", log_level)
+
+    return options
+
+
+def run_client(options):
+    logging.info("Running swig_bot in client mode")
+    client.finalize_subparser_options(options)
+    client.run(options)
+
+
+def run_server(options):
+    logging.info("Running swig_bot in server mode")
+    server.finalize_subparser_options(options)
+    server.run(options)
+
+if __name__ == "__main__":
+    options = process_args(sys.argv[1:])
+    try:
+        if options.func is None:
+            logging.error(
+                "Unknown mode specified.  Expected client or server.")
+            sys.exit(-1)
+        else:
+            options.func(options)
+    except KeyboardInterrupt as e:
+        logging.info("Ctrl+C received.  Shutting down...")
+        sys.exit(-1)
+    except Exception as e:
+        error = traceback.format_exc()
+        logging.error("An error occurred running swig-bot.")
+        logging.error(error)
