diff --git a/scripts/install-buildtools b/scripts/install-buildtools
index 723edd793e..52ff5ccdce 100755
--- a/scripts/install-buildtools
+++ b/scripts/install-buildtools
@@ -130,6 +130,10 @@ def main():
         description="Buildtools installation helper",
         add_help=False,
         formatter_class=argparse.RawTextHelpFormatter)
+    parser.add_argument('--local-file',
+                        help='path to a pre-downloaded buildtools installer file.\n'
+                             'Cannot be combined with --url or --filename.',
+                        action='store')
     parser.add_argument('-u', '--url',
                         help='URL from where to fetch buildtools SDK installer, not '
                              'including filename (optional)\n'
@@ -243,49 +247,58 @@ def main():
     os.makedirs(sdk_dir, exist_ok=True)
     try:
         # Fetch installer
-        logger.info("Fetching buildtools installer")
-        tmpbuildtools = os.path.join(sdk_dir, filename)
-        with open(os.path.join(sdk_dir, 'buildtools_url'), 'w') as f:
-            f.write(buildtools_url)
-        ret = subprocess.call("wget -q -O %s %s" %
-                              (tmpbuildtools, buildtools_url), shell=True)
-        if ret != 0:
-            logger.error("Could not download file from %s" % buildtools_url)
-            return ret
-
-        # Verify checksum
-        if args.check:
-            logger.info("Fetching buildtools installer checksum")
-            checksum_type = "sha256sum"
-            checksum_url = "{}.{}".format(buildtools_url, checksum_type)
-            checksum_filename = "{}.{}".format(filename, checksum_type)
-            tmpbuildtools_checksum = os.path.join(sdk_dir, checksum_filename)
-            with open(os.path.join(sdk_dir, 'checksum_url'), 'w') as f:
-                f.write(checksum_url)
+        if args.local_file:
+            if args.url or args.filename:
+                parser.error("--local-file cannot be combined with --url or --filename")
+            tmpbuildtools = os.path.abspath(args.local_file)
+            if not os.path.exists(tmpbuildtools):
+                logger.error("Local file not found: %s" % tmpbuildtools)
+                return 1
+            filename = os.path.basename(tmpbuildtools)
+        else:
+            logger.info("Fetching buildtools installer")
+            tmpbuildtools = os.path.join(sdk_dir, filename)
+            with open(os.path.join(sdk_dir, 'buildtools_url'), 'w') as f:
+                f.write(buildtools_url)
             ret = subprocess.call("wget -q -O %s %s" %
-                                    (tmpbuildtools_checksum, checksum_url), shell=True)
+                                  (tmpbuildtools, buildtools_url), shell=True)
             if ret != 0:
-                logger.error("Could not download file from %s" % checksum_url)
+                logger.error("Could not download file from %s" % buildtools_url)
                 return ret
-            regex = re.compile(r"^(?P<checksum>[0-9a-f]+)\s+(?P<path>.*/)?(?P<filename>.*)$")
-            with open(tmpbuildtools_checksum, 'rb') as f:
-                original = f.read()
-                m = re.search(regex, original.decode("utf-8"))
-                logger.debug("checksum regex match: %s" % m)
-                logger.debug("checksum: %s" % m.group('checksum'))
-                logger.debug("path: %s" % m.group('path'))
-                logger.debug("filename: %s" % m.group('filename'))
-                if filename != m.group('filename'):
-                    logger.error("Filename does not match name in checksum")
+
+            # Verify checksum
+            if args.check:
+                logger.info("Fetching buildtools installer checksum")
+                checksum_type = "sha256sum"
+                checksum_url = "{}.{}".format(buildtools_url, checksum_type)
+                checksum_filename = "{}.{}".format(filename, checksum_type)
+                tmpbuildtools_checksum = os.path.join(sdk_dir, checksum_filename)
+                with open(os.path.join(sdk_dir, 'checksum_url'), 'w') as f:
+                    f.write(checksum_url)
+                ret = subprocess.call("wget -q -O %s %s" %
+                                        (tmpbuildtools_checksum, checksum_url), shell=True)
+                if ret != 0:
+                    logger.error("Could not download file from %s" % checksum_url)
+                    return ret
+                regex = re.compile(r"^(?P<checksum>[0-9a-f]+)\s+(?P<path>.*/)?(?P<filename>.*)$")
+                with open(tmpbuildtools_checksum, 'rb') as f:
+                    original = f.read()
+                    m = re.search(regex, original.decode("utf-8"))
+                    logger.debug("checksum regex match: %s" % m)
+                    logger.debug("checksum: %s" % m.group('checksum'))
+                    logger.debug("path: %s" % m.group('path'))
+                    logger.debug("filename: %s" % m.group('filename'))
+                    if filename != m.group('filename'):
+                        logger.error("Filename does not match name in checksum")
+                        return 1
+                    checksum = m.group('checksum')
+                checksum_value = sha256_file(tmpbuildtools)
+                if checksum == checksum_value:
+                        logger.info("Checksum success")
+                else:
+                    logger.error("Checksum %s expected. Actual checksum is %s." %
+                                 (checksum, checksum_value))
                     return 1
-                checksum = m.group('checksum')
-            checksum_value = sha256_file(tmpbuildtools)
-            if checksum == checksum_value:
-                    logger.info("Checksum success")
-            else:
-                logger.error("Checksum %s expected. Actual checksum is %s." %
-                             (checksum, checksum_value))
-                return 1
 
         # Make installer executable
         logger.info("Making installer executable")
