diff --git a/irq_test_tool/irq_test.py b/irq_test_tool/irq_test.py
new file mode 100644
index 0000000..b9b2fd3
--- /dev/null
+++ b/irq_test_tool/irq_test.py
@@ -0,0 +1,107 @@
+#-------------------------------------------------------------------------------
+# Copyright (c) 2020, Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+#-------------------------------------------------------------------------------
+
+""" This module is the entry point of the IRQ testing tool.
+"""
+
+import argparse
+import json
+import logging
+import os
+import sys
+
+# Workaround for GDB: Add current directory to the module search path
+sys.path.insert(0, os.getcwd())
+from irq_test_abstract_debugger import Location
+from irq_test_dummy_debugger import DummyDebugger
+from irq_test_executor import TestExecutor
+
+def create_argparser():
+    """ Create an argument parser for the script
+
+    This parser enumerates the arguments that are necessary for all the
+    debuggers. Debugger implementations might add other arguments to this
+    parser.
+    """
+    parser = argparse.ArgumentParser()
+    parser.add_argument("-w", "--sw-break",
+                        help="use sw breakpoint (the default is HW breakpoint)",
+                        action="store_true")
+    parser.add_argument("-q", "--irqs",
+                        type=str,
+                        help="the name of the irqs json",
+                        required=True)
+    parser.add_argument("-b", "--breakpoints",
+                        type=str,
+                        help="the name of the breakpoints json",
+                        required=True)
+    parser.add_argument("-t", "--testcase",
+                        type=str,
+                        help="The testcase to execute",
+                        required=True)
+    return parser
+
+def main():
+    """ The main function of the script
+
+    Detects the debugger that it is started in, creates the debugger
+    implementation instance, and either executes the test, or registers a
+    command in the debugger. For details see the README.rst
+    """
+    try:
+        # TODO: evironment checking should be refactored to the debugger
+        # implementations
+        from arm_ds.debugger_v1 import Debugger
+        debugger_type = 'Arm-DS'
+    except ImportError:
+        logging.debug('Failed to import Arm-DS scripting env, try GDB')
+        try:
+            # TODO: evironment checking should be refactored to the debugger
+            # implementations
+            import gdb
+            debugger_type = 'GDB'
+        except ImportError:
+            logging.debug("Failed to import GDB scripting env, fall back do "
+                          "dummy")
+            debugger_type = 'dummy'
+
+    logging.info("The debugger type selected is: %s", debugger_type)
+
+    # create a debugger controller instance
+    if debugger_type == 'Arm-DS':
+        from irq_test_Arm_DS_debugger import ArmDSDebugger
+        logging.debug("initialising debugger object...")
+        arg_parser = create_argparser()
+        try:
+            args = arg_parser.parse_args()
+        except:
+            logging.error("Failed to parse command line parameters")
+            return
+        # TODO: Fail gracefully in case of an argparse error
+        debugger = ArmDSDebugger(args.sw_break)
+        executor = TestExecutor(debugger)
+        executor.execute(args.irqs, args.breakpoints, args.testcase)
+    elif debugger_type == 'GDB':
+        from irq_test_gdb_debugger import GDBDebugger
+        from irq_test_gdb_debugger import TestIRQsCommand
+        logging.debug("initialising debugger object...")
+        arg_parser = create_argparser()
+
+        # register the 'test_irqs' custom command
+        TestIRQsCommand(arg_parser)
+        logging.info("Command 'test_irqs' is successfully registered")
+    elif debugger_type == 'dummy':
+        arg_parser = create_argparser()
+        args = arg_parser.parse_args()
+        debugger = DummyDebugger(args.sw_break)
+        executor = TestExecutor(debugger)
+        executor.execute(args.irqs, args.breakpoints, args.testcase)
+
+if __name__ == "__main__":
+    logging.basicConfig(format='===== %(levelname)s: %(message)s',
+                        level=logging.DEBUG, stream=sys.stdout)
+    main()
