Introduce IREE_{HAL_DRIVERS,TARGET_BACKENDS}_TO_BUILD to CMake configuration

* Introduces `IREE_HAL_DRIVERS_TO_BUILD` and `IREE_TARGET_BACKENDS_TO_BUILD`
* Generates `IREE_HAL_DRIVER_*` variables based on configuration
* Generates `IREE_TARGET_BACKEND_*` variables based on configuration

Closes https://github.com/google/iree/pull/1831

COPYBARA_INTEGRATE_REVIEW=https://github.com/google/iree/pull/1831 from iml130:cmake-iree-backends e6e28433cace64e59962e7499ee7c97667f4ab91
PiperOrigin-RevId: 310616379
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3c646e8..ddca5cb 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -43,6 +43,12 @@
 option(IREE_BUILD_PYTHON_BINDINGS "Builds the IREE python bindings" OFF)
 option(IREE_BUILD_EXPERIMENTAL "Builds experimental projects." OFF)
 
+#TODO: Make this functional!
+set(IREE_HAL_DRIVERS_TO_BUILD "all"
+  CACHE STRING "Semicolon-separated list of HAL drivers to build, or \"all\"." FORCE)
+set(IREE_TARGET_BACKENDS_TO_BUILD "all"
+  CACHE STRING "Semicolon-separated list of target backends to build, or \"all\"." FORCE)
+
 if(${IREE_BUILD_SAMPLES} OR ${IREE_BUILD_EXPERIMENTAL})
   set(IREE_BUILD_COMPILER ON CACHE BOOL "Build the IREE compiler for sample projects." FORCE)
 endif()
@@ -55,6 +61,56 @@
 # IREE-specific CMake configuration
 #-------------------------------------------------------------------------------
 
+# List of all HAL drivers to be built by default:
+set(IREE_ALL_HAL_DRIVERS
+  LLVM
+  Vulkan
+  VMLA
+)
+
+if( IREE_HAL_DRIVERS_TO_BUILD STREQUAL "all" )
+  set( IREE_HAL_DRIVERS_TO_BUILD ${IREE_ALL_HAL_DRIVERS} )
+endif()
+message(STATUS "Building HAL drivers ${IREE_HAL_DRIVERS_TO_BUILD}")
+
+# Default every IREE_HAL_DRIVER_* to OFF
+foreach(_backend ${IREE_ALL_HAL_DRIVERS})
+  string(TOUPPER "${_backend}" uppercase_backend)
+  set(IREE_HAL_DRIVER_${uppercase_backend} OFF CACHE BOOL "" FORCE)
+endforeach()
+
+# Set IREE_HAL_DRIVER_* based on configuration
+foreach(_backend ${IREE_HAL_DRIVERS_TO_BUILD})
+  string(TOUPPER "${_backend}" uppercase_backend)
+  set(IREE_HAL_DRIVER_${uppercase_backend} ON CACHE BOOL "" FORCE)
+endforeach()
+
+
+# List of all target backends to be built by default:
+set(IREE_ALL_TARGET_BACKENDS
+  LLVMIR
+  Vulkan_SPIRV
+  VMLA
+)
+
+if( IREE_TARGET_BACKENDS_TO_BUILD STREQUAL "all" )
+  set( IREE_TARGET_BACKENDS_TO_BUILD ${IREE_ALL_TARGET_BACKENDS} )
+endif()
+message(STATUS "Building target backends ${IREE_TARGET_BACKENDS_TO_BUILD}")
+
+# Default every IREE_TARGET_BACKEND_* to OFF
+foreach(_backend ${IREE_ALL_TARGET_BACKENDS})
+  string(TOUPPER "${_backend}" uppercase_backend)
+  set(IREE_TARGET_BACKEND_${uppercase_backend} OFF CACHE BOOL "" FORCE)
+endforeach()
+
+# Set IREE_TARGET_BACKEND_* based on configuration
+foreach(_backend ${IREE_TARGET_BACKENDS_TO_BUILD})
+  string(TOUPPER "${_backend}" uppercase_backend)
+  set(IREE_TARGET_BACKEND_${uppercase_backend} ON CACHE BOOL "" FORCE)
+endforeach()
+
+
 list(APPEND CMAKE_MODULE_PATH
   ${CMAKE_CURRENT_LIST_DIR}/build_tools/cmake/
   ${CMAKE_CURRENT_LIST_DIR}/bindings/python/build_tools/cmake/