diff --git a/lldb/test/Shell/helper/build.py b/lldb/test/Shell/helper/build.py
--- a/lldb/test/Shell/helper/build.py
+++ b/lldb/test/Shell/helper/build.py
@@ -61,6 +61,12 @@
                     default=False,
                     help='Include and link GNUstep libobjc2 (Windows and Linux only)')
 
+parser.add_argument('--sysroot',
+                    metavar='directory',
+                    dest='sysroot',
+                    required=False,
+                    help='If specified, a sysroot to be passed via --sysroot')
+
 if sys.platform == 'darwin':
     parser.add_argument('--apple-sdk',
                         metavar='apple_sdk',
@@ -254,6 +260,7 @@
                "--objc-gnustep specified without path to libobjc2"
         self.objc_gnustep_inc = os.path.join(args.objc_gnustep_dir, 'include') if args.objc_gnustep_dir else None
         self.objc_gnustep_lib = os.path.join(args.objc_gnustep_dir, 'lib') if args.objc_gnustep_dir else None
+        self.sysroot = args.sysroot
 
     def _exe_file_name(self):
         assert self.mode != 'compile'
@@ -679,6 +686,8 @@
                 args.extend(['-fobjc-runtime=gnustep-2.0', '-I', self.objc_gnustep_inc])
                 if sys.platform == "win32":
                     args.extend(['-Xclang', '-gcodeview', '-Xclang', '--dependent-lib=msvcrtd'])
+        elif self.sysroot:
+            args.extend(['--sysroot', self.sysroot])
 
         if self.std:
             args.append('-std={0}'.format(self.std))
@@ -713,6 +722,8 @@
                 args.extend(['-Wl,-rpath,' + self.objc_gnustep_lib])
             elif sys.platform == 'win32':
                 args.extend(['-fuse-ld=lld-link', '-g', '-Xclang', '--dependent-lib=msvcrtd'])
+        elif self.sysroot:
+            args.extend(['--sysroot', self.sysroot])
 
         return ('linking', self._obj_file_names(), self._exe_file_name(), None, args)
 
diff --git a/lldb/test/Shell/helper/toolchain.py b/lldb/test/Shell/helper/toolchain.py
--- a/lldb/test/Shell/helper/toolchain.py
+++ b/lldb/test/Shell/helper/toolchain.py
@@ -44,6 +44,8 @@
         build_script_args.append('--libs-dir={0}'.format(config.llvm_libs_dir))
     if config.objc_gnustep_dir:
         build_script_args.append('--objc-gnustep-dir="{0}"'.format(config.objc_gnustep_dir))
+    if config.cmake_sysroot:
+        build_script_args.append('--sysroot={0}'.format(config.cmake_sysroot))
 
     lldb_init = _get_lldb_init_path(config)
 
@@ -140,6 +142,9 @@
     # The clang module cache is used for building inferiors.
     host_flags += ['-fmodules-cache-path={}'.format(config.clang_module_cache)]
 
+    if config.cmake_sysroot:
+        host_flags += ['--sysroot={}'.format(config.cmake_sysroot)]
+
     host_flags = ' '.join(host_flags)
     config.substitutions.append(('%clang_host', '%clang ' + host_flags))
     config.substitutions.append(('%clangxx_host', '%clangxx ' + host_flags))
diff --git a/lldb/test/Shell/lit.site.cfg.py.in b/lldb/test/Shell/lit.site.cfg.py.in
--- a/lldb/test/Shell/lit.site.cfg.py.in
+++ b/lldb/test/Shell/lit.site.cfg.py.in
@@ -13,6 +13,7 @@
 # Since it comes from the command line, it may have backslashes which
 # should not need to be escaped.
 config.lldb_lit_tools_dir = lit_config.substitute(r"@LLDB_LIT_TOOLS_DIR@")
+config.cmake_sysroot = lit_config.substitute("@CMAKE_SYSROOT@")
 config.target_triple = "@LLVM_TARGET_TRIPLE@"
 config.python_executable = "@Python3_EXECUTABLE@"
 config.have_zlib = @LLVM_ENABLE_ZLIB@