Enable selecting which drivers to build in Bazel (#8646)

This is using the new-ish build settings configuration. With this, you
can do something like
`bazel build --iree_drivers=dylib //iree/tools:iree-run-module` to only
build with the dylib driver.
diff --git a/build_tools/bazel/iree.bazelrc b/build_tools/bazel/iree.bazelrc
index a87d62a..440931d 100644
--- a/build_tools/bazel/iree.bazelrc
+++ b/build_tools/bazel/iree.bazelrc
@@ -28,13 +28,17 @@
 startup --windows_enable_symlinks
 build --enable_runfiles
 
-
 # TODO: Transition to the explicit init_py mechanism. See #2405
 # This is commented out while considering transition path but left as a
 # breadcrumb.
 # build --incompatible_default_to_explicit_init_py
 
 ###############################################################################
+# Build settings flag aliases. See https://bazel.build/rules/config
+###############################################################################
+build --flag_alias=iree_drivers=//iree/hal/drivers:enabled_drivers
+
+###############################################################################
 # Options for "generic_gcc" builds
 ###############################################################################
 
diff --git a/iree/build_defs.oss.bzl b/iree/build_defs.oss.bzl
index f9693c6..96dba99 100644
--- a/iree/build_defs.oss.bzl
+++ b/iree/build_defs.oss.bzl
@@ -6,14 +6,6 @@
 
 """Common Bazel definitions for IREE."""
 
-# Target to the FileCheck binary.
-INTREE_FILECHECK_TARGET = "@llvm-project//llvm:FileCheck"
-
-# Temporarily disabled pending build system changes.
-IREE_CUDA_DEPS = [
-    # "//iree/hal/cuda/registration"
-]
-
 def platform_trampoline_deps(basename, path = "base"):
     """Produce a list of deps for the given `basename` platform target.
 
diff --git a/iree/hal/drivers/BUILD b/iree/hal/drivers/BUILD
index e383732..f474292 100644
--- a/iree/hal/drivers/BUILD
+++ b/iree/hal/drivers/BUILD
@@ -4,7 +4,7 @@
 # See https://llvm.org/LICENSE.txt for license information.
 # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 
-load("//iree:build_defs.oss.bzl", "IREE_CUDA_DEPS")
+load("@bazel_skylib//rules:common_settings.bzl", "string_list_flag")
 
 package(
     default_visibility = ["//visibility:public"],
@@ -12,19 +12,65 @@
     licenses = ["notice"],  # Apache 2.0
 )
 
+ALL_DRIVERS = [
+    "dylib",
+    "dylib-sync",
+    "vmvx",
+    "vmvx-sync",
+    "vulkan",
+    "cuda",
+]
+
+string_list_flag(
+    name = "enabled_drivers",
+    build_setting_default = [
+        "dylib",
+        "dylib-sync",
+        "vmvx",
+        "vmvx-sync",
+        "vulkan",
+    ],
+)
+
+[
+    config_setting(
+        name = "{}_enabled".format(driver),
+        flag_values = {
+            ":enabled_drivers": driver,
+        },
+    )
+    for driver in ALL_DRIVERS
+]
+
 cc_library(
     name = "drivers",
     srcs = ["init.c"],
     hdrs = ["init.h"],
     deps = [
-        "//iree/base",
-        "//iree/base:tracing",
-    ] + [
-        # TODO(*): select() and only pull in based on build configuration.
-        "//iree/hal/dylib/registration",
-        "//iree/hal/dylib/registration:sync",
-        "//iree/hal/vmvx/registration",
-        "//iree/hal/vmvx/registration:sync",
-        "//iree/hal/vulkan/registration",
-    ] + IREE_CUDA_DEPS,
+               "//iree/base",
+               "//iree/base:tracing",
+           ] + select({
+               ":dylib_enabled": ["//iree/hal/dylib/registration"],
+               "//conditions:default": [],
+           }) +
+           select({
+               ":dylib-sync_enabled": ["//iree/hal/dylib/registration:sync"],
+               "//conditions:default": [],
+           }) +
+           select({
+               ":vmvx_enabled": ["//iree/hal/vmvx/registration"],
+               "//conditions:default": [],
+           }) +
+           select({
+               ":vmvx-sync_enabled": ["//iree/hal/vmvx/registration:sync"],
+               "//conditions:default": [],
+           }) +
+           select({
+               ":vulkan_enabled": ["//iree/hal/vulkan/registration"],
+               "//conditions:default": [],
+           }) +
+           select({
+               ":cuda_enabled": ["//iree/hal/cuda/registration"],
+               "//conditions:default": [],
+           }),
 )