Merge main into google.

* Ignores local changes to deleted file.
diff --git a/.gitmodules b/.gitmodules
index dcedcea..c6ec233 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -26,12 +26,6 @@
 [submodule "third_party/benchmark"]
 	path = third_party/benchmark
 	url = https://github.com/google/benchmark.git
-[submodule "third_party/sdl2"]
-	path = third_party/sdl2
-	url = https://github.com/SDL-mirror/SDL.git
-[submodule "third_party/dear_imgui"]
-	path = third_party/dear_imgui
-	url = https://github.com/ocornut/imgui.git
 [submodule "third_party/ruy"]
 	path = third_party/ruy
 	url = https://github.com/google/ruy
diff --git a/BUILD.bazel b/BUILD.bazel
index f3de1d2..4926889 100644
--- a/BUILD.bazel
+++ b/BUILD.bazel
@@ -30,7 +30,6 @@
 #  "@iree_pybind11//"
 #  "@renderdoc_api//"
 #  "@com_google_ruy//"
-#  "@sdl2//"
 #  "@org_tensorflow//tensorflow/"
 #  "@com_google_tracing_framework_cpp//"
 #  "@iree_vulkan_headers//"
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 9f08720..d46965d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -450,17 +450,6 @@
   add_subdirectory(build_tools/third_party/tensorflow/tensorflow/compiler/mlir/hlo EXCLUDE_FROM_ALL)
 endif()
 
-if(${IREE_BUILD_DEBUGGER} OR ${IREE_BUILD_SAMPLES})
-  # sdl2 logs are spammy - change log level while adding
-  function(include_sdl2)
-    set(CMAKE_MESSAGE_LOG_LEVEL "WARNING")
-    add_subdirectory(third_party/sdl2 EXCLUDE_FROM_ALL)
-  endfunction()
-  include_sdl2()
-
-  add_subdirectory(build_tools/third_party/dear_imgui EXCLUDE_FROM_ALL)
-endif()
-
 if(${IREE_BUILD_TESTS})
   add_subdirectory(third_party/benchmark EXCLUDE_FROM_ALL)
   enable_testing(iree)
diff --git a/SUBMODULE_VERSIONS b/SUBMODULE_VERSIONS
index 4475e30..d1af81b 100644
--- a/SUBMODULE_VERSIONS
+++ b/SUBMODULE_VERSIONS
@@ -1,7 +1,6 @@
 6ec136281086b71da32b5fb068bd6e46b78a5c79 third_party/abseil-cpp
 daff5fead3fbe22c6fc58310ca3f49caf117f185 third_party/benchmark
 63b254577ed77a8004a9be6ac707f3dccc4e1fd9 third_party/cpuinfo
-4c13807b7d43ff0946b7ffea0ae3aee9e611d778 third_party/dear_imgui
 4fb0ff7069bd88ee85902f4d0bb62794e5f6d021 third_party/flatcc
 b1fbd33c06cdb0024c67733c6fdec2009d17b384 third_party/googletest
 bfc60e6cfe4d298f1662042f21f55c0ddd409749 third_party/llvm-bazel
@@ -10,7 +9,6 @@
 74d7261be17cf659d5930d4830609406bd7553e3 third_party/pffft
 d8c7ee00a687ac369e62e2032514a93a9b413502 third_party/pybind11
 d79362c24fd70eab3196672273dbfd8f0dd6124c third_party/ruy
-a1390ed39ec77ecfb574bc6fcd5bfc5e3adbdea9 third_party/sdl2
 685f86471e9d26b3eb7676695a2e2cefb4551ae9 third_party/spirv_cross
 f8bf11a0253a32375c32cad92c841237b96696c0 third_party/spirv_headers
 49d9c97061d3ff3d957af4d60d8a1ad701a5d106 third_party/tensorflow
diff --git a/WORKSPACE b/WORKSPACE
index d0b6ecf..0830b20 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -253,30 +253,6 @@
 
 maybe(
     new_local_repository,
-    name = "sdl2",
-    build_file = "build_tools/third_party/sdl2/BUILD.overlay",
-    path = "third_party/sdl2",
-)
-
-maybe(
-    new_local_repository,
-    name = "sdl2_config",
-    build_file_content = """
-package(default_visibility = ["//visibility:public"])
-cc_library(name = "headers", srcs = glob(["*.h"]))
-""",
-    path = "build_tools/third_party/sdl2",
-)
-
-maybe(
-    new_local_repository,
-    name = "dear_imgui",
-    build_file = "build_tools/third_party/dear_imgui/BUILD.overlay",
-    path = "third_party/dear_imgui",
-)
-
-maybe(
-    new_local_repository,
     name = "renderdoc_api",
     build_file = "build_tools/third_party/renderdoc_api/BUILD.overlay",
     path = "third_party/renderdoc_api",
diff --git a/bindings/python/build_tools/python/generate_build.py b/bindings/python/build_tools/python/generate_build.py
index 5d3a5d5..71d3491 100644
--- a/bindings/python/build_tools/python/generate_build.py
+++ b/bindings/python/build_tools/python/generate_build.py
@@ -42,8 +42,8 @@
                                                       minor=sys.version_info[1])
   implib_abs_path = os.path.join(exec_prefix, "libs", implib_basename)
   if not os.path.exists(implib_abs_path):
-    raise RuntimeError("Could not find Windows python import library: %s" %
-                       (implib_abs_path,))
+    raise RuntimeError(
+        f"Could not find Windows python import library: {implib_abs_path}")
   implib_ws_path = "libs/" + implib_basename
   print("# SYMLINK: {abs}\t{ws}".format(abs=implib_abs_path, ws=implib_ws_path))
   extra_srcs.append(implib_ws_path)
diff --git a/bindings/python/pyiree/compiler2/core.py b/bindings/python/pyiree/compiler2/core.py
index 7ea85d5..849e229 100644
--- a/bindings/python/pyiree/compiler2/core.py
+++ b/bindings/python/pyiree/compiler2/core.py
@@ -15,6 +15,8 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+# TODO(#4131) python>=3.7: Use postponed type annotations.
+
 from enum import Enum
 import subprocess
 from typing import Any, Dict, List, Optional, Sequence, Union
@@ -58,6 +60,7 @@
     return OutputFormat[spec]
 
 
+# TODO(#4131) python>=3.7: Consider using a dataclass.
 class CompilerOptions:
   """Options to the compiler backend.
 
diff --git a/bindings/python/pyiree/compiler2/tf.py b/bindings/python/pyiree/compiler2/tf.py
index 90423c5..9ac0eae 100644
--- a/bindings/python/pyiree/compiler2/tf.py
+++ b/bindings/python/pyiree/compiler2/tf.py
@@ -15,6 +15,8 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+# TODO(#4131) python>=3.7: Use postponed type annotations.
+
 from enum import Enum
 import logging
 import tempfile
@@ -76,6 +78,7 @@
     return ImportType[spec]
 
 
+# TODO(#4131) python>=3.7: Consider using a dataclass.
 class ImportOptions(CompilerOptions):
   """Import options layer on top of the backend compiler options."""
 
diff --git a/bindings/python/pyiree/compiler2/tools.py b/bindings/python/pyiree/compiler2/tools.py
index 6083840..1d32a15 100644
--- a/bindings/python/pyiree/compiler2/tools.py
+++ b/bindings/python/pyiree/compiler2/tools.py
@@ -149,7 +149,7 @@
       run_args["input"] = immediate_input
 
     # Capture output.
-    # Upgrade note: Python >= 3.7 can just use capture_output=True
+    # TODO(#4131) python>=3.7: Use capture_output=True.
     run_args["stdout"] = subprocess.PIPE
     run_args["stderr"] = subprocess.PIPE
     process = subprocess.run(command_line, **run_args)
diff --git a/bindings/python/pyiree/rt/system_api.py b/bindings/python/pyiree/rt/system_api.py
index c75fbad..427e318 100644
--- a/bindings/python/pyiree/rt/system_api.py
+++ b/bindings/python/pyiree/rt/system_api.py
@@ -23,6 +23,8 @@
 # pylint: disable=unused-argument
 # pylint: disable=g-explicit-length-test
 
+# TODO(#4131) python>=3.7: Use postponed type annotations.
+
 __all__ = ["load_module", "load_modules", "Config", "SystemContext"]
 
 import os
@@ -58,7 +60,7 @@
   driver_exceptions = {}
   for driver_name in driver_names:
     if driver_name not in available_driver_names:
-      print("Could not create driver %s (not registered)" % driver_name,
+      print(f"Could not create driver {driver_name} (not registered)",
             file=sys.stderr)
       continue
     try:
@@ -66,7 +68,7 @@
       # TODO(laurenzo): Remove these prints to stderr (for now, more information
       # is better and there is no better way to report it yet).
     except Exception as ex:  # pylint: disable=broad-except
-      print("Could not create default driver %s: %r" % (driver_name, ex),
+      print(f"Could not create default driver {driver_name}: {ex:!r}",
             file=sys.stderr)
       driver_exceptions[driver_name] = ex
       continue
@@ -78,18 +80,18 @@
     try:
       device = driver.create_default_device()
     except Exception as ex:
-      print("Could not create default driver device %s: %r" % (driver_name, ex),
+      print(f"Could not create default driver device {driver_name}: {ex:!r}",
             file=sys.stderr)
       driver_exceptions[driver_name] = ex
       continue
 
-    print("Created IREE driver %s: %r" % (driver_name, driver), file=sys.stderr)
+    print("Created IREE driver {driver_name}: {driver:!r}", file=sys.stderr)
     return driver
 
   # All failed.
-  raise RuntimeError("Could not create any requested driver "
-                     "%r (available=%r) : %r" %
-                     (driver_names, available_driver_names, driver_exceptions))
+  raise RuntimeError(
+      f"Could not create any requested driver {repr(driver_names)} (available="
+      f"{repr(available_driver_names)}) : {repr(driver_exceptions)}")
 
 
 class Config:
@@ -147,10 +149,7 @@
     return unpacked_results
 
   def __repr__(self):
-    return "<BoundFunction %r (%r)>" % (
-        self._abi,
-        self._vm_function,
-    )
+    return f"<BoundFunction {repr(self._abi)} ({repr(self._vm_function)})>"
 
   def get_serialized_values(self):
     if self._serialized_inputs is None:
@@ -187,14 +186,13 @@
 
     vm_function = self._vm_module.lookup_function(name)
     if vm_function is None:
-      raise KeyError("Function '%s' not found in module '%s'" %
-                     (name, self.name))
+      raise KeyError(f"Function '{name}' not found in module '{self.name}'")
     bound_function = BoundFunction(self._context, vm_function)
     self._lazy_functions[name] = bound_function
     return bound_function
 
   def __repr__(self):
-    return "<BoundModule %r>" % (self._vm_module,)
+    return f"<BoundModule {self._vm_module:!r}>"
 
 
 class Modules(dict):
@@ -212,7 +210,8 @@
 
   def __init__(self, modules=None, config: Optional[Config] = None):
     self._config = config if config is not None else _get_global_config()
-    print("SystemContext driver=%r" % self._config.driver, file=sys.stderr)
+    # :!r does not work with the _binding.HalDriver class.
+    print(f"SystemContext driver={repr(self._config.driver)}", file=sys.stderr)
     self._is_dynamic = modules is None
     if not self._is_dynamic:
       init_modules = self._config.default_modules + tuple(modules)
@@ -258,7 +257,7 @@
     for m in modules:
       name = m.name
       if name in self._modules:
-        raise ValueError("Attempt to register duplicate module: '%s'" % (name,))
+        raise ValueError(f"Attempt to register duplicate module: '{name}'")
       self._modules[m.name] = BoundModule(self, m)
     self._vm_context.register_modules(modules)
 
diff --git a/bindings/python/setup.py b/bindings/python/setup.py
index 3a669cc..f0f7cec 100644
--- a/bindings/python/setup.py
+++ b/bindings/python/setup.py
@@ -30,7 +30,7 @@
   sub_path = os.path.join(this_dir, f"{name}.py")
   args = [sys.executable, sub_path] + sys.argv[1:]
   print(f"##### Running sub setup: {' '.join(args)}")
-  subprocess.check_call(args)
+  subprocess.run(args, check=True)
   print("")
 
 
diff --git a/build_tools/bazel_to_cmake/bazel_to_cmake_targets.py b/build_tools/bazel_to_cmake/bazel_to_cmake_targets.py
index f20ae3d..07a508b 100644
--- a/build_tools/bazel_to_cmake/bazel_to_cmake_targets.py
+++ b/build_tools/bazel_to_cmake/bazel_to_cmake_targets.py
@@ -22,11 +22,6 @@
     # absl
     "@com_google_absl//absl/flags:flag": ["absl::flags"],
     "@com_google_absl//absl/flags:parse": ["absl::flags_parse"],
-    # dear_imgui
-    "@dear_imgui": ["dear_imgui::dear_imgui"],
-    "@dear_imgui//:imgui_sdl_vulkan": [
-        "dear_imgui::impl_sdl", "dear_imgui::impl_vulkan"
-    ],
     # MLIR
     "@llvm-project//mlir:AllPassesAndDialects": ["MLIRAllDialects"],
     "@llvm-project//mlir:AllPassesAndDialectsNoRegistration": [
@@ -70,7 +65,6 @@
     "@com_google_googletest//:gtest": ["gmock", "gtest"],
     "@renderdoc_api//:renderdoc_app": ["renderdoc_api::renderdoc_app"],
     "@pffft": ["pffft"],
-    "@sdl2//:SDL2": ["SDL2-static"],
     "@com_github_pytorch_cpuinfo//:cpuinfo": ["cpuinfo"],
     "@half//:half": ["half"],
     "@vulkan_memory_allocator//:impl_header_only": ["vulkan_memory_allocator"],
@@ -137,4 +131,4 @@
     # All Bazel targets map to a single CMake target.
     return ["ruy"]
 
-  raise KeyError("No conversion found for target '%s'" % target)
+  raise KeyError(f"No conversion found for target '{target}'")
diff --git a/build_tools/docker/utils.py b/build_tools/docker/utils.py
index f9a041b..5fc68c9 100644
--- a/build_tools/docker/utils.py
+++ b/build_tools/docker/utils.py
@@ -25,23 +25,25 @@
                 dry_run: bool = False,
                 check: bool = True,
                 capture_output: bool = False,
-                universal_newlines: bool = True,
+                text: bool = True,
                 **run_kwargs) -> subprocess.CompletedProcess:
   """Thin wrapper around subprocess.run"""
   print(f"Running: `{' '.join(command)}`")
-  if not dry_run:
-    if capture_output:
-      # Hardcode support for python <= 3.6.
-      run_kwargs["stdout"] = subprocess.PIPE
-      run_kwargs["stderr"] = subprocess.PIPE
+  if dry_run:
+    # Dummy CompletedProess with successful returncode.
+    return subprocess.CompletedProcess(command, returncode=0)
 
-    completed_process = subprocess.run(command,
-                                       universal_newlines=universal_newlines,
-                                       check=check,
-                                       **run_kwargs)
-    return completed_process
-  # Dummy CompletedProess with successful returncode.
-  return subprocess.CompletedProcess(command, returncode=0)
+  if capture_output:
+    # TODO(#4131) python>=3.7: Use capture_output=True.
+    run_kwargs["stdout"] = subprocess.PIPE
+    run_kwargs["stderr"] = subprocess.PIPE
+
+  # TODO(#4131) python>=3.7: Replace 'universal_newlines' with 'text'.
+  completed_process = subprocess.run(command,
+                                     universal_newlines=text,
+                                     check=check,
+                                     **run_kwargs)
+  return completed_process
 
 
 def check_gcloud_auth(dry_run: bool = False):
diff --git a/build_tools/manylinux_py_setup.py b/build_tools/manylinux_py_setup.py
index abdd11d..5a049b9 100755
--- a/build_tools/manylinux_py_setup.py
+++ b/build_tools/manylinux_py_setup.py
@@ -47,7 +47,7 @@
         "numpy",
     ]
     print("EXEC:", " ".join(args))
-    subprocess.check_call(args)
+    subprocess.run(args, check=True)
 
 
 def dump_current(identifier):
@@ -65,8 +65,8 @@
     identifier = python_exe.parent.parent.name
     versions_ids.append(identifier)
     # Invoke ourselves with a different interpreter/args to dump config.
-    subprocess.check_call(
-        [str(python_exe), __file__, "_current_args", identifier])
+    subprocess.run([str(python_exe), __file__, "_current_args", identifier],
+                   check=True)
   print("-DIREE_MULTIPY_VERSIONS='{}'".format(";".join(versions_ids)))
 
 
diff --git a/build_tools/third_party/dear_imgui/BUILD.overlay b/build_tools/third_party/dear_imgui/BUILD.overlay
deleted file mode 100644
index 0825f19..0000000
--- a/build_tools/third_party/dear_imgui/BUILD.overlay
+++ /dev/null
@@ -1,87 +0,0 @@
-# Copyright 2019 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      https://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-package(default_visibility = ["//visibility:public"])
-
-cc_library(
-    name = "dear_imgui",
-    hdrs = [
-        "imgui.h",
-        "imstb_textedit.h",
-        "imstb_truetype.h",
-        "imstb_rectpack.h",
-    ],
-    include_prefix = "third_party/dear_imgui",
-    deps = [":dear_imgui_srcs"],
-)
-
-# Split into two rules so that include_prefix can be used.
-cc_library(
-    name = "dear_imgui_srcs",
-    srcs = [
-        "imgui.cpp",
-        "imgui_demo.cpp",
-        "imgui_draw.cpp",
-        "imgui_widgets.cpp",
-    ],
-    hdrs = [
-        "imconfig.h",
-        "imgui.h",
-        "imgui_internal.h",
-        "imstb_textedit.h",
-        "imstb_truetype.h",
-        "imstb_rectpack.h",
-    ],
-)
-
-cc_library(
-    name = "imgui_sdl_vulkan",
-    hdrs = [
-        "examples/imgui_impl_vulkan.h",
-        "examples/imgui_impl_sdl.h",
-    ],
-    deps = [":imgui_sdl_vulkan_srcs"],
-    include_prefix = "third_party/dear_imgui",
-)
-
-# Split into two rules so that include_prefix can be used.
-cc_library(
-    name = "imgui_sdl_vulkan_srcs",
-    srcs = [
-        "examples/imgui_impl_vulkan.cpp",
-        "examples/imgui_impl_sdl.cpp",
-    ],
-    hdrs = [
-        "examples/imgui_impl_vulkan.h",
-        "examples/imgui_impl_sdl.h",
-    ],
-    deps = [
-        ":dear_imgui_srcs",
-        "@iree_vulkan_headers//:vulkan_headers",
-        "@vulkan_sdk//:sdk",
-        "@sdl2//:SDL2",
-    ],
-)
-
-cc_binary(
-    name = "example_sdl_vulkan",
-    srcs = [
-        "examples/example_sdl_vulkan/main.cpp",
-    ],
-    deps = [
-        ":dear_imgui_srcs",
-        ":imgui_sdl_vulkan_srcs",
-    ],
-    includes = ["examples/"],
-)
diff --git a/build_tools/third_party/dear_imgui/CMakeLists.txt b/build_tools/third_party/dear_imgui/CMakeLists.txt
deleted file mode 100644
index 6600566..0000000
--- a/build_tools/third_party/dear_imgui/CMakeLists.txt
+++ /dev/null
@@ -1,95 +0,0 @@
-# Copyright 2019 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      https://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-set(IMGUI_ROOT "${IREE_ROOT_DIR}/third_party/dear_imgui/")
-
-external_cc_library(
-  PACKAGE
-    dear_imgui
-  NAME
-    dear_imgui
-  ROOT
-    ${IMGUI_ROOT}
-  SRCS
-    "imgui.cpp"
-    "imgui_demo.cpp"
-    "imgui_draw.cpp"
-    "imgui_widgets.cpp"
-  HDRS
-    "imconfig.h"
-    "imgui.h"
-    "imgui_internal.h"
-    "imstb_rectpack.h"
-    "imstb_textedit.h"
-    "imstb_truetype.h"
-)
-
-external_cc_library(
-  PACKAGE
-    dear_imgui
-  NAME
-    impl_sdl
-  ROOT
-    ${IMGUI_ROOT}
-  SRCS
-    "examples/imgui_impl_sdl.cpp"
-  HDRS
-    "examples/imgui_impl_sdl.h"
-  INCLUDES
-    ${IMGUI_ROOT}
-  DEPS
-    dear_imgui::dear_imgui
-    SDL2-static
-)
-
-# Dear ImGui's Vulkan implementation requires statically link against Vulkan.
-# One way to achieve this is by installing the Vulkan SDK from
-# https://vulkan.lunarg.com/.
-# If Vulkan is not found, omit these targets (and users must do the same).
-include(FindVulkan)
-if(NOT Vulkan_FOUND)
-  message(NOTICE "Vulkan was not found, skipping Dear ImGui Vulkan support")
-else()
-  external_cc_library(
-    PACKAGE
-      dear_imgui
-    NAME
-      impl_vulkan
-    ROOT
-      ${IMGUI_ROOT}
-    SRCS
-      "examples/imgui_impl_vulkan.cpp"
-    HDRS
-      "examples/imgui_impl_vulkan.h"
-    INCLUDES
-      ${IMGUI_ROOT}
-    DEPS
-      dear_imgui::dear_imgui
-      Vulkan::Vulkan
-  )
-
-  add_executable(dear_imgui_example_sdl_vulkan
-    ${IMGUI_ROOT}/examples/example_sdl_vulkan/main.cpp
-  )
-  target_include_directories(dear_imgui_example_sdl_vulkan
-    PUBLIC
-      ${IMGUI_ROOT}/examples/
-  )
-  target_link_libraries(dear_imgui_example_sdl_vulkan
-    PRIVATE
-      dear_imgui::dear_imgui
-      dear_imgui::impl_sdl
-      dear_imgui::impl_vulkan
-  )
-endif()
diff --git a/build_tools/third_party/sdl2/BUILD.overlay b/build_tools/third_party/sdl2/BUILD.overlay
deleted file mode 100644
index ba663f0..0000000
--- a/build_tools/third_party/sdl2/BUILD.overlay
+++ /dev/null
@@ -1,177 +0,0 @@
-# Copyright 2019 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      https://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-package(default_visibility = ["//visibility:public"])
-
-sdl_includes = ["include"]
-
-SDL_DEFAULT_SRC_EXCLUDES = [
-    # Ignore test files.
-    "src/test/*.c",
-    # Unfortunately, thread/generic does not contain any guards to
-    # prevent collisions against thread/pthread.
-    "src/thread/generic/*.c",
-    # Don't include Windows support.
-    "src/render/direct3d*/**",
-    "src/render/SDL_d3d*",
-    "src/haptic/windows/**",
-    "src/locale/windows/**",
-    "src/locale/winrt/**",
-    # Ignore Android and Emscripten locales
-    "src/locale/android/**",
-    "src/locale/emscripten/**",
-    # Remove support for QNX
-    "src/video/qnx/**",
-    # No dbus -> don't try to compile this file
-    "src/core/linux/SDL_fcitx.c",
-]
-
-sdl_sources = select({
-    "@bazel_tools//src/conditions:windows": glob(
-        include = [
-            "src/**/*.c",
-            "src/**/*.h",
-        ],
-        exclude = [
-            # Ignore test files
-            "src/test/*.c",
-            # Ignore Linux/Unix
-            "src/core/linux/**",
-            "src/core/unix/**",
-            # Ignore Android and Emscripten locales
-            "src/locale/android/**",
-            "src/locale/emscripten/**",
-            # Ignore thread (exclude for thread/windows)
-            "src/thread/**",
-            # Remove support for QNX
-            "src/video/qnx/**",
-        ],
-    ) + glob([
-        "src/thread/*",
-        "src/thread/windows/*",
-        "src/thread/generic/SDL_syscond.*",
-    ]),
-    "//conditions:default": glob(
-        include = [
-            "src/**/*.c",
-            "src/**/*.h",
-        ],
-        exclude = SDL_DEFAULT_SRC_EXCLUDES,
-    ),
-})
-
-sdl_headers = [
-    "include/begin_code.h",
-    "include/close_code.h",
-    "include/SDL.h",
-    "include/SDL_assert.h",
-    "include/SDL_atomic.h",
-    "include/SDL_audio.h",
-    "include/SDL_bits.h",
-    "include/SDL_blendmode.h",
-    "include/SDL_clipboard.h",
-    "include/SDL_config_minimal.h",
-    "include/SDL_cpuinfo.h",
-    "include/SDL_egl.h",
-    "include/SDL_endian.h",
-    "include/SDL_error.h",
-    "include/SDL_events.h",
-    "include/SDL_filesystem.h",
-    "include/SDL_gamecontroller.h",
-    "include/SDL_gesture.h",
-    "include/SDL_haptic.h",
-    "include/SDL_hints.h",
-    "include/SDL_joystick.h",
-    "include/SDL_keyboard.h",
-    "include/SDL_keycode.h",
-    "include/SDL_loadso.h",
-    "include/SDL_locale.h",
-    "include/SDL_log.h",
-    "include/SDL_main.h",
-    "include/SDL_messagebox.h",
-    "include/SDL_metal.h",
-    "include/SDL_mouse.h",
-    "include/SDL_mutex.h",
-    "include/SDL_name.h",
-    "include/SDL_opengl.h",
-    "include/SDL_opengl_glext.h",
-    "include/SDL_opengles.h",
-    "include/SDL_opengles2.h",
-    "include/SDL_pixels.h",
-    "include/SDL_platform.h",
-    "include/SDL_power.h",
-    "include/SDL_quit.h",
-    "include/SDL_rect.h",
-    "include/SDL_render.h",
-    "include/SDL_revision.h",
-    "include/SDL_rwops.h",
-    "include/SDL_scancode.h",
-    "include/SDL_sensor.h",
-    "include/SDL_shape.h",
-    "include/SDL_stdinc.h",
-    "include/SDL_surface.h",
-    "include/SDL_system.h",
-    "include/SDL_syswm.h",
-    "include/SDL_thread.h",
-    "include/SDL_timer.h",
-    "include/SDL_touch.h",
-    "include/SDL_version.h",
-    "include/SDL_video.h",
-    "include/SDL_vulkan.h",
-]
-
-sdl_copts = select({
-    "@bazel_tools//src/conditions:windows": [],
-    "//conditions:default": [
-        "-Wno-string-conversion",
-        "-pthread",
-        "-includestdio.h",  # Adds `#include <stdio.h>`, which some files need.
-    ],
-})
-
-sdl_linkopts = select({
-    "@bazel_tools//src/conditions:windows": [
-        "-DEFAULTLIB:user32",
-        "-DEFAULTLIB:gdi32",
-        "-DEFAULTLIB:winmm",
-        "-DEFAULTLIB:imm32",
-        "-DEFAULTLIB:ole32",
-        "-DEFAULTLIB:oleaut32",
-        "-DEFAULTLIB:version",
-        "-DEFAULTLIB:uuid",
-        "-DEFAULTLIB:shell32",
-        "-DEFAULTLIB:advapi32",
-        "-DEFAULTLIB:hid",
-        "-DEFAULTLIB:setupapi",
-    ],
-    "//conditions:default": [
-        "-ldl",
-        "-lrt",
-    ],
-})
-
-sdl_deps = [
-    "@sdl2_config//:headers",
-]
-
-cc_library(
-    name = "SDL2",
-    srcs = sdl_sources,
-    hdrs = sdl_headers,
-    copts = sdl_copts,
-    includes = sdl_includes,
-    linkopts = sdl_linkopts,
-    linkstatic = 1,
-    deps = sdl_deps,
-)
diff --git a/build_tools/third_party/sdl2/SDL_config.h b/build_tools/third_party/sdl2/SDL_config.h
deleted file mode 100644
index 8b2b893..0000000
--- a/build_tools/third_party/sdl2/SDL_config.h
+++ /dev/null
@@ -1,32 +0,0 @@
-#ifndef SDL_config_h_
-#define SDL_config_h_
-
-#include "SDL_platform.h"
-
-/**
- *  \file SDL_config.h
- */
-
-/* Add any platform that doesn't build using the configure system. */
-#if defined(__WIN32__)
-#include "SDL_config_windows.h"
-#elif defined(__MACOSX__)
-#include "SDL_config_macosx.h"
-#elif defined(__IPHONEOS__)
-#include "SDL_config_iphoneos.h"
-#elif defined(__ANDROID__)
-#include "SDL_config_android.h"
-#elif defined(__LINUX__)
-#include "SDL_config_linux.h"
-#elif defined(__EMSCRIPTEN__)
-#include "SDL_config_emscripten.h"
-#else
-/* This is a minimal configuration just to get SDL running on new platforms */
-#include "SDL_config_minimal.h"
-#endif /* platform config */
-
-#ifdef USING_GENERATED_CONFIG_H
-#error Wrong SDL_config.h, check your include path?
-#endif
-
-#endif /* SDL_config_h_ */
diff --git a/build_tools/third_party/sdl2/SDL_config_android.h b/build_tools/third_party/sdl2/SDL_config_android.h
deleted file mode 100644
index 8107d6c..0000000
--- a/build_tools/third_party/sdl2/SDL_config_android.h
+++ /dev/null
@@ -1,150 +0,0 @@
-#ifndef SDL_config_android_h_
-#define SDL_config_android_h_
-#define SDL_config_h_
-
-#include "SDL_platform.h"
-
-/**
- *  \file SDL_config_android.h
- *
- *  This is a configuration that can be used to build SDL for Android
- */
-
-#include <stdarg.h>
-
-#define HAVE_GCC_ATOMICS 1
-
-#define STDC_HEADERS 1
-#define HAVE_ALLOCA_H 1
-#define HAVE_CTYPE_H 1
-#define HAVE_INTTYPES_H 1
-#define HAVE_LIMITS_H 1
-#define HAVE_MATH_H 1
-#define HAVE_SIGNAL_H 1
-#define HAVE_STDINT_H 1
-#define HAVE_STDIO_H 1
-#define HAVE_STRING_H 1
-#define HAVE_SYS_TYPES_H 1
-
-/* C library functions */
-#define HAVE_MALLOC 1
-#define HAVE_CALLOC 1
-#define HAVE_REALLOC 1
-#define HAVE_FREE 1
-#define HAVE_ALLOCA 1
-#define HAVE_GETENV 1
-#define HAVE_SETENV 1
-#define HAVE_PUTENV 1
-#define HAVE_SETENV 1
-#define HAVE_UNSETENV 1
-#define HAVE_QSORT 1
-#define HAVE_ABS 1
-#define HAVE_BCOPY 1
-#define HAVE_MEMSET 1
-#define HAVE_MEMCPY 1
-#define HAVE_MEMMOVE 1
-#define HAVE_MEMCMP 1
-#define HAVE_STRLEN 1
-#define HAVE_STRLCPY 1
-#define HAVE_STRLCAT 1
-#define HAVE_STRCHR 1
-#define HAVE_STRRCHR 1
-#define HAVE_STRSTR 1
-#define HAVE_STRTOL 1
-#define HAVE_STRTOUL 1
-#define HAVE_STRTOLL 1
-#define HAVE_STRTOULL 1
-#define HAVE_STRTOD 1
-#define HAVE_ATOI 1
-#define HAVE_ATOF 1
-#define HAVE_STRCMP 1
-#define HAVE_STRNCMP 1
-#define HAVE_STRCASECMP 1
-#define HAVE_STRNCASECMP 1
-#define HAVE_VSSCANF 1
-#define HAVE_VSNPRINTF 1
-#define HAVE_ACOS 1
-#define HAVE_ACOSF 1
-#define HAVE_ASIN 1
-#define HAVE_ASINF 1
-#define HAVE_ATAN 1
-#define HAVE_ATANF 1
-#define HAVE_ATAN2 1
-#define HAVE_ATAN2F 1
-#define HAVE_CEIL 1
-#define HAVE_CEILF 1
-#define HAVE_COPYSIGN 1
-#define HAVE_COPYSIGNF 1
-#define HAVE_COS 1
-#define HAVE_COSF 1
-#define HAVE_FABS 1
-#define HAVE_FABSF 1
-#define HAVE_FLOOR 1
-#define HAVE_FLOORF 1
-#define HAVE_FMOD 1
-#define HAVE_FMODF 1
-#define HAVE_LOG 1
-#define HAVE_LOGF 1
-#define HAVE_LOG10 1
-#define HAVE_LOG10F 1
-#define HAVE_POW 1
-#define HAVE_POWF 1
-#define HAVE_SCALBN 1
-#define HAVE_SCALBNF 1
-#define HAVE_SIN 1
-#define HAVE_SINF 1
-#define HAVE_SQRT 1
-#define HAVE_SQRTF 1
-#define HAVE_TAN 1
-#define HAVE_TANF 1
-#define HAVE_SIGACTION 1
-#define HAVE_SETJMP 1
-#define HAVE_NANOSLEEP 1
-#define HAVE_SYSCONF 1
-#define HAVE_CLOCK_GETTIME 1
-
-#define SIZEOF_VOIDP 4
-
-/* Enable various audio drivers */
-#define SDL_AUDIO_DRIVER_ANDROID 1
-#define SDL_AUDIO_DRIVER_DUMMY 1
-
-/* Enable various input drivers */
-#define SDL_JOYSTICK_ANDROID 1
-#define SDL_HAPTIC_ANDROID 1
-
-/* Enable various shared object loading systems */
-#define SDL_LOADSO_DLOPEN 1
-
-/* Enable various threading systems */
-#define SDL_THREAD_PTHREAD 1
-#define SDL_THREAD_PTHREAD_RECURSIVE_MUTEX 1
-
-/* Enable various timer systems */
-#define SDL_TIMER_UNIX 1
-
-/* Enable various video drivers */
-#define SDL_VIDEO_DRIVER_ANDROID 1
-
-/* Enable OpenGL ES */
-#define SDL_VIDEO_OPENGL_ES 1
-#define SDL_VIDEO_OPENGL_ES2 1
-#define SDL_VIDEO_OPENGL_EGL 1
-#define SDL_VIDEO_RENDER_OGL_ES 1
-#define SDL_VIDEO_RENDER_OGL_ES2 1
-
-/* Enable Vulkan support */
-/* Android does not support Vulkan in native code using the "armeabi" ABI. */
-#if defined(__ARM_ARCH) && __ARM_ARCH < 7
-#define SDL_VIDEO_VULKAN 0
-#else
-#define SDL_VIDEO_VULKAN 1
-#endif
-
-/* Enable system power support */
-#define SDL_POWER_ANDROID 1
-
-/* Enable the filesystem driver */
-#define SDL_FILESYSTEM_ANDROID 1
-
-#endif /* SDL_config_android_h_ */
diff --git a/build_tools/third_party/sdl2/SDL_config_emscripten.h b/build_tools/third_party/sdl2/SDL_config_emscripten.h
deleted file mode 100644
index 53187d4..0000000
--- a/build_tools/third_party/sdl2/SDL_config_emscripten.h
+++ /dev/null
@@ -1,388 +0,0 @@
-#ifndef _SDL_config_emscripten_h
-#define _SDL_config_emscripten_h
-
-/**
- *  \file SDL_config_emscripten.h
- *
- *  This is a configuration that can be used to build SDL for Emscripten
- */
-
-/* General platform specific identifiers */
-#include "SDL_platform.h"
-
-/* Make sure that this isn't included by Visual C++ */
-#ifdef _MSC_VER
-#error You should run hg revert SDL_config.h
-#endif
-
-/* C language features */
-/* #undef const */
-/* #undef inline */
-/* #undef volatile */
-
-/* C datatypes */
-#ifdef __LP64__
-#define SIZEOF_VOIDP 8
-#else
-#define SIZEOF_VOIDP 4
-#endif
-#define HAVE_GCC_ATOMICS 1
-/* #undef HAVE_GCC_SYNC_LOCK_TEST_AND_SET */
-
-/* Comment this if you want to build without any C library requirements */
-#define HAVE_LIBC 1
-#if HAVE_LIBC
-
-/* Useful headers */
-#define STDC_HEADERS 1
-#define HAVE_ALLOCA_H 1
-#define HAVE_CTYPE_H 1
-#define HAVE_FLOAT_H 1
-#define HAVE_ICONV_H 1
-#define HAVE_INTTYPES_H 1
-#define HAVE_LIMITS_H 1
-#define HAVE_MALLOC_H 1
-#define HAVE_MATH_H 1
-#define HAVE_MEMORY_H 1
-#define HAVE_SIGNAL_H 1
-#define HAVE_STDARG_H 1
-#define HAVE_STDINT_H 1
-#define HAVE_STDIO_H 1
-#define HAVE_STDLIB_H 1
-#define HAVE_STRINGS_H 1
-#define HAVE_STRING_H 1
-#define HAVE_SYS_TYPES_H 1
-#define HAVE_WCHAR_H 1
-/* #undef HAVE_PTHREAD_NP_H */
-/* #undef HAVE_LIBUNWIND_H */
-
-/* C library functions */
-#define HAVE_MALLOC 1
-#define HAVE_CALLOC 1
-#define HAVE_REALLOC 1
-#define HAVE_FREE 1
-#define HAVE_ALLOCA 1
-#ifndef __WIN32__ /* Don't use C runtime versions of these on Windows */
-#define HAVE_GETENV 1
-#define HAVE_SETENV 1
-#define HAVE_PUTENV 1
-#define HAVE_UNSETENV 1
-#endif
-#define HAVE_QSORT 1
-#define HAVE_ABS 1
-#define HAVE_BCOPY 1
-#define HAVE_MEMSET 1
-#define HAVE_MEMCPY 1
-#define HAVE_MEMMOVE 1
-#define HAVE_MEMCMP 1
-#define HAVE_WCSLEN 1
-/* #undef HAVE_WCSLCPY */
-/* #undef HAVE_WCSLCAT */
-#define HAVE_WCSCMP 1
-#define HAVE_STRLEN 1
-/* #undef HAVE_STRLCPY */
-/* #undef HAVE_STRLCAT */
-/* #undef HAVE__STRREV */
-/* #undef HAVE__STRUPR */
-/* #undef HAVE__STRLWR */
-/* #undef HAVE_INDEX */
-/* #undef HAVE_RINDEX */
-#define HAVE_STRCHR 1
-#define HAVE_STRRCHR 1
-#define HAVE_STRSTR 1
-/* #undef HAVE_ITOA */
-/* #undef HAVE__LTOA */
-/* #undef HAVE__UITOA */
-/* #undef HAVE__ULTOA */
-#define HAVE_STRTOL 1
-#define HAVE_STRTOUL 1
-/* #undef HAVE__I64TOA */
-/* #undef HAVE__UI64TOA */
-#define HAVE_STRTOLL 1
-#define HAVE_STRTOULL 1
-#define HAVE_STRTOD 1
-#define HAVE_ATOI 1
-#define HAVE_ATOF 1
-#define HAVE_STRCMP 1
-#define HAVE_STRNCMP 1
-/* #undef HAVE__STRICMP */
-#define HAVE_STRCASECMP 1
-/* #undef HAVE__STRNICMP */
-#define HAVE_STRNCASECMP 1
-/* #undef HAVE_SSCANF */
-#define HAVE_VSSCANF 1
-/* #undef HAVE_SNPRINTF */
-#define HAVE_VSNPRINTF 1
-#define HAVE_M_PI /**/
-#define HAVE_ACOS 1
-#define HAVE_ACOSF 1
-#define HAVE_ASIN 1
-#define HAVE_ASINF 1
-#define HAVE_ATAN 1
-#define HAVE_ATANF 1
-#define HAVE_ATAN2 1
-#define HAVE_ATAN2F 1
-#define HAVE_CEIL 1
-#define HAVE_CEILF 1
-#define HAVE_COPYSIGN 1
-#define HAVE_COPYSIGNF 1
-#define HAVE_COS 1
-#define HAVE_COSF 1
-#define HAVE_FABS 1
-#define HAVE_FABSF 1
-#define HAVE_FLOOR 1
-#define HAVE_FLOORF 1
-#define HAVE_FMOD 1
-#define HAVE_FMODF 1
-#define HAVE_LOG 1
-#define HAVE_LOGF 1
-#define HAVE_LOG10 1
-#define HAVE_LOG10F 1
-#define HAVE_POW 1
-#define HAVE_POWF 1
-#define HAVE_SCALBN 1
-#define HAVE_SCALBNF 1
-#define HAVE_SIN 1
-#define HAVE_SINF 1
-#define HAVE_SQRT 1
-#define HAVE_SQRTF 1
-#define HAVE_TAN 1
-#define HAVE_TANF 1
-#define HAVE_FOPEN64 1
-#define HAVE_FSEEKO 1
-/* #undef HAVE_FSEEKO64 */
-#define HAVE_SIGACTION 1
-#define HAVE_SA_SIGACTION 1
-#define HAVE_SETJMP 1
-#define HAVE_NANOSLEEP 1
-#define HAVE_SYSCONF 1
-#define HAVE_SYSCTLBYNAME 1
-/* #undef HAVE_CLOCK_GETTIME */
-/* #undef HAVE_GETPAGESIZE */
-#define HAVE_MPROTECT 1
-#define HAVE_ICONV 1
-/* #undef HAVE_PTHREAD_SETNAME_NP */
-/* #undef HAVE_PTHREAD_SET_NAME_NP */
-/* #undef HAVE_SEM_TIMEDWAIT */
-/* #undef HAVE_GETAUXVAL */
-/* #undef HAVE_POLL */
-
-#else
-#define HAVE_STDARG_H 1
-#define HAVE_STDDEF_H 1
-#define HAVE_STDINT_H 1
-#endif /* HAVE_LIBC */
-
-/* #undef HAVE_ALTIVEC_H */
-/* #undef HAVE_LIBUDEV_H */
-/* #undef HAVE_DBUS_DBUS_H */
-/* #undef HAVE_IBUS_IBUS_H */
-/* #undef HAVE_FCITX_FRONTEND_H */
-/* #undef HAVE_IMMINTRIN_H */
-/* #undef HAVE_LIBSAMPLERATE_H */
-
-/* #undef HAVE_DDRAW_H */
-/* #undef HAVE_DINPUT_H */
-/* #undef HAVE_DSOUND_H */
-/* #undef HAVE_DXGI_H */
-/* #undef HAVE_XINPUT_H */
-/* #undef HAVE_XINPUT_GAMEPAD_EX */
-/* #undef HAVE_XINPUT_STATE_EX */
-
-/* SDL internal assertion support */
-/* #undef SDL_DEFAULT_ASSERT_LEVEL */
-
-/* Allow disabling of core subsystems */
-#define SDL_ATOMIC_DISABLED 1
-/* #undef SDL_AUDIO_DISABLED */
-#define SDL_CPUINFO_DISABLED 1
-/* #undef SDL_EVENTS_DISABLED */
-/* #undef SDL_FILE_DISABLED */
-/* #undef SDL_JOYSTICK_DISABLED */
-#define SDL_HAPTIC_DISABLED 1
-#define SDL_LOADSO_DISABLED 1
-/* #undef SDL_RENDER_DISABLED */
-#define SDL_THREADS_DISABLED 1
-/* #undef SDL_TIMERS_DISABLED */
-/* #undef SDL_VIDEO_DISABLED */
-/* #undef SDL_POWER_DISABLED */
-/* #undef SDL_FILESYSTEM_DISABLED */
-
-/* Enable various audio drivers */
-/* #undef SDL_AUDIO_DRIVER_ALSA */
-/* #undef SDL_AUDIO_DRIVER_ALSA_DYNAMIC */
-/* #undef SDL_AUDIO_DRIVER_ARTS */
-/* #undef SDL_AUDIO_DRIVER_ARTS_DYNAMIC */
-/* #undef SDL_AUDIO_DRIVER_COREAUDIO */
-#define SDL_AUDIO_DRIVER_DISK 1
-/* #undef SDL_AUDIO_DRIVER_DSOUND */
-#define SDL_AUDIO_DRIVER_DUMMY 1
-#define SDL_AUDIO_DRIVER_EMSCRIPTEN 1
-/* #undef SDL_AUDIO_DRIVER_ESD */
-/* #undef SDL_AUDIO_DRIVER_ESD_DYNAMIC */
-/* #undef SDL_AUDIO_DRIVER_FUSIONSOUND */
-/* #undef SDL_AUDIO_DRIVER_FUSIONSOUND_DYNAMIC */
-/* #undef SDL_AUDIO_DRIVER_HAIKU */
-/* #undef SDL_AUDIO_DRIVER_JACK */
-/* #undef SDL_AUDIO_DRIVER_JACK_DYNAMIC */
-/* #undef SDL_AUDIO_DRIVER_NACL */
-/* #undef SDL_AUDIO_DRIVER_NAS */
-/* #undef SDL_AUDIO_DRIVER_NAS_DYNAMIC */
-/* #undef SDL_AUDIO_DRIVER_NETBSD */
-/* #undef SDL_AUDIO_DRIVER_OSS 1 */
-/* #undef SDL_AUDIO_DRIVER_OSS_SOUNDCARD_H */
-/* #undef SDL_AUDIO_DRIVER_PAUDIO */
-/* #undef SDL_AUDIO_DRIVER_PULSEAUDIO */
-/* #undef SDL_AUDIO_DRIVER_QSA */
-/* #undef SDL_AUDIO_DRIVER_SNDIO */
-/* #undef SDL_AUDIO_DRIVER_SNDIO_DYNAMIC */
-/* #undef SDL_AUDIO_DRIVER_SUNAUDIO */
-/* #undef SDL_AUDIO_DRIVER_WASAPI */
-/* #undef SDL_AUDIO_DRIVER_WINMM */
-
-/* Enable various input drivers */
-/* #undef SDL_INPUT_LINUXEV */
-/* #undef SDL_INPUT_LINUXKD */
-/* #undef SDL_INPUT_TSLIB */
-/* #undef SDL_JOYSTICK_HAIKU */
-/* #undef SDL_JOYSTICK_DINPUT */
-/* #undef SDL_JOYSTICK_XINPUT */
-/* #undef SDL_JOYSTICK_DUMMY */
-/* #undef SDL_JOYSTICK_IOKIT */
-/* #undef SDL_JOYSTICK_LINUX */
-/* #undef SDL_JOYSTICK_ANDROID */
-/* #undef SDL_JOYSTICK_WINMM */
-/* #undef SDL_JOYSTICK_USBHID */
-/* #undef SDL_JOYSTICK_USBHID_MACHINE_JOYSTICK_H */
-#define SDL_JOYSTICK_EMSCRIPTEN 1
-/* #undef SDL_HAPTIC_DUMMY */
-/* #undef SDL_HAPTIC_ANDROID */
-/* #undef SDL_HAPTIC_LINUX */
-/* #undef SDL_HAPTIC_IOKIT */
-/* #undef SDL_HAPTIC_DINPUT */
-/* #undef SDL_HAPTIC_XINPUT */
-
-/* Enable various shared object loading systems */
-#define SDL_LOADSO_DLOPEN 1
-/* #undef SDL_LOADSO_DUMMY */
-/* #undef SDL_LOADSO_LDG */
-/* #undef SDL_LOADSO_WINDOWS */
-
-/* Enable various threading systems */
-/* #undef SDL_THREAD_PTHREAD */
-/* #undef SDL_THREAD_PTHREAD_RECURSIVE_MUTEX */
-/* #undef SDL_THREAD_PTHREAD_RECURSIVE_MUTEX_NP */
-/* #undef SDL_THREAD_WINDOWS */
-
-/* Enable various timer systems */
-/* #undef SDL_TIMER_HAIKU */
-/* #undef SDL_TIMER_DUMMY */
-#define SDL_TIMER_UNIX 1
-/* #undef SDL_TIMER_WINDOWS */
-
-/* Enable various video drivers */
-/* #undef SDL_VIDEO_DRIVER_HAIKU */
-/* #undef SDL_VIDEO_DRIVER_COCOA */
-/* #undef SDL_VIDEO_DRIVER_DIRECTFB */
-/* #undef SDL_VIDEO_DRIVER_DIRECTFB_DYNAMIC */
-#define SDL_VIDEO_DRIVER_DUMMY 1
-/* #undef SDL_VIDEO_DRIVER_WINDOWS */
-/* #undef SDL_VIDEO_DRIVER_WAYLAND */
-/* #undef SDL_VIDEO_DRIVER_WAYLAND_QT_TOUCH */
-/* #undef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC */
-/* #undef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_EGL */
-/* #undef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_CURSOR */
-/* #undef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_XKBCOMMON */
-/* #undef SDL_VIDEO_DRIVER_MIR */
-/* #undef SDL_VIDEO_DRIVER_MIR_DYNAMIC */
-/* #undef SDL_VIDEO_DRIVER_MIR_DYNAMIC_XKBCOMMON */
-/* #undef SDL_VIDEO_DRIVER_X11 */
-/* #undef SDL_VIDEO_DRIVER_RPI */
-/* #undef SDL_VIDEO_DRIVER_KMSDRM */
-/* #undef SDL_VIDEO_DRIVER_KMSDRM_DYNAMIC */
-/* #undef SDL_VIDEO_DRIVER_KMSDRM_DYNAMIC_GBM */
-/* #undef SDL_VIDEO_DRIVER_ANDROID */
-#define SDL_VIDEO_DRIVER_EMSCRIPTEN 1
-/* #undef SDL_VIDEO_DRIVER_X11_DYNAMIC */
-/* #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT */
-/* #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XCURSOR */
-/* #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XINERAMA */
-/* #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XINPUT2 */
-/* #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR */
-/* #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XSS */
-/* #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XVIDMODE */
-/* #undef SDL_VIDEO_DRIVER_X11_XCURSOR */
-/* #undef SDL_VIDEO_DRIVER_X11_XDBE */
-/* #undef SDL_VIDEO_DRIVER_X11_XINERAMA */
-/* #undef SDL_VIDEO_DRIVER_X11_XINPUT2 */
-/* #undef SDL_VIDEO_DRIVER_X11_XINPUT2_SUPPORTS_MULTITOUCH */
-/* #undef SDL_VIDEO_DRIVER_X11_XRANDR */
-/* #undef SDL_VIDEO_DRIVER_X11_XSCRNSAVER */
-/* #undef SDL_VIDEO_DRIVER_X11_XSHAPE */
-/* #undef SDL_VIDEO_DRIVER_X11_XVIDMODE */
-/* #undef SDL_VIDEO_DRIVER_X11_SUPPORTS_GENERIC_EVENTS */
-/* #undef SDL_VIDEO_DRIVER_X11_CONST_PARAM_XEXTADDDISPLAY */
-/* #undef SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM */
-/* #undef SDL_VIDEO_DRIVER_NACL */
-/* #undef SDL_VIDEO_DRIVER_VIVANTE */
-/* #undef SDL_VIDEO_DRIVER_VIVANTE_VDK */
-/* #undef SDL_VIDEO_DRIVER_QNX */
-/* #undef SDL_VIDEO_DRIVER_HEADLESS */
-
-/* #undef SDL_VIDEO_RENDER_D3D */
-/* #undef SDL_VIDEO_RENDER_D3D11 */
-/* #undef SDL_VIDEO_RENDER_OGL */
-/* #undef SDL_VIDEO_RENDER_OGL_ES */
-#define SDL_VIDEO_RENDER_OGL_ES2 1
-/* #undef SDL_VIDEO_RENDER_DIRECTFB */
-/* #undef SDL_VIDEO_RENDER_METAL */
-
-/* Enable OpenGL support */
-/* #undef SDL_VIDEO_OPENGL */
-/* #undef SDL_VIDEO_OPENGL_ES */
-#define SDL_VIDEO_OPENGL_ES2 1
-/* #undef SDL_VIDEO_OPENGL_BGL */
-/* #undef SDL_VIDEO_OPENGL_CGL */
-#define SDL_VIDEO_OPENGL_EGL 1
-/* #undef SDL_VIDEO_OPENGL_GLX */
-/* #undef SDL_VIDEO_OPENGL_OSMESA */
-/* #undef SDL_VIDEO_OPENGL_WGL */
-/* #undef SDL_VIDEO_OPENGL_OSMESA */
-/* #undef SDL_VIDEO_OPENGL_OSMESA_DYNAMIC */
-
-/* Enable Vulkan support */
-/* #undef SDL_VIDEO_VULKAN */
-
-/* Enable system power support */
-/* #undef SDL_POWER_LINUX */
-/* #undef SDL_POWER_WINDOWS */
-/* #undef SDL_POWER_MACOSX */
-/* #undef SDL_POWER_HAIKU */
-/* #undef SDL_POWER_ANDROID */
-#define SDL_POWER_EMSCRIPTEN 1
-/* #undef SDL_POWER_HARDWIRED */
-
-/* Enable system filesystem support */
-/* #undef SDL_FILESYSTEM_HAIKU */
-/* #undef SDL_FILESYSTEM_COCOA */
-/* #undef SDL_FILESYSTEM_DUMMY */
-/* #undef SDL_FILESYSTEM_UNIX */
-/* #undef SDL_FILESYSTEM_WINDOWS */
-/* #undef SDL_FILESYSTEM_NACL */
-/* #undef SDL_FILESYSTEM_ANDROID */
-#define SDL_FILESYSTEM_EMSCRIPTEN 1
-
-/* Enable assembly routines */
-/* #undef SDL_ASSEMBLY_ROUTINES */
-/* #undef SDL_ALTIVEC_BLITTERS */
-
-/* Enable ime support */
-/* #undef SDL_USE_IME */
-
-/* Enable dynamic udev support */
-/* #undef SDL_UDEV_DYNAMIC */
-
-/* Enable dynamic libsamplerate support */
-/* #undef SDL_LIBSAMPLERATE_DYNAMIC */
-
-#endif /* _SDL_config_emscripten_h */
diff --git a/build_tools/third_party/sdl2/SDL_config_linux.h b/build_tools/third_party/sdl2/SDL_config_linux.h
deleted file mode 100644
index 60e324f..0000000
--- a/build_tools/third_party/sdl2/SDL_config_linux.h
+++ /dev/null
@@ -1,405 +0,0 @@
-#ifndef SDL_config_linux_h
-#define SDL_config_linux_h
-#define SDL_config_h_
-
-/**
- *  \file SDL_config_linux.h
- *
- *  This is a configuration that can be used to build SDL for Linux
- */
-
-/* General platform specific identifiers */
-#include "SDL_platform.h"
-
-/* Make sure that this isn't included by Visual C++ */
-#ifdef _MSC_VER
-#error You should run hg revert SDL_config.h
-#endif
-
-/* C language features */
-/* #undef const */
-/* #undef inline */
-/* #undef volatile */
-
-/* C datatypes */
-#ifdef __LP64__
-#define SIZEOF_VOIDP 8
-#else
-#define SIZEOF_VOIDP 4
-#endif
-#define HAVE_GCC_ATOMICS 1
-/* #undef HAVE_GCC_SYNC_LOCK_TEST_AND_SET */
-
-/* Comment this if you want to build without any C library requirements */
-#define HAVE_LIBC 1
-#if HAVE_LIBC
-
-/* Useful headers */
-#define STDC_HEADERS 1
-#define HAVE_ALLOCA_H 1
-#define HAVE_CTYPE_H 1
-#define HAVE_FLOAT_H 1
-#define HAVE_ICONV_H 1
-#define HAVE_INTTYPES_H 1
-#define HAVE_LIMITS_H 1
-#define HAVE_MALLOC_H 1
-#define HAVE_MATH_H 1
-#define HAVE_MEMORY_H 1
-#define HAVE_SIGNAL_H 1
-#define HAVE_STDARG_H 1
-#define HAVE_STDINT_H 1
-#define HAVE_STDIO_H 1
-#define HAVE_STDLIB_H 1
-#define HAVE_STRINGS_H 1
-#define HAVE_STRING_H 1
-#define HAVE_SYS_TYPES_H 1
-#define HAVE_WCHAR_H 1
-/* #undef HAVE_PTHREAD_NP_H */
-/* #undef HAVE_LIBUNWIND_H */
-
-/* C library functions */
-#define HAVE_MALLOC 1
-#define HAVE_CALLOC 1
-#define HAVE_REALLOC 1
-#define HAVE_FREE 1
-#define HAVE_ALLOCA 1
-#ifndef __WIN32__ /* Don't use C runtime versions of these on Windows */
-#define HAVE_GETENV 1
-#define HAVE_SETENV 1
-#define HAVE_PUTENV 1
-#define HAVE_UNSETENV 1
-#endif
-#define HAVE_QSORT 1
-#define HAVE_ABS 1
-#define HAVE_BCOPY 1
-#define HAVE_MEMSET 1
-#define HAVE_MEMCPY 1
-#define HAVE_MEMMOVE 1
-#define HAVE_MEMCMP 1
-#define HAVE_WCSLEN 1
-/* #undef HAVE_WCSLCPY */
-/* #undef HAVE_WCSLCAT */
-#define HAVE_WCSCMP 1
-#define HAVE_STRLEN 1
-/* #undef HAVE_STRLCPY */
-/* #undef HAVE_STRLCAT */
-/* #undef HAVE__STRREV */
-/* #undef HAVE__STRUPR */
-/* #undef HAVE__STRLWR */
-/* #undef HAVE_INDEX */
-/* #undef HAVE_RINDEX */
-#define HAVE_STRCHR 1
-#define HAVE_STRRCHR 1
-#define HAVE_STRSTR 1
-/* #undef HAVE_ITOA */
-/* #undef HAVE__LTOA */
-/* #undef HAVE__UITOA */
-/* #undef HAVE__ULTOA */
-#define HAVE_STRTOL 1
-#define HAVE_STRTOUL 1
-/* #undef HAVE__I64TOA */
-/* #undef HAVE__UI64TOA */
-#define HAVE_STRTOLL 1
-#define HAVE_STRTOULL 1
-#define HAVE_STRTOD 1
-#define HAVE_ATOI 1
-#define HAVE_ATOF 1
-#define HAVE_STRCMP 1
-#define HAVE_STRNCMP 1
-/* #undef HAVE__STRICMP */
-#define HAVE_STRCASECMP 1
-/* #undef HAVE__STRNICMP */
-#define HAVE_STRNCASECMP 1
-/* #undef HAVE_SSCANF */
-#define HAVE_VSSCANF 1
-/* #undef HAVE_SNPRINTF */
-#define HAVE_VSNPRINTF 1
-#define HAVE_M_PI /**/
-#define HAVE_ACOS 1
-#define HAVE_ACOSF 1
-#define HAVE_ASIN 1
-#define HAVE_ASINF 1
-#define HAVE_ATAN 1
-#define HAVE_ATANF 1
-#define HAVE_ATAN2 1
-#define HAVE_ATAN2F 1
-#define HAVE_CEIL 1
-#define HAVE_CEILF 1
-#define HAVE_COPYSIGN 1
-#define HAVE_COPYSIGNF 1
-#define HAVE_COS 1
-#define HAVE_COSF 1
-#define HAVE_EXP 1
-#define HAVE_EXPF 1
-#define HAVE_FABS 1
-#define HAVE_FABSF 1
-#define HAVE_FLOOR 1
-#define HAVE_FLOORF 1
-#define HAVE_FMOD 1
-#define HAVE_FMODF 1
-#define HAVE_LOG 1
-#define HAVE_LOGF 1
-#define HAVE_LOG10 1
-#define HAVE_LOG10F 1
-#define HAVE_POW 1
-#define HAVE_POWF 1
-#define HAVE_SCALBN 1
-#define HAVE_SCALBNF 1
-#define HAVE_SIN 1
-#define HAVE_SINF 1
-#define HAVE_SQRT 1
-#define HAVE_SQRTF 1
-#define HAVE_TAN 1
-#define HAVE_TANF 1
-/* #define HAVE_FOPEN64 1 */
-#define HAVE_FSEEKO 1
-/* #define HAVE_FSEEKO64 1 */
-#define HAVE_SIGACTION 1
-#define HAVE_SA_SIGACTION 1
-#define HAVE_SETJMP 1
-#define HAVE_NANOSLEEP 1
-#define HAVE_SYSCONF 1
-/* #undef HAVE_SYSCTLBYNAME */
-#define HAVE_CLOCK_GETTIME 1
-/* #undef HAVE_GETPAGESIZE */
-#define HAVE_MPROTECT 1
-#define HAVE_ICONV 1
-#define HAVE_PTHREAD_SETNAME_NP 1
-/* #undef HAVE_PTHREAD_SET_NAME_NP */
-#define HAVE_SEM_TIMEDWAIT 1
-#define HAVE_GETAUXVAL 1
-#define HAVE_POLL 1
-#define HAVE__EXIT 1
-
-#else
-#define HAVE_STDARG_H 1
-#define HAVE_STDDEF_H 1
-#define HAVE_STDINT_H 1
-#endif /* HAVE_LIBC */
-
-/* #undef HAVE_ALTIVEC_H */
-/* #define HAVE_DBUS_DBUS_H 1 */
-/* #undef HAVE_FCITX_FRONTEND_H */
-/* #define HAVE_IBUS_IBUS_H 1 */
-#define HAVE_IMMINTRIN_H 1
-/* #undef HAVE_LIBSAMPLERATE_H */
-#define HAVE_LIBUDEV_H 1
-
-/* #undef HAVE_DDRAW_H */
-/* #undef HAVE_DINPUT_H */
-/* #undef HAVE_DSOUND_H */
-/* #undef HAVE_DXGI_H */
-/* #undef HAVE_XINPUT_H */
-/* #undef HAVE_MMDEVICEAPI_H */
-/* #undef HAVE_AUDIOCLIENT_H */
-/* #undef HAVE_XINPUT_GAMEPAD_EX */
-/* #undef HAVE_XINPUT_STATE_EX */
-
-/* SDL internal assertion support */
-/* #undef SDL_DEFAULT_ASSERT_LEVEL */
-
-/* Allow disabling of core subsystems */
-/* #undef SDL_ATOMIC_DISABLED */
-/* #undef SDL_AUDIO_DISABLED */
-/* #undef SDL_CPUINFO_DISABLED */
-/* #undef SDL_EVENTS_DISABLED */
-/* #undef SDL_FILE_DISABLED */
-/* #undef SDL_JOYSTICK_DISABLED */
-/* #undef SDL_HAPTIC_DISABLED */
-/* #undef SDL_SENSOR_DISABLED */
-/* #undef SDL_LOADSO_DISABLED */
-/* #undef SDL_RENDER_DISABLED */
-/* #undef SDL_THREADS_DISABLED */
-/* #undef SDL_TIMERS_DISABLED */
-/* #undef SDL_VIDEO_DISABLED */
-/* #undef SDL_POWER_DISABLED */
-/* #undef SDL_FILESYSTEM_DISABLED */
-
-/* Enable various audio drivers */
-#define SDL_AUDIO_DRIVER_ALSA 1
-#define SDL_AUDIO_DRIVER_ALSA_DYNAMIC "libasound.so.2"
-/* #undef SDL_AUDIO_DRIVER_ANDROID */
-/* #undef SDL_AUDIO_DRIVER_ARTS */
-/* #undef SDL_AUDIO_DRIVER_ARTS_DYNAMIC */
-/* #undef SDL_AUDIO_DRIVER_COREAUDIO */
-#define SDL_AUDIO_DRIVER_DISK 1
-/* #undef SDL_AUDIO_DRIVER_DSOUND */
-#define SDL_AUDIO_DRIVER_DUMMY 1
-/* #undef SDL_AUDIO_DRIVER_EMSCRIPTEN */
-/* #undef SDL_AUDIO_DRIVER_ESD */
-/* #undef SDL_AUDIO_DRIVER_ESD_DYNAMIC */
-/* #undef SDL_AUDIO_DRIVER_FUSIONSOUND */
-/* #undef SDL_AUDIO_DRIVER_FUSIONSOUND_DYNAMIC */
-/* #undef SDL_AUDIO_DRIVER_HAIKU */
-/* #undef SDL_AUDIO_DRIVER_JACK */
-/* #undef SDL_AUDIO_DRIVER_JACK_DYNAMIC */
-/* #undef SDL_AUDIO_DRIVER_NACL */
-/* #undef SDL_AUDIO_DRIVER_NAS */
-/* #undef SDL_AUDIO_DRIVER_NAS_DYNAMIC */
-/* #undef SDL_AUDIO_DRIVER_NETBSD */
-#define SDL_AUDIO_DRIVER_OSS 1
-/* #undef SDL_AUDIO_DRIVER_OSS_SOUNDCARD_H */
-/* #undef SDL_AUDIO_DRIVER_PAUDIO */
-#define SDL_AUDIO_DRIVER_PULSEAUDIO 1
-#define SDL_AUDIO_DRIVER_PULSEAUDIO_DYNAMIC "libpulse-simple.so.0"
-/* #undef SDL_AUDIO_DRIVER_QSA */
-#define SDL_AUDIO_DRIVER_SNDIO 1
-#define SDL_AUDIO_DRIVER_SNDIO_DYNAMIC "libsndio.so.7.0"
-/* #undef SDL_AUDIO_DRIVER_SUNAUDIO */
-/* #undef SDL_AUDIO_DRIVER_WASAPI */
-/* #undef SDL_AUDIO_DRIVER_WINMM */
-
-/* Enable various input drivers */
-#define SDL_INPUT_LINUXEV 1
-#define SDL_INPUT_LINUXKD 1
-/* #undef SDL_INPUT_TSLIB */
-/* #undef SDL_JOYSTICK_HAIKU */
-/* #undef SDL_JOYSTICK_DINPUT */
-/* #undef SDL_JOYSTICK_XINPUT */
-/* #undef SDL_JOYSTICK_DUMMY */
-/* #undef SDL_JOYSTICK_IOKIT */
-#define SDL_JOYSTICK_LINUX 1
-/* #undef SDL_JOYSTICK_ANDROID */
-/* #undef SDL_JOYSTICK_WINMM */
-/* #undef SDL_JOYSTICK_USBHID */
-/* #undef SDL_JOYSTICK_USBHID_MACHINE_JOYSTICK_H */
-/* #undef SDL_JOYSTICK_HIDAPI */
-/* #undef SDL_JOYSTICK_EMSCRIPTEN */
-/* #undef SDL_HAPTIC_DUMMY */
-/* #undef SDL_HAPTIC_ANDROID */
-#define SDL_HAPTIC_LINUX 1
-/* #undef SDL_HAPTIC_IOKIT */
-/* #undef SDL_HAPTIC_DINPUT */
-/* #undef SDL_HAPTIC_XINPUT */
-
-/* Enable various sensor drivers */
-/* #undef SDL_SENSOR_ANDROID */
-#define SDL_SENSOR_DUMMY 1
-
-/* Enable various shared object loading systems */
-#define SDL_LOADSO_DLOPEN 1
-/* #undef SDL_LOADSO_DUMMY */
-/* #undef SDL_LOADSO_LDG */
-/* #undef SDL_LOADSO_WINDOWS */
-
-/* Enable various threading systems */
-#define SDL_THREAD_PTHREAD 1
-#define SDL_THREAD_PTHREAD_RECURSIVE_MUTEX 1
-/* #undef SDL_THREAD_PTHREAD_RECURSIVE_MUTEX_NP */
-/* #undef SDL_THREAD_WINDOWS */
-
-/* Enable various timer systems */
-/* #undef SDL_TIMER_HAIKU */
-/* #undef SDL_TIMER_DUMMY */
-#define SDL_TIMER_UNIX 1
-/* #undef SDL_TIMER_WINDOWS */
-
-/* Enable various video drivers */
-/* #undef SDL_VIDEO_DRIVER_HAIKU */
-/* #undef SDL_VIDEO_DRIVER_COCOA */
-/* #undef SDL_VIDEO_DRIVER_DIRECTFB */
-/* #undef SDL_VIDEO_DRIVER_DIRECTFB_DYNAMIC */
-#define SDL_VIDEO_DRIVER_DUMMY 1
-/* #undef SDL_VIDEO_DRIVER_WINDOWS */
-/* #undef SDL_VIDEO_DRIVER_WAYLAND */
-/* #undef SDL_VIDEO_DRIVER_WAYLAND_QT_TOUCH */
-/* #undef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC */
-/* #undef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_EGL */
-/* #undef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_CURSOR */
-/* #undef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_XKBCOMMON */
-#define SDL_VIDEO_DRIVER_X11 1
-/* #undef SDL_VIDEO_DRIVER_RPI */
-/* #undef SDL_VIDEO_DRIVER_KMSDRM */
-/* #undef SDL_VIDEO_DRIVER_KMSDRM_DYNAMIC */
-/* #undef SDL_VIDEO_DRIVER_KMSDRM_DYNAMIC_GBM */
-/* #undef SDL_VIDEO_DRIVER_ANDROID */
-/* #undef SDL_VIDEO_DRIVER_EMSCRIPTEN */
-#define SDL_VIDEO_DRIVER_X11_DYNAMIC "libX11.so.6"
-#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT "libXext.so.6"
-#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XCURSOR "libXcursor.so.1"
-#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XINERAMA "libXinerama.so.1"
-#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XINPUT2 "libXi.so.6"
-#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR "libXrandr.so.2"
-#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XSS "libXss.so.1"
-#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XVIDMODE "libXxf86vm.so.1"
-#define SDL_VIDEO_DRIVER_X11_XCURSOR 1
-#define SDL_VIDEO_DRIVER_X11_XDBE 1
-#define SDL_VIDEO_DRIVER_X11_XINERAMA 1
-#define SDL_VIDEO_DRIVER_X11_XINPUT2 1
-#define SDL_VIDEO_DRIVER_X11_XINPUT2_SUPPORTS_MULTITOUCH 1
-#define SDL_VIDEO_DRIVER_X11_XRANDR 1
-#define SDL_VIDEO_DRIVER_X11_XSCRNSAVER 1
-#define SDL_VIDEO_DRIVER_X11_XSHAPE 1
-#define SDL_VIDEO_DRIVER_X11_XVIDMODE 1
-#define SDL_VIDEO_DRIVER_X11_SUPPORTS_GENERIC_EVENTS 1
-#define SDL_VIDEO_DRIVER_X11_CONST_PARAM_XEXTADDDISPLAY 1
-#define SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM 1
-/* #undef SDL_VIDEO_DRIVER_NACL */
-/* #undef SDL_VIDEO_DRIVER_VIVANTE */
-/* #undef SDL_VIDEO_DRIVER_VIVANTE_VDK */
-/* #undef SDL_VIDEO_DRIVER_QNX */
-
-/* #undef SDL_VIDEO_RENDER_D3D */
-/* #undef SDL_VIDEO_RENDER_D3D11 */
-#define SDL_VIDEO_RENDER_OGL 1
-/* #undef SDL_VIDEO_RENDER_OGL_ES */
-#define SDL_VIDEO_RENDER_OGL_ES2 1
-/* #undef SDL_VIDEO_RENDER_DIRECTFB */
-/* #undef SDL_VIDEO_RENDER_METAL */
-
-/* Enable OpenGL support */
-#define SDL_VIDEO_OPENGL 1
-/* #undef SDL_VIDEO_OPENGL_ES */
-#define SDL_VIDEO_OPENGL_ES2 1
-/* #undef SDL_VIDEO_OPENGL_BGL */
-/* #undef SDL_VIDEO_OPENGL_CGL */
-#define SDL_VIDEO_OPENGL_EGL 1
-#define SDL_VIDEO_OPENGL_GLX 1
-/* #undef SDL_VIDEO_OPENGL_WGL */
-/* #undef SDL_VIDEO_OPENGL_OSMESA */
-/* #undef SDL_VIDEO_OPENGL_OSMESA_DYNAMIC */
-
-/* Enable Vulkan support */
-#define SDL_VIDEO_VULKAN 1
-
-/* Enable Metal support */
-/* #undef SDL_VIDEO_METAL */
-
-/* Enable system power support */
-#define SDL_POWER_LINUX 1
-/* #undef SDL_POWER_WINDOWS */
-/* #undef SDL_POWER_MACOSX */
-/* #undef SDL_POWER_HAIKU */
-/* #undef SDL_POWER_ANDROID */
-/* #undef SDL_POWER_EMSCRIPTEN */
-/* #undef SDL_POWER_HARDWIRED */
-
-/* Enable system filesystem support */
-/* #undef SDL_FILESYSTEM_HAIKU */
-/* #undef SDL_FILESYSTEM_COCOA */
-/* #undef SDL_FILESYSTEM_DUMMY */
-#define SDL_FILESYSTEM_UNIX 1
-/* #undef SDL_FILESYSTEM_WINDOWS */
-/* #undef SDL_FILESYSTEM_NACL */
-/* #undef SDL_FILESYSTEM_ANDROID */
-/* #undef SDL_FILESYSTEM_EMSCRIPTEN */
-
-/* Enable assembly routines */
-#define SDL_ASSEMBLY_ROUTINES 1
-/* #undef SDL_ALTIVEC_BLITTERS */
-/* #undef SDL_ARM_SIMD_BLITTERS */
-/* #undef SDL_ARM_NEON_BLITTERS */
-
-/* Enable ime support */
-#define SDL_USE_IME 1
-
-/* Enable dynamic udev support */
-#define SDL_UDEV_DYNAMIC "libudev.so.1"
-
-/* Enable dynamic libusb support */
-/* #undef SDL_LIBUSB_DYNAMIC */
-
-/* Enable dynamic libsamplerate support */
-/* #undef SDL_LIBSAMPLERATE_DYNAMIC */
-
-#endif /* SDL_config_linux_h */
diff --git a/build_tools/third_party/sdl2/SDL_config_macosx.h b/build_tools/third_party/sdl2/SDL_config_macosx.h
deleted file mode 100644
index 2fdcf73..0000000
--- a/build_tools/third_party/sdl2/SDL_config_macosx.h
+++ /dev/null
@@ -1,215 +0,0 @@
-#ifndef SDL_config_macosx_h_
-#define SDL_config_macosx_h_
-#define SDL_config_h_
-
-#include "SDL_platform.h"
-
-/* This gets us MAC_OS_X_VERSION_MIN_REQUIRED... */
-#include <AvailabilityMacros.h>
-
-/* This is a set of defines to configure the SDL features */
-
-#ifdef __LP64__
-#define SIZEOF_VOIDP 8
-#else
-#define SIZEOF_VOIDP 4
-#endif
-
-/* Useful headers */
-#define STDC_HEADERS 1
-#define HAVE_ALLOCA_H 1
-#define HAVE_CTYPE_H 1
-#define HAVE_FLOAT_H 1
-#define HAVE_INTTYPES_H 1
-#define HAVE_LIMITS_H 1
-#define HAVE_MATH_H 1
-#define HAVE_SIGNAL_H 1
-#define HAVE_STDINT_H 1
-#define HAVE_STDIO_H 1
-#define HAVE_STRING_H 1
-#define HAVE_SYS_TYPES_H 1
-#define HAVE_LIBUNWIND_H 1
-
-/* C library functions */
-#define HAVE_MALLOC 1
-#define HAVE_CALLOC 1
-#define HAVE_REALLOC 1
-#define HAVE_FREE 1
-#define HAVE_ALLOCA 1
-#define HAVE_GETENV 1
-#define HAVE_SETENV 1
-#define HAVE_PUTENV 1
-#define HAVE_UNSETENV 1
-#define HAVE_QSORT 1
-#define HAVE_ABS 1
-#define HAVE_BCOPY 1
-#define HAVE_MEMSET 1
-#define HAVE_MEMCPY 1
-#define HAVE_MEMMOVE 1
-#define HAVE_MEMCMP 1
-#define HAVE_STRLEN 1
-#define HAVE_STRLCPY 1
-#define HAVE_STRLCAT 1
-#define HAVE_STRCHR 1
-#define HAVE_STRRCHR 1
-#define HAVE_STRSTR 1
-#define HAVE_STRTOL 1
-#define HAVE_STRTOUL 1
-#define HAVE_STRTOLL 1
-#define HAVE_STRTOULL 1
-#define HAVE_STRTOD 1
-#define HAVE_ATOI 1
-#define HAVE_ATOF 1
-#define HAVE_STRCMP 1
-#define HAVE_STRNCMP 1
-#define HAVE_STRCASECMP 1
-#define HAVE_STRNCASECMP 1
-#define HAVE_VSSCANF 1
-#define HAVE_VSNPRINTF 1
-#define HAVE_M_PI 1
-#define HAVE_ACOS 1
-#define HAVE_ACOSF 1
-#define HAVE_ASIN 1
-#define HAVE_ASINF 1
-#define HAVE_ATAN 1
-#define HAVE_ATANF 1
-#define HAVE_ATAN2 1
-#define HAVE_ATAN2F 1
-#define HAVE_CEIL 1
-#define HAVE_CEILF 1
-#define HAVE_COPYSIGN 1
-#define HAVE_COPYSIGNF 1
-#define HAVE_COS 1
-#define HAVE_COSF 1
-#define HAVE_FABS 1
-#define HAVE_FABSF 1
-#define HAVE_FLOOR 1
-#define HAVE_FLOORF 1
-#define HAVE_FMOD 1
-#define HAVE_FMODF 1
-#define HAVE_LOG 1
-#define HAVE_LOGF 1
-#define HAVE_LOG10 1
-#define HAVE_LOG10F 1
-#define HAVE_POW 1
-#define HAVE_POWF 1
-#define HAVE_SCALBN 1
-#define HAVE_SCALBNF 1
-#define HAVE_SIN 1
-#define HAVE_SINF 1
-#define HAVE_SQRT 1
-#define HAVE_SQRTF 1
-#define HAVE_TAN 1
-#define HAVE_TANF 1
-#define HAVE_SIGACTION 1
-#define HAVE_SETJMP 1
-#define HAVE_NANOSLEEP 1
-#define HAVE_SYSCONF 1
-#define HAVE_SYSCTLBYNAME 1
-
-/* Enable various audio drivers */
-#define SDL_AUDIO_DRIVER_COREAUDIO 1
-#define SDL_AUDIO_DRIVER_DISK 1
-#define SDL_AUDIO_DRIVER_DUMMY 1
-
-/* Enable various input drivers */
-#define SDL_JOYSTICK_IOKIT 1
-#define SDL_HAPTIC_IOKIT 1
-
-/* Enable various shared object loading systems */
-#define SDL_LOADSO_DLOPEN 1
-
-/* Enable various threading systems */
-#define SDL_THREAD_PTHREAD 1
-#define SDL_THREAD_PTHREAD_RECURSIVE_MUTEX 1
-
-/* Enable various timer systems */
-#define SDL_TIMER_UNIX 1
-
-/* Enable various video drivers */
-#define SDL_VIDEO_DRIVER_COCOA 1
-#define SDL_VIDEO_DRIVER_DUMMY 1
-#undef SDL_VIDEO_DRIVER_X11
-#define SDL_VIDEO_DRIVER_X11_DYNAMIC "/usr/X11R6/lib/libX11.6.dylib"
-#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT "/usr/X11R6/lib/libXext.6.dylib"
-#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XINERAMA \
-  "/usr/X11R6/lib/libXinerama.1.dylib"
-#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XINPUT2 "/usr/X11R6/lib/libXi.6.dylib"
-#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR "/usr/X11R6/lib/libXrandr.2.dylib"
-#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XSS "/usr/X11R6/lib/libXss.1.dylib"
-#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XVIDMODE \
-  "/usr/X11R6/lib/libXxf86vm.1.dylib"
-#define SDL_VIDEO_DRIVER_X11_XDBE 1
-#define SDL_VIDEO_DRIVER_X11_XINERAMA 1
-#define SDL_VIDEO_DRIVER_X11_XRANDR 1
-#define SDL_VIDEO_DRIVER_X11_XSCRNSAVER 1
-#define SDL_VIDEO_DRIVER_X11_XSHAPE 1
-#define SDL_VIDEO_DRIVER_X11_XVIDMODE 1
-#define SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM 1
-
-#ifdef MAC_OS_X_VERSION_10_8
-/*
- * No matter the versions targeted, this is the 10.8 or later SDK, so you have
- *  to use the external Xquartz, which is a more modern Xlib. Previous SDKs
- *  used an older Xlib.
- */
-#define SDL_VIDEO_DRIVER_X11_XINPUT2 1
-#define SDL_VIDEO_DRIVER_X11_SUPPORTS_GENERIC_EVENTS 1
-#define SDL_VIDEO_DRIVER_X11_CONST_PARAM_XEXTADDDISPLAY 1
-#endif
-
-#ifndef SDL_VIDEO_RENDER_OGL
-#define SDL_VIDEO_RENDER_OGL 1
-#endif
-
-/*#ifndef SDL_VIDEO_RENDER_OGL_ES2*/
-/*#define SDL_VIDEO_RENDER_OGL_ES2 1*/
-/*#endif*/
-
-/*#ifndef SDL_VIDEO_RENDER_METAL*/
-/* Metal only supported on 64-bit architectures with 10.11+ */
-/*#if TARGET_CPU_X86_64 && (MAC_OS_X_VERSION_MAX_ALLOWED >= 101100)*/
-/*#define SDL_VIDEO_RENDER_METAL    1*/
-/*#else*/
-/*#define SDL_VIDEO_RENDER_METAL    0*/
-/*#endif*/
-/*#endif*/
-
-/* Enable OpenGL support */
-#ifndef SDL_VIDEO_OPENGL
-#define SDL_VIDEO_OPENGL 1
-#endif
-/*#ifndef SDL_VIDEO_OPENGL_ES2*/
-/*#define SDL_VIDEO_OPENGL_ES2    1*/
-/*#endif*/
-/*#ifndef SDL_VIDEO_OPENGL_EGL*/
-/*#define SDL_VIDEO_OPENGL_EGL    1*/
-/*#endif*/
-#ifndef SDL_VIDEO_OPENGL_CGL
-#define SDL_VIDEO_OPENGL_CGL 1
-#endif
-#ifndef SDL_VIDEO_OPENGL_GLX
-#define SDL_VIDEO_OPENGL_GLX 1
-#endif
-
-/* Enable Vulkan support */
-/* Metal/MoltenVK/Vulkan only supported on 64-bit architectures with 10.11+ */
-#if TARGET_CPU_X86_64 && (MAC_OS_X_VERSION_MAX_ALLOWED >= 101100)
-#define SDL_VIDEO_VULKAN 1
-#else
-#define SDL_VIDEO_VULKAN 0
-#endif
-
-/* Enable system power support */
-#define SDL_POWER_MACOSX 1
-
-/* enable filesystem support */
-#define SDL_FILESYSTEM_COCOA 1
-
-/* Enable assembly routines */
-#define SDL_ASSEMBLY_ROUTINES 1
-#ifdef __ppc__
-#define SDL_ALTIVEC_BLITTERS 1
-#endif
-
-#endif /* SDL_config_macosx_h_ */
diff --git a/build_tools/third_party/sdl2/SDL_config_minimal.h b/build_tools/third_party/sdl2/SDL_config_minimal.h
deleted file mode 100644
index 0ef59a9..0000000
--- a/build_tools/third_party/sdl2/SDL_config_minimal.h
+++ /dev/null
@@ -1,61 +0,0 @@
-#ifndef SDL_config_minimal_h_
-#define SDL_config_minimal_h_
-#define SDL_config_h_
-
-#include "SDL_platform.h"
-
-/**
- *  \file SDL_config_minimal.h
- *
- *  This is the minimal configuration that can be used to build SDL.
- */
-
-#define HAVE_STDARG_H 1
-#define HAVE_STDDEF_H 1
-
-/* Most everything except Visual Studio 2008 and earlier has stdint.h now */
-#if defined(_MSC_VER) && (_MSC_VER < 1600)
-/* Here are some reasonable defaults */
-typedef unsigned int size_t;
-typedef signed char int8_t;
-typedef unsigned char uint8_t;
-typedef signed short int16_t;
-typedef unsigned short uint16_t;
-typedef signed int int32_t;
-typedef unsigned int uint32_t;
-typedef signed long long int64_t;
-typedef unsigned long long uint64_t;
-typedef unsigned long uintptr_t;
-#else
-#define HAVE_STDINT_H 1
-#endif /* Visual Studio 2008 */
-
-#ifdef __GNUC__
-#define HAVE_GCC_SYNC_LOCK_TEST_AND_SET 1
-#endif
-
-/* Enable the dummy audio driver (src/audio/dummy/\*.c) */
-#define SDL_AUDIO_DRIVER_DUMMY 1
-
-/* Enable the stub joystick driver (src/joystick/dummy/\*.c) */
-#define SDL_JOYSTICK_DISABLED 1
-
-/* Enable the stub haptic driver (src/haptic/dummy/\*.c) */
-#define SDL_HAPTIC_DISABLED 1
-
-/* Enable the stub shared object loader (src/loadso/dummy/\*.c) */
-#define SDL_LOADSO_DISABLED 1
-
-/* Enable the stub thread support (src/thread/generic/\*.c) */
-#define SDL_THREADS_DISABLED 1
-
-/* Enable the stub timer support (src/timer/dummy/\*.c) */
-#define SDL_TIMERS_DISABLED 1
-
-/* Enable the dummy video driver (src/video/dummy/\*.c) */
-#define SDL_VIDEO_DRIVER_DUMMY 1
-
-/* Enable the dummy filesystem driver (src/filesystem/dummy/\*.c) */
-#define SDL_FILESYSTEM_DUMMY 1
-
-#endif /* SDL_config_minimal_h_ */
diff --git a/build_tools/third_party/sdl2/SDL_config_windows.h b/build_tools/third_party/sdl2/SDL_config_windows.h
deleted file mode 100644
index 7626de6..0000000
--- a/build_tools/third_party/sdl2/SDL_config_windows.h
+++ /dev/null
@@ -1,238 +0,0 @@
-#ifndef SDL_config_windows_h_
-#define SDL_config_windows_h_
-#define SDL_config_h_
-
-#include "SDL_platform.h"
-
-// Explicitly include headers for SSE intrinsics.
-// SDL itself conditionally chooses to not include these on Windows, but they
-// appear to be needed on some systems anyway.
-#include <intrin.h>
-#include <xmmintrin.h>
-
-/* This is a set of defines to configure the SDL features */
-
-#if !defined(_STDINT_H_) && (!defined(HAVE_STDINT_H) || !_HAVE_STDINT_H)
-#if defined(__GNUC__) || defined(__DMC__) || defined(__WATCOMC__)
-#define HAVE_STDINT_H 1
-#elif defined(_MSC_VER)
-typedef signed __int8 int8_t;
-typedef unsigned __int8 uint8_t;
-typedef signed __int16 int16_t;
-typedef unsigned __int16 uint16_t;
-typedef signed __int32 int32_t;
-typedef unsigned __int32 uint32_t;
-typedef signed __int64 int64_t;
-typedef unsigned __int64 uint64_t;
-#ifndef _UINTPTR_T_DEFINED
-#ifdef _WIN64
-typedef unsigned __int64 uintptr_t;
-#else
-typedef unsigned int uintptr_t;
-#endif
-#define _UINTPTR_T_DEFINED
-#endif
-/* Older Visual C++ headers don't have the Win64-compatible typedefs... */
-#if ((_MSC_VER <= 1200) && (!defined(DWORD_PTR)))
-#define DWORD_PTR DWORD
-#endif
-#if ((_MSC_VER <= 1200) && (!defined(LONG_PTR)))
-#define LONG_PTR LONG
-#endif
-#else /* !__GNUC__ && !_MSC_VER */
-typedef signed char int8_t;
-typedef unsigned char uint8_t;
-typedef signed short int16_t;
-typedef unsigned short uint16_t;
-typedef signed int int32_t;
-typedef unsigned int uint32_t;
-typedef signed long long int64_t;
-typedef unsigned long long uint64_t;
-#ifndef _SIZE_T_DEFINED_
-#define _SIZE_T_DEFINED_
-typedef unsigned int size_t;
-#endif
-typedef unsigned int uintptr_t;
-#endif /* __GNUC__ || _MSC_VER */
-#endif /* !_STDINT_H_ && !HAVE_STDINT_H */
-
-#ifdef _WIN64
-#define SIZEOF_VOIDP 8
-#else
-#define SIZEOF_VOIDP 4
-#endif
-
-#define HAVE_DDRAW_H 1
-#define HAVE_DINPUT_H 1
-#define HAVE_DSOUND_H 1
-#define HAVE_DXGI_H 1
-#define HAVE_XINPUT_H 1
-
-/* This is disabled by default to avoid C runtime dependencies and manifest
- * requirements */
-#define HAVE_LIBC 1  // Enable it anyway :D
-#ifdef HAVE_LIBC
-/* Useful headers */
-#define STDC_HEADERS 1
-#define HAVE_CTYPE_H 1
-#define HAVE_FLOAT_H 1
-#define HAVE_LIMITS_H 1
-#define HAVE_MATH_H 1
-#define HAVE_SIGNAL_H 1
-#define HAVE_STDIO_H 1
-#define HAVE_STRING_H 1
-
-/* C library functions */
-#define HAVE_MALLOC 1
-#define HAVE_CALLOC 1
-#define HAVE_REALLOC 1
-#define HAVE_FREE 1
-#define HAVE_ALLOCA 1
-#define HAVE_QSORT 1
-#define HAVE_ABS 1
-#define HAVE_MEMSET 1
-#define HAVE_MEMCPY 1
-#define HAVE_MEMMOVE 1
-#define HAVE_MEMCMP 1
-#define HAVE_STRLEN 1
-#define HAVE__STRREV 1
-/* These functions have security warnings, so we won't use them */
-/* #undef HAVE__STRUPR */
-/* #undef HAVE__STRLWR */
-#define HAVE_STRCHR 1
-#define HAVE_STRRCHR 1
-#define HAVE_STRSTR 1
-/* These functions have security warnings, so we won't use them */
-/* #undef HAVE__LTOA */
-/* #undef HAVE__ULTOA */
-#define HAVE_STRTOL 1
-#define HAVE_STRTOUL 1
-#define HAVE_STRTOD 1
-#define HAVE_ATOI 1
-#define HAVE_ATOF 1
-#define HAVE_STRCMP 1
-#define HAVE_STRNCMP 1
-#define HAVE__STRICMP 1
-#define HAVE__STRNICMP 1
-#define HAVE_ACOS 1
-#define HAVE_ACOSF 1
-#define HAVE_ASIN 1
-#define HAVE_ASINF 1
-#define HAVE_ATAN 1
-#define HAVE_ATANF 1
-#define HAVE_ATAN2 1
-#define HAVE_ATAN2F 1
-#define HAVE_CEILF 1
-#define HAVE__COPYSIGN 1
-#define HAVE_COS 1
-#define HAVE_COSF 1
-#define HAVE_FABS 1
-#define HAVE_FABSF 1
-#define HAVE_FLOOR 1
-#define HAVE_FLOORF 1
-#define HAVE_FMOD 1
-#define HAVE_FMODF 1
-#define HAVE_LOG 1
-#define HAVE_LOGF 1
-#define HAVE_LOG10 1
-#define HAVE_LOG10F 1
-#define HAVE_POW 1
-#define HAVE_POWF 1
-#define HAVE_SIN 1
-#define HAVE_SINF 1
-#define HAVE_SQRT 1
-#define HAVE_SQRTF 1
-#define HAVE_TAN 1
-#define HAVE_TANF 1
-#if defined(_MSC_VER)
-/* These functions were added with the VC++ 2013 C runtime library */
-#if _MSC_VER >= 1800
-#define HAVE_STRTOLL 1
-#define HAVE_VSSCANF 1
-#define HAVE_SCALBN 1
-#define HAVE_SCALBNF 1
-#endif
-/* This function is available with at least the VC++ 2008 C runtime library */
-#if _MSC_VER >= 1400
-#define HAVE__FSEEKI64 1
-#endif
-#endif
-#if !defined(_MSC_VER) || defined(_USE_MATH_DEFINES)
-#define HAVE_M_PI 1
-#endif
-#else
-#define HAVE_STDARG_H 1
-#define HAVE_STDDEF_H 1
-#endif
-
-/* Enable various audio drivers */
-#define SDL_AUDIO_DRIVER_WASAPI 1
-#define SDL_AUDIO_DRIVER_DSOUND 1
-#define SDL_AUDIO_DRIVER_WINMM 1
-#define SDL_AUDIO_DRIVER_DISK 1
-#define SDL_AUDIO_DRIVER_DUMMY 1
-
-/* Enable various input drivers */
-#define SDL_JOYSTICK_DINPUT 1
-#define SDL_JOYSTICK_XINPUT 1
-#define SDL_HAPTIC_DINPUT 1
-#define SDL_HAPTIC_XINPUT 1
-
-/* Enable various shared object loading systems */
-#define SDL_LOADSO_WINDOWS 1
-
-/* Enable various threading systems */
-#define SDL_THREAD_WINDOWS 1
-
-/* Enable various timer systems */
-#define SDL_TIMER_WINDOWS 1
-
-/* Enable/disable various video drivers */
-#define SDL_VIDEO_DRIVER_DUMMY 1
-#define SDL_VIDEO_DRIVER_WINDOWS 1
-
-#ifndef SDL_VIDEO_RENDER_D3D
-#define SDL_VIDEO_RENDER_D3D 0
-#endif
-#ifndef SDL_VIDEO_RENDER_D3D11
-#define SDL_VIDEO_RENDER_D3D11 0
-#endif
-
-/* Disable OpenGL support, just use Vulkan */
-#ifndef SDL_VIDEO_OPENGL
-#define SDL_VIDEO_OPENGL 0
-#endif
-#ifndef SDL_VIDEO_OPENGL_WGL
-#define SDL_VIDEO_OPENGL_WGL 0
-#endif
-#ifndef SDL_VIDEO_RENDER_OGL
-#define SDL_VIDEO_RENDER_OGL 0
-#endif
-#ifndef SDL_VIDEO_RENDER_OGL_ES2
-#define SDL_VIDEO_RENDER_OGL_ES2 0
-#endif
-#ifndef SDL_VIDEO_OPENGL_ES2
-#define SDL_VIDEO_OPENGL_ES2 0
-#endif
-#ifndef SDL_VIDEO_OPENGL_EGL
-#define SDL_VIDEO_OPENGL_EGL 0
-#endif
-
-/* Enable Vulkan support */
-#define SDL_VIDEO_VULKAN 1
-
-/* Enable system power support */
-#define SDL_POWER_WINDOWS 1
-
-/* Enable filesystem support */
-#define SDL_FILESYSTEM_WINDOWS 1
-
-/* Disable sensor support */
-#define SDL_SENSOR_DISABLED 1
-
-/* Enable assembly routines (Win64 doesn't have inline asm) */
-#ifndef _WIN64
-#define SDL_ASSEMBLY_ROUTINES 1
-#endif
-
-#endif /* SDL_config_windows_h_ */
diff --git a/colab/start_colab_kernel.py b/colab/start_colab_kernel.py
index 3a9b3a1..77bfab9 100755
--- a/colab/start_colab_kernel.py
+++ b/colab/start_colab_kernel.py
@@ -53,36 +53,43 @@
 
   # Determine the repository root (one dir-level up).
   repo_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
-  print("Repository root: %s" % (repo_root,))
+  print(f"Repository root: {repo_root}")
 
   # Use 'bazelisk' instead of 'bazel' if it exists on the path.
   # Bazelisk is an optional utility that pick versions of Bazel to use and
   # passes through all command-line arguments to the real Bazel binary:
   # https://github.com/bazelbuild/bazelisk
   bazel_exe = "bazelisk" if shutil.which("bazelisk") else "bazel"
-  print("Using bazel executable: %s" % (bazel_exe))
+  print(f"Using bazel executable: {bazel_exe}")
 
   # Detect python and query bazel for its output.
-  print("Setting Bazel PYTHON_BIN=%s" % (sys.executable,))
+  print(f"Setting Bazel PYTHON_BIN={sys.executable}")
   bazel_env["PYTHON_BIN"] = sys.executable
-  bazel_bin = subprocess.check_output([bazel_exe, "info", "bazel-bin"],
-                                      cwd=repo_root,
-                                      env=bazel_env).decode("utf-8")
-  bazel_bin = bazel_bin.splitlines()[0]
+  completed_process = subprocess.run(
+      [bazel_exe, "info", "bazel-bin"],
+      cwd=repo_root,
+      env=bazel_env,
+      check=True,
+      # TODO(#4131) python>=3.7: Replace 'universal_newlines' with 'text'.
+      universal_newlines=True,
+      # TODO(#4131) python>=3.7: Use capture_output=True.
+      stdout=subprocess.PIPE)
+  bazel_bin = completed_process.stdout.splitlines()[0]
   # Bazel always reports the path with '/'. On windows, switch it
   # since we need native path manipulation code below to have it the
   # right way.
   if os.path.sep == "\\":
     bazel_bin = bazel_bin.replace("/", "\\")
-  print("Found Bazel bin: %s" % (bazel_bin))
+  print(f"Found Bazel bin: {bazel_bin}")
 
 
 def build():
   """Builds the python bundle."""
   print("Building python bindings...")
-  subprocess.check_call([bazel_exe, "build", "//colab:everything_for_colab"],
-                        cwd=repo_root,
-                        env=bazel_env)
+  subprocess.run([bazel_exe, "build", "//colab:everything_for_colab"],
+                 cwd=repo_root,
+                 env=bazel_env,
+                 check=True)
 
 
 def run():
@@ -139,9 +146,9 @@
 def show_install_instructions():
   """Prints some install instructions."""
   print("ERROR: Unable to load Jupyter. Ensure that it is installed:")
-  print("  %s -m pip install --upgrade pip" % (sys.executable,))
-  print("  %s -m pip install jupyter" % (sys.executable,))
-  print("  %s -m pip install jupyter_http_over_ws" % (sys.executable,))
+  print(f"  {sys.executable} -m pip install --upgrade pip")
+  print(f"  {sys.executable} -m pip install jupyter")
+  print(f"  {sys.executable} -m pip install jupyter_http_over_ws")
   print("  jupyter serverextension enable --py jupyter_http_over_ws")
 
 
diff --git a/configure_bazel.py b/configure_bazel.py
index 18be4a4..b86b34f 100644
--- a/configure_bazel.py
+++ b/configure_bazel.py
@@ -46,8 +46,15 @@
   # For some reason, bazel doesn't always find the user site path, which
   # is typically where "pip install --user" libraries end up. Inject it.
   try:
-    user_site = subprocess.check_output(
-        [sys.executable, "-m", "site", "--user-site"]).decode("utf-8").strip()
+    user_site = subprocess.run(
+        [sys.executable, "-m", "site", "--user-site"],
+        check=True,
+        # TODO(#4131) python>=3.7: Use capture_output=True.
+        stderr=subprocess.PIPE,
+        stdout=subprocess.PIPE,
+        # TODO(#4131) python>=3.7: Replace 'universal_newlines' with 'text'.
+        universal_newlines=True,
+    ).stdout.strip()
     print("Found user site directory:", user_site)
   except subprocess.CalledProcessError:
     print("Could not resolve user site directory")
diff --git a/docs/developing_iree/repository_management.md b/docs/developing_iree/repository_management.md
index c481dc8..1cc7030 100644
--- a/docs/developing_iree/repository_management.md
+++ b/docs/developing_iree/repository_management.md
@@ -103,13 +103,11 @@
 ```text
 6ec136281086b71da32b5fb068bd6e46b78a5c79 third_party/abseil-cpp
 309de5988eb949a27e077a24a1d83c0687d10d57 third_party/benchmark
-4c13807b7d43ff0946b7ffea0ae3aee9e611d778 third_party/dear_imgui
 97f3aa91746a7d207513a73725e92cee7c35bb87 third_party/flatbuffers
 3d62e9545bd15c5df9ccfdd8453b93d64a6dd8eb third_party/ruy
 f2fb48c3b3d79a75a88a99fba6576b25d42ec528 third_party/googletest
 a21beccea2020f950845cbb68db663d0737e174c third_party/llvm-project
 80d452484c5409444b0ec19383faa84bb7a4d351 third_party/pybind11
-b73f111094da3e380a1774b56b15f16c90ae8e23 third_party/sdl2
 b252a50953ac4375cb1864e94f4b0234db9d215d third_party/spirv_headers
 6652f0b6428777b5a4a3d191cc30d8b31366b999 third_party/swiftshader
 9b32b2db1142166b190ea30757f48d8dd0fb00e3 third_party/tensorflow
diff --git a/docs/get_started/getting_started_linux_vulkan.md b/docs/get_started/getting_started_linux_vulkan.md
index 0133538..0035825 100644
--- a/docs/get_started/getting_started_linux_vulkan.md
+++ b/docs/get_started/getting_started_linux_vulkan.md
@@ -142,13 +142,12 @@
 
 ## Running IREE's Vulkan Samples
 
+> Note:<br>
+> &nbsp;&nbsp;&nbsp;&nbsp;The Vulkan samples are CMake-only.
+
 Install the [Vulkan SDK](https://www.lunarg.com/vulkan-sdk/), then run:
 
 ```shell
-# -- CMake --
 $ cmake --build ../iree-build/ --target iree_samples_vulkan_vulkan_inference_gui
 $ ../iree-build/iree/samples/vulkan/vulkan_inference_gui
-
-# -- Bazel --
-$ bazel run iree/samples/vulkan:vulkan_inference_gui
 ```
diff --git a/docs/get_started/getting_started_windows_vulkan.md b/docs/get_started/getting_started_windows_vulkan.md
index 94d1138..0ce7911 100644
--- a/docs/get_started/getting_started_windows_vulkan.md
+++ b/docs/get_started/getting_started_windows_vulkan.md
@@ -140,13 +140,12 @@
 
 ## Running IREE's Vulkan Samples
 
+> Note:<br>
+> &nbsp;&nbsp;&nbsp;&nbsp;The Vulkan samples are CMake-only.
+
 Install the [Vulkan SDK](https://www.lunarg.com/vulkan-sdk/), then run:
 
 ```powershell
-# -- CMake --
 > cmake --build ..\iree-build\ --target iree_samples_vulkan_vulkan_inference_gui
 > ..\iree-build\iree\samples\vulkan\vulkan_inference_gui.exe
-
-# -- Bazel --
-> bazel run iree/samples/vulkan:vulkan_inference_gui
 ```
diff --git a/integrations/tensorflow/bindings/python/pyiree/tf/support/module_utils.py b/integrations/tensorflow/bindings/python/pyiree/tf/support/module_utils.py
index 5a799c6..305b7d6 100644
--- a/integrations/tensorflow/bindings/python/pyiree/tf/support/module_utils.py
+++ b/integrations/tensorflow/bindings/python/pyiree/tf/support/module_utils.py
@@ -14,6 +14,8 @@
 # limitations under the License.
 """Utilities for compiling 'tf.Module's"""
 
+# TODO(#4131) python>=3.7: Use postponed type annotations.
+
 import collections
 import os
 import tempfile
diff --git a/integrations/tensorflow/bindings/python/pyiree/tf/support/tf_test_utils.py b/integrations/tensorflow/bindings/python/pyiree/tf/support/tf_test_utils.py
index 1961a9a..24e83aa 100644
--- a/integrations/tensorflow/bindings/python/pyiree/tf/support/tf_test_utils.py
+++ b/integrations/tensorflow/bindings/python/pyiree/tf/support/tf_test_utils.py
@@ -22,6 +22,8 @@
 #   ref: reference – for the reference CompiledModule
 #   tar: target - for one of the target CompiledModules
 
+# TODO(#4131) python>=3.7: Use postponed type annotations.
+
 import collections
 import copy
 import itertools
@@ -111,7 +113,7 @@
     backends = module_utils.BackendInfo.get_all_backends()
   return backends
 
-
+# TODO(#4131) python>=3.7: Consider using a (frozen) dataclass.
 Modules = collections.namedtuple("Modules",
                                  ["ref_module", "tar_modules", "artifacts_dir"])
 
diff --git a/integrations/tensorflow/bindings/python/pyiree/tf/support/trace_utils.py b/integrations/tensorflow/bindings/python/pyiree/tf/support/trace_utils.py
index 1a0c789..e6c4265 100644
--- a/integrations/tensorflow/bindings/python/pyiree/tf/support/trace_utils.py
+++ b/integrations/tensorflow/bindings/python/pyiree/tf/support/trace_utils.py
@@ -18,6 +18,8 @@
 #   ref: reference – for the reference CompiledModule
 #   tar: target - for one of the target CompiledModules
 
+# TODO(#4131) python>=3.7: Use postponed type annotations.
+
 import copy
 import glob
 import inspect
diff --git a/iree/samples/vulkan/BUILD b/iree/samples/vulkan/BUILD
deleted file mode 100644
index f005ede..0000000
--- a/iree/samples/vulkan/BUILD
+++ /dev/null
@@ -1,60 +0,0 @@
-# Copyright 2020 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      https://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# Samples demonstrating use of the VM and HAL APIs with Vulkan.
-
-load("//iree/tools:compilation.bzl", "iree_bytecode_module")
-
-package(
-    default_visibility = ["//visibility:public"],
-    features = ["layering_check"],
-    licenses = ["notice"],  # Apache 2.0
-)
-
-iree_bytecode_module(
-    name = "simple_mul_bytecode_module",
-    src = "simple_mul.mlir",
-    cc_namespace = "iree::samples::vulkan",
-    flags = [
-        "-iree-mlir-to-vm-bytecode-module",
-        "-iree-hal-target-backends=vulkan-spirv",
-    ],
-)
-
-cc_binary(
-    name = "vulkan_inference_gui",
-    srcs = ["vulkan_inference_gui.cc"],
-    linkopts = select({
-        "@bazel_tools//src/conditions:windows": [
-            "-SUBSYSTEM:WINDOWS",
-        ],
-        "//conditions:default": [],
-    }),
-    tags = [
-        "manual",
-        "nokokoro",
-    ],
-    deps = [
-        ":simple_mul_bytecode_module_cc",
-        "//iree/base:main",
-        "//iree/hal/vulkan/registration",
-        "//iree/modules/hal",
-        "//iree/testing/vulkan:vulkan_gui_util",
-        "//iree/vm",
-        "//iree/vm:bytecode_module",
-        "//iree/vm:cc",
-        "@com_google_absl//absl/base:core_headers",
-        "@com_google_absl//absl/types:span",
-    ],
-)
diff --git a/iree/samples/vulkan/CMakeLists.txt b/iree/samples/vulkan/CMakeLists.txt
index 4c7f665..785eb2c 100644
--- a/iree/samples/vulkan/CMakeLists.txt
+++ b/iree/samples/vulkan/CMakeLists.txt
@@ -28,14 +28,12 @@
     "-iree-hal-target-backends=vulkan-spirv"
 )
 
-# bazel_to_cmake: DO NOT EDIT (special Vulkan and Windows logic is needed)
-
 # This sample statically links against Vulkan.
 # One way to achieve this is by installing the Vulkan SDK from
 # https://vulkan.lunarg.com/.
 # If Vulkan is not found, omit the target.
 if(NOT TARGET iree::testing::vulkan::vulkan_gui_util)
-  message(NOTICE "Vulkan was not found, skipping vulkan_inference_gui sample")
+  message(VERBOSE "Missing Vulkan dependencies, skipping vulkan_inference_gui sample")
   return()
 endif()
 
diff --git a/iree/samples/vulkan/vulkan_inference_gui.cc b/iree/samples/vulkan/vulkan_inference_gui.cc
index 25967ef..45e4ab4 100644
--- a/iree/samples/vulkan/vulkan_inference_gui.cc
+++ b/iree/samples/vulkan/vulkan_inference_gui.cc
@@ -316,10 +316,10 @@
     if (g_SwapChainRebuild) {
       g_SwapChainRebuild = false;
       ImGui_ImplVulkan_SetMinImageCount(g_MinImageCount);
-      ImGui_ImplVulkanH_CreateWindow(g_Instance, g_PhysicalDevice, g_Device,
-                                     &g_MainWindowData, g_QueueFamily,
-                                     g_Allocator, g_SwapChainResizeWidth,
-                                     g_SwapChainResizeHeight, g_MinImageCount);
+      ImGui_ImplVulkanH_CreateOrResizeWindow(
+          g_Instance, g_PhysicalDevice, g_Device, &g_MainWindowData,
+          g_QueueFamily, g_Allocator, g_SwapChainResizeWidth,
+          g_SwapChainResizeHeight, g_MinImageCount);
       g_MainWindowData.FrameIndex = 0;
     }
 
diff --git a/iree/testing/vulkan/BUILD b/iree/testing/vulkan/BUILD
deleted file mode 100644
index 3f40467..0000000
--- a/iree/testing/vulkan/BUILD
+++ /dev/null
@@ -1,69 +0,0 @@
-# Copyright 2020 Google LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      https://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-package(
-    default_visibility = ["//visibility:public"],
-    features = ["layering_check"],
-    licenses = ["notice"],  # Apache 2.0
-)
-
-cc_library(
-    name = "vulkan_gui_util",
-    srcs = ["vulkan_gui_util.cc"],
-    hdrs = ["vulkan_gui_util.h"],
-    tags = [
-        "manual",
-        "nokokoro",
-    ],
-    deps = [
-        "//iree/base:api",
-        "//iree/base:logging",
-        "//iree/hal/vulkan:api",
-        "@dear_imgui",
-        "@dear_imgui//:imgui_sdl_vulkan",
-        "@iree_vulkan_headers//:vulkan_headers",
-        "@sdl2//:SDL2",
-        "@vulkan_sdk//:sdk",
-    ],
-)
-
-cc_binary(
-    name = "iree-run-module-vulkan-gui",
-    srcs = ["iree-run-module-vulkan-gui-main.cc"],
-    linkopts = select({
-        "@bazel_tools//src/conditions:windows": [
-            "-SUBSYSTEM:WINDOWS",
-        ],
-        "//conditions:default": [],
-    }),
-    tags = [
-        "manual",
-        "nokokoro",
-    ],
-    deps = [
-        ":vulkan_gui_util",
-        "//iree/base:flags",
-        "//iree/base:main",
-        "//iree/base:status",
-        "//iree/base:tracing",
-        "//iree/hal/vulkan/registration",
-        "//iree/modules/hal",
-        "//iree/tools/utils:vm_util",
-        "//iree/vm",
-        "//iree/vm:bytecode_module",
-        "//iree/vm:cc",
-        "@com_google_absl//absl/flags:flag",
-        "@sdl2//:SDL2",
-    ],
-)
diff --git a/iree/testing/vulkan/CMakeLists.txt b/iree/testing/vulkan/CMakeLists.txt
index a4e6a03..8b650aa 100644
--- a/iree/testing/vulkan/CMakeLists.txt
+++ b/iree/testing/vulkan/CMakeLists.txt
@@ -12,8 +12,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# bazel_to_cmake: DO NOT EDIT (special Vulkan logic is needed)
-
 if(NOT ${IREE_HAL_DRIVER_VULKAN} OR NOT ${IREE_BUILD_SAMPLES})
   return()
 endif()
@@ -24,6 +22,21 @@
 # If Vulkan is not found, omit the target.
 include(FindVulkan)
 if(NOT Vulkan_FOUND)
+  message(VERBOSE "Could not find Vulkan, disabling Vulkan GUI programs")
+  return()
+endif()
+
+# vcpkg install imgui[vulkan-binding,sdl2-binding]
+find_package(imgui CONFIG QUIET)
+if(NOT imgui_FOUND)
+  message(VERBOSE "Could not find Dear ImGui, disabling Vulkan GUI programs")
+  return()
+endif()
+
+# vcpkg install sdl2[vulkan]
+find_package(SDL2 CONFIG QUIET)
+if(NOT SDL2_FOUND)
+  message(VERBOSE "Could not find SDL2, disabling Vulkan GUI programs")
   return()
 endif()
 
@@ -35,13 +48,11 @@
   SRCS
     "vulkan_gui_util.cc"
   DEPS
-    dear_imgui::dear_imgui
-    dear_imgui::impl_sdl
-    dear_imgui::impl_vulkan
+    imgui::imgui
     iree::base::api
     iree::base::logging
     iree::hal::vulkan::api
-    SDL2-static
+    SDL2::SDL2
     Vulkan::Vulkan
 )
 
diff --git a/iree/testing/vulkan/vulkan_gui_util.cc b/iree/testing/vulkan/vulkan_gui_util.cc
index 4c93bb3..c633c2c 100644
--- a/iree/testing/vulkan/vulkan_gui_util.cc
+++ b/iree/testing/vulkan/vulkan_gui_util.cc
@@ -295,9 +295,9 @@
 
   // Create SwapChain, RenderPass, Framebuffer, etc.
   IM_ASSERT(min_image_count >= 2);
-  ImGui_ImplVulkanH_CreateWindow(instance, physical_device, device, wd,
-                                 queue_family_index, allocator, width, height,
-                                 min_image_count);
+  ImGui_ImplVulkanH_CreateOrResizeWindow(instance, physical_device, device, wd,
+                                         queue_family_index, allocator, width,
+                                         height, min_image_count);
 
   // Set clear color.
   ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f);
diff --git a/iree/testing/vulkan/vulkan_gui_util.h b/iree/testing/vulkan/vulkan_gui_util.h
index c43cc5d..05288bd 100644
--- a/iree/testing/vulkan/vulkan_gui_util.h
+++ b/iree/testing/vulkan/vulkan_gui_util.h
@@ -14,18 +14,15 @@
 
 #include <SDL.h>
 #include <SDL_vulkan.h>
+#include <imgui.h>
+#include <imgui_impl_sdl.h>
+#include <imgui_impl_vulkan.h>
 #include <vulkan/vulkan.h>
 
 #include <vector>
 
 #include "iree/hal/vulkan/api.h"
 
-// NOTE: order matters here, imgui must come first:
-#include "third_party/dear_imgui/imgui.h"
-// NOTE: must follow imgui.h:
-#include "third_party/dear_imgui/examples/imgui_impl_sdl.h"
-#include "third_party/dear_imgui/examples/imgui_impl_vulkan.h"
-
 namespace iree {
 
 // Returns the names of the Vulkan instance layers needed for the given IREE
diff --git a/iree/vm/BUILD b/iree/vm/BUILD
index f69b517..e613f40 100644
--- a/iree/vm/BUILD
+++ b/iree/vm/BUILD
@@ -13,7 +13,6 @@
 # limitations under the License.
 
 load("//iree/tools:compilation.bzl", "iree_bytecode_module")
-load("//build_tools/bazel:tblgen.bzl", "gentbl")
 
 package(
     default_visibility = ["//visibility:public"],
@@ -179,13 +178,12 @@
         "bytecode_dispatch_util.h",
         "bytecode_module.c",
         "bytecode_module_impl.h",
-        "bytecode_op_table.h",
+        "generated/bytecode_op_table.h",
     ],
     hdrs = [
         "bytecode_module.h",
     ],
     deps = [
-        ":bytecode_op_table_gen",
         ":vm",
         "//iree/base:api",
         "//iree/base:core_headers",
@@ -195,24 +193,24 @@
     ],
 )
 
-# TODO(benvanik): see if we can remove this; not good to have this dep.
-gentbl(
-    name = "bytecode_op_table_gen",
-    tbl_outs = [
-        ("-gen-iree-vm-op-table-defs", "bytecode_op_table.h"),
-    ],
-    tblgen = "//iree/tools:iree-tblgen",
-    td_file = "//iree/compiler/Dialect/VM/IR:VMOps.td",
-    td_srcs = [
-        "//iree/compiler/Dialect/IREE/IR:td_files",
-        "//iree/compiler/Dialect/VM/IR:td_files",
-        "@llvm-project//mlir:OpBaseTdFiles",
-        "@llvm-project//mlir:include/mlir/IR/SymbolInterfaces.td",
-        "@llvm-project//mlir:include/mlir/Interfaces/CallInterfaces.td",
-        "@llvm-project//mlir:include/mlir/Interfaces/ControlFlowInterfaces.td",
-        "@llvm-project//mlir:SideEffectTdFiles",
-    ],
-)
+# TODO(#357): Add a script to update bytecode_op_table.h.
+# gentbl(
+#     name = "bytecode_op_table_gen",
+#     tbl_outs = [
+#         ("-gen-iree-vm-op-table-defs", "bytecode_op_table.h"),
+#     ],
+#     tblgen = "//iree/tools:iree-tblgen",
+#     td_file = "//iree/compiler/Dialect/VM/IR:VMOps.td",
+#     td_srcs = [
+#         "//iree/compiler/Dialect/IREE/IR:td_files",
+#         "//iree/compiler/Dialect/VM/IR:td_files",
+#         "@llvm-project//mlir:OpBaseTdFiles",
+#         "@llvm-project//mlir:include/mlir/IR/SymbolInterfaces.td",
+#         "@llvm-project//mlir:include/mlir/Interfaces/CallInterfaces.td",
+#         "@llvm-project//mlir:include/mlir/Interfaces/ControlFlowInterfaces.td",
+#         "@llvm-project//mlir:SideEffectTdFiles",
+#     ],
+# )
 
 cc_test(
     name = "bytecode_module_test",
diff --git a/iree/vm/CMakeLists.txt b/iree/vm/CMakeLists.txt
index 2546732..dd6d63e 100644
--- a/iree/vm/CMakeLists.txt
+++ b/iree/vm/CMakeLists.txt
@@ -166,7 +166,7 @@
     "bytecode_dispatch_util.h"
     "bytecode_module.c"
     "bytecode_module_impl.h"
-    "bytecode_op_table.h"
+    "generated/bytecode_op_table.h"
   DEPS
     ::vm
     iree::base::api
@@ -177,17 +177,6 @@
   PUBLIC
 )
 
-iree_tablegen_library(
-  NAME
-    bytecode_op_table_gen
-  TD_FILE
-    "${IREE_ROOT_DIR}/iree/compiler/Dialect/VM/IR/VMOps.td"
-  OUTS
-    -gen-iree-vm-op-table-defs bytecode_op_table.h
-  TBLGEN
-    IREE
-)
-
 iree_cc_test(
   NAME
     bytecode_module_test
diff --git a/iree/vm/bytecode_dispatch_util.h b/iree/vm/bytecode_dispatch_util.h
index ace3a32..ea3aab3 100644
--- a/iree/vm/bytecode_dispatch_util.h
+++ b/iree/vm/bytecode_dispatch_util.h
@@ -21,7 +21,7 @@
 #include "iree/base/alignment.h"
 #include "iree/base/target_platform.h"
 #include "iree/vm/bytecode_module_impl.h"
-#include "iree/vm/bytecode_op_table.h"
+#include "iree/vm/generated/bytecode_op_table.h"
 
 // TODO(benvanik): make a compiler setting.
 #define IREE_VM_EXT_I64_ENABLE 1
diff --git a/iree/vm/generated/.clang-format b/iree/vm/generated/.clang-format
new file mode 100644
index 0000000..0419c8d
--- /dev/null
+++ b/iree/vm/generated/.clang-format
@@ -0,0 +1,17 @@
+# Copyright 2019 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Disable formatting for generated code.
+DisableFormat: true
+
diff --git a/iree/vm/generated/bytecode_op_table.h b/iree/vm/generated/bytecode_op_table.h
new file mode 100644
index 0000000..b63eb6c
--- /dev/null
+++ b/iree/vm/generated/bytecode_op_table.h
@@ -0,0 +1,1042 @@
+/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
+|*                                                                            *|
+|* IREE VM Operation Tables                                                   *|
+|*                                                                            *|
+|* Automatically generated file, do not edit!                                 *|
+|*                                                                            *|
+\*===----------------------------------------------------------------------===*/
+
+typedef enum {
+  IREE_VM_OP_CORE_GlobalLoadI32 = 0x00,
+  IREE_VM_OP_CORE_GlobalStoreI32 = 0x01,
+  IREE_VM_OP_CORE_GlobalLoadIndirectI32 = 0x02,
+  IREE_VM_OP_CORE_GlobalStoreIndirectI32 = 0x03,
+  IREE_VM_OP_CORE_GlobalLoadRef = 0x04,
+  IREE_VM_OP_CORE_GlobalStoreRef = 0x05,
+  IREE_VM_OP_CORE_GlobalLoadIndirectRef = 0x06,
+  IREE_VM_OP_CORE_GlobalStoreIndirectRef = 0x07,
+  IREE_VM_OP_CORE_ConstI32Zero = 0x08,
+  IREE_VM_OP_CORE_ConstI32 = 0x09,
+  IREE_VM_OP_CORE_ConstRefZero = 0x0A,
+  IREE_VM_OP_CORE_ConstRefRodata = 0x0B,
+  IREE_VM_OP_CORE_RSV_0x0C,
+  IREE_VM_OP_CORE_RSV_0x0D,
+  IREE_VM_OP_CORE_RSV_0x0E,
+  IREE_VM_OP_CORE_RSV_0x0F,
+  IREE_VM_OP_CORE_ListAlloc = 0x10,
+  IREE_VM_OP_CORE_ListReserve = 0x11,
+  IREE_VM_OP_CORE_ListSize = 0x12,
+  IREE_VM_OP_CORE_ListResize = 0x13,
+  IREE_VM_OP_CORE_ListGetI32 = 0x14,
+  IREE_VM_OP_CORE_ListSetI32 = 0x15,
+  IREE_VM_OP_CORE_ListGetRef = 0x16,
+  IREE_VM_OP_CORE_ListSetRef = 0x17,
+  IREE_VM_OP_CORE_RSV_0x18,
+  IREE_VM_OP_CORE_RSV_0x19,
+  IREE_VM_OP_CORE_RSV_0x1A,
+  IREE_VM_OP_CORE_RSV_0x1B,
+  IREE_VM_OP_CORE_RSV_0x1C,
+  IREE_VM_OP_CORE_RSV_0x1D,
+  IREE_VM_OP_CORE_SelectI32 = 0x1E,
+  IREE_VM_OP_CORE_SelectRef = 0x1F,
+  IREE_VM_OP_CORE_SwitchI32 = 0x20,
+  IREE_VM_OP_CORE_SwitchRef = 0x21,
+  IREE_VM_OP_CORE_AddI32 = 0x22,
+  IREE_VM_OP_CORE_SubI32 = 0x23,
+  IREE_VM_OP_CORE_MulI32 = 0x24,
+  IREE_VM_OP_CORE_DivI32S = 0x25,
+  IREE_VM_OP_CORE_DivI32U = 0x26,
+  IREE_VM_OP_CORE_RemI32S = 0x27,
+  IREE_VM_OP_CORE_RemI32U = 0x28,
+  IREE_VM_OP_CORE_NotI32 = 0x29,
+  IREE_VM_OP_CORE_AndI32 = 0x2A,
+  IREE_VM_OP_CORE_OrI32 = 0x2B,
+  IREE_VM_OP_CORE_XorI32 = 0x2C,
+  IREE_VM_OP_CORE_ShlI32 = 0x2D,
+  IREE_VM_OP_CORE_ShrI32S = 0x2E,
+  IREE_VM_OP_CORE_ShrI32U = 0x2F,
+  IREE_VM_OP_CORE_RSV_0x30,
+  IREE_VM_OP_CORE_TruncI32I8 = 0x31,
+  IREE_VM_OP_CORE_TruncI32I16 = 0x32,
+  IREE_VM_OP_CORE_ExtI8I32S = 0x33,
+  IREE_VM_OP_CORE_ExtI8I32U = 0x34,
+  IREE_VM_OP_CORE_ExtI16I32S = 0x35,
+  IREE_VM_OP_CORE_ExtI16I32U = 0x36,
+  IREE_VM_OP_CORE_RSV_0x37,
+  IREE_VM_OP_CORE_RSV_0x38,
+  IREE_VM_OP_CORE_RSV_0x39,
+  IREE_VM_OP_CORE_RSV_0x3A,
+  IREE_VM_OP_CORE_RSV_0x3B,
+  IREE_VM_OP_CORE_RSV_0x3C,
+  IREE_VM_OP_CORE_RSV_0x3D,
+  IREE_VM_OP_CORE_RSV_0x3E,
+  IREE_VM_OP_CORE_RSV_0x3F,
+  IREE_VM_OP_CORE_CmpEQI32 = 0x40,
+  IREE_VM_OP_CORE_CmpNEI32 = 0x41,
+  IREE_VM_OP_CORE_CmpLTI32S = 0x42,
+  IREE_VM_OP_CORE_CmpLTI32U = 0x43,
+  IREE_VM_OP_CORE_RSV_0x44,
+  IREE_VM_OP_CORE_RSV_0x45,
+  IREE_VM_OP_CORE_RSV_0x46,
+  IREE_VM_OP_CORE_RSV_0x47,
+  IREE_VM_OP_CORE_RSV_0x48,
+  IREE_VM_OP_CORE_RSV_0x49,
+  IREE_VM_OP_CORE_CmpEQRef = 0x4A,
+  IREE_VM_OP_CORE_CmpNERef = 0x4B,
+  IREE_VM_OP_CORE_CmpNZRef = 0x4C,
+  IREE_VM_OP_CORE_CmpNZI32 = 0x4D,
+  IREE_VM_OP_CORE_RSV_0x4E,
+  IREE_VM_OP_CORE_RSV_0x4F,
+  IREE_VM_OP_CORE_Branch = 0x50,
+  IREE_VM_OP_CORE_CondBranch = 0x51,
+  IREE_VM_OP_CORE_Call = 0x52,
+  IREE_VM_OP_CORE_CallVariadic = 0x53,
+  IREE_VM_OP_CORE_Return = 0x54,
+  IREE_VM_OP_CORE_Fail = 0x55,
+  IREE_VM_OP_CORE_RSV_0x56,
+  IREE_VM_OP_CORE_RSV_0x57,
+  IREE_VM_OP_CORE_RSV_0x58,
+  IREE_VM_OP_CORE_RSV_0x59,
+  IREE_VM_OP_CORE_RSV_0x5A,
+  IREE_VM_OP_CORE_RSV_0x5B,
+  IREE_VM_OP_CORE_RSV_0x5C,
+  IREE_VM_OP_CORE_RSV_0x5D,
+  IREE_VM_OP_CORE_RSV_0x5E,
+  IREE_VM_OP_CORE_RSV_0x5F,
+  IREE_VM_OP_CORE_Yield = 0x60,
+  IREE_VM_OP_CORE_RSV_0x61,
+  IREE_VM_OP_CORE_RSV_0x62,
+  IREE_VM_OP_CORE_RSV_0x63,
+  IREE_VM_OP_CORE_RSV_0x64,
+  IREE_VM_OP_CORE_RSV_0x65,
+  IREE_VM_OP_CORE_RSV_0x66,
+  IREE_VM_OP_CORE_RSV_0x67,
+  IREE_VM_OP_CORE_RSV_0x68,
+  IREE_VM_OP_CORE_RSV_0x69,
+  IREE_VM_OP_CORE_RSV_0x6A,
+  IREE_VM_OP_CORE_RSV_0x6B,
+  IREE_VM_OP_CORE_RSV_0x6C,
+  IREE_VM_OP_CORE_RSV_0x6D,
+  IREE_VM_OP_CORE_RSV_0x6E,
+  IREE_VM_OP_CORE_RSV_0x6F,
+  IREE_VM_OP_CORE_RSV_0x70,
+  IREE_VM_OP_CORE_RSV_0x71,
+  IREE_VM_OP_CORE_RSV_0x72,
+  IREE_VM_OP_CORE_RSV_0x73,
+  IREE_VM_OP_CORE_RSV_0x74,
+  IREE_VM_OP_CORE_RSV_0x75,
+  IREE_VM_OP_CORE_RSV_0x76,
+  IREE_VM_OP_CORE_RSV_0x77,
+  IREE_VM_OP_CORE_RSV_0x78,
+  IREE_VM_OP_CORE_RSV_0x79,
+  IREE_VM_OP_CORE_RSV_0x7A,
+  IREE_VM_OP_CORE_RSV_0x7B,
+  IREE_VM_OP_CORE_Trace = 0x7C,
+  IREE_VM_OP_CORE_Print = 0x7D,
+  IREE_VM_OP_CORE_CondBreak = 0x7E,
+  IREE_VM_OP_CORE_Break = 0x7F,
+  IREE_VM_OP_CORE_RSV_0x80,
+  IREE_VM_OP_CORE_RSV_0x81,
+  IREE_VM_OP_CORE_RSV_0x82,
+  IREE_VM_OP_CORE_RSV_0x83,
+  IREE_VM_OP_CORE_RSV_0x84,
+  IREE_VM_OP_CORE_RSV_0x85,
+  IREE_VM_OP_CORE_RSV_0x86,
+  IREE_VM_OP_CORE_RSV_0x87,
+  IREE_VM_OP_CORE_RSV_0x88,
+  IREE_VM_OP_CORE_RSV_0x89,
+  IREE_VM_OP_CORE_RSV_0x8A,
+  IREE_VM_OP_CORE_RSV_0x8B,
+  IREE_VM_OP_CORE_RSV_0x8C,
+  IREE_VM_OP_CORE_RSV_0x8D,
+  IREE_VM_OP_CORE_RSV_0x8E,
+  IREE_VM_OP_CORE_RSV_0x8F,
+  IREE_VM_OP_CORE_RSV_0x90,
+  IREE_VM_OP_CORE_RSV_0x91,
+  IREE_VM_OP_CORE_RSV_0x92,
+  IREE_VM_OP_CORE_RSV_0x93,
+  IREE_VM_OP_CORE_RSV_0x94,
+  IREE_VM_OP_CORE_RSV_0x95,
+  IREE_VM_OP_CORE_RSV_0x96,
+  IREE_VM_OP_CORE_RSV_0x97,
+  IREE_VM_OP_CORE_RSV_0x98,
+  IREE_VM_OP_CORE_RSV_0x99,
+  IREE_VM_OP_CORE_RSV_0x9A,
+  IREE_VM_OP_CORE_RSV_0x9B,
+  IREE_VM_OP_CORE_RSV_0x9C,
+  IREE_VM_OP_CORE_RSV_0x9D,
+  IREE_VM_OP_CORE_RSV_0x9E,
+  IREE_VM_OP_CORE_RSV_0x9F,
+  IREE_VM_OP_CORE_PrefixExtI64 = 0xA0,
+  IREE_VM_OP_CORE_PrefixExtF32 = 0xA1,
+  IREE_VM_OP_CORE_PrefixExtF64 = 0xA2,
+  IREE_VM_OP_CORE_RSV_0xA3,
+  IREE_VM_OP_CORE_RSV_0xA4,
+  IREE_VM_OP_CORE_RSV_0xA5,
+  IREE_VM_OP_CORE_RSV_0xA6,
+  IREE_VM_OP_CORE_RSV_0xA7,
+  IREE_VM_OP_CORE_RSV_0xA8,
+  IREE_VM_OP_CORE_RSV_0xA9,
+  IREE_VM_OP_CORE_RSV_0xAA,
+  IREE_VM_OP_CORE_RSV_0xAB,
+  IREE_VM_OP_CORE_RSV_0xAC,
+  IREE_VM_OP_CORE_RSV_0xAD,
+  IREE_VM_OP_CORE_RSV_0xAE,
+  IREE_VM_OP_CORE_RSV_0xAF,
+  IREE_VM_OP_CORE_RSV_0xB0,
+  IREE_VM_OP_CORE_RSV_0xB1,
+  IREE_VM_OP_CORE_RSV_0xB2,
+  IREE_VM_OP_CORE_RSV_0xB3,
+  IREE_VM_OP_CORE_RSV_0xB4,
+  IREE_VM_OP_CORE_RSV_0xB5,
+  IREE_VM_OP_CORE_RSV_0xB6,
+  IREE_VM_OP_CORE_RSV_0xB7,
+  IREE_VM_OP_CORE_RSV_0xB8,
+  IREE_VM_OP_CORE_RSV_0xB9,
+  IREE_VM_OP_CORE_RSV_0xBA,
+  IREE_VM_OP_CORE_RSV_0xBB,
+  IREE_VM_OP_CORE_RSV_0xBC,
+  IREE_VM_OP_CORE_RSV_0xBD,
+  IREE_VM_OP_CORE_RSV_0xBE,
+  IREE_VM_OP_CORE_RSV_0xBF,
+  IREE_VM_OP_CORE_RSV_0xC0,
+  IREE_VM_OP_CORE_RSV_0xC1,
+  IREE_VM_OP_CORE_RSV_0xC2,
+  IREE_VM_OP_CORE_RSV_0xC3,
+  IREE_VM_OP_CORE_RSV_0xC4,
+  IREE_VM_OP_CORE_RSV_0xC5,
+  IREE_VM_OP_CORE_RSV_0xC6,
+  IREE_VM_OP_CORE_RSV_0xC7,
+  IREE_VM_OP_CORE_RSV_0xC8,
+  IREE_VM_OP_CORE_RSV_0xC9,
+  IREE_VM_OP_CORE_RSV_0xCA,
+  IREE_VM_OP_CORE_RSV_0xCB,
+  IREE_VM_OP_CORE_RSV_0xCC,
+  IREE_VM_OP_CORE_RSV_0xCD,
+  IREE_VM_OP_CORE_RSV_0xCE,
+  IREE_VM_OP_CORE_RSV_0xCF,
+  IREE_VM_OP_CORE_RSV_0xD0,
+  IREE_VM_OP_CORE_RSV_0xD1,
+  IREE_VM_OP_CORE_RSV_0xD2,
+  IREE_VM_OP_CORE_RSV_0xD3,
+  IREE_VM_OP_CORE_RSV_0xD4,
+  IREE_VM_OP_CORE_RSV_0xD5,
+  IREE_VM_OP_CORE_RSV_0xD6,
+  IREE_VM_OP_CORE_RSV_0xD7,
+  IREE_VM_OP_CORE_RSV_0xD8,
+  IREE_VM_OP_CORE_RSV_0xD9,
+  IREE_VM_OP_CORE_RSV_0xDA,
+  IREE_VM_OP_CORE_RSV_0xDB,
+  IREE_VM_OP_CORE_RSV_0xDC,
+  IREE_VM_OP_CORE_RSV_0xDD,
+  IREE_VM_OP_CORE_RSV_0xDE,
+  IREE_VM_OP_CORE_RSV_0xDF,
+  IREE_VM_OP_CORE_RSV_0xE0,
+  IREE_VM_OP_CORE_RSV_0xE1,
+  IREE_VM_OP_CORE_RSV_0xE2,
+  IREE_VM_OP_CORE_RSV_0xE3,
+  IREE_VM_OP_CORE_RSV_0xE4,
+  IREE_VM_OP_CORE_RSV_0xE5,
+  IREE_VM_OP_CORE_RSV_0xE6,
+  IREE_VM_OP_CORE_RSV_0xE7,
+  IREE_VM_OP_CORE_RSV_0xE8,
+  IREE_VM_OP_CORE_RSV_0xE9,
+  IREE_VM_OP_CORE_RSV_0xEA,
+  IREE_VM_OP_CORE_RSV_0xEB,
+  IREE_VM_OP_CORE_RSV_0xEC,
+  IREE_VM_OP_CORE_RSV_0xED,
+  IREE_VM_OP_CORE_RSV_0xEE,
+  IREE_VM_OP_CORE_RSV_0xEF,
+  IREE_VM_OP_CORE_RSV_0xF0,
+  IREE_VM_OP_CORE_RSV_0xF1,
+  IREE_VM_OP_CORE_RSV_0xF2,
+  IREE_VM_OP_CORE_RSV_0xF3,
+  IREE_VM_OP_CORE_RSV_0xF4,
+  IREE_VM_OP_CORE_RSV_0xF5,
+  IREE_VM_OP_CORE_RSV_0xF6,
+  IREE_VM_OP_CORE_RSV_0xF7,
+  IREE_VM_OP_CORE_RSV_0xF8,
+  IREE_VM_OP_CORE_RSV_0xF9,
+  IREE_VM_OP_CORE_RSV_0xFA,
+  IREE_VM_OP_CORE_RSV_0xFB,
+  IREE_VM_OP_CORE_RSV_0xFC,
+  IREE_VM_OP_CORE_RSV_0xFD,
+  IREE_VM_OP_CORE_RSV_0xFE,
+  IREE_VM_OP_CORE_RSV_0xFF,
+} iree_vm_core_op_t;
+
+#define IREE_VM_OP_CORE_TABLE(OPC, RSV) \
+    OPC(0x00, GlobalLoadI32) \
+    OPC(0x01, GlobalStoreI32) \
+    OPC(0x02, GlobalLoadIndirectI32) \
+    OPC(0x03, GlobalStoreIndirectI32) \
+    OPC(0x04, GlobalLoadRef) \
+    OPC(0x05, GlobalStoreRef) \
+    OPC(0x06, GlobalLoadIndirectRef) \
+    OPC(0x07, GlobalStoreIndirectRef) \
+    OPC(0x08, ConstI32Zero) \
+    OPC(0x09, ConstI32) \
+    OPC(0x0A, ConstRefZero) \
+    OPC(0x0B, ConstRefRodata) \
+    RSV(0x0C) \
+    RSV(0x0D) \
+    RSV(0x0E) \
+    RSV(0x0F) \
+    OPC(0x10, ListAlloc) \
+    OPC(0x11, ListReserve) \
+    OPC(0x12, ListSize) \
+    OPC(0x13, ListResize) \
+    OPC(0x14, ListGetI32) \
+    OPC(0x15, ListSetI32) \
+    OPC(0x16, ListGetRef) \
+    OPC(0x17, ListSetRef) \
+    RSV(0x18) \
+    RSV(0x19) \
+    RSV(0x1A) \
+    RSV(0x1B) \
+    RSV(0x1C) \
+    RSV(0x1D) \
+    OPC(0x1E, SelectI32) \
+    OPC(0x1F, SelectRef) \
+    OPC(0x20, SwitchI32) \
+    OPC(0x21, SwitchRef) \
+    OPC(0x22, AddI32) \
+    OPC(0x23, SubI32) \
+    OPC(0x24, MulI32) \
+    OPC(0x25, DivI32S) \
+    OPC(0x26, DivI32U) \
+    OPC(0x27, RemI32S) \
+    OPC(0x28, RemI32U) \
+    OPC(0x29, NotI32) \
+    OPC(0x2A, AndI32) \
+    OPC(0x2B, OrI32) \
+    OPC(0x2C, XorI32) \
+    OPC(0x2D, ShlI32) \
+    OPC(0x2E, ShrI32S) \
+    OPC(0x2F, ShrI32U) \
+    RSV(0x30) \
+    OPC(0x31, TruncI32I8) \
+    OPC(0x32, TruncI32I16) \
+    OPC(0x33, ExtI8I32S) \
+    OPC(0x34, ExtI8I32U) \
+    OPC(0x35, ExtI16I32S) \
+    OPC(0x36, ExtI16I32U) \
+    RSV(0x37) \
+    RSV(0x38) \
+    RSV(0x39) \
+    RSV(0x3A) \
+    RSV(0x3B) \
+    RSV(0x3C) \
+    RSV(0x3D) \
+    RSV(0x3E) \
+    RSV(0x3F) \
+    OPC(0x40, CmpEQI32) \
+    OPC(0x41, CmpNEI32) \
+    OPC(0x42, CmpLTI32S) \
+    OPC(0x43, CmpLTI32U) \
+    RSV(0x44) \
+    RSV(0x45) \
+    RSV(0x46) \
+    RSV(0x47) \
+    RSV(0x48) \
+    RSV(0x49) \
+    OPC(0x4A, CmpEQRef) \
+    OPC(0x4B, CmpNERef) \
+    OPC(0x4C, CmpNZRef) \
+    OPC(0x4D, CmpNZI32) \
+    RSV(0x4E) \
+    RSV(0x4F) \
+    OPC(0x50, Branch) \
+    OPC(0x51, CondBranch) \
+    OPC(0x52, Call) \
+    OPC(0x53, CallVariadic) \
+    OPC(0x54, Return) \
+    OPC(0x55, Fail) \
+    RSV(0x56) \
+    RSV(0x57) \
+    RSV(0x58) \
+    RSV(0x59) \
+    RSV(0x5A) \
+    RSV(0x5B) \
+    RSV(0x5C) \
+    RSV(0x5D) \
+    RSV(0x5E) \
+    RSV(0x5F) \
+    OPC(0x60, Yield) \
+    RSV(0x61) \
+    RSV(0x62) \
+    RSV(0x63) \
+    RSV(0x64) \
+    RSV(0x65) \
+    RSV(0x66) \
+    RSV(0x67) \
+    RSV(0x68) \
+    RSV(0x69) \
+    RSV(0x6A) \
+    RSV(0x6B) \
+    RSV(0x6C) \
+    RSV(0x6D) \
+    RSV(0x6E) \
+    RSV(0x6F) \
+    RSV(0x70) \
+    RSV(0x71) \
+    RSV(0x72) \
+    RSV(0x73) \
+    RSV(0x74) \
+    RSV(0x75) \
+    RSV(0x76) \
+    RSV(0x77) \
+    RSV(0x78) \
+    RSV(0x79) \
+    RSV(0x7A) \
+    RSV(0x7B) \
+    OPC(0x7C, Trace) \
+    OPC(0x7D, Print) \
+    OPC(0x7E, CondBreak) \
+    OPC(0x7F, Break) \
+    RSV(0x80) \
+    RSV(0x81) \
+    RSV(0x82) \
+    RSV(0x83) \
+    RSV(0x84) \
+    RSV(0x85) \
+    RSV(0x86) \
+    RSV(0x87) \
+    RSV(0x88) \
+    RSV(0x89) \
+    RSV(0x8A) \
+    RSV(0x8B) \
+    RSV(0x8C) \
+    RSV(0x8D) \
+    RSV(0x8E) \
+    RSV(0x8F) \
+    RSV(0x90) \
+    RSV(0x91) \
+    RSV(0x92) \
+    RSV(0x93) \
+    RSV(0x94) \
+    RSV(0x95) \
+    RSV(0x96) \
+    RSV(0x97) \
+    RSV(0x98) \
+    RSV(0x99) \
+    RSV(0x9A) \
+    RSV(0x9B) \
+    RSV(0x9C) \
+    RSV(0x9D) \
+    RSV(0x9E) \
+    RSV(0x9F) \
+    OPC(0xA0, PrefixExtI64) \
+    OPC(0xA1, PrefixExtF32) \
+    OPC(0xA2, PrefixExtF64) \
+    RSV(0xA3) \
+    RSV(0xA4) \
+    RSV(0xA5) \
+    RSV(0xA6) \
+    RSV(0xA7) \
+    RSV(0xA8) \
+    RSV(0xA9) \
+    RSV(0xAA) \
+    RSV(0xAB) \
+    RSV(0xAC) \
+    RSV(0xAD) \
+    RSV(0xAE) \
+    RSV(0xAF) \
+    RSV(0xB0) \
+    RSV(0xB1) \
+    RSV(0xB2) \
+    RSV(0xB3) \
+    RSV(0xB4) \
+    RSV(0xB5) \
+    RSV(0xB6) \
+    RSV(0xB7) \
+    RSV(0xB8) \
+    RSV(0xB9) \
+    RSV(0xBA) \
+    RSV(0xBB) \
+    RSV(0xBC) \
+    RSV(0xBD) \
+    RSV(0xBE) \
+    RSV(0xBF) \
+    RSV(0xC0) \
+    RSV(0xC1) \
+    RSV(0xC2) \
+    RSV(0xC3) \
+    RSV(0xC4) \
+    RSV(0xC5) \
+    RSV(0xC6) \
+    RSV(0xC7) \
+    RSV(0xC8) \
+    RSV(0xC9) \
+    RSV(0xCA) \
+    RSV(0xCB) \
+    RSV(0xCC) \
+    RSV(0xCD) \
+    RSV(0xCE) \
+    RSV(0xCF) \
+    RSV(0xD0) \
+    RSV(0xD1) \
+    RSV(0xD2) \
+    RSV(0xD3) \
+    RSV(0xD4) \
+    RSV(0xD5) \
+    RSV(0xD6) \
+    RSV(0xD7) \
+    RSV(0xD8) \
+    RSV(0xD9) \
+    RSV(0xDA) \
+    RSV(0xDB) \
+    RSV(0xDC) \
+    RSV(0xDD) \
+    RSV(0xDE) \
+    RSV(0xDF) \
+    RSV(0xE0) \
+    RSV(0xE1) \
+    RSV(0xE2) \
+    RSV(0xE3) \
+    RSV(0xE4) \
+    RSV(0xE5) \
+    RSV(0xE6) \
+    RSV(0xE7) \
+    RSV(0xE8) \
+    RSV(0xE9) \
+    RSV(0xEA) \
+    RSV(0xEB) \
+    RSV(0xEC) \
+    RSV(0xED) \
+    RSV(0xEE) \
+    RSV(0xEF) \
+    RSV(0xF0) \
+    RSV(0xF1) \
+    RSV(0xF2) \
+    RSV(0xF3) \
+    RSV(0xF4) \
+    RSV(0xF5) \
+    RSV(0xF6) \
+    RSV(0xF7) \
+    RSV(0xF8) \
+    RSV(0xF9) \
+    RSV(0xFA) \
+    RSV(0xFB) \
+    RSV(0xFC) \
+    RSV(0xFD) \
+    RSV(0xFE) \
+    RSV(0xFF)
+
+typedef enum {
+  IREE_VM_OP_EXT_I64_GlobalLoadI64 = 0x00,
+  IREE_VM_OP_EXT_I64_GlobalStoreI64 = 0x01,
+  IREE_VM_OP_EXT_I64_GlobalLoadIndirectI64 = 0x02,
+  IREE_VM_OP_EXT_I64_GlobalStoreIndirectI64 = 0x03,
+  IREE_VM_OP_EXT_I64_RSV_0x04,
+  IREE_VM_OP_EXT_I64_RSV_0x05,
+  IREE_VM_OP_EXT_I64_RSV_0x06,
+  IREE_VM_OP_EXT_I64_RSV_0x07,
+  IREE_VM_OP_EXT_I64_ConstI64Zero = 0x08,
+  IREE_VM_OP_EXT_I64_ConstI64 = 0x09,
+  IREE_VM_OP_EXT_I64_RSV_0x0A,
+  IREE_VM_OP_EXT_I64_RSV_0x0B,
+  IREE_VM_OP_EXT_I64_RSV_0x0C,
+  IREE_VM_OP_EXT_I64_RSV_0x0D,
+  IREE_VM_OP_EXT_I64_RSV_0x0E,
+  IREE_VM_OP_EXT_I64_RSV_0x0F,
+  IREE_VM_OP_EXT_I64_RSV_0x10,
+  IREE_VM_OP_EXT_I64_RSV_0x11,
+  IREE_VM_OP_EXT_I64_RSV_0x12,
+  IREE_VM_OP_EXT_I64_RSV_0x13,
+  IREE_VM_OP_EXT_I64_ListGetI64 = 0x14,
+  IREE_VM_OP_EXT_I64_ListSetI64 = 0x15,
+  IREE_VM_OP_EXT_I64_RSV_0x16,
+  IREE_VM_OP_EXT_I64_RSV_0x17,
+  IREE_VM_OP_EXT_I64_RSV_0x18,
+  IREE_VM_OP_EXT_I64_RSV_0x19,
+  IREE_VM_OP_EXT_I64_RSV_0x1A,
+  IREE_VM_OP_EXT_I64_RSV_0x1B,
+  IREE_VM_OP_EXT_I64_RSV_0x1C,
+  IREE_VM_OP_EXT_I64_RSV_0x1D,
+  IREE_VM_OP_EXT_I64_SelectI64 = 0x1E,
+  IREE_VM_OP_EXT_I64_RSV_0x1F,
+  IREE_VM_OP_EXT_I64_SwitchI64 = 0x20,
+  IREE_VM_OP_EXT_I64_RSV_0x21,
+  IREE_VM_OP_EXT_I64_AddI64 = 0x22,
+  IREE_VM_OP_EXT_I64_SubI64 = 0x23,
+  IREE_VM_OP_EXT_I64_MulI64 = 0x24,
+  IREE_VM_OP_EXT_I64_DivI64S = 0x25,
+  IREE_VM_OP_EXT_I64_DivI64U = 0x26,
+  IREE_VM_OP_EXT_I64_RemI64S = 0x27,
+  IREE_VM_OP_EXT_I64_RemI64U = 0x28,
+  IREE_VM_OP_EXT_I64_NotI64 = 0x29,
+  IREE_VM_OP_EXT_I64_AndI64 = 0x2A,
+  IREE_VM_OP_EXT_I64_OrI64 = 0x2B,
+  IREE_VM_OP_EXT_I64_XorI64 = 0x2C,
+  IREE_VM_OP_EXT_I64_ShlI64 = 0x2D,
+  IREE_VM_OP_EXT_I64_ShrI64S = 0x2E,
+  IREE_VM_OP_EXT_I64_ShrI64U = 0x2F,
+  IREE_VM_OP_EXT_I64_RSV_0x30,
+  IREE_VM_OP_EXT_I64_RSV_0x31,
+  IREE_VM_OP_EXT_I64_TruncI64I32 = 0x32,
+  IREE_VM_OP_EXT_I64_RSV_0x33,
+  IREE_VM_OP_EXT_I64_RSV_0x34,
+  IREE_VM_OP_EXT_I64_RSV_0x35,
+  IREE_VM_OP_EXT_I64_RSV_0x36,
+  IREE_VM_OP_EXT_I64_ExtI32I64S = 0x37,
+  IREE_VM_OP_EXT_I64_ExtI32I64U = 0x38,
+  IREE_VM_OP_EXT_I64_RSV_0x39,
+  IREE_VM_OP_EXT_I64_RSV_0x3A,
+  IREE_VM_OP_EXT_I64_RSV_0x3B,
+  IREE_VM_OP_EXT_I64_RSV_0x3C,
+  IREE_VM_OP_EXT_I64_RSV_0x3D,
+  IREE_VM_OP_EXT_I64_RSV_0x3E,
+  IREE_VM_OP_EXT_I64_RSV_0x3F,
+  IREE_VM_OP_EXT_I64_CmpEQI64 = 0x40,
+  IREE_VM_OP_EXT_I64_CmpNEI64 = 0x41,
+  IREE_VM_OP_EXT_I64_CmpLTI64S = 0x42,
+  IREE_VM_OP_EXT_I64_CmpLTI64U = 0x43,
+  IREE_VM_OP_EXT_I64_RSV_0x44,
+  IREE_VM_OP_EXT_I64_RSV_0x45,
+  IREE_VM_OP_EXT_I64_RSV_0x46,
+  IREE_VM_OP_EXT_I64_RSV_0x47,
+  IREE_VM_OP_EXT_I64_RSV_0x48,
+  IREE_VM_OP_EXT_I64_RSV_0x49,
+  IREE_VM_OP_EXT_I64_RSV_0x4A,
+  IREE_VM_OP_EXT_I64_RSV_0x4B,
+  IREE_VM_OP_EXT_I64_RSV_0x4C,
+  IREE_VM_OP_EXT_I64_CmpNZI64 = 0x4D,
+  IREE_VM_OP_EXT_I64_RSV_0x4E,
+  IREE_VM_OP_EXT_I64_RSV_0x4F,
+  IREE_VM_OP_EXT_I64_RSV_0x50,
+  IREE_VM_OP_EXT_I64_RSV_0x51,
+  IREE_VM_OP_EXT_I64_RSV_0x52,
+  IREE_VM_OP_EXT_I64_RSV_0x53,
+  IREE_VM_OP_EXT_I64_RSV_0x54,
+  IREE_VM_OP_EXT_I64_RSV_0x55,
+  IREE_VM_OP_EXT_I64_RSV_0x56,
+  IREE_VM_OP_EXT_I64_RSV_0x57,
+  IREE_VM_OP_EXT_I64_RSV_0x58,
+  IREE_VM_OP_EXT_I64_RSV_0x59,
+  IREE_VM_OP_EXT_I64_RSV_0x5A,
+  IREE_VM_OP_EXT_I64_RSV_0x5B,
+  IREE_VM_OP_EXT_I64_RSV_0x5C,
+  IREE_VM_OP_EXT_I64_RSV_0x5D,
+  IREE_VM_OP_EXT_I64_RSV_0x5E,
+  IREE_VM_OP_EXT_I64_RSV_0x5F,
+  IREE_VM_OP_EXT_I64_RSV_0x60,
+  IREE_VM_OP_EXT_I64_RSV_0x61,
+  IREE_VM_OP_EXT_I64_RSV_0x62,
+  IREE_VM_OP_EXT_I64_RSV_0x63,
+  IREE_VM_OP_EXT_I64_RSV_0x64,
+  IREE_VM_OP_EXT_I64_RSV_0x65,
+  IREE_VM_OP_EXT_I64_RSV_0x66,
+  IREE_VM_OP_EXT_I64_RSV_0x67,
+  IREE_VM_OP_EXT_I64_RSV_0x68,
+  IREE_VM_OP_EXT_I64_RSV_0x69,
+  IREE_VM_OP_EXT_I64_RSV_0x6A,
+  IREE_VM_OP_EXT_I64_RSV_0x6B,
+  IREE_VM_OP_EXT_I64_RSV_0x6C,
+  IREE_VM_OP_EXT_I64_RSV_0x6D,
+  IREE_VM_OP_EXT_I64_RSV_0x6E,
+  IREE_VM_OP_EXT_I64_RSV_0x6F,
+  IREE_VM_OP_EXT_I64_RSV_0x70,
+  IREE_VM_OP_EXT_I64_RSV_0x71,
+  IREE_VM_OP_EXT_I64_RSV_0x72,
+  IREE_VM_OP_EXT_I64_RSV_0x73,
+  IREE_VM_OP_EXT_I64_RSV_0x74,
+  IREE_VM_OP_EXT_I64_RSV_0x75,
+  IREE_VM_OP_EXT_I64_RSV_0x76,
+  IREE_VM_OP_EXT_I64_RSV_0x77,
+  IREE_VM_OP_EXT_I64_RSV_0x78,
+  IREE_VM_OP_EXT_I64_RSV_0x79,
+  IREE_VM_OP_EXT_I64_RSV_0x7A,
+  IREE_VM_OP_EXT_I64_RSV_0x7B,
+  IREE_VM_OP_EXT_I64_RSV_0x7C,
+  IREE_VM_OP_EXT_I64_RSV_0x7D,
+  IREE_VM_OP_EXT_I64_RSV_0x7E,
+  IREE_VM_OP_EXT_I64_RSV_0x7F,
+  IREE_VM_OP_EXT_I64_RSV_0x80,
+  IREE_VM_OP_EXT_I64_RSV_0x81,
+  IREE_VM_OP_EXT_I64_RSV_0x82,
+  IREE_VM_OP_EXT_I64_RSV_0x83,
+  IREE_VM_OP_EXT_I64_RSV_0x84,
+  IREE_VM_OP_EXT_I64_RSV_0x85,
+  IREE_VM_OP_EXT_I64_RSV_0x86,
+  IREE_VM_OP_EXT_I64_RSV_0x87,
+  IREE_VM_OP_EXT_I64_RSV_0x88,
+  IREE_VM_OP_EXT_I64_RSV_0x89,
+  IREE_VM_OP_EXT_I64_RSV_0x8A,
+  IREE_VM_OP_EXT_I64_RSV_0x8B,
+  IREE_VM_OP_EXT_I64_RSV_0x8C,
+  IREE_VM_OP_EXT_I64_RSV_0x8D,
+  IREE_VM_OP_EXT_I64_RSV_0x8E,
+  IREE_VM_OP_EXT_I64_RSV_0x8F,
+  IREE_VM_OP_EXT_I64_RSV_0x90,
+  IREE_VM_OP_EXT_I64_RSV_0x91,
+  IREE_VM_OP_EXT_I64_RSV_0x92,
+  IREE_VM_OP_EXT_I64_RSV_0x93,
+  IREE_VM_OP_EXT_I64_RSV_0x94,
+  IREE_VM_OP_EXT_I64_RSV_0x95,
+  IREE_VM_OP_EXT_I64_RSV_0x96,
+  IREE_VM_OP_EXT_I64_RSV_0x97,
+  IREE_VM_OP_EXT_I64_RSV_0x98,
+  IREE_VM_OP_EXT_I64_RSV_0x99,
+  IREE_VM_OP_EXT_I64_RSV_0x9A,
+  IREE_VM_OP_EXT_I64_RSV_0x9B,
+  IREE_VM_OP_EXT_I64_RSV_0x9C,
+  IREE_VM_OP_EXT_I64_RSV_0x9D,
+  IREE_VM_OP_EXT_I64_RSV_0x9E,
+  IREE_VM_OP_EXT_I64_RSV_0x9F,
+  IREE_VM_OP_EXT_I64_RSV_0xA0,
+  IREE_VM_OP_EXT_I64_RSV_0xA1,
+  IREE_VM_OP_EXT_I64_RSV_0xA2,
+  IREE_VM_OP_EXT_I64_RSV_0xA3,
+  IREE_VM_OP_EXT_I64_RSV_0xA4,
+  IREE_VM_OP_EXT_I64_RSV_0xA5,
+  IREE_VM_OP_EXT_I64_RSV_0xA6,
+  IREE_VM_OP_EXT_I64_RSV_0xA7,
+  IREE_VM_OP_EXT_I64_RSV_0xA8,
+  IREE_VM_OP_EXT_I64_RSV_0xA9,
+  IREE_VM_OP_EXT_I64_RSV_0xAA,
+  IREE_VM_OP_EXT_I64_RSV_0xAB,
+  IREE_VM_OP_EXT_I64_RSV_0xAC,
+  IREE_VM_OP_EXT_I64_RSV_0xAD,
+  IREE_VM_OP_EXT_I64_RSV_0xAE,
+  IREE_VM_OP_EXT_I64_RSV_0xAF,
+  IREE_VM_OP_EXT_I64_RSV_0xB0,
+  IREE_VM_OP_EXT_I64_RSV_0xB1,
+  IREE_VM_OP_EXT_I64_RSV_0xB2,
+  IREE_VM_OP_EXT_I64_RSV_0xB3,
+  IREE_VM_OP_EXT_I64_RSV_0xB4,
+  IREE_VM_OP_EXT_I64_RSV_0xB5,
+  IREE_VM_OP_EXT_I64_RSV_0xB6,
+  IREE_VM_OP_EXT_I64_RSV_0xB7,
+  IREE_VM_OP_EXT_I64_RSV_0xB8,
+  IREE_VM_OP_EXT_I64_RSV_0xB9,
+  IREE_VM_OP_EXT_I64_RSV_0xBA,
+  IREE_VM_OP_EXT_I64_RSV_0xBB,
+  IREE_VM_OP_EXT_I64_RSV_0xBC,
+  IREE_VM_OP_EXT_I64_RSV_0xBD,
+  IREE_VM_OP_EXT_I64_RSV_0xBE,
+  IREE_VM_OP_EXT_I64_RSV_0xBF,
+  IREE_VM_OP_EXT_I64_RSV_0xC0,
+  IREE_VM_OP_EXT_I64_RSV_0xC1,
+  IREE_VM_OP_EXT_I64_RSV_0xC2,
+  IREE_VM_OP_EXT_I64_RSV_0xC3,
+  IREE_VM_OP_EXT_I64_RSV_0xC4,
+  IREE_VM_OP_EXT_I64_RSV_0xC5,
+  IREE_VM_OP_EXT_I64_RSV_0xC6,
+  IREE_VM_OP_EXT_I64_RSV_0xC7,
+  IREE_VM_OP_EXT_I64_RSV_0xC8,
+  IREE_VM_OP_EXT_I64_RSV_0xC9,
+  IREE_VM_OP_EXT_I64_RSV_0xCA,
+  IREE_VM_OP_EXT_I64_RSV_0xCB,
+  IREE_VM_OP_EXT_I64_RSV_0xCC,
+  IREE_VM_OP_EXT_I64_RSV_0xCD,
+  IREE_VM_OP_EXT_I64_RSV_0xCE,
+  IREE_VM_OP_EXT_I64_RSV_0xCF,
+  IREE_VM_OP_EXT_I64_RSV_0xD0,
+  IREE_VM_OP_EXT_I64_RSV_0xD1,
+  IREE_VM_OP_EXT_I64_RSV_0xD2,
+  IREE_VM_OP_EXT_I64_RSV_0xD3,
+  IREE_VM_OP_EXT_I64_RSV_0xD4,
+  IREE_VM_OP_EXT_I64_RSV_0xD5,
+  IREE_VM_OP_EXT_I64_RSV_0xD6,
+  IREE_VM_OP_EXT_I64_RSV_0xD7,
+  IREE_VM_OP_EXT_I64_RSV_0xD8,
+  IREE_VM_OP_EXT_I64_RSV_0xD9,
+  IREE_VM_OP_EXT_I64_RSV_0xDA,
+  IREE_VM_OP_EXT_I64_RSV_0xDB,
+  IREE_VM_OP_EXT_I64_RSV_0xDC,
+  IREE_VM_OP_EXT_I64_RSV_0xDD,
+  IREE_VM_OP_EXT_I64_RSV_0xDE,
+  IREE_VM_OP_EXT_I64_RSV_0xDF,
+  IREE_VM_OP_EXT_I64_RSV_0xE0,
+  IREE_VM_OP_EXT_I64_RSV_0xE1,
+  IREE_VM_OP_EXT_I64_RSV_0xE2,
+  IREE_VM_OP_EXT_I64_RSV_0xE3,
+  IREE_VM_OP_EXT_I64_RSV_0xE4,
+  IREE_VM_OP_EXT_I64_RSV_0xE5,
+  IREE_VM_OP_EXT_I64_RSV_0xE6,
+  IREE_VM_OP_EXT_I64_RSV_0xE7,
+  IREE_VM_OP_EXT_I64_RSV_0xE8,
+  IREE_VM_OP_EXT_I64_RSV_0xE9,
+  IREE_VM_OP_EXT_I64_RSV_0xEA,
+  IREE_VM_OP_EXT_I64_RSV_0xEB,
+  IREE_VM_OP_EXT_I64_RSV_0xEC,
+  IREE_VM_OP_EXT_I64_RSV_0xED,
+  IREE_VM_OP_EXT_I64_RSV_0xEE,
+  IREE_VM_OP_EXT_I64_RSV_0xEF,
+  IREE_VM_OP_EXT_I64_RSV_0xF0,
+  IREE_VM_OP_EXT_I64_RSV_0xF1,
+  IREE_VM_OP_EXT_I64_RSV_0xF2,
+  IREE_VM_OP_EXT_I64_RSV_0xF3,
+  IREE_VM_OP_EXT_I64_RSV_0xF4,
+  IREE_VM_OP_EXT_I64_RSV_0xF5,
+  IREE_VM_OP_EXT_I64_RSV_0xF6,
+  IREE_VM_OP_EXT_I64_RSV_0xF7,
+  IREE_VM_OP_EXT_I64_RSV_0xF8,
+  IREE_VM_OP_EXT_I64_RSV_0xF9,
+  IREE_VM_OP_EXT_I64_RSV_0xFA,
+  IREE_VM_OP_EXT_I64_RSV_0xFB,
+  IREE_VM_OP_EXT_I64_RSV_0xFC,
+  IREE_VM_OP_EXT_I64_RSV_0xFD,
+  IREE_VM_OP_EXT_I64_RSV_0xFE,
+  IREE_VM_OP_EXT_I64_RSV_0xFF,
+} iree_vm_ext_i64_op_t;
+
+#define IREE_VM_OP_EXT_I64_TABLE(OPC, RSV) \
+    OPC(0x00, GlobalLoadI64) \
+    OPC(0x01, GlobalStoreI64) \
+    OPC(0x02, GlobalLoadIndirectI64) \
+    OPC(0x03, GlobalStoreIndirectI64) \
+    RSV(0x04) \
+    RSV(0x05) \
+    RSV(0x06) \
+    RSV(0x07) \
+    OPC(0x08, ConstI64Zero) \
+    OPC(0x09, ConstI64) \
+    RSV(0x0A) \
+    RSV(0x0B) \
+    RSV(0x0C) \
+    RSV(0x0D) \
+    RSV(0x0E) \
+    RSV(0x0F) \
+    RSV(0x10) \
+    RSV(0x11) \
+    RSV(0x12) \
+    RSV(0x13) \
+    OPC(0x14, ListGetI64) \
+    OPC(0x15, ListSetI64) \
+    RSV(0x16) \
+    RSV(0x17) \
+    RSV(0x18) \
+    RSV(0x19) \
+    RSV(0x1A) \
+    RSV(0x1B) \
+    RSV(0x1C) \
+    RSV(0x1D) \
+    OPC(0x1E, SelectI64) \
+    RSV(0x1F) \
+    OPC(0x20, SwitchI64) \
+    RSV(0x21) \
+    OPC(0x22, AddI64) \
+    OPC(0x23, SubI64) \
+    OPC(0x24, MulI64) \
+    OPC(0x25, DivI64S) \
+    OPC(0x26, DivI64U) \
+    OPC(0x27, RemI64S) \
+    OPC(0x28, RemI64U) \
+    OPC(0x29, NotI64) \
+    OPC(0x2A, AndI64) \
+    OPC(0x2B, OrI64) \
+    OPC(0x2C, XorI64) \
+    OPC(0x2D, ShlI64) \
+    OPC(0x2E, ShrI64S) \
+    OPC(0x2F, ShrI64U) \
+    RSV(0x30) \
+    RSV(0x31) \
+    OPC(0x32, TruncI64I32) \
+    RSV(0x33) \
+    RSV(0x34) \
+    RSV(0x35) \
+    RSV(0x36) \
+    OPC(0x37, ExtI32I64S) \
+    OPC(0x38, ExtI32I64U) \
+    RSV(0x39) \
+    RSV(0x3A) \
+    RSV(0x3B) \
+    RSV(0x3C) \
+    RSV(0x3D) \
+    RSV(0x3E) \
+    RSV(0x3F) \
+    OPC(0x40, CmpEQI64) \
+    OPC(0x41, CmpNEI64) \
+    OPC(0x42, CmpLTI64S) \
+    OPC(0x43, CmpLTI64U) \
+    RSV(0x44) \
+    RSV(0x45) \
+    RSV(0x46) \
+    RSV(0x47) \
+    RSV(0x48) \
+    RSV(0x49) \
+    RSV(0x4A) \
+    RSV(0x4B) \
+    RSV(0x4C) \
+    OPC(0x4D, CmpNZI64) \
+    RSV(0x4E) \
+    RSV(0x4F) \
+    RSV(0x50) \
+    RSV(0x51) \
+    RSV(0x52) \
+    RSV(0x53) \
+    RSV(0x54) \
+    RSV(0x55) \
+    RSV(0x56) \
+    RSV(0x57) \
+    RSV(0x58) \
+    RSV(0x59) \
+    RSV(0x5A) \
+    RSV(0x5B) \
+    RSV(0x5C) \
+    RSV(0x5D) \
+    RSV(0x5E) \
+    RSV(0x5F) \
+    RSV(0x60) \
+    RSV(0x61) \
+    RSV(0x62) \
+    RSV(0x63) \
+    RSV(0x64) \
+    RSV(0x65) \
+    RSV(0x66) \
+    RSV(0x67) \
+    RSV(0x68) \
+    RSV(0x69) \
+    RSV(0x6A) \
+    RSV(0x6B) \
+    RSV(0x6C) \
+    RSV(0x6D) \
+    RSV(0x6E) \
+    RSV(0x6F) \
+    RSV(0x70) \
+    RSV(0x71) \
+    RSV(0x72) \
+    RSV(0x73) \
+    RSV(0x74) \
+    RSV(0x75) \
+    RSV(0x76) \
+    RSV(0x77) \
+    RSV(0x78) \
+    RSV(0x79) \
+    RSV(0x7A) \
+    RSV(0x7B) \
+    RSV(0x7C) \
+    RSV(0x7D) \
+    RSV(0x7E) \
+    RSV(0x7F) \
+    RSV(0x80) \
+    RSV(0x81) \
+    RSV(0x82) \
+    RSV(0x83) \
+    RSV(0x84) \
+    RSV(0x85) \
+    RSV(0x86) \
+    RSV(0x87) \
+    RSV(0x88) \
+    RSV(0x89) \
+    RSV(0x8A) \
+    RSV(0x8B) \
+    RSV(0x8C) \
+    RSV(0x8D) \
+    RSV(0x8E) \
+    RSV(0x8F) \
+    RSV(0x90) \
+    RSV(0x91) \
+    RSV(0x92) \
+    RSV(0x93) \
+    RSV(0x94) \
+    RSV(0x95) \
+    RSV(0x96) \
+    RSV(0x97) \
+    RSV(0x98) \
+    RSV(0x99) \
+    RSV(0x9A) \
+    RSV(0x9B) \
+    RSV(0x9C) \
+    RSV(0x9D) \
+    RSV(0x9E) \
+    RSV(0x9F) \
+    RSV(0xA0) \
+    RSV(0xA1) \
+    RSV(0xA2) \
+    RSV(0xA3) \
+    RSV(0xA4) \
+    RSV(0xA5) \
+    RSV(0xA6) \
+    RSV(0xA7) \
+    RSV(0xA8) \
+    RSV(0xA9) \
+    RSV(0xAA) \
+    RSV(0xAB) \
+    RSV(0xAC) \
+    RSV(0xAD) \
+    RSV(0xAE) \
+    RSV(0xAF) \
+    RSV(0xB0) \
+    RSV(0xB1) \
+    RSV(0xB2) \
+    RSV(0xB3) \
+    RSV(0xB4) \
+    RSV(0xB5) \
+    RSV(0xB6) \
+    RSV(0xB7) \
+    RSV(0xB8) \
+    RSV(0xB9) \
+    RSV(0xBA) \
+    RSV(0xBB) \
+    RSV(0xBC) \
+    RSV(0xBD) \
+    RSV(0xBE) \
+    RSV(0xBF) \
+    RSV(0xC0) \
+    RSV(0xC1) \
+    RSV(0xC2) \
+    RSV(0xC3) \
+    RSV(0xC4) \
+    RSV(0xC5) \
+    RSV(0xC6) \
+    RSV(0xC7) \
+    RSV(0xC8) \
+    RSV(0xC9) \
+    RSV(0xCA) \
+    RSV(0xCB) \
+    RSV(0xCC) \
+    RSV(0xCD) \
+    RSV(0xCE) \
+    RSV(0xCF) \
+    RSV(0xD0) \
+    RSV(0xD1) \
+    RSV(0xD2) \
+    RSV(0xD3) \
+    RSV(0xD4) \
+    RSV(0xD5) \
+    RSV(0xD6) \
+    RSV(0xD7) \
+    RSV(0xD8) \
+    RSV(0xD9) \
+    RSV(0xDA) \
+    RSV(0xDB) \
+    RSV(0xDC) \
+    RSV(0xDD) \
+    RSV(0xDE) \
+    RSV(0xDF) \
+    RSV(0xE0) \
+    RSV(0xE1) \
+    RSV(0xE2) \
+    RSV(0xE3) \
+    RSV(0xE4) \
+    RSV(0xE5) \
+    RSV(0xE6) \
+    RSV(0xE7) \
+    RSV(0xE8) \
+    RSV(0xE9) \
+    RSV(0xEA) \
+    RSV(0xEB) \
+    RSV(0xEC) \
+    RSV(0xED) \
+    RSV(0xEE) \
+    RSV(0xEF) \
+    RSV(0xF0) \
+    RSV(0xF1) \
+    RSV(0xF2) \
+    RSV(0xF3) \
+    RSV(0xF4) \
+    RSV(0xF5) \
+    RSV(0xF6) \
+    RSV(0xF7) \
+    RSV(0xF8) \
+    RSV(0xF9) \
+    RSV(0xFA) \
+    RSV(0xFB) \
+    RSV(0xFC) \
+    RSV(0xFD) \
+    RSV(0xFE) \
+    RSV(0xFF)
+
diff --git a/scripts/get_e2e_artifacts.py b/scripts/get_e2e_artifacts.py
index 21d9259..3b5fd62 100755
--- a/scripts/get_e2e_artifacts.py
+++ b/scripts/get_e2e_artifacts.py
@@ -163,7 +163,7 @@
     command = ['bazel', 'test', *test_suites, '--color=yes']
     print(f'Running: `{" ".join(command)}`')
     if not FLAGS.dry_run:
-      subprocess.check_call(command)
+      subprocess.run(command, check=True)
     print()
 
   written_paths = set()
diff --git a/scripts/git/submodule_versions.py b/scripts/git/submodule_versions.py
index d3e2c61..d578286 100755
--- a/scripts/git/submodule_versions.py
+++ b/scripts/git/submodule_versions.py
@@ -46,7 +46,7 @@
   raw_status = utils.execute(["git", "submodule", "status"],
                              cwd=repo_dir,
                              silent=True,
-                             capture_output=True).decode("UTF-8")
+                             capture_output=True).stdout
   status_lines = []
   for line in raw_status.splitlines():
     # Format is a status char followed by revision, space and path.
@@ -105,7 +105,7 @@
              "still in the version file") % (path,))
       continue
     if written is None:
-      print("Warning: Submodule %s is not in the version file" % (current,))
+      print(f"Warning: Submodule '{current}' is not in the version file")
       continue
     # Directly update the submodule commit hash in the index.
     # See: https://stackoverflow.com/questions/33514642
@@ -138,7 +138,7 @@
         "  ./scripts/git/submodule_versions.py export # Use version in git state ('actual')"
     )
     for k, (current, written) in diff_versions.items():
-      print("%s : actual=%s written=%s" % (k, current, written))
+      print(f"{k} : actual={current} written={written}")
     return False
   return True
 
diff --git a/scripts/git/update_to_llvm_syncpoint.py b/scripts/git/update_to_llvm_syncpoint.py
index d543b48..0775bb1 100755
--- a/scripts/git/update_to_llvm_syncpoint.py
+++ b/scripts/git/update_to_llvm_syncpoint.py
@@ -152,8 +152,7 @@
   return utils.execute(["git", "rev-parse", rev],
                        cwd=path,
                        silent=True,
-                       capture_output=True,
-                       universal_newlines=True).strip()
+                       capture_output=True).stdout.strip()
 
 
 def find_new_llvm_bazel_commit(llvm_bazel_path, llvm_commit, llvm_bazel_commit):
@@ -192,8 +191,7 @@
   return utils.execute(
       ["git", "submodule", "status", "third_party/llvm-project"],
       capture_output=True,
-      universal_newlines=True,
-      cwd=llvm_bazel_path).split()[0].lstrip("+-")
+      cwd=llvm_bazel_path).stdout.split()[0].lstrip("+-")
 
 
 def find_new_tf_commit(tensorflow_path, llvm_commit, tf_commit):
@@ -233,8 +231,7 @@
           "tensorflow/workspace.bzl"
       ],
       capture_output=True,
-      universal_newlines=True,
-      cwd=tensorflow_path).split()
+      cwd=tensorflow_path).stdout.split()
   if len(tf_integrate_commits) > 2:
     raise RuntimeError(
         f"Expected one or two TF commits to involve LLVM commit {llvm_commit},"
diff --git a/scripts/git/utils.py b/scripts/git/utils.py
index b4328e7..cbeb29e 100644
--- a/scripts/git/utils.py
+++ b/scripts/git/utils.py
@@ -25,7 +25,7 @@
   return execute(["git", "rev-parse", "--show-toplevel"],
                  cwd=os.path.dirname(__file__),
                  capture_output=True,
-                 silent=True).strip().decode("UTF-8")
+                 silent=True).stdout.strip()
 
 
 def str2bool(v):
@@ -42,22 +42,30 @@
     raise argparse.ArgumentTypeError("Boolean value expected.")
 
 
-def execute(args, cwd, capture_output=False, silent=False, **kwargs):
+def execute(args, cwd, capture_output=False, text=True, silent=False, **kwargs):
   """Executes a command.
 
   Args:
     args: List of command line arguments.
     cwd: Directory to execute in.
     capture_output: Whether to capture the output.
+    text: Whether or not to treat std* as text (as opposed to binary streams).
     silent: Whether to skip logging the invocation.
     **kwargs: Extra arguments to pass to subprocess.exec
 
   Returns:
-    The output if capture_output, otherwise None.
+    A subprocess.CompletedProcess
   """
   if not silent:
-    print("+", " ".join(args), "  [from %s]" % cwd)
+    print(f"+{' '.join(args)}  [from {cwd}]")
   if capture_output:
-    return subprocess.check_output(args, cwd=cwd, **kwargs)
-  else:
-    return subprocess.check_call(args, cwd=cwd, **kwargs)
+    # TODO(#4131) python>=3.7: Use capture_output=True.
+    kwargs["stdout"] = subprocess.PIPE
+    kwargs["stderr"] = subprocess.PIPE
+  return subprocess.run(
+      args,
+      cwd=cwd,
+      check=True,
+      # TODO(#4131) python>=3.7: Replace 'universal_newlines' with 'text'.
+      universal_newlines=text,
+      **kwargs)
diff --git a/scripts/update_e2e_coverage.py b/scripts/update_e2e_coverage.py
index fba79b2..3de3738 100755
--- a/scripts/update_e2e_coverage.py
+++ b/scripts/update_e2e_coverage.py
@@ -30,6 +30,7 @@
 REFERENCE_BACKEND = 'tf'
 # Assumes that tests are expanded for the tf, iree_vmla, and
 # iree_vulkan backends.
+# TODO(#4131) python>=3.7: Remove redundant OrderedDict
 BACKENDS_TO_TITLES = collections.OrderedDict([
     ('tf', 'tensorflow'),
     ('tflite', 'tflite'),
diff --git a/scripts/update_op_coverage.py b/scripts/update_op_coverage.py
index 575a390..77ce782 100755
--- a/scripts/update_op_coverage.py
+++ b/scripts/update_op_coverage.py
@@ -79,9 +79,15 @@
 def get_tested_ops_for_backends(build_dir):
   """Parses current op tests for each backend."""
 
-  ctest_output = subprocess.check_output(
-      ['ctest', '-N', '-L', E2E_XLA_OPS_PATH], cwd=build_dir)
-  tests = ctest_output.decode('ascii').strip().split('\n')
+  completed_process = subprocess.run(
+      ['ctest', '-N', '-L', E2E_XLA_OPS_PATH],
+      cwd=build_dir,
+      # TODO(#4131) python>=3.7: Use capture_output=True.
+      stderr=subprocess.PIPE,
+      stdout=subprocess.PIPE,
+      # TODO(#4131) python>=3.7: Replace 'universal_newlines' with 'text'.
+      universal_newlines=True)
+  tests = completed_process.stdout.strip().split('\n')
   res = collections.defaultdict(list)
   for t in tests:
     if not t.endswith('.mlir'):
diff --git a/scripts/utils.py b/scripts/utils.py
index 870044b..313dd65 100644
--- a/scripts/utils.py
+++ b/scripts/utils.py
@@ -33,10 +33,13 @@
   print(f'Running: `{" ".join(command)}`')
   if dry_run:
     return None, None
-  process = subprocess.run(command,
-                           stderr=subprocess.PIPE,
-                           stdout=subprocess.PIPE,
-                           universal_newlines=True)
+  process = subprocess.run(
+      command,
+      # TODO(#4131) python>=3.7: Use capture_output=True.
+      stderr=subprocess.PIPE,
+      stdout=subprocess.PIPE,
+      # TODO(#4131) python>=3.7: Replace 'universal_newlines' with 'text'.
+      universal_newlines=True)
 
   if log_stderr:
     for line in process.stderr.splitlines():
diff --git a/third_party/dear_imgui b/third_party/dear_imgui
deleted file mode 160000
index 4c13807..0000000
--- a/third_party/dear_imgui
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 4c13807b7d43ff0946b7ffea0ae3aee9e611d778
diff --git a/third_party/sdl2 b/third_party/sdl2
deleted file mode 160000
index a1390ed..0000000
--- a/third_party/sdl2
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit a1390ed39ec77ecfb574bc6fcd5bfc5e3adbdea9