Create a shared utils folder.

This CL creates a `src/utils` folder and adds a `compiler.h` header. A
define is pulled out of the Dawn common compilers file and the tint
macros compiler file and added to the header.

The define is the same, just for `TINT_` or `DAWN_`. It will be
collapsed to a single define in a future CL.

Change-Id: Idb420cee2803a23353d3fa8b893db35fd7069206
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/203694
Commit-Queue: dan sinclair <dsinclair@chromium.org>
Reviewed-by: James Price <jrprice@google.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/dawn/common/BUILD.gn b/src/dawn/common/BUILD.gn
index 33ac021..63d20a8 100644
--- a/src/dawn/common/BUILD.gn
+++ b/src/dawn/common/BUILD.gn
@@ -328,6 +328,7 @@
       ":dawn_gpu_info_gen",
       ":dawn_version_gen",
       "${dawn_root}/src/dawn/partition_alloc:raw_ptr",
+      "${dawn_root}/src/utils:utils",
     ]
 
     if (is_apple) {
diff --git a/src/dawn/common/CMakeLists.txt b/src/dawn/common/CMakeLists.txt
index 9ea5ef5..aa0e401 100644
--- a/src/dawn/common/CMakeLists.txt
+++ b/src/dawn/common/CMakeLists.txt
@@ -172,5 +172,6 @@
     PRIVATE_DEPENDS
         absl::inlined_vector
         dawn::partition_alloc
+        dawn_shared_utils
         ${conditional_private_depends}
 )
diff --git a/src/dawn/common/Compiler.h b/src/dawn/common/Compiler.h
index 936646f..2ccb57a 100644
--- a/src/dawn/common/Compiler.h
+++ b/src/dawn/common/Compiler.h
@@ -28,6 +28,8 @@
 #ifndef SRC_DAWN_COMMON_COMPILER_H_
 #define SRC_DAWN_COMMON_COMPILER_H_
 
+#include "src/utils/compiler.h"
+
 // Defines macros for compiler-specific functionality
 
 // DAWN_COMPILER_IS(CLANG|GCC|MSVC): Compiler detection
@@ -55,25 +57,6 @@
 // code block as usage of undefined macro "function" will be blocked by the compiler.
 #define DAWN_COMPILER_IS(X) (1 == DAWN_COMPILER_IS_##X)
 
-// DAWN_HAS_ATTRIBUTE
-//
-// A wrapper around `__has_attribute`. This test whether its operand is recognized by the compiler.
-#if defined(__has_attribute)
-#define DAWN_HAS_ATTRIBUTE(x) __has_attribute(x)
-#else
-#define DAWN_HAS_ATTRIBUTE(x) 0
-#endif
-
-// DAWN_HAS_CPP_ATTRIBUTE
-//
-// A wrapper around `__has_cpp_attribute`. This test whether its operand is recognized by the
-// compiler.
-#if defined(__has_cpp_attribute)
-#define DAWN_HAS_CPP_ATTRIBUTE(x) __has_cpp_attribute(x)
-#else
-#define DAWN_HAS_CPP_ATTRIBUTE(x) 0
-#endif
-
 // DAWN_BUILTIN_UNREACHABLE()
 //
 // Hints the compiler that a code path is unreachable.
diff --git a/src/dawn/tests/BUILD.gn b/src/dawn/tests/BUILD.gn
index 957178b..803baf5 100644
--- a/src/dawn/tests/BUILD.gn
+++ b/src/dawn/tests/BUILD.gn
@@ -47,6 +47,7 @@
     ":dawn_perf_tests",
     ":dawn_unittests",
     "${dawn_root}/src/dawn/tests/benchmarks:dawn_benchmarks",
+    "${dawn_root}/src/utils",
   ]
 }
 
diff --git a/src/tint/CMakeLists.txt b/src/tint/CMakeLists.txt
index fdb4c02..61f4f4d 100644
--- a/src/tint/CMakeLists.txt
+++ b/src/tint/CMakeLists.txt
@@ -575,6 +575,8 @@
       target_link_libraries(${TARGET} PRIVATE Threads::Threads)
     elseif(${DEPENDENCY} STREQUAL "winsock")
       target_link_libraries(${TARGET} PRIVATE ws2_32)
+    elseif(${DEPENDENCY} STREQUAL "src_utils")
+      target_link_libraries(${TARGET} PRIVATE dawn_shared_utils)
     else()
       message(FATAL_ERROR "unhandled external dependency ${DEPENDENCY}")
     endif()
diff --git a/src/tint/api/BUILD.bazel b/src/tint/api/BUILD.bazel
index 4a82e4b..8a0a6c4 100644
--- a/src/tint/api/BUILD.bazel
+++ b/src/tint/api/BUILD.bazel
@@ -72,6 +72,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ] + select({
     ":tint_build_glsl_writer": [
       "//src/tint/lang/glsl/writer",
diff --git a/src/tint/api/BUILD.cmake b/src/tint/api/BUILD.cmake
index f851c9b..0037d83 100644
--- a/src/tint/api/BUILD.cmake
+++ b/src/tint/api/BUILD.cmake
@@ -75,6 +75,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_api lib
+  "src_utils"
+)
+
 if(TINT_BUILD_GLSL_WRITER)
   tint_target_add_dependencies(tint_api lib
     tint_lang_glsl_writer
diff --git a/src/tint/api/BUILD.gn b/src/tint/api/BUILD.gn
index 183e21a..f446619 100644
--- a/src/tint/api/BUILD.gn
+++ b/src/tint/api/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -44,6 +45,7 @@
     "tint.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/api/common",
     "${tint_src_dir}/lang/core",
     "${tint_src_dir}/lang/core/constant",
diff --git a/src/tint/api/common/BUILD.bazel b/src/tint/api/common/BUILD.bazel
index e16a4a4..e48f69f 100644
--- a/src/tint/api/common/BUILD.bazel
+++ b/src/tint/api/common/BUILD.bazel
@@ -57,6 +57,7 @@
     "//src/tint/utils/rtti",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -82,6 +83,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
diff --git a/src/tint/api/common/BUILD.cmake b/src/tint/api/common/BUILD.cmake
index 2b7ce2c..9238962 100644
--- a/src/tint/api/common/BUILD.cmake
+++ b/src/tint/api/common/BUILD.cmake
@@ -58,6 +58,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_api_common lib
+  "src_utils"
+)
+
 ################################################################################
 # Target:    tint_api_common_test
 # Kind:      test
@@ -84,4 +88,5 @@
 
 tint_target_add_external_dependencies(tint_api_common_test test
   "gtest"
+  "src_utils"
 )
diff --git a/src/tint/api/common/BUILD.gn b/src/tint/api/common/BUILD.gn
index 52cf871..66b41e0 100644
--- a/src/tint/api/common/BUILD.gn
+++ b/src/tint/api/common/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -49,6 +50,7 @@
     "override_id.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/utils/containers",
     "${tint_src_dir}/utils/diagnostic",
     "${tint_src_dir}/utils/ice",
@@ -69,6 +71,7 @@
       "override_id_test.cc",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}:gmock_and_gtest",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/utils/containers",
diff --git a/src/tint/cmd/BUILD.gn b/src/tint/cmd/BUILD.gn
index e74a2fd..9806aa3 100644
--- a/src/tint/cmd/BUILD.gn
+++ b/src/tint/cmd/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
diff --git a/src/tint/cmd/bench/BUILD.bazel b/src/tint/cmd/bench/BUILD.bazel
index 71fa1c6..d201733 100644
--- a/src/tint/cmd/bench/BUILD.bazel
+++ b/src/tint/cmd/bench/BUILD.bazel
@@ -69,6 +69,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@benchmark",
+    "//src/utils",
   ] + select({
     ":tint_build_wgsl_reader": [
       "//src/tint/lang/wgsl/reader",
@@ -108,6 +109,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@benchmark",
+    "//src/utils",
   ] + select({
     ":tint_build_glsl_writer_and_tint_build_wgsl_reader": [
       "//src/tint/lang/glsl/writer:bench",
diff --git a/src/tint/cmd/bench/BUILD.cmake b/src/tint/cmd/bench/BUILD.cmake
index 2edf7a4..525e29a 100644
--- a/src/tint/cmd/bench/BUILD.cmake
+++ b/src/tint/cmd/bench/BUILD.cmake
@@ -72,6 +72,7 @@
 
 tint_target_add_external_dependencies(tint_cmd_bench_bench_cmd bench_cmd
   "google-benchmark"
+  "src_utils"
 )
 
 if(TINT_BUILD_GLSL_WRITER AND TINT_BUILD_WGSL_READER)
@@ -155,6 +156,7 @@
 
 tint_target_add_external_dependencies(tint_cmd_bench_bench bench
   "google-benchmark"
+  "src_utils"
 )
 
 if(TINT_BUILD_WGSL_READER)
diff --git a/src/tint/cmd/bench/BUILD.gn b/src/tint/cmd/bench/BUILD.gn
index 972a603..4451261 100644
--- a/src/tint/cmd/bench/BUILD.gn
+++ b/src/tint/cmd/bench/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -49,6 +50,7 @@
         "bench.h",
       ]
       deps = [
+        "${dawn_root}/src/utils:utils",
         "${tint_src_dir}:google_benchmark",
         "${tint_src_dir}/api/common",
         "${tint_src_dir}/lang/core",
@@ -89,6 +91,7 @@
       output_name = "tint_benchmark"
       sources = [ "main_bench.cc" ]
       deps = [
+        "${dawn_root}/src/utils:utils",
         "${tint_src_dir}:google_benchmark",
         "${tint_src_dir}/lang/core",
         "${tint_src_dir}/lang/core:bench",
diff --git a/src/tint/cmd/common/BUILD.bazel b/src/tint/cmd/common/BUILD.bazel
index b596753..1bcc65d 100644
--- a/src/tint/cmd/common/BUILD.bazel
+++ b/src/tint/cmd/common/BUILD.bazel
@@ -71,6 +71,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ] + select({
     ":tint_build_spv_reader": [
       "//src/tint/lang/spirv/reader",
diff --git a/src/tint/cmd/common/BUILD.cmake b/src/tint/cmd/common/BUILD.cmake
index bded2c4..39e5075 100644
--- a/src/tint/cmd/common/BUILD.cmake
+++ b/src/tint/cmd/common/BUILD.cmake
@@ -72,6 +72,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_cmd_common lib
+  "src_utils"
+)
+
 if(TINT_BUILD_SPV_READER)
   tint_target_add_dependencies(tint_cmd_common lib
     tint_lang_spirv_reader
diff --git a/src/tint/cmd/common/BUILD.gn b/src/tint/cmd/common/BUILD.gn
index 406273e..87f8027 100644
--- a/src/tint/cmd/common/BUILD.gn
+++ b/src/tint/cmd/common/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -44,6 +45,7 @@
     "helper.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/api/common",
     "${tint_src_dir}/lang/core",
     "${tint_src_dir}/lang/core/constant",
diff --git a/src/tint/cmd/fuzz/BUILD.gn b/src/tint/cmd/fuzz/BUILD.gn
index 6caa255..bd18a5e 100644
--- a/src/tint/cmd/fuzz/BUILD.gn
+++ b/src/tint/cmd/fuzz/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
diff --git a/src/tint/cmd/fuzz/ir/BUILD.cmake b/src/tint/cmd/fuzz/ir/BUILD.cmake
index 4054251..95c3c2b 100644
--- a/src/tint/cmd/fuzz/ir/BUILD.cmake
+++ b/src/tint/cmd/fuzz/ir/BUILD.cmake
@@ -79,6 +79,7 @@
 
 tint_target_add_external_dependencies(tint_cmd_fuzz_ir_fuzz_cmd fuzz_cmd
   "libprotobuf-mutator"
+  "src_utils"
 )
 
 if(TINT_BUILD_GLSL_WRITER)
@@ -172,6 +173,7 @@
 )
 
 tint_target_add_external_dependencies(tint_cmd_fuzz_ir_fuzz fuzz
+  "src_utils"
   "thread"
 )
 
diff --git a/src/tint/cmd/fuzz/ir/BUILD.gn b/src/tint/cmd/fuzz/ir/BUILD.gn
index 77bb0b6..b767f8d 100644
--- a/src/tint/cmd/fuzz/ir/BUILD.gn
+++ b/src/tint/cmd/fuzz/ir/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -44,6 +45,7 @@
     "fuzz.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}:thread",
     "${tint_src_dir}/api/common",
     "${tint_src_dir}/lang/core",
@@ -86,6 +88,7 @@
     output_name = "tint_ir_fuzzer"
     sources = [ "main_fuzz.cc" ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_lpm_dir}:libprotobuf-mutator",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/cmd/fuzz/ir:fuzz",
diff --git a/src/tint/cmd/fuzz/ir/as/BUILD.bazel b/src/tint/cmd/fuzz/ir/as/BUILD.bazel
index ec415fa..163dab0 100644
--- a/src/tint/cmd/fuzz/ir/as/BUILD.bazel
+++ b/src/tint/cmd/fuzz/ir/as/BUILD.bazel
@@ -72,6 +72,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ] + select({
     ":tint_build_ir_binary": [
       "//src/tint/lang/core/ir/binary",
diff --git a/src/tint/cmd/fuzz/ir/as/BUILD.cmake b/src/tint/cmd/fuzz/ir/as/BUILD.cmake
index e5a9365..33d83dd 100644
--- a/src/tint/cmd/fuzz/ir/as/BUILD.cmake
+++ b/src/tint/cmd/fuzz/ir/as/BUILD.cmake
@@ -77,6 +77,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_cmd_fuzz_ir_as_cmd cmd
+  "src_utils"
+)
+
 if(TINT_BUILD_IR_BINARY)
   tint_target_add_dependencies(tint_cmd_fuzz_ir_as_cmd cmd
     tint_lang_core_ir_binary
diff --git a/src/tint/cmd/fuzz/ir/as/BUILD.gn b/src/tint/cmd/fuzz/ir/as/BUILD.gn
index f0ed070..668bba4 100644
--- a/src/tint/cmd/fuzz/ir/as/BUILD.gn
+++ b/src/tint/cmd/fuzz/ir/as/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -42,6 +43,7 @@
     output_name = "ir_fuzz_as"
     sources = [ "main.cc" ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}/api",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/cmd/common",
diff --git a/src/tint/cmd/fuzz/ir/dis/BUILD.bazel b/src/tint/cmd/fuzz/ir/dis/BUILD.bazel
index e22b5fb..7af1050 100644
--- a/src/tint/cmd/fuzz/ir/dis/BUILD.bazel
+++ b/src/tint/cmd/fuzz/ir/dis/BUILD.bazel
@@ -72,6 +72,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ] + select({
     ":tint_build_ir_binary": [
       "//src/tint/lang/core/ir/binary",
diff --git a/src/tint/cmd/fuzz/ir/dis/BUILD.cmake b/src/tint/cmd/fuzz/ir/dis/BUILD.cmake
index cb43cb8..0925bf8 100644
--- a/src/tint/cmd/fuzz/ir/dis/BUILD.cmake
+++ b/src/tint/cmd/fuzz/ir/dis/BUILD.cmake
@@ -77,6 +77,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_cmd_fuzz_ir_dis_cmd cmd
+  "src_utils"
+)
+
 if(TINT_BUILD_IR_BINARY)
   tint_target_add_dependencies(tint_cmd_fuzz_ir_dis_cmd cmd
     tint_lang_core_ir_binary
diff --git a/src/tint/cmd/fuzz/ir/dis/BUILD.gn b/src/tint/cmd/fuzz/ir/dis/BUILD.gn
index 3e6b770..7b5fc2c 100644
--- a/src/tint/cmd/fuzz/ir/dis/BUILD.gn
+++ b/src/tint/cmd/fuzz/ir/dis/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -43,6 +44,7 @@
     output_name = "ir_fuzz_dis"
     sources = [ "main.cc" ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}/api",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/cmd/common",
diff --git a/src/tint/cmd/fuzz/wgsl/BUILD.cmake b/src/tint/cmd/fuzz/wgsl/BUILD.cmake
index c1d6d54..10bd967 100644
--- a/src/tint/cmd/fuzz/wgsl/BUILD.cmake
+++ b/src/tint/cmd/fuzz/wgsl/BUILD.cmake
@@ -77,6 +77,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_cmd_fuzz_wgsl_fuzz_cmd fuzz_cmd
+  "src_utils"
+)
+
 if(TINT_BUILD_GLSL_WRITER)
   tint_target_add_dependencies(tint_cmd_fuzz_wgsl_fuzz_cmd fuzz_cmd
     tint_lang_glsl_writer_fuzz
@@ -167,6 +171,7 @@
 )
 
 tint_target_add_external_dependencies(tint_cmd_fuzz_wgsl_fuzz fuzz
+  "src_utils"
   "thread"
 )
 
diff --git a/src/tint/cmd/fuzz/wgsl/BUILD.gn b/src/tint/cmd/fuzz/wgsl/BUILD.gn
index 794f7be..f2c75d3 100644
--- a/src/tint/cmd/fuzz/wgsl/BUILD.gn
+++ b/src/tint/cmd/fuzz/wgsl/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -44,6 +45,7 @@
       "fuzz.h",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}:thread",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
@@ -87,6 +89,7 @@
     output_name = "tint_wgsl_fuzzer"
     sources = [ "main_fuzz.cc" ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}/cmd/fuzz/ir:fuzz",
       "${tint_src_dir}/lang/core",
       "${tint_src_dir}/lang/core/constant",
diff --git a/src/tint/cmd/info/BUILD.bazel b/src/tint/cmd/info/BUILD.bazel
index a0da15d..5ecd71f 100644
--- a/src/tint/cmd/info/BUILD.bazel
+++ b/src/tint/cmd/info/BUILD.bazel
@@ -67,6 +67,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ] + select({
     ":tint_build_spv_reader": [
       "//src/tint/lang/spirv/reader/common",
diff --git a/src/tint/cmd/info/BUILD.cmake b/src/tint/cmd/info/BUILD.cmake
index 67e4554..3cec15b 100644
--- a/src/tint/cmd/info/BUILD.cmake
+++ b/src/tint/cmd/info/BUILD.cmake
@@ -70,6 +70,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_cmd_info_cmd cmd
+  "src_utils"
+)
+
 if(TINT_BUILD_SPV_READER)
   tint_target_add_dependencies(tint_cmd_info_cmd cmd
     tint_lang_spirv_reader_common
diff --git a/src/tint/cmd/info/BUILD.gn b/src/tint/cmd/info/BUILD.gn
index 96e0cf1..8390f53 100644
--- a/src/tint/cmd/info/BUILD.gn
+++ b/src/tint/cmd/info/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -42,6 +43,7 @@
   output_name = "tint_info"
   sources = [ "main.cc" ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/api/common",
     "${tint_src_dir}/cmd/common",
     "${tint_src_dir}/lang/core",
diff --git a/src/tint/cmd/loopy/BUILD.bazel b/src/tint/cmd/loopy/BUILD.bazel
index 289497a..76b2da8 100644
--- a/src/tint/cmd/loopy/BUILD.bazel
+++ b/src/tint/cmd/loopy/BUILD.bazel
@@ -74,6 +74,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ] + select({
     ":tint_build_glsl_writer": [
       "//src/tint/lang/glsl/writer",
diff --git a/src/tint/cmd/loopy/BUILD.cmake b/src/tint/cmd/loopy/BUILD.cmake
index e3d6094..a8f5ed9 100644
--- a/src/tint/cmd/loopy/BUILD.cmake
+++ b/src/tint/cmd/loopy/BUILD.cmake
@@ -77,6 +77,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_cmd_loopy_cmd cmd
+  "src_utils"
+)
+
 if(TINT_BUILD_GLSL_WRITER)
   tint_target_add_dependencies(tint_cmd_loopy_cmd cmd
     tint_lang_glsl_writer
diff --git a/src/tint/cmd/loopy/BUILD.gn b/src/tint/cmd/loopy/BUILD.gn
index cdc27e0..c91dccc 100644
--- a/src/tint/cmd/loopy/BUILD.gn
+++ b/src/tint/cmd/loopy/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -42,6 +43,7 @@
   output_name = "tint_loopy"
   sources = [ "main.cc" ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/api",
     "${tint_src_dir}/api/common",
     "${tint_src_dir}/cmd/common",
diff --git a/src/tint/cmd/remote_compile/BUILD.bazel b/src/tint/cmd/remote_compile/BUILD.bazel
index 501d62a..a1de2dd 100644
--- a/src/tint/cmd/remote_compile/BUILD.bazel
+++ b/src/tint/cmd/remote_compile/BUILD.bazel
@@ -44,6 +44,7 @@
   deps = [
     "//src/tint/utils/macros",
     "//src/tint/utils/socket",
+    "//src/utils",
     
   ] + select({
     ":tint_build_msl_writer": [
diff --git a/src/tint/cmd/remote_compile/BUILD.cmake b/src/tint/cmd/remote_compile/BUILD.cmake
index 6841744..7225189 100644
--- a/src/tint/cmd/remote_compile/BUILD.cmake
+++ b/src/tint/cmd/remote_compile/BUILD.cmake
@@ -48,6 +48,7 @@
 )
 
 tint_target_add_external_dependencies(tint_cmd_remote_compile_cmd cmd
+  "src_utils"
   "thread"
 )
 
diff --git a/src/tint/cmd/remote_compile/BUILD.gn b/src/tint/cmd/remote_compile/BUILD.gn
index 6653c2a..df4481b 100644
--- a/src/tint/cmd/remote_compile/BUILD.gn
+++ b/src/tint/cmd/remote_compile/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -42,6 +43,7 @@
   output_name = "tint_remote_compile"
   sources = [ "main.cc" ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}:thread",
     "${tint_src_dir}/utils/macros",
     "${tint_src_dir}/utils/socket",
diff --git a/src/tint/cmd/test/BUILD.gn b/src/tint/cmd/test/BUILD.gn
index 531072b..82a7a14 100644
--- a/src/tint/cmd/test/BUILD.gn
+++ b/src/tint/cmd/test/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
diff --git a/src/tint/cmd/tint/BUILD.bazel b/src/tint/cmd/tint/BUILD.bazel
index 20bcb5c..bc96798 100644
--- a/src/tint/cmd/tint/BUILD.bazel
+++ b/src/tint/cmd/tint/BUILD.bazel
@@ -77,6 +77,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ] + select({
     ":tint_build_glsl_validator": [
       "//src/tint/lang/glsl/validate",
diff --git a/src/tint/cmd/tint/BUILD.cmake b/src/tint/cmd/tint/BUILD.cmake
index 7b9a8bb..5e7d586 100644
--- a/src/tint/cmd/tint/BUILD.cmake
+++ b/src/tint/cmd/tint/BUILD.cmake
@@ -80,6 +80,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_cmd_tint_cmd cmd
+  "src_utils"
+)
+
 if(TINT_BUILD_GLSL_VALIDATOR)
   tint_target_add_dependencies(tint_cmd_tint_cmd cmd
     tint_lang_glsl_validate
diff --git a/src/tint/cmd/tint/BUILD.gn b/src/tint/cmd/tint/BUILD.gn
index d0eef178..03bc510 100644
--- a/src/tint/cmd/tint/BUILD.gn
+++ b/src/tint/cmd/tint/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -42,6 +43,7 @@
   output_name = "tint"
   sources = [ "main.cc" ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/api",
     "${tint_src_dir}/api/common",
     "${tint_src_dir}/cmd/common",
diff --git a/src/tint/cmd/tintd/BUILD.bazel b/src/tint/cmd/tintd/BUILD.bazel
index 3139cdf..4def12d 100644
--- a/src/tint/cmd/tintd/BUILD.bazel
+++ b/src/tint/cmd/tintd/BUILD.bazel
@@ -52,6 +52,7 @@
     "//src/tint/utils/rtti",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ] + select({
     ":tint_build_tintd": [
       
diff --git a/src/tint/cmd/tintd/BUILD.cmake b/src/tint/cmd/tintd/BUILD.cmake
index f950a1f..48cf2ae 100644
--- a/src/tint/cmd/tintd/BUILD.cmake
+++ b/src/tint/cmd/tintd/BUILD.cmake
@@ -57,6 +57,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_cmd_tintd_cmd cmd
+  "src_utils"
+)
+
 if(TINT_BUILD_TINTD)
   tint_target_add_external_dependencies(tint_cmd_tintd_cmd cmd
     "langsvr"
diff --git a/src/tint/cmd/tintd/BUILD.gn b/src/tint/cmd/tintd/BUILD.gn
index af1da9e..72e9ef4 100644
--- a/src/tint/cmd/tintd/BUILD.gn
+++ b/src/tint/cmd/tintd/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -42,6 +43,7 @@
     output_name = "tintd"
     sources = [ "main.cc" ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}/utils/containers",
       "${tint_src_dir}/utils/diagnostic",
       "${tint_src_dir}/utils/ice",
diff --git a/src/tint/externals.json b/src/tint/externals.json
index 52150c0..f579a54 100644
--- a/src/tint/externals.json
+++ b/src/tint/externals.json
@@ -97,5 +97,10 @@
       "IncludePatterns": [
           "libprotobuf-mutator/**"
       ]
+    },
+    "src_utils": {
+        "IncludePatterns": [
+            "src/utils/*",
+        ]
     }
 }
diff --git a/src/tint/lang/BUILD.gn b/src/tint/lang/BUILD.gn
index e74a2fd..9806aa3 100644
--- a/src/tint/lang/BUILD.gn
+++ b/src/tint/lang/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
diff --git a/src/tint/lang/core/BUILD.bazel b/src/tint/lang/core/BUILD.bazel
index 267f36e..4c70a64 100644
--- a/src/tint/lang/core/BUILD.bazel
+++ b/src/tint/lang/core/BUILD.bazel
@@ -86,6 +86,7 @@
     "//src/tint/utils/rtti",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -128,6 +129,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -159,6 +161,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@benchmark",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
diff --git a/src/tint/lang/core/BUILD.cmake b/src/tint/lang/core/BUILD.cmake
index a21f703..2ed5fff 100644
--- a/src/tint/lang/core/BUILD.cmake
+++ b/src/tint/lang/core/BUILD.cmake
@@ -93,6 +93,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_core lib
+  "src_utils"
+)
+
 ################################################################################
 # Target:    tint_lang_core_test
 # Kind:      test
@@ -136,6 +140,7 @@
 
 tint_target_add_external_dependencies(tint_lang_core_test test
   "gtest"
+  "src_utils"
 )
 
 ################################################################################
@@ -170,4 +175,5 @@
 
 tint_target_add_external_dependencies(tint_lang_core_bench bench
   "google-benchmark"
+  "src_utils"
 )
diff --git a/src/tint/lang/core/BUILD.gn b/src/tint/lang/core/BUILD.gn
index 52ebd03..ecbec13 100644
--- a/src/tint/lang/core/BUILD.gn
+++ b/src/tint/lang/core/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -78,6 +79,7 @@
     "unary_op.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/utils/containers",
     "${tint_src_dir}/utils/diagnostic",
     "${tint_src_dir}/utils/ice",
@@ -105,6 +107,7 @@
       "texel_format_test.cc",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}:gmock_and_gtest",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
@@ -144,6 +147,7 @@
       "texel_format_bench.cc",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}:google_benchmark",
       "${tint_src_dir}/lang/core",
       "${tint_src_dir}/utils/containers",
diff --git a/src/tint/lang/core/common/BUILD.bazel b/src/tint/lang/core/common/BUILD.bazel
index 407371f..e79e60e 100644
--- a/src/tint/lang/core/common/BUILD.bazel
+++ b/src/tint/lang/core/common/BUILD.bazel
@@ -57,6 +57,7 @@
     "//src/tint/utils/rtti",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
diff --git a/src/tint/lang/core/common/BUILD.cmake b/src/tint/lang/core/common/BUILD.cmake
index ab7d6ce..13d3f53 100644
--- a/src/tint/lang/core/common/BUILD.cmake
+++ b/src/tint/lang/core/common/BUILD.cmake
@@ -57,3 +57,7 @@
   tint_utils_text
   tint_utils_traits
 )
+
+tint_target_add_external_dependencies(tint_lang_core_common lib
+  "src_utils"
+)
diff --git a/src/tint/lang/core/common/BUILD.gn b/src/tint/lang/core/common/BUILD.gn
index 76fc9e1..4da896c 100644
--- a/src/tint/lang/core/common/BUILD.gn
+++ b/src/tint/lang/core/common/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -44,6 +45,7 @@
     "placeholder.cc",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/api/common",
     "${tint_src_dir}/utils/containers",
     "${tint_src_dir}/utils/diagnostic",
diff --git a/src/tint/lang/core/constant/BUILD.bazel b/src/tint/lang/core/constant/BUILD.bazel
index c58c65c..fbc06f4 100644
--- a/src/tint/lang/core/constant/BUILD.bazel
+++ b/src/tint/lang/core/constant/BUILD.bazel
@@ -75,6 +75,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -132,6 +133,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ] + select({
     ":tint_build_wgsl_reader": [
       "//src/tint/lang/wgsl/reader",
diff --git a/src/tint/lang/core/constant/BUILD.cmake b/src/tint/lang/core/constant/BUILD.cmake
index c4f4558..35d1c74 100644
--- a/src/tint/lang/core/constant/BUILD.cmake
+++ b/src/tint/lang/core/constant/BUILD.cmake
@@ -76,6 +76,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_core_constant lib
+  "src_utils"
+)
+
 ################################################################################
 # Target:    tint_lang_core_constant_test
 # Kind:      test
@@ -134,6 +138,7 @@
 
 tint_target_add_external_dependencies(tint_lang_core_constant_test test
   "gtest"
+  "src_utils"
 )
 
 if(TINT_BUILD_WGSL_READER)
diff --git a/src/tint/lang/core/constant/BUILD.gn b/src/tint/lang/core/constant/BUILD.gn
index 2a343e5..949c0e3 100644
--- a/src/tint/lang/core/constant/BUILD.gn
+++ b/src/tint/lang/core/constant/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -63,6 +64,7 @@
     "value.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/lang/core",
     "${tint_src_dir}/lang/core/type",
     "${tint_src_dir}/utils/containers",
@@ -102,6 +104,7 @@
       "value_test.cc",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}:gmock_and_gtest",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
diff --git a/src/tint/lang/core/intrinsic/BUILD.bazel b/src/tint/lang/core/intrinsic/BUILD.bazel
index 9ca5899..d7b926b 100644
--- a/src/tint/lang/core/intrinsic/BUILD.bazel
+++ b/src/tint/lang/core/intrinsic/BUILD.bazel
@@ -67,6 +67,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -105,6 +106,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
diff --git a/src/tint/lang/core/intrinsic/BUILD.cmake b/src/tint/lang/core/intrinsic/BUILD.cmake
index e7ae1e6..71cdcbe 100644
--- a/src/tint/lang/core/intrinsic/BUILD.cmake
+++ b/src/tint/lang/core/intrinsic/BUILD.cmake
@@ -68,6 +68,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_core_intrinsic lib
+  "src_utils"
+)
+
 ################################################################################
 # Target:    tint_lang_core_intrinsic_test
 # Kind:      test
@@ -107,4 +111,5 @@
 
 tint_target_add_external_dependencies(tint_lang_core_intrinsic_test test
   "gtest"
+  "src_utils"
 )
diff --git a/src/tint/lang/core/intrinsic/BUILD.gn b/src/tint/lang/core/intrinsic/BUILD.gn
index 8544d8e..ca234cf 100644
--- a/src/tint/lang/core/intrinsic/BUILD.gn
+++ b/src/tint/lang/core/intrinsic/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -54,6 +55,7 @@
     "type_matchers.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/lang/core",
     "${tint_src_dir}/lang/core/constant",
     "${tint_src_dir}/lang/core/type",
@@ -76,6 +78,7 @@
   tint_unittests_source_set("unittests") {
     sources = [ "table_test.cc" ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}:gmock_and_gtest",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
diff --git a/src/tint/lang/core/ir/BUILD.bazel b/src/tint/lang/core/ir/BUILD.bazel
index 7012c69..b525147 100644
--- a/src/tint/lang/core/ir/BUILD.bazel
+++ b/src/tint/lang/core/ir/BUILD.bazel
@@ -167,6 +167,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -240,6 +241,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -276,6 +278,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@benchmark",
+    "//src/utils",
   ] + select({
     ":tint_build_wgsl_reader": [
       "//src/tint/cmd/bench:bench",
diff --git a/src/tint/lang/core/ir/BUILD.cmake b/src/tint/lang/core/ir/BUILD.cmake
index 4919831..b4d6e1d 100644
--- a/src/tint/lang/core/ir/BUILD.cmake
+++ b/src/tint/lang/core/ir/BUILD.cmake
@@ -171,6 +171,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_core_ir lib
+  "src_utils"
+)
+
 ################################################################################
 # Target:    tint_lang_core_ir_test
 # Kind:      test
@@ -245,6 +249,7 @@
 
 tint_target_add_external_dependencies(tint_lang_core_ir_test test
   "gtest"
+  "src_utils"
 )
 
 if(TINT_BUILD_WGSL_READER)
@@ -286,6 +291,7 @@
 
 tint_target_add_external_dependencies(tint_lang_core_ir_bench bench
   "google-benchmark"
+  "src_utils"
 )
 
 if(TINT_BUILD_WGSL_READER)
diff --git a/src/tint/lang/core/ir/BUILD.gn b/src/tint/lang/core/ir/BUILD.gn
index 85973b6..86ec6bd 100644
--- a/src/tint/lang/core/ir/BUILD.gn
+++ b/src/tint/lang/core/ir/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -152,6 +153,7 @@
     "var.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/api/common",
     "${tint_src_dir}/lang/core",
     "${tint_src_dir}/lang/core/constant",
@@ -220,6 +222,7 @@
       "var_test.cc",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}:gmock_and_gtest",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
@@ -248,6 +251,7 @@
     tint_benchmarks_source_set("bench") {
       sources = [ "validator_bench.cc" ]
       deps = [
+        "${dawn_root}/src/utils:utils",
         "${tint_src_dir}:google_benchmark",
         "${tint_src_dir}/api/common",
         "${tint_src_dir}/lang/core",
diff --git a/src/tint/lang/core/ir/binary/BUILD.bazel b/src/tint/lang/core/ir/binary/BUILD.bazel
index e781ef7..864c3d5 100644
--- a/src/tint/lang/core/ir/binary/BUILD.bazel
+++ b/src/tint/lang/core/ir/binary/BUILD.bazel
@@ -66,6 +66,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ] + select({
     ":tint_build_ir_binary": [
       "",
@@ -103,6 +104,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ] + select({
     ":tint_build_ir_binary": [
       "//src/tint/lang/core/ir/binary",
diff --git a/src/tint/lang/core/ir/binary/BUILD.cmake b/src/tint/lang/core/ir/binary/BUILD.cmake
index 4b51be5..d5bba70 100644
--- a/src/tint/lang/core/ir/binary/BUILD.cmake
+++ b/src/tint/lang/core/ir/binary/BUILD.cmake
@@ -69,6 +69,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_core_ir_binary lib
+  "src_utils"
+)
+
 if(TINT_BUILD_IR_BINARY)
   tint_target_add_dependencies(tint_lang_core_ir_binary lib
     tint_utils_protos_ir_proto
@@ -111,6 +115,7 @@
 
 tint_target_add_external_dependencies(tint_lang_core_ir_binary_test test
   "gtest"
+  "src_utils"
 )
 
 if(TINT_BUILD_IR_BINARY)
@@ -153,6 +158,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_core_ir_binary_fuzz fuzz
+  "src_utils"
+)
+
 if(TINT_BUILD_IR_BINARY)
   tint_target_add_dependencies(tint_lang_core_ir_binary_fuzz fuzz
     tint_lang_core_ir_binary
diff --git a/src/tint/lang/core/ir/binary/BUILD.gn b/src/tint/lang/core/ir/binary/BUILD.gn
index 667d631..c708fa1 100644
--- a/src/tint/lang/core/ir/binary/BUILD.gn
+++ b/src/tint/lang/core/ir/binary/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -50,6 +51,7 @@
       "encode.h",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
       "${tint_src_dir}/lang/core/constant",
@@ -81,6 +83,7 @@
     tint_unittests_source_set("unittests") {
       sources = [ "roundtrip_test.cc" ]
       deps = [
+        "${dawn_root}/src/utils:utils",
         "${tint_src_dir}:gmock_and_gtest",
         "${tint_src_dir}/api/common",
         "${tint_src_dir}/lang/core",
@@ -114,6 +117,7 @@
   tint_fuzz_source_set("fuzz") {
     sources = [ "roundtrip_fuzz.cc" ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/cmd/fuzz/ir:fuzz",
       "${tint_src_dir}/lang/core",
diff --git a/src/tint/lang/core/ir/transform/BUILD.bazel b/src/tint/lang/core/ir/transform/BUILD.bazel
index 757fac0..e562c61 100644
--- a/src/tint/lang/core/ir/transform/BUILD.bazel
+++ b/src/tint/lang/core/ir/transform/BUILD.bazel
@@ -106,6 +106,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -176,6 +177,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ] + select({
     ":tint_build_wgsl_reader": [
       "//src/tint/lang/wgsl/reader",
diff --git a/src/tint/lang/core/ir/transform/BUILD.cmake b/src/tint/lang/core/ir/transform/BUILD.cmake
index 0395034..046016d 100644
--- a/src/tint/lang/core/ir/transform/BUILD.cmake
+++ b/src/tint/lang/core/ir/transform/BUILD.cmake
@@ -109,6 +109,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_core_ir_transform lib
+  "src_utils"
+)
+
 ################################################################################
 # Target:    tint_lang_core_ir_transform_test
 # Kind:      test
@@ -171,6 +175,7 @@
 
 tint_target_add_external_dependencies(tint_lang_core_ir_transform_test test
   "gtest"
+  "src_utils"
 )
 
 if(TINT_BUILD_WGSL_READER)
@@ -243,3 +248,7 @@
   tint_utils_text
   tint_utils_traits
 )
+
+tint_target_add_external_dependencies(tint_lang_core_ir_transform_fuzz fuzz
+  "src_utils"
+)
diff --git a/src/tint/lang/core/ir/transform/BUILD.gn b/src/tint/lang/core/ir/transform/BUILD.gn
index 95d323c..61b989a 100644
--- a/src/tint/lang/core/ir/transform/BUILD.gn
+++ b/src/tint/lang/core/ir/transform/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -88,6 +89,7 @@
     "zero_init_workgroup_memory.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/api/common",
     "${tint_src_dir}/lang/core",
     "${tint_src_dir}/lang/core/common",
@@ -137,6 +139,7 @@
       "zero_init_workgroup_memory_test.cc",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}:gmock_and_gtest",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
@@ -210,6 +213,7 @@
     "zero_init_workgroup_memory_fuzz.cc",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/api/common",
     "${tint_src_dir}/cmd/fuzz/ir:fuzz",
     "${tint_src_dir}/lang/core",
diff --git a/src/tint/lang/core/ir/transform/common/BUILD.bazel b/src/tint/lang/core/ir/transform/common/BUILD.bazel
index f05642f..c02990e 100644
--- a/src/tint/lang/core/ir/transform/common/BUILD.bazel
+++ b/src/tint/lang/core/ir/transform/common/BUILD.bazel
@@ -63,6 +63,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -96,6 +97,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
diff --git a/src/tint/lang/core/ir/transform/common/BUILD.cmake b/src/tint/lang/core/ir/transform/common/BUILD.cmake
index 7004d86..35a95e0 100644
--- a/src/tint/lang/core/ir/transform/common/BUILD.cmake
+++ b/src/tint/lang/core/ir/transform/common/BUILD.cmake
@@ -64,6 +64,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_core_ir_transform_common lib
+  "src_utils"
+)
+
 ################################################################################
 # Target:    tint_lang_core_ir_transform_common_test
 # Kind:      test
@@ -98,4 +102,5 @@
 
 tint_target_add_external_dependencies(tint_lang_core_ir_transform_common_test test
   "gtest"
+  "src_utils"
 )
diff --git a/src/tint/lang/core/ir/transform/common/BUILD.gn b/src/tint/lang/core/ir/transform/common/BUILD.gn
index d050caf..0dff5dae 100644
--- a/src/tint/lang/core/ir/transform/common/BUILD.gn
+++ b/src/tint/lang/core/ir/transform/common/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -48,6 +49,7 @@
     "referenced_module_vars.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/api/common",
     "${tint_src_dir}/lang/core",
     "${tint_src_dir}/lang/core/constant",
@@ -72,6 +74,7 @@
   tint_unittests_source_set("unittests") {
     sources = [ "referenced_module_vars_test.cc" ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}:gmock_and_gtest",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
diff --git a/src/tint/lang/core/type/BUILD.bazel b/src/tint/lang/core/type/BUILD.bazel
index 56cddca..f6cc1ba 100644
--- a/src/tint/lang/core/type/BUILD.bazel
+++ b/src/tint/lang/core/type/BUILD.bazel
@@ -138,6 +138,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -201,6 +202,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
diff --git a/src/tint/lang/core/type/BUILD.cmake b/src/tint/lang/core/type/BUILD.cmake
index 9981a56..be23e6d 100644
--- a/src/tint/lang/core/type/BUILD.cmake
+++ b/src/tint/lang/core/type/BUILD.cmake
@@ -139,6 +139,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_core_type lib
+  "src_utils"
+)
+
 ################################################################################
 # Target:    tint_lang_core_type_test
 # Kind:      test
@@ -203,4 +207,5 @@
 
 tint_target_add_external_dependencies(tint_lang_core_type_test test
   "gtest"
+  "src_utils"
 )
diff --git a/src/tint/lang/core/type/BUILD.gn b/src/tint/lang/core/type/BUILD.gn
index 988fdf5..7b6c9ad 100644
--- a/src/tint/lang/core/type/BUILD.gn
+++ b/src/tint/lang/core/type/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -127,6 +128,7 @@
     "void.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/lang/core",
     "${tint_src_dir}/utils/containers",
     "${tint_src_dir}/utils/diagnostic",
@@ -176,6 +178,7 @@
       "vector_test.cc",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}:gmock_and_gtest",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
diff --git a/src/tint/lang/glsl/BUILD.gn b/src/tint/lang/glsl/BUILD.gn
index 6caa255..bd18a5e 100644
--- a/src/tint/lang/glsl/BUILD.gn
+++ b/src/tint/lang/glsl/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
diff --git a/src/tint/lang/glsl/validate/BUILD.bazel b/src/tint/lang/glsl/validate/BUILD.bazel
index 1c3f71a..c51d7fe 100644
--- a/src/tint/lang/glsl/validate/BUILD.bazel
+++ b/src/tint/lang/glsl/validate/BUILD.bazel
@@ -56,6 +56,7 @@
     "//src/tint/utils/rtti",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ] + select({
     ":tint_build_glsl_validator": [
       
diff --git a/src/tint/lang/glsl/validate/BUILD.cmake b/src/tint/lang/glsl/validate/BUILD.cmake
index 51a2a16..0a9bad9 100644
--- a/src/tint/lang/glsl/validate/BUILD.cmake
+++ b/src/tint/lang/glsl/validate/BUILD.cmake
@@ -59,6 +59,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_glsl_validate lib
+  "src_utils"
+)
+
 if(TINT_BUILD_GLSL_VALIDATOR)
   tint_target_add_external_dependencies(tint_lang_glsl_validate lib
     "glslang"
diff --git a/src/tint/lang/glsl/validate/BUILD.gn b/src/tint/lang/glsl/validate/BUILD.gn
index 021b4b3..24ea7d6 100644
--- a/src/tint/lang/glsl/validate/BUILD.gn
+++ b/src/tint/lang/glsl/validate/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -44,6 +45,7 @@
       "validate.h",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}/lang/wgsl/ast",
       "${tint_src_dir}/utils/containers",
       "${tint_src_dir}/utils/diagnostic",
diff --git a/src/tint/lang/glsl/writer/BUILD.bazel b/src/tint/lang/glsl/writer/BUILD.bazel
index f429197..b8455cd 100644
--- a/src/tint/lang/glsl/writer/BUILD.bazel
+++ b/src/tint/lang/glsl/writer/BUILD.bazel
@@ -71,6 +71,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ] + select({
     ":tint_build_glsl_writer": [
       "//src/tint/lang/glsl/writer/ast_printer",
@@ -125,6 +126,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ] + select({
     ":tint_build_glsl_validator": [
       "//src/tint/lang/glsl/validate",
@@ -171,6 +173,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@benchmark",
+    "//src/utils",
   ] + select({
     ":tint_build_glsl_writer": [
       "//src/tint/lang/glsl/writer",
diff --git a/src/tint/lang/glsl/writer/BUILD.cmake b/src/tint/lang/glsl/writer/BUILD.cmake
index 3783e19..01f42bd 100644
--- a/src/tint/lang/glsl/writer/BUILD.cmake
+++ b/src/tint/lang/glsl/writer/BUILD.cmake
@@ -81,6 +81,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_glsl_writer lib
+  "src_utils"
+)
+
 if(TINT_BUILD_GLSL_WRITER)
   tint_target_add_dependencies(tint_lang_glsl_writer lib
     tint_lang_glsl_writer_ast_printer
@@ -133,6 +137,7 @@
 
 tint_target_add_external_dependencies(tint_lang_glsl_writer_test test
   "gtest"
+  "src_utils"
 )
 
 if(TINT_BUILD_GLSL_VALIDATOR)
@@ -190,6 +195,7 @@
 
 tint_target_add_external_dependencies(tint_lang_glsl_writer_bench bench
   "google-benchmark"
+  "src_utils"
 )
 
 if(TINT_BUILD_GLSL_WRITER)
@@ -243,6 +249,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_glsl_writer_fuzz fuzz
+  "src_utils"
+)
+
 if(TINT_BUILD_GLSL_WRITER)
   tint_target_add_dependencies(tint_lang_glsl_writer_fuzz fuzz
     tint_lang_glsl_writer
diff --git a/src/tint/lang/glsl/writer/BUILD.gn b/src/tint/lang/glsl/writer/BUILD.gn
index 4f151c0..23fd18e 100644
--- a/src/tint/lang/glsl/writer/BUILD.gn
+++ b/src/tint/lang/glsl/writer/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -50,6 +51,7 @@
       "writer.h",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
       "${tint_src_dir}/lang/core/constant",
@@ -96,6 +98,7 @@
         "var_and_let_test.cc",
       ]
       deps = [
+        "${dawn_root}/src/utils:utils",
         "${tint_src_dir}:gmock_and_gtest",
         "${tint_src_dir}/api/common",
         "${tint_src_dir}/lang/core",
@@ -142,6 +145,7 @@
     tint_benchmarks_source_set("bench") {
       sources = [ "writer_bench.cc" ]
       deps = [
+        "${dawn_root}/src/utils:utils",
         "${tint_src_dir}:google_benchmark",
         "${tint_src_dir}/api/common",
         "${tint_src_dir}/lang/core",
@@ -185,6 +189,7 @@
   tint_fuzz_source_set("fuzz") {
     sources = []
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
       "${tint_src_dir}/lang/core/constant",
diff --git a/src/tint/lang/glsl/writer/ast_printer/BUILD.bazel b/src/tint/lang/glsl/writer/ast_printer/BUILD.bazel
index 0049a05..4c41e05 100644
--- a/src/tint/lang/glsl/writer/ast_printer/BUILD.bazel
+++ b/src/tint/lang/glsl/writer/ast_printer/BUILD.bazel
@@ -71,6 +71,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ] + select({
     ":tint_build_glsl_writer": [
       "//src/tint/lang/glsl/writer/ast_raise",
@@ -147,6 +148,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ] + select({
     ":tint_build_glsl_writer": [
       "//src/tint/lang/glsl/writer",
diff --git a/src/tint/lang/glsl/writer/ast_printer/BUILD.cmake b/src/tint/lang/glsl/writer/ast_printer/BUILD.cmake
index ac79962..59dafd9 100644
--- a/src/tint/lang/glsl/writer/ast_printer/BUILD.cmake
+++ b/src/tint/lang/glsl/writer/ast_printer/BUILD.cmake
@@ -74,6 +74,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_glsl_writer_ast_printer lib
+  "src_utils"
+)
+
 if(TINT_BUILD_GLSL_WRITER)
   tint_target_add_dependencies(tint_lang_glsl_writer_ast_printer lib
     tint_lang_glsl_writer_ast_raise
@@ -155,6 +159,7 @@
 
 tint_target_add_external_dependencies(tint_lang_glsl_writer_ast_printer_test test
   "gtest"
+  "src_utils"
 )
 
 if(TINT_BUILD_GLSL_WRITER)
diff --git a/src/tint/lang/glsl/writer/ast_printer/BUILD.gn b/src/tint/lang/glsl/writer/ast_printer/BUILD.gn
index 3bbad04..f47434e 100644
--- a/src/tint/lang/glsl/writer/ast_printer/BUILD.gn
+++ b/src/tint/lang/glsl/writer/ast_printer/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -48,6 +49,7 @@
       "ast_printer.h",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
       "${tint_src_dir}/lang/core/common",
@@ -122,6 +124,7 @@
         "workgroup_var_test.cc",
       ]
       deps = [
+        "${dawn_root}/src/utils:utils",
         "${tint_src_dir}:gmock_and_gtest",
         "${tint_src_dir}/api/common",
         "${tint_src_dir}/lang/core",
diff --git a/src/tint/lang/glsl/writer/ast_raise/BUILD.bazel b/src/tint/lang/glsl/writer/ast_raise/BUILD.bazel
index 7bea3d7..77cdddc 100644
--- a/src/tint/lang/glsl/writer/ast_raise/BUILD.bazel
+++ b/src/tint/lang/glsl/writer/ast_raise/BUILD.bazel
@@ -76,6 +76,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ] + select({
     ":tint_build_glsl_writer": [
       "//src/tint/lang/glsl/writer/common",
@@ -122,6 +123,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ] + select({
     ":tint_build_glsl_writer": [
       "//src/tint/lang/glsl/writer/ast_raise",
diff --git a/src/tint/lang/glsl/writer/ast_raise/BUILD.cmake b/src/tint/lang/glsl/writer/ast_raise/BUILD.cmake
index 1bee34d..c3909445 100644
--- a/src/tint/lang/glsl/writer/ast_raise/BUILD.cmake
+++ b/src/tint/lang/glsl/writer/ast_raise/BUILD.cmake
@@ -79,6 +79,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_glsl_writer_ast_raise lib
+  "src_utils"
+)
+
 if(TINT_BUILD_GLSL_WRITER)
   tint_target_add_dependencies(tint_lang_glsl_writer_ast_raise lib
     tint_lang_glsl_writer_common
@@ -130,6 +134,7 @@
 
 tint_target_add_external_dependencies(tint_lang_glsl_writer_ast_raise_test test
   "gtest"
+  "src_utils"
 )
 
 if(TINT_BUILD_GLSL_WRITER)
diff --git a/src/tint/lang/glsl/writer/ast_raise/BUILD.gn b/src/tint/lang/glsl/writer/ast_raise/BUILD.gn
index f1a3a32..bcb15a4 100644
--- a/src/tint/lang/glsl/writer/ast_raise/BUILD.gn
+++ b/src/tint/lang/glsl/writer/ast_raise/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -54,6 +55,7 @@
       "texture_builtins_from_uniform.h",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
       "${tint_src_dir}/lang/core/constant",
@@ -97,6 +99,7 @@
         "texture_builtins_from_uniform_test.cc",
       ]
       deps = [
+        "${dawn_root}/src/utils:utils",
         "${tint_src_dir}:gmock_and_gtest",
         "${tint_src_dir}/api/common",
         "${tint_src_dir}/lang/core",
diff --git a/src/tint/lang/glsl/writer/common/BUILD.bazel b/src/tint/lang/glsl/writer/common/BUILD.bazel
index 189e12d..489c9ec 100644
--- a/src/tint/lang/glsl/writer/common/BUILD.bazel
+++ b/src/tint/lang/glsl/writer/common/BUILD.bazel
@@ -74,6 +74,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -109,6 +110,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ] + select({
     ":tint_build_glsl_writer": [
       "//src/tint/lang/glsl/writer/common",
diff --git a/src/tint/lang/glsl/writer/common/BUILD.cmake b/src/tint/lang/glsl/writer/common/BUILD.cmake
index d135bd9..4ebcf7d 100644
--- a/src/tint/lang/glsl/writer/common/BUILD.cmake
+++ b/src/tint/lang/glsl/writer/common/BUILD.cmake
@@ -77,6 +77,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_glsl_writer_common lib
+  "src_utils"
+)
+
 endif(TINT_BUILD_GLSL_WRITER)
 if(TINT_BUILD_GLSL_WRITER)
 ################################################################################
@@ -116,6 +120,7 @@
 
 tint_target_add_external_dependencies(tint_lang_glsl_writer_common_test test
   "gtest"
+  "src_utils"
 )
 
 if(TINT_BUILD_GLSL_WRITER)
diff --git a/src/tint/lang/glsl/writer/common/BUILD.gn b/src/tint/lang/glsl/writer/common/BUILD.gn
index d0d6acc..7215004 100644
--- a/src/tint/lang/glsl/writer/common/BUILD.gn
+++ b/src/tint/lang/glsl/writer/common/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -53,6 +54,7 @@
       "version.h",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
       "${tint_src_dir}/lang/core/common",
@@ -88,6 +90,7 @@
         "version_test.cc",
       ]
       deps = [
+        "${dawn_root}/src/utils:utils",
         "${tint_src_dir}:gmock_and_gtest",
         "${tint_src_dir}/api/common",
         "${tint_src_dir}/lang/core",
diff --git a/src/tint/lang/glsl/writer/helpers/BUILD.bazel b/src/tint/lang/glsl/writer/helpers/BUILD.bazel
index 16bc50a..a5586e7 100644
--- a/src/tint/lang/glsl/writer/helpers/BUILD.bazel
+++ b/src/tint/lang/glsl/writer/helpers/BUILD.bazel
@@ -68,6 +68,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ] + select({
     ":tint_build_glsl_writer": [
       "//src/tint/lang/glsl/writer/common",
diff --git a/src/tint/lang/glsl/writer/helpers/BUILD.cmake b/src/tint/lang/glsl/writer/helpers/BUILD.cmake
index 0222e0a..c59c877 100644
--- a/src/tint/lang/glsl/writer/helpers/BUILD.cmake
+++ b/src/tint/lang/glsl/writer/helpers/BUILD.cmake
@@ -71,6 +71,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_glsl_writer_helpers lib
+  "src_utils"
+)
+
 if(TINT_BUILD_GLSL_WRITER)
   tint_target_add_dependencies(tint_lang_glsl_writer_helpers lib
     tint_lang_glsl_writer_common
diff --git a/src/tint/lang/glsl/writer/helpers/BUILD.gn b/src/tint/lang/glsl/writer/helpers/BUILD.gn
index c6d48b4..93ecb1c 100644
--- a/src/tint/lang/glsl/writer/helpers/BUILD.gn
+++ b/src/tint/lang/glsl/writer/helpers/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -44,6 +45,7 @@
       "generate_bindings.h",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
       "${tint_src_dir}/lang/core/constant",
diff --git a/src/tint/lang/glsl/writer/printer/BUILD.bazel b/src/tint/lang/glsl/writer/printer/BUILD.bazel
index 43f9239..31f71a0 100644
--- a/src/tint/lang/glsl/writer/printer/BUILD.bazel
+++ b/src/tint/lang/glsl/writer/printer/BUILD.bazel
@@ -64,6 +64,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ] + select({
     ":tint_build_glsl_writer": [
       "//src/tint/lang/glsl/writer/common",
diff --git a/src/tint/lang/glsl/writer/printer/BUILD.cmake b/src/tint/lang/glsl/writer/printer/BUILD.cmake
index 9329298..efc7db1 100644
--- a/src/tint/lang/glsl/writer/printer/BUILD.cmake
+++ b/src/tint/lang/glsl/writer/printer/BUILD.cmake
@@ -67,6 +67,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_glsl_writer_printer lib
+  "src_utils"
+)
+
 if(TINT_BUILD_GLSL_WRITER)
   tint_target_add_dependencies(tint_lang_glsl_writer_printer lib
     tint_lang_glsl_writer_common
diff --git a/src/tint/lang/glsl/writer/printer/BUILD.gn b/src/tint/lang/glsl/writer/printer/BUILD.gn
index 93a752a..cc7f687 100644
--- a/src/tint/lang/glsl/writer/printer/BUILD.gn
+++ b/src/tint/lang/glsl/writer/printer/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -44,6 +45,7 @@
       "printer.h",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
       "${tint_src_dir}/lang/core/constant",
diff --git a/src/tint/lang/glsl/writer/raise/BUILD.bazel b/src/tint/lang/glsl/writer/raise/BUILD.bazel
index 2a36846..c08a404 100644
--- a/src/tint/lang/glsl/writer/raise/BUILD.bazel
+++ b/src/tint/lang/glsl/writer/raise/BUILD.bazel
@@ -69,6 +69,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ] + select({
     ":tint_build_glsl_writer": [
       "//src/tint/lang/glsl/writer/common",
diff --git a/src/tint/lang/glsl/writer/raise/BUILD.cmake b/src/tint/lang/glsl/writer/raise/BUILD.cmake
index 3e4ab10..ee74a89 100644
--- a/src/tint/lang/glsl/writer/raise/BUILD.cmake
+++ b/src/tint/lang/glsl/writer/raise/BUILD.cmake
@@ -72,6 +72,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_glsl_writer_raise lib
+  "src_utils"
+)
+
 if(TINT_BUILD_GLSL_WRITER)
   tint_target_add_dependencies(tint_lang_glsl_writer_raise lib
     tint_lang_glsl_writer_common
diff --git a/src/tint/lang/glsl/writer/raise/BUILD.gn b/src/tint/lang/glsl/writer/raise/BUILD.gn
index ef33c7b..3d8c452 100644
--- a/src/tint/lang/glsl/writer/raise/BUILD.gn
+++ b/src/tint/lang/glsl/writer/raise/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -44,6 +45,7 @@
       "raise.h",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
       "${tint_src_dir}/lang/core/common",
diff --git a/src/tint/lang/hlsl/BUILD.gn b/src/tint/lang/hlsl/BUILD.gn
index a5dc8b3..1465ca2 100644
--- a/src/tint/lang/hlsl/BUILD.gn
+++ b/src/tint/lang/hlsl/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
diff --git a/src/tint/lang/hlsl/intrinsic/BUILD.bazel b/src/tint/lang/hlsl/intrinsic/BUILD.bazel
index e381393..b92c957 100644
--- a/src/tint/lang/hlsl/intrinsic/BUILD.bazel
+++ b/src/tint/lang/hlsl/intrinsic/BUILD.bazel
@@ -65,6 +65,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
diff --git a/src/tint/lang/hlsl/intrinsic/BUILD.cmake b/src/tint/lang/hlsl/intrinsic/BUILD.cmake
index dc99454..7dd49d3 100644
--- a/src/tint/lang/hlsl/intrinsic/BUILD.cmake
+++ b/src/tint/lang/hlsl/intrinsic/BUILD.cmake
@@ -65,3 +65,7 @@
   tint_utils_text
   tint_utils_traits
 )
+
+tint_target_add_external_dependencies(tint_lang_hlsl_intrinsic lib
+  "src_utils"
+)
diff --git a/src/tint/lang/hlsl/intrinsic/BUILD.gn b/src/tint/lang/hlsl/intrinsic/BUILD.gn
index cf34001..f6a7ba6 100644
--- a/src/tint/lang/hlsl/intrinsic/BUILD.gn
+++ b/src/tint/lang/hlsl/intrinsic/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -45,6 +46,7 @@
     "type_matchers.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/lang/core",
     "${tint_src_dir}/lang/core/constant",
     "${tint_src_dir}/lang/core/intrinsic",
diff --git a/src/tint/lang/hlsl/ir/BUILD.bazel b/src/tint/lang/hlsl/ir/BUILD.bazel
index c52853bb..18e9d68 100644
--- a/src/tint/lang/hlsl/ir/BUILD.bazel
+++ b/src/tint/lang/hlsl/ir/BUILD.bazel
@@ -70,6 +70,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -108,6 +109,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
diff --git a/src/tint/lang/hlsl/ir/BUILD.cmake b/src/tint/lang/hlsl/ir/BUILD.cmake
index 08baa1e..190534b 100644
--- a/src/tint/lang/hlsl/ir/BUILD.cmake
+++ b/src/tint/lang/hlsl/ir/BUILD.cmake
@@ -71,6 +71,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_hlsl_ir lib
+  "src_utils"
+)
+
 ################################################################################
 # Target:    tint_lang_hlsl_ir_test
 # Kind:      test
@@ -110,4 +114,5 @@
 
 tint_target_add_external_dependencies(tint_lang_hlsl_ir_test test
   "gtest"
+  "src_utils"
 )
diff --git a/src/tint/lang/hlsl/ir/BUILD.gn b/src/tint/lang/hlsl/ir/BUILD.gn
index 2fa8d6c..cb0a0f4 100644
--- a/src/tint/lang/hlsl/ir/BUILD.gn
+++ b/src/tint/lang/hlsl/ir/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -52,6 +53,7 @@
     "ternary.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/api/common",
     "${tint_src_dir}/lang/core",
     "${tint_src_dir}/lang/core/constant",
@@ -83,6 +85,7 @@
       "ternary_test.cc",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}:gmock_and_gtest",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
diff --git a/src/tint/lang/hlsl/type/BUILD.bazel b/src/tint/lang/hlsl/type/BUILD.bazel
index fbf73a0..eb9a6b5 100644
--- a/src/tint/lang/hlsl/type/BUILD.bazel
+++ b/src/tint/lang/hlsl/type/BUILD.bazel
@@ -64,6 +64,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -92,6 +93,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
diff --git a/src/tint/lang/hlsl/type/BUILD.cmake b/src/tint/lang/hlsl/type/BUILD.cmake
index 49b481b..a658de4 100644
--- a/src/tint/lang/hlsl/type/BUILD.cmake
+++ b/src/tint/lang/hlsl/type/BUILD.cmake
@@ -65,6 +65,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_hlsl_type lib
+  "src_utils"
+)
+
 ################################################################################
 # Target:    tint_lang_hlsl_type_test
 # Kind:      test
@@ -94,4 +98,5 @@
 
 tint_target_add_external_dependencies(tint_lang_hlsl_type_test test
   "gtest"
+  "src_utils"
 )
diff --git a/src/tint/lang/hlsl/type/BUILD.gn b/src/tint/lang/hlsl/type/BUILD.gn
index b4c1a07..4ae871f 100644
--- a/src/tint/lang/hlsl/type/BUILD.gn
+++ b/src/tint/lang/hlsl/type/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -52,6 +53,7 @@
     "uint8_t4_packed.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/lang/core",
     "${tint_src_dir}/lang/core/type",
     "${tint_src_dir}/utils/containers",
@@ -77,6 +79,7 @@
       "uint8_t4_packed_test.cc",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}:gmock_and_gtest",
       "${tint_src_dir}/lang/core",
       "${tint_src_dir}/lang/core/type",
diff --git a/src/tint/lang/hlsl/validate/BUILD.bazel b/src/tint/lang/hlsl/validate/BUILD.bazel
index 41ec67c..cb77742 100644
--- a/src/tint/lang/hlsl/validate/BUILD.bazel
+++ b/src/tint/lang/hlsl/validate/BUILD.bazel
@@ -56,6 +56,7 @@
     "//src/tint/utils/rtti",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ] + select({
     ":tint_build_hlsl_writer": [
       
diff --git a/src/tint/lang/hlsl/validate/BUILD.cmake b/src/tint/lang/hlsl/validate/BUILD.cmake
index 272eae6..7c15a6b 100644
--- a/src/tint/lang/hlsl/validate/BUILD.cmake
+++ b/src/tint/lang/hlsl/validate/BUILD.cmake
@@ -59,6 +59,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_hlsl_validate lib
+  "src_utils"
+)
+
 if(TINT_BUILD_HLSL_WRITER)
   tint_target_add_external_dependencies(tint_lang_hlsl_validate lib
     "dl"
diff --git a/src/tint/lang/hlsl/validate/BUILD.gn b/src/tint/lang/hlsl/validate/BUILD.gn
index b22d7b8..53c0c17 100644
--- a/src/tint/lang/hlsl/validate/BUILD.gn
+++ b/src/tint/lang/hlsl/validate/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -44,6 +45,7 @@
       "validate.h",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}/lang/wgsl/ast",
       "${tint_src_dir}/utils/command",
       "${tint_src_dir}/utils/containers",
diff --git a/src/tint/lang/hlsl/writer/BUILD.bazel b/src/tint/lang/hlsl/writer/BUILD.bazel
index a9f4e35..435d4d5 100644
--- a/src/tint/lang/hlsl/writer/BUILD.bazel
+++ b/src/tint/lang/hlsl/writer/BUILD.bazel
@@ -75,6 +75,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ] + select({
     ":tint_build_hlsl_writer": [
       "//src/tint/lang/hlsl/writer/ast_printer",
@@ -129,6 +130,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ] + select({
     ":tint_build_hlsl_writer": [
       "//src/tint/lang/hlsl/validate",
@@ -169,6 +171,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@benchmark",
+    "//src/utils",
   ] + select({
     ":tint_build_hlsl_writer": [
       "//src/tint/lang/hlsl/writer",
diff --git a/src/tint/lang/hlsl/writer/BUILD.cmake b/src/tint/lang/hlsl/writer/BUILD.cmake
index 89411bb..8f1b2e5 100644
--- a/src/tint/lang/hlsl/writer/BUILD.cmake
+++ b/src/tint/lang/hlsl/writer/BUILD.cmake
@@ -85,6 +85,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_hlsl_writer lib
+  "src_utils"
+)
+
 if(TINT_BUILD_HLSL_WRITER)
   tint_target_add_dependencies(tint_lang_hlsl_writer lib
     tint_lang_hlsl_writer_ast_printer
@@ -144,6 +148,7 @@
 
 tint_target_add_external_dependencies(tint_lang_hlsl_writer_test test
   "gtest"
+  "src_utils"
 )
 
 if(TINT_BUILD_HLSL_WRITER)
@@ -191,6 +196,7 @@
 
 tint_target_add_external_dependencies(tint_lang_hlsl_writer_bench bench
   "google-benchmark"
+  "src_utils"
 )
 
 if(TINT_BUILD_HLSL_WRITER)
@@ -244,6 +250,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_hlsl_writer_fuzz fuzz
+  "src_utils"
+)
+
 if(TINT_BUILD_HLSL_WRITER)
   tint_target_add_dependencies(tint_lang_hlsl_writer_fuzz fuzz
     tint_lang_hlsl_validate
diff --git a/src/tint/lang/hlsl/writer/BUILD.gn b/src/tint/lang/hlsl/writer/BUILD.gn
index 4273743..8270d32 100644
--- a/src/tint/lang/hlsl/writer/BUILD.gn
+++ b/src/tint/lang/hlsl/writer/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -50,6 +51,7 @@
       "writer.h",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
       "${tint_src_dir}/lang/core/constant",
@@ -109,6 +111,7 @@
         "var_let_test.cc",
       ]
       deps = [
+        "${dawn_root}/src/utils:utils",
         "${tint_src_dir}:gmock_and_gtest",
         "${tint_src_dir}/api/common",
         "${tint_src_dir}/lang/core",
@@ -148,6 +151,7 @@
     tint_benchmarks_source_set("bench") {
       sources = [ "writer_bench.cc" ]
       deps = [
+        "${dawn_root}/src/utils:utils",
         "${tint_src_dir}:google_benchmark",
         "${tint_src_dir}/api/common",
         "${tint_src_dir}/lang/core",
@@ -187,6 +191,7 @@
   tint_fuzz_source_set("fuzz") {
     sources = []
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
       "${tint_src_dir}/lang/core/constant",
diff --git a/src/tint/lang/hlsl/writer/ast_printer/BUILD.bazel b/src/tint/lang/hlsl/writer/ast_printer/BUILD.bazel
index 34380c5..f5170a4 100644
--- a/src/tint/lang/hlsl/writer/ast_printer/BUILD.bazel
+++ b/src/tint/lang/hlsl/writer/ast_printer/BUILD.bazel
@@ -73,6 +73,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ] + select({
     ":tint_build_hlsl_writer": [
       "//src/tint/lang/hlsl/writer/ast_raise",
@@ -148,6 +149,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ] + select({
     ":tint_build_hlsl_writer": [
       "//src/tint/lang/hlsl/writer",
diff --git a/src/tint/lang/hlsl/writer/ast_printer/BUILD.cmake b/src/tint/lang/hlsl/writer/ast_printer/BUILD.cmake
index 63f4fd9..789a81f 100644
--- a/src/tint/lang/hlsl/writer/ast_printer/BUILD.cmake
+++ b/src/tint/lang/hlsl/writer/ast_printer/BUILD.cmake
@@ -76,6 +76,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_hlsl_writer_ast_printer lib
+  "src_utils"
+)
+
 if(TINT_BUILD_HLSL_WRITER)
   tint_target_add_dependencies(tint_lang_hlsl_writer_ast_printer lib
     tint_lang_hlsl_writer_ast_raise
@@ -156,6 +160,7 @@
 
 tint_target_add_external_dependencies(tint_lang_hlsl_writer_ast_printer_test test
   "gtest"
+  "src_utils"
 )
 
 if(TINT_BUILD_HLSL_WRITER)
diff --git a/src/tint/lang/hlsl/writer/ast_printer/BUILD.gn b/src/tint/lang/hlsl/writer/ast_printer/BUILD.gn
index fc69397..72a32e5 100644
--- a/src/tint/lang/hlsl/writer/ast_printer/BUILD.gn
+++ b/src/tint/lang/hlsl/writer/ast_printer/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -48,6 +49,7 @@
       "ast_printer.h",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
       "${tint_src_dir}/lang/core/common",
@@ -120,6 +122,7 @@
         "workgroup_var_test.cc",
       ]
       deps = [
+        "${dawn_root}/src/utils:utils",
         "${tint_src_dir}:gmock_and_gtest",
         "${tint_src_dir}/api/common",
         "${tint_src_dir}/lang/core",
diff --git a/src/tint/lang/hlsl/writer/ast_raise/BUILD.bazel b/src/tint/lang/hlsl/writer/ast_raise/BUILD.bazel
index 678aec4..1a04bc7 100644
--- a/src/tint/lang/hlsl/writer/ast_raise/BUILD.bazel
+++ b/src/tint/lang/hlsl/writer/ast_raise/BUILD.bazel
@@ -80,6 +80,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -123,6 +124,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ] + select({
     ":tint_build_hlsl_writer": [
       "//src/tint/lang/hlsl/writer/ast_raise",
diff --git a/src/tint/lang/hlsl/writer/ast_raise/BUILD.cmake b/src/tint/lang/hlsl/writer/ast_raise/BUILD.cmake
index 49f9147..8280cd3 100644
--- a/src/tint/lang/hlsl/writer/ast_raise/BUILD.cmake
+++ b/src/tint/lang/hlsl/writer/ast_raise/BUILD.cmake
@@ -83,6 +83,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_hlsl_writer_ast_raise lib
+  "src_utils"
+)
+
 endif(TINT_BUILD_HLSL_WRITER)
 if(TINT_BUILD_HLSL_WRITER AND TINT_BUILD_WGSL_READER AND TINT_BUILD_WGSL_WRITER)
 ################################################################################
@@ -130,6 +134,7 @@
 
 tint_target_add_external_dependencies(tint_lang_hlsl_writer_ast_raise_test test
   "gtest"
+  "src_utils"
 )
 
 if(TINT_BUILD_HLSL_WRITER)
diff --git a/src/tint/lang/hlsl/writer/ast_raise/BUILD.gn b/src/tint/lang/hlsl/writer/ast_raise/BUILD.gn
index 1fdadd9..51ba002 100644
--- a/src/tint/lang/hlsl/writer/ast_raise/BUILD.gn
+++ b/src/tint/lang/hlsl/writer/ast_raise/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -58,6 +59,7 @@
       "truncate_interstage_variables.h",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
       "${tint_src_dir}/lang/core/constant",
@@ -99,6 +101,7 @@
         "truncate_interstage_variables_test.cc",
       ]
       deps = [
+        "${dawn_root}/src/utils:utils",
         "${tint_src_dir}:gmock_and_gtest",
         "${tint_src_dir}/api/common",
         "${tint_src_dir}/lang/core",
diff --git a/src/tint/lang/hlsl/writer/common/BUILD.bazel b/src/tint/lang/hlsl/writer/common/BUILD.bazel
index 92cdcb5..3233fad 100644
--- a/src/tint/lang/hlsl/writer/common/BUILD.bazel
+++ b/src/tint/lang/hlsl/writer/common/BUILD.bazel
@@ -61,6 +61,7 @@
     "//src/tint/utils/rtti",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -87,6 +88,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
diff --git a/src/tint/lang/hlsl/writer/common/BUILD.cmake b/src/tint/lang/hlsl/writer/common/BUILD.cmake
index 4f2b0ab..0bb46e8 100644
--- a/src/tint/lang/hlsl/writer/common/BUILD.cmake
+++ b/src/tint/lang/hlsl/writer/common/BUILD.cmake
@@ -62,6 +62,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_hlsl_writer_common lib
+  "src_utils"
+)
+
 ################################################################################
 # Target:    tint_lang_hlsl_writer_common_test
 # Kind:      test
@@ -89,4 +93,5 @@
 
 tint_target_add_external_dependencies(tint_lang_hlsl_writer_common_test test
   "gtest"
+  "src_utils"
 )
diff --git a/src/tint/lang/hlsl/writer/common/BUILD.gn b/src/tint/lang/hlsl/writer/common/BUILD.gn
index 1e6a5a7..07a9e77 100644
--- a/src/tint/lang/hlsl/writer/common/BUILD.gn
+++ b/src/tint/lang/hlsl/writer/common/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -50,6 +51,7 @@
     "options.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/api/common",
     "${tint_src_dir}/lang/core",
     "${tint_src_dir}/lang/core/common",
@@ -70,6 +72,7 @@
   tint_unittests_source_set("unittests") {
     sources = [ "options_test.cc" ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}:gmock_and_gtest",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
diff --git a/src/tint/lang/hlsl/writer/helpers/BUILD.bazel b/src/tint/lang/hlsl/writer/helpers/BUILD.bazel
index 0e475a8..a1e181c 100644
--- a/src/tint/lang/hlsl/writer/helpers/BUILD.bazel
+++ b/src/tint/lang/hlsl/writer/helpers/BUILD.bazel
@@ -68,6 +68,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
diff --git a/src/tint/lang/hlsl/writer/helpers/BUILD.cmake b/src/tint/lang/hlsl/writer/helpers/BUILD.cmake
index cd3371f..5e0c926 100644
--- a/src/tint/lang/hlsl/writer/helpers/BUILD.cmake
+++ b/src/tint/lang/hlsl/writer/helpers/BUILD.cmake
@@ -68,3 +68,7 @@
   tint_utils_text
   tint_utils_traits
 )
+
+tint_target_add_external_dependencies(tint_lang_hlsl_writer_helpers lib
+  "src_utils"
+)
diff --git a/src/tint/lang/hlsl/writer/helpers/BUILD.gn b/src/tint/lang/hlsl/writer/helpers/BUILD.gn
index dc28b49..10778d5 100644
--- a/src/tint/lang/hlsl/writer/helpers/BUILD.gn
+++ b/src/tint/lang/hlsl/writer/helpers/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -44,6 +45,7 @@
     "generate_bindings.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/api/common",
     "${tint_src_dir}/lang/core",
     "${tint_src_dir}/lang/core/constant",
diff --git a/src/tint/lang/hlsl/writer/printer/BUILD.bazel b/src/tint/lang/hlsl/writer/printer/BUILD.bazel
index 3b779b1..616cfa2 100644
--- a/src/tint/lang/hlsl/writer/printer/BUILD.bazel
+++ b/src/tint/lang/hlsl/writer/printer/BUILD.bazel
@@ -70,6 +70,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
diff --git a/src/tint/lang/hlsl/writer/printer/BUILD.cmake b/src/tint/lang/hlsl/writer/printer/BUILD.cmake
index 349113e..d8bf1ac 100644
--- a/src/tint/lang/hlsl/writer/printer/BUILD.cmake
+++ b/src/tint/lang/hlsl/writer/printer/BUILD.cmake
@@ -70,3 +70,7 @@
   tint_utils_text
   tint_utils_traits
 )
+
+tint_target_add_external_dependencies(tint_lang_hlsl_writer_printer lib
+  "src_utils"
+)
diff --git a/src/tint/lang/hlsl/writer/printer/BUILD.gn b/src/tint/lang/hlsl/writer/printer/BUILD.gn
index 9c7a49f..21f11f4 100644
--- a/src/tint/lang/hlsl/writer/printer/BUILD.gn
+++ b/src/tint/lang/hlsl/writer/printer/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -44,6 +45,7 @@
     "printer.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/api/common",
     "${tint_src_dir}/lang/core",
     "${tint_src_dir}/lang/core/constant",
diff --git a/src/tint/lang/hlsl/writer/raise/BUILD.bazel b/src/tint/lang/hlsl/writer/raise/BUILD.bazel
index 8f1a16c..f75cb6e 100644
--- a/src/tint/lang/hlsl/writer/raise/BUILD.bazel
+++ b/src/tint/lang/hlsl/writer/raise/BUILD.bazel
@@ -85,6 +85,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -124,6 +125,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
diff --git a/src/tint/lang/hlsl/writer/raise/BUILD.cmake b/src/tint/lang/hlsl/writer/raise/BUILD.cmake
index 6a22146..bc2a846 100644
--- a/src/tint/lang/hlsl/writer/raise/BUILD.cmake
+++ b/src/tint/lang/hlsl/writer/raise/BUILD.cmake
@@ -86,6 +86,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_hlsl_writer_raise lib
+  "src_utils"
+)
+
 ################################################################################
 # Target:    tint_lang_hlsl_writer_raise_test
 # Kind:      test
@@ -126,6 +130,7 @@
 
 tint_target_add_external_dependencies(tint_lang_hlsl_writer_raise_test test
   "gtest"
+  "src_utils"
 )
 
 ################################################################################
@@ -159,3 +164,7 @@
   tint_utils_text
   tint_utils_traits
 )
+
+tint_target_add_external_dependencies(tint_lang_hlsl_writer_raise_fuzz fuzz
+  "src_utils"
+)
diff --git a/src/tint/lang/hlsl/writer/raise/BUILD.gn b/src/tint/lang/hlsl/writer/raise/BUILD.gn
index 8ddca0a..df17931 100644
--- a/src/tint/lang/hlsl/writer/raise/BUILD.gn
+++ b/src/tint/lang/hlsl/writer/raise/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -62,6 +63,7 @@
     "shader_io.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/api/common",
     "${tint_src_dir}/lang/core",
     "${tint_src_dir}/lang/core/common",
@@ -102,6 +104,7 @@
       "shader_io_test.cc",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}:gmock_and_gtest",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
@@ -131,6 +134,7 @@
 tint_fuzz_source_set("fuzz") {
   sources = [ "promote_initializers_fuzz.cc" ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/api/common",
     "${tint_src_dir}/cmd/fuzz/ir:fuzz",
     "${tint_src_dir}/lang/core",
diff --git a/src/tint/lang/msl/BUILD.gn b/src/tint/lang/msl/BUILD.gn
index a092431..bde0625 100644
--- a/src/tint/lang/msl/BUILD.gn
+++ b/src/tint/lang/msl/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
diff --git a/src/tint/lang/msl/intrinsic/BUILD.bazel b/src/tint/lang/msl/intrinsic/BUILD.bazel
index 6034d5a..59b25ef 100644
--- a/src/tint/lang/msl/intrinsic/BUILD.bazel
+++ b/src/tint/lang/msl/intrinsic/BUILD.bazel
@@ -65,6 +65,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
diff --git a/src/tint/lang/msl/intrinsic/BUILD.cmake b/src/tint/lang/msl/intrinsic/BUILD.cmake
index 1d0f45a..483dd22 100644
--- a/src/tint/lang/msl/intrinsic/BUILD.cmake
+++ b/src/tint/lang/msl/intrinsic/BUILD.cmake
@@ -65,3 +65,7 @@
   tint_utils_text
   tint_utils_traits
 )
+
+tint_target_add_external_dependencies(tint_lang_msl_intrinsic lib
+  "src_utils"
+)
diff --git a/src/tint/lang/msl/intrinsic/BUILD.gn b/src/tint/lang/msl/intrinsic/BUILD.gn
index fad6dbe..5c0b4f0 100644
--- a/src/tint/lang/msl/intrinsic/BUILD.gn
+++ b/src/tint/lang/msl/intrinsic/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -45,6 +46,7 @@
     "type_matchers.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/lang/core",
     "${tint_src_dir}/lang/core/constant",
     "${tint_src_dir}/lang/core/intrinsic",
diff --git a/src/tint/lang/msl/ir/BUILD.bazel b/src/tint/lang/msl/ir/BUILD.bazel
index 07f2a0d..8394d37 100644
--- a/src/tint/lang/msl/ir/BUILD.bazel
+++ b/src/tint/lang/msl/ir/BUILD.bazel
@@ -74,6 +74,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -111,6 +112,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
diff --git a/src/tint/lang/msl/ir/BUILD.cmake b/src/tint/lang/msl/ir/BUILD.cmake
index 97209c1..e1683fb 100644
--- a/src/tint/lang/msl/ir/BUILD.cmake
+++ b/src/tint/lang/msl/ir/BUILD.cmake
@@ -75,6 +75,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_msl_ir lib
+  "src_utils"
+)
+
 ################################################################################
 # Target:    tint_lang_msl_ir_test
 # Kind:      test
@@ -113,4 +117,5 @@
 
 tint_target_add_external_dependencies(tint_lang_msl_ir_test test
   "gtest"
+  "src_utils"
 )
diff --git a/src/tint/lang/msl/ir/BUILD.gn b/src/tint/lang/msl/ir/BUILD.gn
index aaa9cc7..b01fdc5 100644
--- a/src/tint/lang/msl/ir/BUILD.gn
+++ b/src/tint/lang/msl/ir/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -56,6 +57,7 @@
     "memory_order.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/api/common",
     "${tint_src_dir}/lang/core",
     "${tint_src_dir}/lang/core/constant",
@@ -87,6 +89,7 @@
       "member_builtin_call_test.cc",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}:gmock_and_gtest",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
diff --git a/src/tint/lang/msl/type/BUILD.bazel b/src/tint/lang/msl/type/BUILD.bazel
index 4bb1002..ba134bf 100644
--- a/src/tint/lang/msl/type/BUILD.bazel
+++ b/src/tint/lang/msl/type/BUILD.bazel
@@ -64,6 +64,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -87,6 +88,7 @@
     "//src/tint/utils/rtti",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
diff --git a/src/tint/lang/msl/type/BUILD.cmake b/src/tint/lang/msl/type/BUILD.cmake
index 2341282..4bfb07e 100644
--- a/src/tint/lang/msl/type/BUILD.cmake
+++ b/src/tint/lang/msl/type/BUILD.cmake
@@ -65,6 +65,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_msl_type lib
+  "src_utils"
+)
+
 ################################################################################
 # Target:    tint_lang_msl_type_test
 # Kind:      test
@@ -89,4 +93,5 @@
 
 tint_target_add_external_dependencies(tint_lang_msl_type_test test
   "gtest"
+  "src_utils"
 )
diff --git a/src/tint/lang/msl/type/BUILD.gn b/src/tint/lang/msl/type/BUILD.gn
index 33a443f..cd04483 100644
--- a/src/tint/lang/msl/type/BUILD.gn
+++ b/src/tint/lang/msl/type/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -52,6 +53,7 @@
     "level.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/lang/core",
     "${tint_src_dir}/lang/core/type",
     "${tint_src_dir}/utils/containers",
@@ -77,6 +79,7 @@
       "level_test.cc",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}:gmock_and_gtest",
       "${tint_src_dir}/lang/core/type",
       "${tint_src_dir}/lang/msl/type",
diff --git a/src/tint/lang/msl/validate/BUILD.gn b/src/tint/lang/msl/validate/BUILD.gn
index 902ed8d..5ccce40 100644
--- a/src/tint/lang/msl/validate/BUILD.gn
+++ b/src/tint/lang/msl/validate/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
diff --git a/src/tint/lang/msl/writer/BUILD.bazel b/src/tint/lang/msl/writer/BUILD.bazel
index c80cd91..a9e6eb5 100644
--- a/src/tint/lang/msl/writer/BUILD.bazel
+++ b/src/tint/lang/msl/writer/BUILD.bazel
@@ -71,6 +71,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ] + select({
     ":tint_build_msl_writer": [
       "//src/tint/lang/msl/writer/ast_printer",
@@ -120,6 +121,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ] + select({
     ":tint_build_msl_writer": [
       "//src/tint/lang/msl/validate",
@@ -162,6 +164,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@benchmark",
+    "//src/utils",
   ] + select({
     ":tint_build_msl_writer": [
       "//src/tint/lang/msl/writer",
diff --git a/src/tint/lang/msl/writer/BUILD.cmake b/src/tint/lang/msl/writer/BUILD.cmake
index eacfcae..214c2d8 100644
--- a/src/tint/lang/msl/writer/BUILD.cmake
+++ b/src/tint/lang/msl/writer/BUILD.cmake
@@ -81,6 +81,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_msl_writer lib
+  "src_utils"
+)
+
 if(TINT_BUILD_MSL_WRITER)
   tint_target_add_dependencies(tint_lang_msl_writer lib
     tint_lang_msl_writer_ast_printer
@@ -135,6 +139,7 @@
 
 tint_target_add_external_dependencies(tint_lang_msl_writer_test test
   "gtest"
+  "src_utils"
 )
 
 if(TINT_BUILD_MSL_WRITER)
@@ -184,6 +189,7 @@
 
 tint_target_add_external_dependencies(tint_lang_msl_writer_bench bench
   "google-benchmark"
+  "src_utils"
 )
 
 if(TINT_BUILD_MSL_WRITER)
@@ -236,6 +242,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_msl_writer_fuzz fuzz
+  "src_utils"
+)
+
 if(TINT_BUILD_MSL_WRITER)
   tint_target_add_dependencies(tint_lang_msl_writer_fuzz fuzz
     tint_lang_msl_writer
diff --git a/src/tint/lang/msl/writer/BUILD.gn b/src/tint/lang/msl/writer/BUILD.gn
index c47ff6e..bf7afcd 100644
--- a/src/tint/lang/msl/writer/BUILD.gn
+++ b/src/tint/lang/msl/writer/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -50,6 +51,7 @@
       "writer.h",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
       "${tint_src_dir}/lang/core/common",
@@ -103,6 +105,7 @@
         "writer_test.cc",
       ]
       deps = [
+        "${dawn_root}/src/utils:utils",
         "${tint_src_dir}:gmock_and_gtest",
         "${tint_src_dir}/api/common",
         "${tint_src_dir}/lang/core",
@@ -140,6 +143,7 @@
     tint_benchmarks_source_set("bench") {
       sources = [ "writer_bench.cc" ]
       deps = [
+        "${dawn_root}/src/utils:utils",
         "${tint_src_dir}:google_benchmark",
         "${tint_src_dir}/api/common",
         "${tint_src_dir}/lang/core",
@@ -184,6 +188,7 @@
   tint_fuzz_source_set("fuzz") {
     sources = []
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
       "${tint_src_dir}/lang/core/constant",
diff --git a/src/tint/lang/msl/writer/ast_printer/BUILD.bazel b/src/tint/lang/msl/writer/ast_printer/BUILD.bazel
index 8efe865..d3fd62a 100644
--- a/src/tint/lang/msl/writer/ast_printer/BUILD.bazel
+++ b/src/tint/lang/msl/writer/ast_printer/BUILD.bazel
@@ -71,6 +71,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ] + select({
     ":tint_build_msl_writer": [
       "//src/tint/lang/msl/writer/ast_raise",
@@ -144,6 +145,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ] + select({
     ":tint_build_msl_writer": [
       "//src/tint/lang/msl/writer",
diff --git a/src/tint/lang/msl/writer/ast_printer/BUILD.cmake b/src/tint/lang/msl/writer/ast_printer/BUILD.cmake
index cc5e7bd..0bbef9b 100644
--- a/src/tint/lang/msl/writer/ast_printer/BUILD.cmake
+++ b/src/tint/lang/msl/writer/ast_printer/BUILD.cmake
@@ -74,6 +74,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_msl_writer_ast_printer lib
+  "src_utils"
+)
+
 if(TINT_BUILD_MSL_WRITER)
   tint_target_add_dependencies(tint_lang_msl_writer_ast_printer lib
     tint_lang_msl_writer_ast_raise
@@ -152,6 +156,7 @@
 
 tint_target_add_external_dependencies(tint_lang_msl_writer_ast_printer_test test
   "gtest"
+  "src_utils"
 )
 
 if(TINT_BUILD_MSL_WRITER)
diff --git a/src/tint/lang/msl/writer/ast_printer/BUILD.gn b/src/tint/lang/msl/writer/ast_printer/BUILD.gn
index 551c006..70f2809 100644
--- a/src/tint/lang/msl/writer/ast_printer/BUILD.gn
+++ b/src/tint/lang/msl/writer/ast_printer/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -48,6 +49,7 @@
       "ast_printer.h",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
       "${tint_src_dir}/lang/core/common",
@@ -120,6 +122,7 @@
         "variable_decl_statement_test.cc",
       ]
       deps = [
+        "${dawn_root}/src/utils:utils",
         "${tint_src_dir}:gmock_and_gtest",
         "${tint_src_dir}/api/common",
         "${tint_src_dir}/lang/core",
diff --git a/src/tint/lang/msl/writer/ast_raise/BUILD.bazel b/src/tint/lang/msl/writer/ast_raise/BUILD.bazel
index 94baf89..1c8f781 100644
--- a/src/tint/lang/msl/writer/ast_raise/BUILD.bazel
+++ b/src/tint/lang/msl/writer/ast_raise/BUILD.bazel
@@ -78,6 +78,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -121,6 +122,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ] + select({
     ":tint_build_msl_writer": [
       "//src/tint/lang/msl/writer/ast_raise",
diff --git a/src/tint/lang/msl/writer/ast_raise/BUILD.cmake b/src/tint/lang/msl/writer/ast_raise/BUILD.cmake
index 5d417f9..e5fcaff 100644
--- a/src/tint/lang/msl/writer/ast_raise/BUILD.cmake
+++ b/src/tint/lang/msl/writer/ast_raise/BUILD.cmake
@@ -81,6 +81,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_msl_writer_ast_raise lib
+  "src_utils"
+)
+
 endif(TINT_BUILD_MSL_WRITER)
 if(TINT_BUILD_MSL_WRITER AND TINT_BUILD_WGSL_READER AND TINT_BUILD_WGSL_WRITER)
 ################################################################################
@@ -128,6 +132,7 @@
 
 tint_target_add_external_dependencies(tint_lang_msl_writer_ast_raise_test test
   "gtest"
+  "src_utils"
 )
 
 if(TINT_BUILD_MSL_WRITER)
diff --git a/src/tint/lang/msl/writer/ast_raise/BUILD.gn b/src/tint/lang/msl/writer/ast_raise/BUILD.gn
index b708177..9b524a6 100644
--- a/src/tint/lang/msl/writer/ast_raise/BUILD.gn
+++ b/src/tint/lang/msl/writer/ast_raise/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -56,6 +57,7 @@
       "subgroup_ballot.h",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
       "${tint_src_dir}/lang/core/constant",
@@ -96,6 +98,7 @@
         "subgroup_ballot_test.cc",
       ]
       deps = [
+        "${dawn_root}/src/utils:utils",
         "${tint_src_dir}:gmock_and_gtest",
         "${tint_src_dir}/api/common",
         "${tint_src_dir}/lang/core",
diff --git a/src/tint/lang/msl/writer/common/BUILD.bazel b/src/tint/lang/msl/writer/common/BUILD.bazel
index 47e5df1..b21db5b 100644
--- a/src/tint/lang/msl/writer/common/BUILD.bazel
+++ b/src/tint/lang/msl/writer/common/BUILD.bazel
@@ -67,6 +67,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -94,6 +95,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ] + select({
     ":tint_build_msl_writer": [
       "//src/tint/lang/msl/writer/common",
diff --git a/src/tint/lang/msl/writer/common/BUILD.cmake b/src/tint/lang/msl/writer/common/BUILD.cmake
index 07bf879..5b3c9a8 100644
--- a/src/tint/lang/msl/writer/common/BUILD.cmake
+++ b/src/tint/lang/msl/writer/common/BUILD.cmake
@@ -70,6 +70,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_msl_writer_common lib
+  "src_utils"
+)
+
 endif(TINT_BUILD_MSL_WRITER)
 if(TINT_BUILD_MSL_WRITER)
 ################################################################################
@@ -101,6 +105,7 @@
 
 tint_target_add_external_dependencies(tint_lang_msl_writer_common_test test
   "gtest"
+  "src_utils"
 )
 
 if(TINT_BUILD_MSL_WRITER)
diff --git a/src/tint/lang/msl/writer/common/BUILD.gn b/src/tint/lang/msl/writer/common/BUILD.gn
index a1bffc8..6e53b58 100644
--- a/src/tint/lang/msl/writer/common/BUILD.gn
+++ b/src/tint/lang/msl/writer/common/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -52,6 +53,7 @@
       "printer_support.h",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
       "${tint_src_dir}/lang/core/common",
@@ -81,6 +83,7 @@
         "printer_support_test.cc",
       ]
       deps = [
+        "${dawn_root}/src/utils:utils",
         "${tint_src_dir}:gmock_and_gtest",
         "${tint_src_dir}/api/common",
         "${tint_src_dir}/lang/core",
diff --git a/src/tint/lang/msl/writer/helpers/BUILD.bazel b/src/tint/lang/msl/writer/helpers/BUILD.bazel
index fcaa346..7c283ab 100644
--- a/src/tint/lang/msl/writer/helpers/BUILD.bazel
+++ b/src/tint/lang/msl/writer/helpers/BUILD.bazel
@@ -67,6 +67,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ] + select({
     ":tint_build_msl_writer": [
       "//src/tint/lang/msl/writer/common",
diff --git a/src/tint/lang/msl/writer/helpers/BUILD.cmake b/src/tint/lang/msl/writer/helpers/BUILD.cmake
index b9c40ab..e50c48e 100644
--- a/src/tint/lang/msl/writer/helpers/BUILD.cmake
+++ b/src/tint/lang/msl/writer/helpers/BUILD.cmake
@@ -70,6 +70,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_msl_writer_helpers lib
+  "src_utils"
+)
+
 if(TINT_BUILD_MSL_WRITER)
   tint_target_add_dependencies(tint_lang_msl_writer_helpers lib
     tint_lang_msl_writer_common
diff --git a/src/tint/lang/msl/writer/helpers/BUILD.gn b/src/tint/lang/msl/writer/helpers/BUILD.gn
index c3590d9..1b7ab74 100644
--- a/src/tint/lang/msl/writer/helpers/BUILD.gn
+++ b/src/tint/lang/msl/writer/helpers/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -44,6 +45,7 @@
       "generate_bindings.h",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
       "${tint_src_dir}/lang/core/constant",
diff --git a/src/tint/lang/msl/writer/printer/BUILD.bazel b/src/tint/lang/msl/writer/printer/BUILD.bazel
index d73e980..8ece99e 100644
--- a/src/tint/lang/msl/writer/printer/BUILD.bazel
+++ b/src/tint/lang/msl/writer/printer/BUILD.bazel
@@ -69,6 +69,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ] + select({
     ":tint_build_msl_writer": [
       "//src/tint/lang/msl/writer/common",
diff --git a/src/tint/lang/msl/writer/printer/BUILD.cmake b/src/tint/lang/msl/writer/printer/BUILD.cmake
index def62bf..f2ac6ab 100644
--- a/src/tint/lang/msl/writer/printer/BUILD.cmake
+++ b/src/tint/lang/msl/writer/printer/BUILD.cmake
@@ -72,6 +72,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_msl_writer_printer lib
+  "src_utils"
+)
+
 if(TINT_BUILD_MSL_WRITER)
   tint_target_add_dependencies(tint_lang_msl_writer_printer lib
     tint_lang_msl_writer_common
diff --git a/src/tint/lang/msl/writer/printer/BUILD.gn b/src/tint/lang/msl/writer/printer/BUILD.gn
index 22f5222..9cb04ce 100644
--- a/src/tint/lang/msl/writer/printer/BUILD.gn
+++ b/src/tint/lang/msl/writer/printer/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -44,6 +45,7 @@
       "printer.h",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
       "${tint_src_dir}/lang/core/constant",
diff --git a/src/tint/lang/msl/writer/raise/BUILD.bazel b/src/tint/lang/msl/writer/raise/BUILD.bazel
index f6dd913..3e019ea 100644
--- a/src/tint/lang/msl/writer/raise/BUILD.bazel
+++ b/src/tint/lang/msl/writer/raise/BUILD.bazel
@@ -81,6 +81,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ] + select({
     ":tint_build_msl_writer": [
       "//src/tint/lang/msl/writer/common",
@@ -122,6 +123,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ] + select({
     ":tint_build_msl_writer": [
       "//src/tint/lang/msl/writer/raise",
diff --git a/src/tint/lang/msl/writer/raise/BUILD.cmake b/src/tint/lang/msl/writer/raise/BUILD.cmake
index 5b624f9..39d4546 100644
--- a/src/tint/lang/msl/writer/raise/BUILD.cmake
+++ b/src/tint/lang/msl/writer/raise/BUILD.cmake
@@ -84,6 +84,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_msl_writer_raise lib
+  "src_utils"
+)
+
 if(TINT_BUILD_MSL_WRITER)
   tint_target_add_dependencies(tint_lang_msl_writer_raise lib
     tint_lang_msl_writer_common
@@ -130,6 +134,7 @@
 
 tint_target_add_external_dependencies(tint_lang_msl_writer_raise_test test
   "gtest"
+  "src_utils"
 )
 
 if(TINT_BUILD_MSL_WRITER)
diff --git a/src/tint/lang/msl/writer/raise/BUILD.gn b/src/tint/lang/msl/writer/raise/BUILD.gn
index 2689a15..d6973f0 100644
--- a/src/tint/lang/msl/writer/raise/BUILD.gn
+++ b/src/tint/lang/msl/writer/raise/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -58,6 +59,7 @@
       "shader_io.h",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
       "${tint_src_dir}/lang/core/common",
@@ -102,6 +104,7 @@
         "shader_io_test.cc",
       ]
       deps = [
+        "${dawn_root}/src/utils:utils",
         "${tint_src_dir}:gmock_and_gtest",
         "${tint_src_dir}/api/common",
         "${tint_src_dir}/lang/core",
diff --git a/src/tint/lang/spirv/BUILD.gn b/src/tint/lang/spirv/BUILD.gn
index bac54e5..1633f6d 100644
--- a/src/tint/lang/spirv/BUILD.gn
+++ b/src/tint/lang/spirv/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
diff --git a/src/tint/lang/spirv/intrinsic/BUILD.bazel b/src/tint/lang/spirv/intrinsic/BUILD.bazel
index 7b2f0e8..7d35f0b 100644
--- a/src/tint/lang/spirv/intrinsic/BUILD.bazel
+++ b/src/tint/lang/spirv/intrinsic/BUILD.bazel
@@ -66,6 +66,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
diff --git a/src/tint/lang/spirv/intrinsic/BUILD.cmake b/src/tint/lang/spirv/intrinsic/BUILD.cmake
index 541c0f5..3ea5cca 100644
--- a/src/tint/lang/spirv/intrinsic/BUILD.cmake
+++ b/src/tint/lang/spirv/intrinsic/BUILD.cmake
@@ -66,3 +66,7 @@
   tint_utils_text
   tint_utils_traits
 )
+
+tint_target_add_external_dependencies(tint_lang_spirv_intrinsic lib
+  "src_utils"
+)
diff --git a/src/tint/lang/spirv/intrinsic/BUILD.gn b/src/tint/lang/spirv/intrinsic/BUILD.gn
index e99baee..58ea55d 100644
--- a/src/tint/lang/spirv/intrinsic/BUILD.gn
+++ b/src/tint/lang/spirv/intrinsic/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -45,6 +46,7 @@
     "type_matchers.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/lang/core",
     "${tint_src_dir}/lang/core/constant",
     "${tint_src_dir}/lang/core/intrinsic",
diff --git a/src/tint/lang/spirv/ir/BUILD.bazel b/src/tint/lang/spirv/ir/BUILD.bazel
index 50ee0c9..c21bb47 100644
--- a/src/tint/lang/spirv/ir/BUILD.bazel
+++ b/src/tint/lang/spirv/ir/BUILD.bazel
@@ -68,6 +68,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -103,6 +104,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
diff --git a/src/tint/lang/spirv/ir/BUILD.cmake b/src/tint/lang/spirv/ir/BUILD.cmake
index dc6cb22..87f645e 100644
--- a/src/tint/lang/spirv/ir/BUILD.cmake
+++ b/src/tint/lang/spirv/ir/BUILD.cmake
@@ -69,6 +69,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_spirv_ir lib
+  "src_utils"
+)
+
 ################################################################################
 # Target:    tint_lang_spirv_ir_test
 # Kind:      test
@@ -105,4 +109,5 @@
 
 tint_target_add_external_dependencies(tint_lang_spirv_ir_test test
   "gtest"
+  "src_utils"
 )
diff --git a/src/tint/lang/spirv/ir/BUILD.gn b/src/tint/lang/spirv/ir/BUILD.gn
index 31f96cf..76d049c 100644
--- a/src/tint/lang/spirv/ir/BUILD.gn
+++ b/src/tint/lang/spirv/ir/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -50,6 +51,7 @@
     "literal_operand.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/api/common",
     "${tint_src_dir}/lang/core",
     "${tint_src_dir}/lang/core/constant",
@@ -77,6 +79,7 @@
   tint_unittests_source_set("unittests") {
     sources = [ "builtin_call_test.cc" ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}:gmock_and_gtest",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
diff --git a/src/tint/lang/spirv/reader/BUILD.bazel b/src/tint/lang/spirv/reader/BUILD.bazel
index 3f50893..ce8ab39 100644
--- a/src/tint/lang/spirv/reader/BUILD.bazel
+++ b/src/tint/lang/spirv/reader/BUILD.bazel
@@ -70,6 +70,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ] + select({
     ":tint_build_spv_reader": [
       "//src/tint/lang/spirv/reader/ast_parser",
@@ -113,6 +114,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ] + select({
     ":tint_build_spv_reader": [
       "//src/tint/lang/spirv/reader",
diff --git a/src/tint/lang/spirv/reader/BUILD.cmake b/src/tint/lang/spirv/reader/BUILD.cmake
index 6b1a73c..78f7698 100644
--- a/src/tint/lang/spirv/reader/BUILD.cmake
+++ b/src/tint/lang/spirv/reader/BUILD.cmake
@@ -79,6 +79,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_spirv_reader lib
+  "src_utils"
+)
+
 if(TINT_BUILD_SPV_READER)
   tint_target_add_dependencies(tint_lang_spirv_reader lib
     tint_lang_spirv_reader_ast_parser
@@ -127,6 +131,7 @@
 
 tint_target_add_external_dependencies(tint_lang_spirv_reader_test test
   "gtest"
+  "src_utils"
 )
 
 if(TINT_BUILD_SPV_READER)
diff --git a/src/tint/lang/spirv/reader/BUILD.gn b/src/tint/lang/spirv/reader/BUILD.gn
index 09788fc..8116b1b 100644
--- a/src/tint/lang/spirv/reader/BUILD.gn
+++ b/src/tint/lang/spirv/reader/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -48,6 +49,7 @@
       "reader.h",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
       "${tint_src_dir}/lang/core/constant",
@@ -89,6 +91,7 @@
     tint_unittests_source_set("unittests") {
       sources = [ "reader_test.cc" ]
       deps = [
+        "${dawn_root}/src/utils:utils",
         "${tint_src_dir}:gmock_and_gtest",
         "${tint_src_dir}/api/common",
         "${tint_src_dir}/lang/core",
diff --git a/src/tint/lang/spirv/reader/ast_lower/BUILD.bazel b/src/tint/lang/spirv/reader/ast_lower/BUILD.bazel
index b89ad46..7bb61d7 100644
--- a/src/tint/lang/spirv/reader/ast_lower/BUILD.bazel
+++ b/src/tint/lang/spirv/reader/ast_lower/BUILD.bazel
@@ -78,6 +78,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -121,6 +122,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ] + select({
     ":tint_build_spv_reader": [
       "//src/tint/lang/spirv/reader/ast_lower",
diff --git a/src/tint/lang/spirv/reader/ast_lower/BUILD.cmake b/src/tint/lang/spirv/reader/ast_lower/BUILD.cmake
index 53e39c3..361645f 100644
--- a/src/tint/lang/spirv/reader/ast_lower/BUILD.cmake
+++ b/src/tint/lang/spirv/reader/ast_lower/BUILD.cmake
@@ -81,6 +81,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_spirv_reader_ast_lower lib
+  "src_utils"
+)
+
 endif(TINT_BUILD_SPV_READER)
 if(TINT_BUILD_SPV_READER AND TINT_BUILD_WGSL_READER AND TINT_BUILD_WGSL_WRITER)
 ################################################################################
@@ -128,6 +132,7 @@
 
 tint_target_add_external_dependencies(tint_lang_spirv_reader_ast_lower_test test
   "gtest"
+  "src_utils"
 )
 
 if(TINT_BUILD_SPV_READER)
diff --git a/src/tint/lang/spirv/reader/ast_lower/BUILD.gn b/src/tint/lang/spirv/reader/ast_lower/BUILD.gn
index e6703a4..4acb4a2 100644
--- a/src/tint/lang/spirv/reader/ast_lower/BUILD.gn
+++ b/src/tint/lang/spirv/reader/ast_lower/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -56,6 +57,7 @@
       "pass_workgroup_id_as_argument.h",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
       "${tint_src_dir}/lang/core/constant",
@@ -96,6 +98,7 @@
         "pass_workgroup_id_as_argument_test.cc",
       ]
       deps = [
+        "${dawn_root}/src/utils:utils",
         "${tint_src_dir}:gmock_and_gtest",
         "${tint_src_dir}/api/common",
         "${tint_src_dir}/lang/core",
diff --git a/src/tint/lang/spirv/reader/ast_parser/BUILD.bazel b/src/tint/lang/spirv/reader/ast_parser/BUILD.bazel
index c656285..5ebf2be 100644
--- a/src/tint/lang/spirv/reader/ast_parser/BUILD.bazel
+++ b/src/tint/lang/spirv/reader/ast_parser/BUILD.bazel
@@ -88,6 +88,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ] + select({
     ":tint_build_spv_reader": [
       "//src/tint/lang/spirv/reader/ast_lower",
@@ -169,6 +170,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ] + select({
     ":tint_build_spv_reader": [
       "//src/tint/lang/spirv/reader/ast_parser",
diff --git a/src/tint/lang/spirv/reader/ast_parser/BUILD.cmake b/src/tint/lang/spirv/reader/ast_parser/BUILD.cmake
index e4ab32d..76e2429 100644
--- a/src/tint/lang/spirv/reader/ast_parser/BUILD.cmake
+++ b/src/tint/lang/spirv/reader/ast_parser/BUILD.cmake
@@ -91,6 +91,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_spirv_reader_ast_parser lib
+  "src_utils"
+)
+
 if(TINT_BUILD_SPV_READER)
   tint_target_add_dependencies(tint_lang_spirv_reader_ast_parser lib
     tint_lang_spirv_reader_ast_lower
@@ -178,6 +182,7 @@
 
 tint_target_add_external_dependencies(tint_lang_spirv_reader_ast_parser_test test
   "gtest"
+  "src_utils"
 )
 
 if(TINT_BUILD_SPV_READER)
diff --git a/src/tint/lang/spirv/reader/ast_parser/BUILD.gn b/src/tint/lang/spirv/reader/ast_parser/BUILD.gn
index 5c8e0c1..7a5c65c 100644
--- a/src/tint/lang/spirv/reader/ast_parser/BUILD.gn
+++ b/src/tint/lang/spirv/reader/ast_parser/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -66,6 +67,7 @@
       "usage.h",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
       "${tint_src_dir}/lang/core/constant",
@@ -151,6 +153,7 @@
         "user_name_test.cc",
       ]
       deps = [
+        "${dawn_root}/src/utils:utils",
         "${tint_src_dir}:gmock_and_gtest",
         "${tint_src_dir}/api/common",
         "${tint_src_dir}/lang/core",
diff --git a/src/tint/lang/spirv/reader/common/BUILD.bazel b/src/tint/lang/spirv/reader/common/BUILD.bazel
index b381409..b643e17 100644
--- a/src/tint/lang/spirv/reader/common/BUILD.bazel
+++ b/src/tint/lang/spirv/reader/common/BUILD.bazel
@@ -59,6 +59,7 @@
     "//src/tint/utils/rtti",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -80,6 +81,7 @@
     "//src/tint/utils/rtti",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ] + select({
     ":tint_build_spv_reader_or_tint_build_spv_writer": [
       "@spirv_tools",
diff --git a/src/tint/lang/spirv/reader/common/BUILD.cmake b/src/tint/lang/spirv/reader/common/BUILD.cmake
index 6db6e92..cf92d5e 100644
--- a/src/tint/lang/spirv/reader/common/BUILD.cmake
+++ b/src/tint/lang/spirv/reader/common/BUILD.cmake
@@ -62,6 +62,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_spirv_reader_common lib
+  "src_utils"
+)
+
 endif(TINT_BUILD_SPV_READER)
 if(TINT_BUILD_SPV_READER)
 ################################################################################
@@ -86,6 +90,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_spirv_reader_common_test test
+  "src_utils"
+)
+
 if(TINT_BUILD_SPV_READER OR TINT_BUILD_SPV_WRITER)
   tint_target_add_external_dependencies(tint_lang_spirv_reader_common_test test
     "spirv-tools"
diff --git a/src/tint/lang/spirv/reader/common/BUILD.gn b/src/tint/lang/spirv/reader/common/BUILD.gn
index d2bb13e..1e78cee 100644
--- a/src/tint/lang/spirv/reader/common/BUILD.gn
+++ b/src/tint/lang/spirv/reader/common/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -48,6 +49,7 @@
       "options.h",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}/lang/wgsl",
       "${tint_src_dir}/lang/wgsl/common",
       "${tint_src_dir}/lang/wgsl/features",
@@ -70,6 +72,7 @@
     tint_unittests_source_set("unittests") {
       sources = [ "helper_test.h" ]
       deps = [
+        "${dawn_root}/src/utils:utils",
         "${tint_src_dir}/utils/containers",
         "${tint_src_dir}/utils/diagnostic",
         "${tint_src_dir}/utils/ice",
diff --git a/src/tint/lang/spirv/reader/lower/BUILD.bazel b/src/tint/lang/spirv/reader/lower/BUILD.bazel
index 1348c8d..5d99ad6 100644
--- a/src/tint/lang/spirv/reader/lower/BUILD.bazel
+++ b/src/tint/lang/spirv/reader/lower/BUILD.bazel
@@ -69,6 +69,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -103,6 +104,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
diff --git a/src/tint/lang/spirv/reader/lower/BUILD.cmake b/src/tint/lang/spirv/reader/lower/BUILD.cmake
index 98de660..9758df7 100644
--- a/src/tint/lang/spirv/reader/lower/BUILD.cmake
+++ b/src/tint/lang/spirv/reader/lower/BUILD.cmake
@@ -70,6 +70,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_spirv_reader_lower lib
+  "src_utils"
+)
+
 ################################################################################
 # Target:    tint_lang_spirv_reader_lower_test
 # Kind:      test
@@ -105,4 +109,5 @@
 
 tint_target_add_external_dependencies(tint_lang_spirv_reader_lower_test test
   "gtest"
+  "src_utils"
 )
diff --git a/src/tint/lang/spirv/reader/lower/BUILD.gn b/src/tint/lang/spirv/reader/lower/BUILD.gn
index 37c4709..b9adbf6 100644
--- a/src/tint/lang/spirv/reader/lower/BUILD.gn
+++ b/src/tint/lang/spirv/reader/lower/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -52,6 +53,7 @@
     "vector_element_pointer.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/api/common",
     "${tint_src_dir}/lang/core",
     "${tint_src_dir}/lang/core/constant",
@@ -81,6 +83,7 @@
       "vector_element_pointer_test.cc",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}:gmock_and_gtest",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
diff --git a/src/tint/lang/spirv/reader/parser/BUILD.bazel b/src/tint/lang/spirv/reader/parser/BUILD.bazel
index 556a767..4d4613e 100644
--- a/src/tint/lang/spirv/reader/parser/BUILD.bazel
+++ b/src/tint/lang/spirv/reader/parser/BUILD.bazel
@@ -64,6 +64,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ] + select({
     ":tint_build_spv_reader_or_tint_build_spv_writer": [
       "//src/tint/lang/spirv/validate",
@@ -108,6 +109,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ] + select({
     ":tint_build_spv_reader": [
       "//src/tint/lang/spirv/reader/common:test",
diff --git a/src/tint/lang/spirv/reader/parser/BUILD.cmake b/src/tint/lang/spirv/reader/parser/BUILD.cmake
index 20ea525..7af6c8e 100644
--- a/src/tint/lang/spirv/reader/parser/BUILD.cmake
+++ b/src/tint/lang/spirv/reader/parser/BUILD.cmake
@@ -67,6 +67,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_spirv_reader_parser lib
+  "src_utils"
+)
+
 if(TINT_BUILD_SPV_READER OR TINT_BUILD_SPV_WRITER)
   tint_target_add_dependencies(tint_lang_spirv_reader_parser lib
     tint_lang_spirv_validate
@@ -118,6 +122,7 @@
 
 tint_target_add_external_dependencies(tint_lang_spirv_reader_parser_test test
   "gtest"
+  "src_utils"
 )
 
 if(TINT_BUILD_SPV_READER)
diff --git a/src/tint/lang/spirv/reader/parser/BUILD.gn b/src/tint/lang/spirv/reader/parser/BUILD.gn
index 618d5d5..9b2012e 100644
--- a/src/tint/lang/spirv/reader/parser/BUILD.gn
+++ b/src/tint/lang/spirv/reader/parser/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -48,6 +49,7 @@
       "parser.h",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
       "${tint_src_dir}/lang/core/constant",
@@ -96,6 +98,7 @@
         "var_test.cc",
       ]
       deps = [
+        "${dawn_root}/src/utils:utils",
         "${tint_src_dir}:gmock_and_gtest",
         "${tint_src_dir}/api/common",
         "${tint_src_dir}/lang/core",
diff --git a/src/tint/lang/spirv/type/BUILD.bazel b/src/tint/lang/spirv/type/BUILD.bazel
index 6503b17..390af1d 100644
--- a/src/tint/lang/spirv/type/BUILD.bazel
+++ b/src/tint/lang/spirv/type/BUILD.bazel
@@ -62,6 +62,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -89,6 +90,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
diff --git a/src/tint/lang/spirv/type/BUILD.cmake b/src/tint/lang/spirv/type/BUILD.cmake
index ef39fed..97a3b44 100644
--- a/src/tint/lang/spirv/type/BUILD.cmake
+++ b/src/tint/lang/spirv/type/BUILD.cmake
@@ -63,6 +63,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_spirv_type lib
+  "src_utils"
+)
+
 ################################################################################
 # Target:    tint_lang_spirv_type_test
 # Kind:      test
@@ -91,4 +95,5 @@
 
 tint_target_add_external_dependencies(tint_lang_spirv_type_test test
   "gtest"
+  "src_utils"
 )
diff --git a/src/tint/lang/spirv/type/BUILD.gn b/src/tint/lang/spirv/type/BUILD.gn
index 345e2db..3f1b64d 100644
--- a/src/tint/lang/spirv/type/BUILD.gn
+++ b/src/tint/lang/spirv/type/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -48,6 +49,7 @@
     "sampled_image.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/lang/core",
     "${tint_src_dir}/lang/core/constant",
     "${tint_src_dir}/lang/core/ir",
@@ -71,6 +73,7 @@
   tint_unittests_source_set("unittests") {
     sources = [ "sampled_image_test.cc" ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}:gmock_and_gtest",
       "${tint_src_dir}/lang/core",
       "${tint_src_dir}/lang/core/constant",
diff --git a/src/tint/lang/spirv/validate/BUILD.bazel b/src/tint/lang/spirv/validate/BUILD.bazel
index dd47510..c68be9b 100644
--- a/src/tint/lang/spirv/validate/BUILD.bazel
+++ b/src/tint/lang/spirv/validate/BUILD.bazel
@@ -55,6 +55,7 @@
     "//src/tint/utils/rtti",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ] + select({
     ":tint_build_spv_reader_or_tint_build_spv_writer": [
       "@spirv_tools",
@@ -82,6 +83,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ] + select({
     ":tint_build_spv_reader_or_tint_build_spv_writer": [
       "//src/tint/lang/spirv/validate",
diff --git a/src/tint/lang/spirv/validate/BUILD.cmake b/src/tint/lang/spirv/validate/BUILD.cmake
index 726f9cf..e7096bc 100644
--- a/src/tint/lang/spirv/validate/BUILD.cmake
+++ b/src/tint/lang/spirv/validate/BUILD.cmake
@@ -58,6 +58,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_spirv_validate lib
+  "src_utils"
+)
+
 if(TINT_BUILD_SPV_READER OR TINT_BUILD_SPV_WRITER)
   tint_target_add_external_dependencies(tint_lang_spirv_validate lib
     "spirv-tools"
@@ -90,6 +94,7 @@
 
 tint_target_add_external_dependencies(tint_lang_spirv_validate_test test
   "gtest"
+  "src_utils"
 )
 
 if(TINT_BUILD_SPV_READER OR TINT_BUILD_SPV_WRITER)
diff --git a/src/tint/lang/spirv/validate/BUILD.gn b/src/tint/lang/spirv/validate/BUILD.gn
index 2f79a37..89c42cf 100644
--- a/src/tint/lang/spirv/validate/BUILD.gn
+++ b/src/tint/lang/spirv/validate/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -48,6 +49,7 @@
       "validate.h",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}/utils/containers",
       "${tint_src_dir}/utils/diagnostic",
       "${tint_src_dir}/utils/ice",
@@ -73,6 +75,7 @@
     tint_unittests_source_set("unittests") {
       sources = [ "validate_test.cc" ]
       deps = [
+        "${dawn_root}/src/utils:utils",
         "${tint_src_dir}:gmock_and_gtest",
         "${tint_src_dir}/utils/containers",
         "${tint_src_dir}/utils/diagnostic",
diff --git a/src/tint/lang/spirv/writer/BUILD.bazel b/src/tint/lang/spirv/writer/BUILD.bazel
index dbd9c58..6553bd0 100644
--- a/src/tint/lang/spirv/writer/BUILD.bazel
+++ b/src/tint/lang/spirv/writer/BUILD.bazel
@@ -66,6 +66,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ] + select({
     ":tint_build_spv_reader_or_tint_build_spv_writer": [
       "@spirv_headers//:spirv_cpp11_headers", "@spirv_headers//:spirv_c_headers",
@@ -128,6 +129,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ] + select({
     ":tint_build_spv_reader_or_tint_build_spv_writer": [
       "@spirv_headers//:spirv_cpp11_headers", "@spirv_headers//:spirv_c_headers",
@@ -177,6 +179,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@benchmark",
+    "//src/utils",
   ] + select({
     ":tint_build_spv_writer": [
       "//src/tint/lang/spirv/writer",
diff --git a/src/tint/lang/spirv/writer/BUILD.cmake b/src/tint/lang/spirv/writer/BUILD.cmake
index 7d31e90..f22ad18 100644
--- a/src/tint/lang/spirv/writer/BUILD.cmake
+++ b/src/tint/lang/spirv/writer/BUILD.cmake
@@ -74,6 +74,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_spirv_writer lib
+  "src_utils"
+)
+
 if(TINT_BUILD_SPV_READER OR TINT_BUILD_SPV_WRITER)
   tint_target_add_external_dependencies(tint_lang_spirv_writer lib
     "spirv-headers"
@@ -142,6 +146,7 @@
 
 tint_target_add_external_dependencies(tint_lang_spirv_writer_test test
   "gtest"
+  "src_utils"
 )
 
 if(TINT_BUILD_SPV_READER OR TINT_BUILD_SPV_WRITER)
@@ -199,6 +204,7 @@
 
 tint_target_add_external_dependencies(tint_lang_spirv_writer_bench bench
   "google-benchmark"
+  "src_utils"
 )
 
 if(TINT_BUILD_SPV_WRITER)
@@ -249,6 +255,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_spirv_writer_fuzz fuzz
+  "src_utils"
+)
+
 if(TINT_BUILD_SPV_READER OR TINT_BUILD_SPV_WRITER)
   tint_target_add_dependencies(tint_lang_spirv_writer_fuzz fuzz
     tint_lang_spirv_validate
diff --git a/src/tint/lang/spirv/writer/BUILD.gn b/src/tint/lang/spirv/writer/BUILD.gn
index 49a8ec9..d815e68 100644
--- a/src/tint/lang/spirv/writer/BUILD.gn
+++ b/src/tint/lang/spirv/writer/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -50,6 +51,7 @@
       "writer.h",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
       "${tint_src_dir}/lang/core/common",
@@ -110,6 +112,7 @@
         "writer_test.cc",
       ]
       deps = [
+        "${dawn_root}/src/utils:utils",
         "${tint_src_dir}:gmock_and_gtest",
         "${tint_src_dir}/api/common",
         "${tint_src_dir}/lang/core",
@@ -155,6 +158,7 @@
     tint_benchmarks_source_set("bench") {
       sources = [ "writer_bench.cc" ]
       deps = [
+        "${dawn_root}/src/utils:utils",
         "${tint_src_dir}:google_benchmark",
         "${tint_src_dir}/api/common",
         "${tint_src_dir}/lang/core",
@@ -202,6 +206,7 @@
   tint_fuzz_source_set("fuzz") {
     sources = [ "writer_ir_fuzz.cc" ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/cmd/fuzz/ir:fuzz",
       "${tint_src_dir}/lang/core",
diff --git a/src/tint/lang/spirv/writer/common/BUILD.bazel b/src/tint/lang/spirv/writer/common/BUILD.bazel
index 3f79228..ff6371b 100644
--- a/src/tint/lang/spirv/writer/common/BUILD.bazel
+++ b/src/tint/lang/spirv/writer/common/BUILD.bazel
@@ -69,6 +69,7 @@
     "//src/tint/utils/rtti",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ] + select({
     ":tint_build_spv_reader_or_tint_build_spv_writer": [
       "@spirv_headers//:spirv_cpp11_headers", "@spirv_headers//:spirv_c_headers",
@@ -112,6 +113,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ] + select({
     ":tint_build_spv_reader_or_tint_build_spv_writer": [
       "@spirv_headers//:spirv_cpp11_headers", "@spirv_headers//:spirv_c_headers",
diff --git a/src/tint/lang/spirv/writer/common/BUILD.cmake b/src/tint/lang/spirv/writer/common/BUILD.cmake
index c461889..835d053 100644
--- a/src/tint/lang/spirv/writer/common/BUILD.cmake
+++ b/src/tint/lang/spirv/writer/common/BUILD.cmake
@@ -72,6 +72,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_spirv_writer_common lib
+  "src_utils"
+)
+
 if(TINT_BUILD_SPV_READER OR TINT_BUILD_SPV_WRITER)
   tint_target_add_external_dependencies(tint_lang_spirv_writer_common lib
     "spirv-headers"
@@ -120,6 +124,7 @@
 
 tint_target_add_external_dependencies(tint_lang_spirv_writer_common_test test
   "gtest"
+  "src_utils"
 )
 
 if(TINT_BUILD_SPV_READER OR TINT_BUILD_SPV_WRITER)
diff --git a/src/tint/lang/spirv/writer/common/BUILD.gn b/src/tint/lang/spirv/writer/common/BUILD.gn
index bef8cf1..935e589 100644
--- a/src/tint/lang/spirv/writer/common/BUILD.gn
+++ b/src/tint/lang/spirv/writer/common/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -59,6 +60,7 @@
       "options.h",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core/common",
       "${tint_src_dir}/utils/containers",
@@ -93,6 +95,7 @@
         "spv_dump_test.h",
       ]
       deps = [
+        "${dawn_root}/src/utils:utils",
         "${tint_src_dir}:gmock_and_gtest",
         "${tint_src_dir}/api/common",
         "${tint_src_dir}/lang/core",
diff --git a/src/tint/lang/spirv/writer/helpers/BUILD.bazel b/src/tint/lang/spirv/writer/helpers/BUILD.bazel
index cf8f544..00d3a29 100644
--- a/src/tint/lang/spirv/writer/helpers/BUILD.bazel
+++ b/src/tint/lang/spirv/writer/helpers/BUILD.bazel
@@ -63,6 +63,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ] + select({
     ":tint_build_spv_writer": [
       "//src/tint/lang/spirv/writer/common",
diff --git a/src/tint/lang/spirv/writer/helpers/BUILD.cmake b/src/tint/lang/spirv/writer/helpers/BUILD.cmake
index f980f4a..776bf3d 100644
--- a/src/tint/lang/spirv/writer/helpers/BUILD.cmake
+++ b/src/tint/lang/spirv/writer/helpers/BUILD.cmake
@@ -66,6 +66,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_spirv_writer_helpers lib
+  "src_utils"
+)
+
 if(TINT_BUILD_SPV_WRITER)
   tint_target_add_dependencies(tint_lang_spirv_writer_helpers lib
     tint_lang_spirv_writer_common
diff --git a/src/tint/lang/spirv/writer/helpers/BUILD.gn b/src/tint/lang/spirv/writer/helpers/BUILD.gn
index c3a2f4e..4f9c872 100644
--- a/src/tint/lang/spirv/writer/helpers/BUILD.gn
+++ b/src/tint/lang/spirv/writer/helpers/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -44,6 +45,7 @@
       "generate_bindings.h",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
       "${tint_src_dir}/lang/core/constant",
diff --git a/src/tint/lang/spirv/writer/printer/BUILD.bazel b/src/tint/lang/spirv/writer/printer/BUILD.bazel
index 360806f..afbd20c 100644
--- a/src/tint/lang/spirv/writer/printer/BUILD.bazel
+++ b/src/tint/lang/spirv/writer/printer/BUILD.bazel
@@ -68,6 +68,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ] + select({
     ":tint_build_spv_reader_or_tint_build_spv_writer": [
       "@spirv_headers//:spirv_cpp11_headers", "@spirv_headers//:spirv_c_headers",
diff --git a/src/tint/lang/spirv/writer/printer/BUILD.cmake b/src/tint/lang/spirv/writer/printer/BUILD.cmake
index 3462793..128ea4a 100644
--- a/src/tint/lang/spirv/writer/printer/BUILD.cmake
+++ b/src/tint/lang/spirv/writer/printer/BUILD.cmake
@@ -71,6 +71,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_spirv_writer_printer lib
+  "src_utils"
+)
+
 if(TINT_BUILD_SPV_READER OR TINT_BUILD_SPV_WRITER)
   tint_target_add_external_dependencies(tint_lang_spirv_writer_printer lib
     "spirv-headers"
diff --git a/src/tint/lang/spirv/writer/printer/BUILD.gn b/src/tint/lang/spirv/writer/printer/BUILD.gn
index fca5ef1..4243826 100644
--- a/src/tint/lang/spirv/writer/printer/BUILD.gn
+++ b/src/tint/lang/spirv/writer/printer/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -44,6 +45,7 @@
       "printer.h",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
       "${tint_src_dir}/lang/core/constant",
diff --git a/src/tint/lang/spirv/writer/raise/BUILD.bazel b/src/tint/lang/spirv/writer/raise/BUILD.bazel
index 3895fd0..c5dc6e3 100644
--- a/src/tint/lang/spirv/writer/raise/BUILD.bazel
+++ b/src/tint/lang/spirv/writer/raise/BUILD.bazel
@@ -86,6 +86,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ] + select({
     ":tint_build_spv_reader_or_tint_build_spv_writer": [
       "@spirv_headers//:spirv_cpp11_headers", "@spirv_headers//:spirv_c_headers",
@@ -135,6 +136,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ] + select({
     ":tint_build_spv_writer": [
       "//src/tint/lang/spirv/writer/raise",
diff --git a/src/tint/lang/spirv/writer/raise/BUILD.cmake b/src/tint/lang/spirv/writer/raise/BUILD.cmake
index 71c2ef4..5001512 100644
--- a/src/tint/lang/spirv/writer/raise/BUILD.cmake
+++ b/src/tint/lang/spirv/writer/raise/BUILD.cmake
@@ -89,6 +89,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_spirv_writer_raise lib
+  "src_utils"
+)
+
 if(TINT_BUILD_SPV_READER OR TINT_BUILD_SPV_WRITER)
   tint_target_add_external_dependencies(tint_lang_spirv_writer_raise lib
     "spirv-headers"
@@ -144,6 +148,7 @@
 
 tint_target_add_external_dependencies(tint_lang_spirv_writer_raise_test test
   "gtest"
+  "src_utils"
 )
 
 if(TINT_BUILD_SPV_WRITER)
diff --git a/src/tint/lang/spirv/writer/raise/BUILD.gn b/src/tint/lang/spirv/writer/raise/BUILD.gn
index 2927a46..670f1ca 100644
--- a/src/tint/lang/spirv/writer/raise/BUILD.gn
+++ b/src/tint/lang/spirv/writer/raise/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -64,6 +65,7 @@
       "var_for_dynamic_index.h",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
       "${tint_src_dir}/lang/core/common",
@@ -114,6 +116,7 @@
         "var_for_dynamic_index_test.cc",
       ]
       deps = [
+        "${dawn_root}/src/utils:utils",
         "${tint_src_dir}:gmock_and_gtest",
         "${tint_src_dir}/api/common",
         "${tint_src_dir}/lang/core",
diff --git a/src/tint/lang/wgsl/BUILD.bazel b/src/tint/lang/wgsl/BUILD.bazel
index b945e60..388f51a 100644
--- a/src/tint/lang/wgsl/BUILD.bazel
+++ b/src/tint/lang/wgsl/BUILD.bazel
@@ -60,6 +60,7 @@
     "//src/tint/utils/rtti",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -112,6 +113,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ] + select({
     ":tint_build_wgsl_reader": [
       "//src/tint/lang/wgsl/reader",
@@ -149,6 +151,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@benchmark",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
diff --git a/src/tint/lang/wgsl/BUILD.cmake b/src/tint/lang/wgsl/BUILD.cmake
index ae000ff..c84211a 100644
--- a/src/tint/lang/wgsl/BUILD.cmake
+++ b/src/tint/lang/wgsl/BUILD.cmake
@@ -75,6 +75,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_wgsl lib
+  "src_utils"
+)
+
 ################################################################################
 # Target:    tint_lang_wgsl_test
 # Kind:      test
@@ -119,6 +123,7 @@
 
 tint_target_add_external_dependencies(tint_lang_wgsl_test test
   "gtest"
+  "src_utils"
 )
 
 if(TINT_BUILD_WGSL_READER)
@@ -165,6 +170,7 @@
 
 tint_target_add_external_dependencies(tint_lang_wgsl_bench bench
   "google-benchmark"
+  "src_utils"
 )
 
 ################################################################################
@@ -207,6 +213,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_wgsl_fuzz fuzz
+  "src_utils"
+)
+
 if(TINT_BUILD_WGSL_READER)
   tint_target_add_dependencies(tint_lang_wgsl_fuzz fuzz
     tint_cmd_fuzz_wgsl_fuzz
diff --git a/src/tint/lang/wgsl/BUILD.gn b/src/tint/lang/wgsl/BUILD.gn
index 7afe4de..ba77afe 100644
--- a/src/tint/lang/wgsl/BUILD.gn
+++ b/src/tint/lang/wgsl/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -54,6 +55,7 @@
     "extension.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/utils/containers",
     "${tint_src_dir}/utils/diagnostic",
     "${tint_src_dir}/utils/ice",
@@ -76,6 +78,7 @@
       "wgsl_test.cc",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}:gmock_and_gtest",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
@@ -129,6 +132,7 @@
       "extension_bench.cc",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}:google_benchmark",
       "${tint_src_dir}/lang/wgsl",
       "${tint_src_dir}/utils/containers",
@@ -147,6 +151,7 @@
 tint_fuzz_source_set("fuzz") {
   sources = []
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/api/common",
     "${tint_src_dir}/lang/core",
     "${tint_src_dir}/lang/core/constant",
diff --git a/src/tint/lang/wgsl/ast/BUILD.bazel b/src/tint/lang/wgsl/ast/BUILD.bazel
index e038bf6..0614182 100644
--- a/src/tint/lang/wgsl/ast/BUILD.bazel
+++ b/src/tint/lang/wgsl/ast/BUILD.bazel
@@ -221,6 +221,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -332,6 +333,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ] + select({
     ":tint_build_wgsl_reader": [
       "//src/tint/lang/wgsl/reader",
diff --git a/src/tint/lang/wgsl/ast/BUILD.cmake b/src/tint/lang/wgsl/ast/BUILD.cmake
index 6afc090..4399bb0 100644
--- a/src/tint/lang/wgsl/ast/BUILD.cmake
+++ b/src/tint/lang/wgsl/ast/BUILD.cmake
@@ -224,6 +224,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_wgsl_ast lib
+  "src_utils"
+)
+
 ################################################################################
 # Target:    tint_lang_wgsl_ast_test
 # Kind:      test
@@ -327,6 +331,7 @@
 
 tint_target_add_external_dependencies(tint_lang_wgsl_ast_test test
   "gtest"
+  "src_utils"
 )
 
 if(TINT_BUILD_WGSL_READER)
diff --git a/src/tint/lang/wgsl/ast/BUILD.gn b/src/tint/lang/wgsl/ast/BUILD.gn
index a1b43d7..c163961 100644
--- a/src/tint/lang/wgsl/ast/BUILD.gn
+++ b/src/tint/lang/wgsl/ast/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -206,6 +207,7 @@
     "workgroup_attribute.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/api/common",
     "${tint_src_dir}/lang/core",
     "${tint_src_dir}/lang/core/type",
@@ -295,6 +297,7 @@
       "workgroup_attribute_test.cc",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}:gmock_and_gtest",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
diff --git a/src/tint/lang/wgsl/ast/transform/BUILD.bazel b/src/tint/lang/wgsl/ast/transform/BUILD.bazel
index 62bf03b..d9c4100 100644
--- a/src/tint/lang/wgsl/ast/transform/BUILD.bazel
+++ b/src/tint/lang/wgsl/ast/transform/BUILD.bazel
@@ -142,6 +142,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -222,6 +223,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ] + select({
     ":tint_build_wgsl_reader": [
       "//src/tint/lang/wgsl/reader",
diff --git a/src/tint/lang/wgsl/ast/transform/BUILD.cmake b/src/tint/lang/wgsl/ast/transform/BUILD.cmake
index 0fc07ed..bdee395 100644
--- a/src/tint/lang/wgsl/ast/transform/BUILD.cmake
+++ b/src/tint/lang/wgsl/ast/transform/BUILD.cmake
@@ -143,6 +143,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_wgsl_ast_transform lib
+  "src_utils"
+)
+
 if(TINT_BUILD_WGSL_READER AND TINT_BUILD_WGSL_WRITER)
 ################################################################################
 # Target:    tint_lang_wgsl_ast_transform_test
@@ -226,6 +230,7 @@
 
 tint_target_add_external_dependencies(tint_lang_wgsl_ast_transform_test test
   "gtest"
+  "src_utils"
 )
 
 if(TINT_BUILD_WGSL_READER)
diff --git a/src/tint/lang/wgsl/ast/transform/BUILD.gn b/src/tint/lang/wgsl/ast/transform/BUILD.gn
index 301b817..b6014c2 100644
--- a/src/tint/lang/wgsl/ast/transform/BUILD.gn
+++ b/src/tint/lang/wgsl/ast/transform/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -120,6 +121,7 @@
     "zero_init_workgroup_memory.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/api/common",
     "${tint_src_dir}/lang/core",
     "${tint_src_dir}/lang/core/common",
@@ -193,6 +195,7 @@
         "zero_init_workgroup_memory_test.cc",
       ]
       deps = [
+        "${dawn_root}/src/utils:utils",
         "${tint_src_dir}:gmock_and_gtest",
         "${tint_src_dir}/api/common",
         "${tint_src_dir}/lang/core",
diff --git a/src/tint/lang/wgsl/common/BUILD.bazel b/src/tint/lang/wgsl/common/BUILD.bazel
index 9612768..fa2d40b 100644
--- a/src/tint/lang/wgsl/common/BUILD.bazel
+++ b/src/tint/lang/wgsl/common/BUILD.bazel
@@ -59,6 +59,7 @@
     "//src/tint/utils/rtti",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -85,6 +86,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
diff --git a/src/tint/lang/wgsl/common/BUILD.cmake b/src/tint/lang/wgsl/common/BUILD.cmake
index da8e8ac..9da9eb1 100644
--- a/src/tint/lang/wgsl/common/BUILD.cmake
+++ b/src/tint/lang/wgsl/common/BUILD.cmake
@@ -60,6 +60,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_wgsl_common lib
+  "src_utils"
+)
+
 ################################################################################
 # Target:    tint_lang_wgsl_common_test
 # Kind:      test
@@ -87,4 +91,5 @@
 
 tint_target_add_external_dependencies(tint_lang_wgsl_common_test test
   "gtest"
+  "src_utils"
 )
diff --git a/src/tint/lang/wgsl/common/BUILD.gn b/src/tint/lang/wgsl/common/BUILD.gn
index 74a1576..55accf8 100644
--- a/src/tint/lang/wgsl/common/BUILD.gn
+++ b/src/tint/lang/wgsl/common/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -49,6 +50,7 @@
     "validation_mode.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/lang/wgsl",
     "${tint_src_dir}/lang/wgsl/features",
     "${tint_src_dir}/utils/containers",
@@ -68,6 +70,7 @@
   tint_unittests_source_set("unittests") {
     sources = [ "allowed_features_test.cc" ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}:gmock_and_gtest",
       "${tint_src_dir}/lang/wgsl",
       "${tint_src_dir}/lang/wgsl/common",
diff --git a/src/tint/lang/wgsl/helpers/BUILD.bazel b/src/tint/lang/wgsl/helpers/BUILD.bazel
index 5e1862a..a284f30 100644
--- a/src/tint/lang/wgsl/helpers/BUILD.bazel
+++ b/src/tint/lang/wgsl/helpers/BUILD.bazel
@@ -75,6 +75,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -117,6 +118,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
diff --git a/src/tint/lang/wgsl/helpers/BUILD.cmake b/src/tint/lang/wgsl/helpers/BUILD.cmake
index 061dbfd..c9551cc 100644
--- a/src/tint/lang/wgsl/helpers/BUILD.cmake
+++ b/src/tint/lang/wgsl/helpers/BUILD.cmake
@@ -76,6 +76,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_wgsl_helpers lib
+  "src_utils"
+)
+
 ################################################################################
 # Target:    tint_lang_wgsl_helpers_test
 # Kind:      test
@@ -119,4 +123,5 @@
 
 tint_target_add_external_dependencies(tint_lang_wgsl_helpers_test test
   "gtest"
+  "src_utils"
 )
diff --git a/src/tint/lang/wgsl/helpers/BUILD.gn b/src/tint/lang/wgsl/helpers/BUILD.gn
index 09cdf36..7aad212 100644
--- a/src/tint/lang/wgsl/helpers/BUILD.gn
+++ b/src/tint/lang/wgsl/helpers/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -54,6 +55,7 @@
     "flatten_bindings.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/api/common",
     "${tint_src_dir}/lang/core",
     "${tint_src_dir}/lang/core/constant",
@@ -88,6 +90,7 @@
       "flatten_bindings_test.cc",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}:gmock_and_gtest",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
diff --git a/src/tint/lang/wgsl/inspector/BUILD.bazel b/src/tint/lang/wgsl/inspector/BUILD.bazel
index 84c7690..f07efcc 100644
--- a/src/tint/lang/wgsl/inspector/BUILD.bazel
+++ b/src/tint/lang/wgsl/inspector/BUILD.bazel
@@ -73,6 +73,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -115,6 +116,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ] + select({
     ":tint_build_wgsl_reader": [
       "//src/tint/lang/wgsl/reader",
diff --git a/src/tint/lang/wgsl/inspector/BUILD.cmake b/src/tint/lang/wgsl/inspector/BUILD.cmake
index 71cddb5..db04424 100644
--- a/src/tint/lang/wgsl/inspector/BUILD.cmake
+++ b/src/tint/lang/wgsl/inspector/BUILD.cmake
@@ -74,6 +74,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_wgsl_inspector lib
+  "src_utils"
+)
+
 if(TINT_BUILD_WGSL_READER)
 ################################################################################
 # Target:    tint_lang_wgsl_inspector_test
@@ -119,6 +123,7 @@
 
 tint_target_add_external_dependencies(tint_lang_wgsl_inspector_test test
   "gtest"
+  "src_utils"
 )
 
 if(TINT_BUILD_WGSL_READER)
diff --git a/src/tint/lang/wgsl/inspector/BUILD.gn b/src/tint/lang/wgsl/inspector/BUILD.gn
index 5b75094..f28b12b 100644
--- a/src/tint/lang/wgsl/inspector/BUILD.gn
+++ b/src/tint/lang/wgsl/inspector/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -54,6 +55,7 @@
     "scalar.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/api/common",
     "${tint_src_dir}/lang/core",
     "${tint_src_dir}/lang/core/constant",
@@ -89,6 +91,7 @@
         "inspector_test.cc",
       ]
       deps = [
+        "${dawn_root}/src/utils:utils",
         "${tint_src_dir}:gmock_and_gtest",
         "${tint_src_dir}/api/common",
         "${tint_src_dir}/lang/core",
diff --git a/src/tint/lang/wgsl/intrinsic/BUILD.bazel b/src/tint/lang/wgsl/intrinsic/BUILD.bazel
index 46b4014..f9c270a 100644
--- a/src/tint/lang/wgsl/intrinsic/BUILD.bazel
+++ b/src/tint/lang/wgsl/intrinsic/BUILD.bazel
@@ -65,6 +65,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -105,6 +106,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
diff --git a/src/tint/lang/wgsl/intrinsic/BUILD.cmake b/src/tint/lang/wgsl/intrinsic/BUILD.cmake
index b40aa9b..6fdad92 100644
--- a/src/tint/lang/wgsl/intrinsic/BUILD.cmake
+++ b/src/tint/lang/wgsl/intrinsic/BUILD.cmake
@@ -66,6 +66,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_wgsl_intrinsic lib
+  "src_utils"
+)
+
 ################################################################################
 # Target:    tint_lang_wgsl_intrinsic_test
 # Kind:      test
@@ -107,4 +111,5 @@
 
 tint_target_add_external_dependencies(tint_lang_wgsl_intrinsic_test test
   "gtest"
+  "src_utils"
 )
diff --git a/src/tint/lang/wgsl/intrinsic/BUILD.gn b/src/tint/lang/wgsl/intrinsic/BUILD.gn
index 0571b28..a7e6583 100644
--- a/src/tint/lang/wgsl/intrinsic/BUILD.gn
+++ b/src/tint/lang/wgsl/intrinsic/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -50,6 +51,7 @@
     "dialect.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/lang/core",
     "${tint_src_dir}/lang/core/constant",
     "${tint_src_dir}/lang/core/intrinsic",
@@ -74,6 +76,7 @@
   tint_unittests_source_set("unittests") {
     sources = [ "table_test.cc" ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}:gmock_and_gtest",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
diff --git a/src/tint/lang/wgsl/ir/BUILD.bazel b/src/tint/lang/wgsl/ir/BUILD.bazel
index 259b851..b423046 100644
--- a/src/tint/lang/wgsl/ir/BUILD.bazel
+++ b/src/tint/lang/wgsl/ir/BUILD.bazel
@@ -68,6 +68,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
diff --git a/src/tint/lang/wgsl/ir/BUILD.cmake b/src/tint/lang/wgsl/ir/BUILD.cmake
index d0192da..64f44db 100644
--- a/src/tint/lang/wgsl/ir/BUILD.cmake
+++ b/src/tint/lang/wgsl/ir/BUILD.cmake
@@ -68,3 +68,7 @@
   tint_utils_text
   tint_utils_traits
 )
+
+tint_target_add_external_dependencies(tint_lang_wgsl_ir lib
+  "src_utils"
+)
diff --git a/src/tint/lang/wgsl/ir/BUILD.gn b/src/tint/lang/wgsl/ir/BUILD.gn
index 1194bb7..12e5c0d 100644
--- a/src/tint/lang/wgsl/ir/BUILD.gn
+++ b/src/tint/lang/wgsl/ir/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -46,6 +47,7 @@
     "unary.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/api/common",
     "${tint_src_dir}/lang/core",
     "${tint_src_dir}/lang/core/constant",
diff --git a/src/tint/lang/wgsl/ls/BUILD.bazel b/src/tint/lang/wgsl/ls/BUILD.bazel
index 52c6e48..9f8ae6d 100644
--- a/src/tint/lang/wgsl/ls/BUILD.bazel
+++ b/src/tint/lang/wgsl/ls/BUILD.bazel
@@ -94,6 +94,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
     
   ] + select({
     ":tint_build_tintd": [
@@ -148,6 +149,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ] + select({
     ":tint_build_tintd": [
       
diff --git a/src/tint/lang/wgsl/ls/BUILD.cmake b/src/tint/lang/wgsl/ls/BUILD.cmake
index b6335b6..e3b3f14 100644
--- a/src/tint/lang/wgsl/ls/BUILD.cmake
+++ b/src/tint/lang/wgsl/ls/BUILD.cmake
@@ -98,6 +98,7 @@
 )
 
 tint_target_add_external_dependencies(tint_lang_wgsl_ls lib
+  "src_utils"
   "thread"
 )
 
@@ -160,6 +161,7 @@
 
 tint_target_add_external_dependencies(tint_lang_wgsl_ls_test test
   "gtest"
+  "src_utils"
 )
 
 if(TINT_BUILD_TINTD)
diff --git a/src/tint/lang/wgsl/ls/BUILD.gn b/src/tint/lang/wgsl/ls/BUILD.gn
index 4289044..902a131 100644
--- a/src/tint/lang/wgsl/ls/BUILD.gn
+++ b/src/tint/lang/wgsl/ls/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -71,6 +72,7 @@
       "utils.h",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}:thread",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
@@ -127,6 +129,7 @@
         "symbols_test.cc",
       ]
       deps = [
+        "${dawn_root}/src/utils:utils",
         "${tint_src_dir}:gmock_and_gtest",
         "${tint_src_dir}/lang/core",
         "${tint_src_dir}/lang/core/constant",
diff --git a/src/tint/lang/wgsl/program/BUILD.bazel b/src/tint/lang/wgsl/program/BUILD.bazel
index 96c0879..2233208 100644
--- a/src/tint/lang/wgsl/program/BUILD.bazel
+++ b/src/tint/lang/wgsl/program/BUILD.bazel
@@ -70,6 +70,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -109,6 +110,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
diff --git a/src/tint/lang/wgsl/program/BUILD.cmake b/src/tint/lang/wgsl/program/BUILD.cmake
index 75e0236..763b7e9 100644
--- a/src/tint/lang/wgsl/program/BUILD.cmake
+++ b/src/tint/lang/wgsl/program/BUILD.cmake
@@ -71,6 +71,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_wgsl_program lib
+  "src_utils"
+)
+
 ################################################################################
 # Target:    tint_lang_wgsl_program_test
 # Kind:      test
@@ -111,6 +115,7 @@
 
 tint_target_add_external_dependencies(tint_lang_wgsl_program_test test
   "gtest"
+  "src_utils"
 )
 
 ################################################################################
@@ -149,6 +154,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_wgsl_program_fuzz fuzz
+  "src_utils"
+)
+
 if(TINT_BUILD_WGSL_READER)
   tint_target_add_dependencies(tint_lang_wgsl_program_fuzz fuzz
     tint_cmd_fuzz_wgsl_fuzz
diff --git a/src/tint/lang/wgsl/program/BUILD.gn b/src/tint/lang/wgsl/program/BUILD.gn
index 98ce8db..5b04ae2 100644
--- a/src/tint/lang/wgsl/program/BUILD.gn
+++ b/src/tint/lang/wgsl/program/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -52,6 +53,7 @@
     "program_builder.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/api/common",
     "${tint_src_dir}/lang/core",
     "${tint_src_dir}/lang/core/constant",
@@ -83,6 +85,7 @@
       "program_test.cc",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}:gmock_and_gtest",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
@@ -116,6 +119,7 @@
 tint_fuzz_source_set("fuzz") {
   sources = []
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/api/common",
     "${tint_src_dir}/lang/core",
     "${tint_src_dir}/lang/core/constant",
diff --git a/src/tint/lang/wgsl/reader/BUILD.bazel b/src/tint/lang/wgsl/reader/BUILD.bazel
index 8c52a2c..1064e01 100644
--- a/src/tint/lang/wgsl/reader/BUILD.bazel
+++ b/src/tint/lang/wgsl/reader/BUILD.bazel
@@ -72,6 +72,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ] + select({
     ":tint_build_wgsl_reader": [
       "//src/tint/lang/wgsl/reader/parser",
@@ -104,6 +105,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ] + select({
     ":tint_build_wgsl_reader": [
       "//src/tint/lang/wgsl/reader",
@@ -145,6 +147,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@benchmark",
+    "//src/utils",
   ] + select({
     ":tint_build_wgsl_reader": [
       "//src/tint/cmd/bench:bench",
diff --git a/src/tint/lang/wgsl/reader/BUILD.cmake b/src/tint/lang/wgsl/reader/BUILD.cmake
index 15421cd..09f6c8c 100644
--- a/src/tint/lang/wgsl/reader/BUILD.cmake
+++ b/src/tint/lang/wgsl/reader/BUILD.cmake
@@ -79,6 +79,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_wgsl_reader lib
+  "src_utils"
+)
+
 if(TINT_BUILD_WGSL_READER)
   tint_target_add_dependencies(tint_lang_wgsl_reader lib
     tint_lang_wgsl_reader_parser
@@ -116,6 +120,7 @@
 
 tint_target_add_external_dependencies(tint_lang_wgsl_reader_test test
   "gtest"
+  "src_utils"
 )
 
 if(TINT_BUILD_WGSL_READER)
@@ -164,6 +169,7 @@
 
 tint_target_add_external_dependencies(tint_lang_wgsl_reader_bench bench
   "google-benchmark"
+  "src_utils"
 )
 
 if(TINT_BUILD_WGSL_READER)
diff --git a/src/tint/lang/wgsl/reader/BUILD.gn b/src/tint/lang/wgsl/reader/BUILD.gn
index 9cf37f2..23278cb 100644
--- a/src/tint/lang/wgsl/reader/BUILD.gn
+++ b/src/tint/lang/wgsl/reader/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -49,6 +50,7 @@
       "reader.h",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
       "${tint_src_dir}/lang/core/constant",
@@ -90,6 +92,7 @@
     tint_unittests_source_set("unittests") {
       sources = [ "options_test.cc" ]
       deps = [
+        "${dawn_root}/src/utils:utils",
         "${tint_src_dir}:gmock_and_gtest",
         "${tint_src_dir}/lang/wgsl",
         "${tint_src_dir}/lang/wgsl/common",
@@ -118,6 +121,7 @@
     tint_benchmarks_source_set("bench") {
       sources = [ "reader_bench.cc" ]
       deps = [
+        "${dawn_root}/src/utils:utils",
         "${tint_src_dir}:google_benchmark",
         "${tint_src_dir}/api/common",
         "${tint_src_dir}/lang/core",
diff --git a/src/tint/lang/wgsl/reader/lower/BUILD.bazel b/src/tint/lang/wgsl/reader/lower/BUILD.bazel
index 0523a2c..4030b44 100644
--- a/src/tint/lang/wgsl/reader/lower/BUILD.bazel
+++ b/src/tint/lang/wgsl/reader/lower/BUILD.bazel
@@ -67,6 +67,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -103,6 +104,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
diff --git a/src/tint/lang/wgsl/reader/lower/BUILD.cmake b/src/tint/lang/wgsl/reader/lower/BUILD.cmake
index 7dee22e..930d1d0 100644
--- a/src/tint/lang/wgsl/reader/lower/BUILD.cmake
+++ b/src/tint/lang/wgsl/reader/lower/BUILD.cmake
@@ -68,6 +68,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_wgsl_reader_lower lib
+  "src_utils"
+)
+
 ################################################################################
 # Target:    tint_lang_wgsl_reader_lower_test
 # Kind:      test
@@ -105,4 +109,5 @@
 
 tint_target_add_external_dependencies(tint_lang_wgsl_reader_lower_test test
   "gtest"
+  "src_utils"
 )
diff --git a/src/tint/lang/wgsl/reader/lower/BUILD.gn b/src/tint/lang/wgsl/reader/lower/BUILD.gn
index 97181ea..5092496 100644
--- a/src/tint/lang/wgsl/reader/lower/BUILD.gn
+++ b/src/tint/lang/wgsl/reader/lower/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -48,6 +49,7 @@
     "lower.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/api/common",
     "${tint_src_dir}/lang/core",
     "${tint_src_dir}/lang/core/constant",
@@ -76,6 +78,7 @@
   tint_unittests_source_set("unittests") {
     sources = [ "lower_test.cc" ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}:gmock_and_gtest",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
diff --git a/src/tint/lang/wgsl/reader/parser/BUILD.bazel b/src/tint/lang/wgsl/reader/parser/BUILD.bazel
index 724f05d..17e07e4 100644
--- a/src/tint/lang/wgsl/reader/parser/BUILD.bazel
+++ b/src/tint/lang/wgsl/reader/parser/BUILD.bazel
@@ -77,6 +77,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -180,6 +181,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ] + select({
     ":tint_build_wgsl_reader": [
       "//src/tint/lang/wgsl/reader/parser",
diff --git a/src/tint/lang/wgsl/reader/parser/BUILD.cmake b/src/tint/lang/wgsl/reader/parser/BUILD.cmake
index d2e9c49..36170ed 100644
--- a/src/tint/lang/wgsl/reader/parser/BUILD.cmake
+++ b/src/tint/lang/wgsl/reader/parser/BUILD.cmake
@@ -80,6 +80,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_wgsl_reader_parser lib
+  "src_utils"
+)
+
 endif(TINT_BUILD_WGSL_READER)
 if(TINT_BUILD_WGSL_READER)
 ################################################################################
@@ -187,6 +191,7 @@
 
 tint_target_add_external_dependencies(tint_lang_wgsl_reader_parser_test test
   "gtest"
+  "src_utils"
 )
 
 if(TINT_BUILD_WGSL_READER)
diff --git a/src/tint/lang/wgsl/reader/parser/BUILD.gn b/src/tint/lang/wgsl/reader/parser/BUILD.gn
index f68c92c..7abfb27 100644
--- a/src/tint/lang/wgsl/reader/parser/BUILD.gn
+++ b/src/tint/lang/wgsl/reader/parser/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -55,6 +56,7 @@
       "token.h",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
       "${tint_src_dir}/lang/core/constant",
@@ -156,6 +158,7 @@
         "while_stmt_test.cc",
       ]
       deps = [
+        "${dawn_root}/src/utils:utils",
         "${tint_src_dir}:gmock_and_gtest",
         "${tint_src_dir}/api/common",
         "${tint_src_dir}/lang/core",
diff --git a/src/tint/lang/wgsl/reader/program_to_ir/BUILD.bazel b/src/tint/lang/wgsl/reader/program_to_ir/BUILD.bazel
index 4b1a500..456ac24 100644
--- a/src/tint/lang/wgsl/reader/program_to_ir/BUILD.bazel
+++ b/src/tint/lang/wgsl/reader/program_to_ir/BUILD.bazel
@@ -71,6 +71,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -122,6 +123,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ] + select({
     ":tint_build_wgsl_reader": [
       "//src/tint/lang/wgsl/reader",
diff --git a/src/tint/lang/wgsl/reader/program_to_ir/BUILD.cmake b/src/tint/lang/wgsl/reader/program_to_ir/BUILD.cmake
index b8f2a72..a8161ee 100644
--- a/src/tint/lang/wgsl/reader/program_to_ir/BUILD.cmake
+++ b/src/tint/lang/wgsl/reader/program_to_ir/BUILD.cmake
@@ -74,6 +74,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_wgsl_reader_program_to_ir lib
+  "src_utils"
+)
+
 endif(TINT_BUILD_WGSL_READER)
 if(TINT_BUILD_WGSL_READER)
 ################################################################################
@@ -129,6 +133,7 @@
 
 tint_target_add_external_dependencies(tint_lang_wgsl_reader_program_to_ir_test test
   "gtest"
+  "src_utils"
 )
 
 if(TINT_BUILD_WGSL_READER)
diff --git a/src/tint/lang/wgsl/reader/program_to_ir/BUILD.gn b/src/tint/lang/wgsl/reader/program_to_ir/BUILD.gn
index 7bc014b..a6c64f9 100644
--- a/src/tint/lang/wgsl/reader/program_to_ir/BUILD.gn
+++ b/src/tint/lang/wgsl/reader/program_to_ir/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -48,6 +49,7 @@
       "program_to_ir.h",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
       "${tint_src_dir}/lang/core/constant",
@@ -97,6 +99,7 @@
         "var_test.cc",
       ]
       deps = [
+        "${dawn_root}/src/utils:utils",
         "${tint_src_dir}:gmock_and_gtest",
         "${tint_src_dir}/api/common",
         "${tint_src_dir}/lang/core",
diff --git a/src/tint/lang/wgsl/resolver/BUILD.bazel b/src/tint/lang/wgsl/resolver/BUILD.bazel
index a830ca1..adcd99e 100644
--- a/src/tint/lang/wgsl/resolver/BUILD.bazel
+++ b/src/tint/lang/wgsl/resolver/BUILD.bazel
@@ -84,6 +84,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -193,6 +194,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ] + select({
     ":tint_build_wgsl_reader": [
       "//src/tint/lang/wgsl/reader",
diff --git a/src/tint/lang/wgsl/resolver/BUILD.cmake b/src/tint/lang/wgsl/resolver/BUILD.cmake
index 5537ca1..b471d61 100644
--- a/src/tint/lang/wgsl/resolver/BUILD.cmake
+++ b/src/tint/lang/wgsl/resolver/BUILD.cmake
@@ -85,6 +85,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_wgsl_resolver lib
+  "src_utils"
+)
+
 ################################################################################
 # Target:    tint_lang_wgsl_resolver_test
 # Kind:      test
@@ -190,6 +194,7 @@
 
 tint_target_add_external_dependencies(tint_lang_wgsl_resolver_test test
   "gtest"
+  "src_utils"
 )
 
 if(TINT_BUILD_WGSL_READER)
diff --git a/src/tint/lang/wgsl/resolver/BUILD.gn b/src/tint/lang/wgsl/resolver/BUILD.gn
index 1fd5809..4ffdff0 100644
--- a/src/tint/lang/wgsl/resolver/BUILD.gn
+++ b/src/tint/lang/wgsl/resolver/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -62,6 +63,7 @@
     "validator.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/api/common",
     "${tint_src_dir}/lang/core",
     "${tint_src_dir}/lang/core/constant",
@@ -156,6 +158,7 @@
       "variable_validation_test.cc",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}:gmock_and_gtest",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
diff --git a/src/tint/lang/wgsl/sem/BUILD.bazel b/src/tint/lang/wgsl/sem/BUILD.bazel
index 37b8323..a39ef7f 100644
--- a/src/tint/lang/wgsl/sem/BUILD.bazel
+++ b/src/tint/lang/wgsl/sem/BUILD.bazel
@@ -131,6 +131,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -172,6 +173,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
diff --git a/src/tint/lang/wgsl/sem/BUILD.cmake b/src/tint/lang/wgsl/sem/BUILD.cmake
index 6120b90..4d8407f 100644
--- a/src/tint/lang/wgsl/sem/BUILD.cmake
+++ b/src/tint/lang/wgsl/sem/BUILD.cmake
@@ -132,6 +132,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_wgsl_sem lib
+  "src_utils"
+)
+
 ################################################################################
 # Target:    tint_lang_wgsl_sem_test
 # Kind:      test
@@ -174,4 +178,5 @@
 
 tint_target_add_external_dependencies(tint_lang_wgsl_sem_test test
   "gtest"
+  "src_utils"
 )
diff --git a/src/tint/lang/wgsl/sem/BUILD.gn b/src/tint/lang/wgsl/sem/BUILD.gn
index e6b2b06..7cad0cf 100644
--- a/src/tint/lang/wgsl/sem/BUILD.gn
+++ b/src/tint/lang/wgsl/sem/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -113,6 +114,7 @@
     "while_statement.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/api/common",
     "${tint_src_dir}/lang/core",
     "${tint_src_dir}/lang/core/constant",
@@ -147,6 +149,7 @@
       "value_expression_test.cc",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}:gmock_and_gtest",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
diff --git a/src/tint/lang/wgsl/writer/BUILD.bazel b/src/tint/lang/wgsl/writer/BUILD.bazel
index 441673d..dc4476c 100644
--- a/src/tint/lang/wgsl/writer/BUILD.bazel
+++ b/src/tint/lang/wgsl/writer/BUILD.bazel
@@ -77,6 +77,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ] + select({
     ":tint_build_wgsl_writer": [
       "//src/tint/lang/wgsl/writer/ast_printer",
@@ -123,6 +124,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ] + select({
     ":tint_build_wgsl_writer": [
       "//src/tint/lang/wgsl/writer",
@@ -163,6 +165,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@benchmark",
+    "//src/utils",
   ] + select({
     ":tint_build_wgsl_reader": [
       "//src/tint/cmd/bench:bench",
diff --git a/src/tint/lang/wgsl/writer/BUILD.cmake b/src/tint/lang/wgsl/writer/BUILD.cmake
index 24754a3..fc1cd68 100644
--- a/src/tint/lang/wgsl/writer/BUILD.cmake
+++ b/src/tint/lang/wgsl/writer/BUILD.cmake
@@ -85,6 +85,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_wgsl_writer lib
+  "src_utils"
+)
+
 if(TINT_BUILD_WGSL_WRITER)
   tint_target_add_dependencies(tint_lang_wgsl_writer lib
     tint_lang_wgsl_writer_ast_printer
@@ -136,6 +140,7 @@
 
 tint_target_add_external_dependencies(tint_lang_wgsl_writer_test test
   "gtest"
+  "src_utils"
 )
 
 if(TINT_BUILD_WGSL_WRITER)
@@ -183,6 +188,7 @@
 
 tint_target_add_external_dependencies(tint_lang_wgsl_writer_bench bench
   "google-benchmark"
+  "src_utils"
 )
 
 if(TINT_BUILD_WGSL_READER)
@@ -234,6 +240,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_wgsl_writer_fuzz fuzz
+  "src_utils"
+)
+
 if(TINT_BUILD_WGSL_READER)
   tint_target_add_sources(tint_lang_wgsl_writer_fuzz fuzz
     "lang/wgsl/writer/writer_fuzz.cc"
diff --git a/src/tint/lang/wgsl/writer/BUILD.gn b/src/tint/lang/wgsl/writer/BUILD.gn
index fa18d45..abb7142 100644
--- a/src/tint/lang/wgsl/writer/BUILD.gn
+++ b/src/tint/lang/wgsl/writer/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -52,6 +53,7 @@
       "writer.h",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
       "${tint_src_dir}/lang/core/constant",
@@ -95,6 +97,7 @@
         "writer_test.cc",
       ]
       deps = [
+        "${dawn_root}/src/utils:utils",
         "${tint_src_dir}:gmock_and_gtest",
         "${tint_src_dir}/api/common",
         "${tint_src_dir}/lang/core",
@@ -137,6 +140,7 @@
     tint_benchmarks_source_set("bench") {
       sources = [ "writer_bench.cc" ]
       deps = [
+        "${dawn_root}/src/utils:utils",
         "${tint_src_dir}:google_benchmark",
         "${tint_src_dir}/lang/core",
         "${tint_src_dir}/lang/core/constant",
@@ -177,6 +181,7 @@
   tint_fuzz_source_set("fuzz") {
     sources = []
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}/lang/core",
       "${tint_src_dir}/lang/core/constant",
       "${tint_src_dir}/lang/core/type",
diff --git a/src/tint/lang/wgsl/writer/ast_printer/BUILD.bazel b/src/tint/lang/wgsl/writer/ast_printer/BUILD.bazel
index f580105..df38a47 100644
--- a/src/tint/lang/wgsl/writer/ast_printer/BUILD.bazel
+++ b/src/tint/lang/wgsl/writer/ast_printer/BUILD.bazel
@@ -68,6 +68,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -136,6 +137,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ] + select({
     ":tint_build_wgsl_writer": [
       "//src/tint/lang/wgsl/writer/ast_printer",
diff --git a/src/tint/lang/wgsl/writer/ast_printer/BUILD.cmake b/src/tint/lang/wgsl/writer/ast_printer/BUILD.cmake
index 7ce8c41..ba21d10 100644
--- a/src/tint/lang/wgsl/writer/ast_printer/BUILD.cmake
+++ b/src/tint/lang/wgsl/writer/ast_printer/BUILD.cmake
@@ -71,6 +71,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_wgsl_writer_ast_printer lib
+  "src_utils"
+)
+
 endif(TINT_BUILD_WGSL_WRITER)
 if(TINT_BUILD_WGSL_WRITER)
 ################################################################################
@@ -143,6 +147,7 @@
 
 tint_target_add_external_dependencies(tint_lang_wgsl_writer_ast_printer_test test
   "gtest"
+  "src_utils"
 )
 
 if(TINT_BUILD_WGSL_WRITER)
diff --git a/src/tint/lang/wgsl/writer/ast_printer/BUILD.gn b/src/tint/lang/wgsl/writer/ast_printer/BUILD.gn
index 3d484a5..97e97f3 100644
--- a/src/tint/lang/wgsl/writer/ast_printer/BUILD.gn
+++ b/src/tint/lang/wgsl/writer/ast_printer/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -48,6 +49,7 @@
       "ast_printer.h",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}/lang/core",
       "${tint_src_dir}/lang/core/constant",
       "${tint_src_dir}/lang/core/type",
@@ -112,6 +114,7 @@
         "variable_test.cc",
       ]
       deps = [
+        "${dawn_root}/src/utils:utils",
         "${tint_src_dir}:gmock_and_gtest",
         "${tint_src_dir}/api/common",
         "${tint_src_dir}/lang/core",
diff --git a/src/tint/lang/wgsl/writer/ir_to_program/BUILD.bazel b/src/tint/lang/wgsl/writer/ir_to_program/BUILD.bazel
index f1efc80..f6f9740 100644
--- a/src/tint/lang/wgsl/writer/ir_to_program/BUILD.bazel
+++ b/src/tint/lang/wgsl/writer/ir_to_program/BUILD.bazel
@@ -74,6 +74,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -120,6 +121,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ] + select({
     ":tint_build_wgsl_writer": [
       "//src/tint/lang/wgsl/writer",
diff --git a/src/tint/lang/wgsl/writer/ir_to_program/BUILD.cmake b/src/tint/lang/wgsl/writer/ir_to_program/BUILD.cmake
index 813f157..cc4a164 100644
--- a/src/tint/lang/wgsl/writer/ir_to_program/BUILD.cmake
+++ b/src/tint/lang/wgsl/writer/ir_to_program/BUILD.cmake
@@ -75,6 +75,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_wgsl_writer_ir_to_program lib
+  "src_utils"
+)
+
 ################################################################################
 # Target:    tint_lang_wgsl_writer_ir_to_program_test
 # Kind:      test
@@ -117,6 +121,7 @@
 
 tint_target_add_external_dependencies(tint_lang_wgsl_writer_ir_to_program_test test
   "gtest"
+  "src_utils"
 )
 
 if(TINT_BUILD_WGSL_WRITER)
diff --git a/src/tint/lang/wgsl/writer/ir_to_program/BUILD.gn b/src/tint/lang/wgsl/writer/ir_to_program/BUILD.gn
index 1698652..61068a4 100644
--- a/src/tint/lang/wgsl/writer/ir_to_program/BUILD.gn
+++ b/src/tint/lang/wgsl/writer/ir_to_program/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -49,6 +50,7 @@
     "program_options.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/api/common",
     "${tint_src_dir}/lang/core",
     "${tint_src_dir}/lang/core/constant",
@@ -83,6 +85,7 @@
   tint_unittests_source_set("unittests") {
     sources = [ "ir_to_program_test.h" ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}:gmock_and_gtest",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
diff --git a/src/tint/lang/wgsl/writer/raise/BUILD.bazel b/src/tint/lang/wgsl/writer/raise/BUILD.bazel
index 23184a8..a4618f0 100644
--- a/src/tint/lang/wgsl/writer/raise/BUILD.bazel
+++ b/src/tint/lang/wgsl/writer/raise/BUILD.bazel
@@ -72,6 +72,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -107,6 +108,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
diff --git a/src/tint/lang/wgsl/writer/raise/BUILD.cmake b/src/tint/lang/wgsl/writer/raise/BUILD.cmake
index 2a30f2d..a713c4b 100644
--- a/src/tint/lang/wgsl/writer/raise/BUILD.cmake
+++ b/src/tint/lang/wgsl/writer/raise/BUILD.cmake
@@ -73,6 +73,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_lang_wgsl_writer_raise lib
+  "src_utils"
+)
+
 ################################################################################
 # Target:    tint_lang_wgsl_writer_raise_test
 # Kind:      test
@@ -109,6 +113,7 @@
 
 tint_target_add_external_dependencies(tint_lang_wgsl_writer_raise_test test
   "gtest"
+  "src_utils"
 )
 
 ################################################################################
@@ -144,3 +149,7 @@
   tint_utils_text
   tint_utils_traits
 )
+
+tint_target_add_external_dependencies(tint_lang_wgsl_writer_raise_fuzz fuzz
+  "src_utils"
+)
diff --git a/src/tint/lang/wgsl/writer/raise/BUILD.gn b/src/tint/lang/wgsl/writer/raise/BUILD.gn
index aa69071..4f20c87 100644
--- a/src/tint/lang/wgsl/writer/raise/BUILD.gn
+++ b/src/tint/lang/wgsl/writer/raise/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -52,6 +53,7 @@
     "value_to_let.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/api/common",
     "${tint_src_dir}/lang/core",
     "${tint_src_dir}/lang/core/constant",
@@ -85,6 +87,7 @@
       "value_to_let_test.cc",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}:gmock_and_gtest",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
@@ -118,6 +121,7 @@
     "value_to_let_fuzz.cc",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/api/common",
     "${tint_src_dir}/cmd/fuzz/ir:fuzz",
     "${tint_src_dir}/lang/core",
diff --git a/src/tint/lang/wgsl/writer/syntax_tree_printer/BUILD.bazel b/src/tint/lang/wgsl/writer/syntax_tree_printer/BUILD.bazel
index 6742227..05b2860 100644
--- a/src/tint/lang/wgsl/writer/syntax_tree_printer/BUILD.bazel
+++ b/src/tint/lang/wgsl/writer/syntax_tree_printer/BUILD.bazel
@@ -68,6 +68,7 @@
     "//src/tint/utils/symbol",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
diff --git a/src/tint/lang/wgsl/writer/syntax_tree_printer/BUILD.cmake b/src/tint/lang/wgsl/writer/syntax_tree_printer/BUILD.cmake
index 889fd35..3fbd02d 100644
--- a/src/tint/lang/wgsl/writer/syntax_tree_printer/BUILD.cmake
+++ b/src/tint/lang/wgsl/writer/syntax_tree_printer/BUILD.cmake
@@ -68,3 +68,7 @@
   tint_utils_text
   tint_utils_traits
 )
+
+tint_target_add_external_dependencies(tint_lang_wgsl_writer_syntax_tree_printer lib
+  "src_utils"
+)
diff --git a/src/tint/lang/wgsl/writer/syntax_tree_printer/BUILD.gn b/src/tint/lang/wgsl/writer/syntax_tree_printer/BUILD.gn
index 8a70111..731fda8 100644
--- a/src/tint/lang/wgsl/writer/syntax_tree_printer/BUILD.gn
+++ b/src/tint/lang/wgsl/writer/syntax_tree_printer/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -44,6 +45,7 @@
     "syntax_tree_printer.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/lang/core",
     "${tint_src_dir}/lang/core/constant",
     "${tint_src_dir}/lang/core/type",
diff --git a/src/tint/utils/BUILD.gn b/src/tint/utils/BUILD.gn
index e74a2fd..9806aa3 100644
--- a/src/tint/utils/BUILD.gn
+++ b/src/tint/utils/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
diff --git a/src/tint/utils/bytes/BUILD.bazel b/src/tint/utils/bytes/BUILD.bazel
index 3daeace..a7c15f8 100644
--- a/src/tint/utils/bytes/BUILD.bazel
+++ b/src/tint/utils/bytes/BUILD.bazel
@@ -65,6 +65,7 @@
     "//src/tint/utils/rtti",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -92,6 +93,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
diff --git a/src/tint/utils/bytes/BUILD.cmake b/src/tint/utils/bytes/BUILD.cmake
index 3438bbb..d125e13 100644
--- a/src/tint/utils/bytes/BUILD.cmake
+++ b/src/tint/utils/bytes/BUILD.cmake
@@ -66,6 +66,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_utils_bytes lib
+  "src_utils"
+)
+
 ################################################################################
 # Target:    tint_utils_bytes_test
 # Kind:      test
@@ -94,4 +98,5 @@
 
 tint_target_add_external_dependencies(tint_utils_bytes_test test
   "gtest"
+  "src_utils"
 )
diff --git a/src/tint/utils/bytes/BUILD.gn b/src/tint/utils/bytes/BUILD.gn
index 6618381..208fd8e 100644
--- a/src/tint/utils/bytes/BUILD.gn
+++ b/src/tint/utils/bytes/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -57,6 +58,7 @@
     "writer.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/utils/containers",
     "${tint_src_dir}/utils/diagnostic",
     "${tint_src_dir}/utils/ice",
@@ -79,6 +81,7 @@
       "swap_test.cc",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}:gmock_and_gtest",
       "${tint_src_dir}/utils/bytes",
       "${tint_src_dir}/utils/containers",
diff --git a/src/tint/utils/cli/BUILD.bazel b/src/tint/utils/cli/BUILD.bazel
index 19a7211..1d78398 100644
--- a/src/tint/utils/cli/BUILD.bazel
+++ b/src/tint/utils/cli/BUILD.bazel
@@ -56,6 +56,7 @@
     "//src/tint/utils/strconv",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -80,6 +81,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
diff --git a/src/tint/utils/cli/BUILD.cmake b/src/tint/utils/cli/BUILD.cmake
index 42cbb1f..9d7b9b3 100644
--- a/src/tint/utils/cli/BUILD.cmake
+++ b/src/tint/utils/cli/BUILD.cmake
@@ -57,6 +57,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_utils_cli lib
+  "src_utils"
+)
+
 ################################################################################
 # Target:    tint_utils_cli_test
 # Kind:      test
@@ -82,4 +86,5 @@
 
 tint_target_add_external_dependencies(tint_utils_cli_test test
   "gtest"
+  "src_utils"
 )
diff --git a/src/tint/utils/cli/BUILD.gn b/src/tint/utils/cli/BUILD.gn
index 9b49d04..4211c42 100644
--- a/src/tint/utils/cli/BUILD.gn
+++ b/src/tint/utils/cli/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -48,6 +49,7 @@
     "cli.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/utils/containers",
     "${tint_src_dir}/utils/diagnostic",
     "${tint_src_dir}/utils/ice",
@@ -65,6 +67,7 @@
   tint_unittests_source_set("unittests") {
     sources = [ "cli_test.cc" ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}:gmock_and_gtest",
       "${tint_src_dir}/utils/cli",
       "${tint_src_dir}/utils/containers",
diff --git a/src/tint/utils/command/BUILD.gn b/src/tint/utils/command/BUILD.gn
index 4f42d68..67d6e4c 100644
--- a/src/tint/utils/command/BUILD.gn
+++ b/src/tint/utils/command/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
diff --git a/src/tint/utils/containers/BUILD.bazel b/src/tint/utils/containers/BUILD.bazel
index 07523ce..489b708 100644
--- a/src/tint/utils/containers/BUILD.bazel
+++ b/src/tint/utils/containers/BUILD.bazel
@@ -66,6 +66,7 @@
     "//src/tint/utils/memory",
     "//src/tint/utils/rtti",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -113,6 +114,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
diff --git a/src/tint/utils/containers/BUILD.cmake b/src/tint/utils/containers/BUILD.cmake
index c00bd5e..e1094f3 100644
--- a/src/tint/utils/containers/BUILD.cmake
+++ b/src/tint/utils/containers/BUILD.cmake
@@ -67,6 +67,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_utils_containers lib
+  "src_utils"
+)
+
 ################################################################################
 # Target:    tint_utils_containers_test
 # Kind:      test
@@ -115,4 +119,5 @@
 
 tint_target_add_external_dependencies(tint_utils_containers_test test
   "gtest"
+  "src_utils"
 )
diff --git a/src/tint/utils/containers/BUILD.gn b/src/tint/utils/containers/BUILD.gn
index c1cbce3..226f8f4 100644
--- a/src/tint/utils/containers/BUILD.gn
+++ b/src/tint/utils/containers/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -63,6 +64,7 @@
     "vector.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/utils/ice",
     "${tint_src_dir}/utils/macros",
     "${tint_src_dir}/utils/math",
@@ -90,6 +92,7 @@
       "vector_test.cc",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}:gmock_and_gtest",
       "${tint_src_dir}/api/common",
       "${tint_src_dir}/lang/core",
diff --git a/src/tint/utils/debug/BUILD.gn b/src/tint/utils/debug/BUILD.gn
index 00401f2..d7fcb98 100644
--- a/src/tint/utils/debug/BUILD.gn
+++ b/src/tint/utils/debug/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
diff --git a/src/tint/utils/diagnostic/BUILD.bazel b/src/tint/utils/diagnostic/BUILD.bazel
index 568132a..76c9715 100644
--- a/src/tint/utils/diagnostic/BUILD.bazel
+++ b/src/tint/utils/diagnostic/BUILD.bazel
@@ -57,6 +57,7 @@
     "//src/tint/utils/rtti",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -80,6 +81,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
diff --git a/src/tint/utils/diagnostic/BUILD.cmake b/src/tint/utils/diagnostic/BUILD.cmake
index c0c2bc6..db14e57 100644
--- a/src/tint/utils/diagnostic/BUILD.cmake
+++ b/src/tint/utils/diagnostic/BUILD.cmake
@@ -58,6 +58,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_utils_diagnostic lib
+  "src_utils"
+)
+
 ################################################################################
 # Target:    tint_utils_diagnostic_test
 # Kind:      test
@@ -82,4 +86,5 @@
 
 tint_target_add_external_dependencies(tint_utils_diagnostic_test test
   "gtest"
+  "src_utils"
 )
diff --git a/src/tint/utils/diagnostic/BUILD.gn b/src/tint/utils/diagnostic/BUILD.gn
index ccb2594..3be06fd 100644
--- a/src/tint/utils/diagnostic/BUILD.gn
+++ b/src/tint/utils/diagnostic/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -52,6 +53,7 @@
     "source.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/utils/containers",
     "${tint_src_dir}/utils/ice",
     "${tint_src_dir}/utils/macros",
@@ -70,6 +72,7 @@
       "source_test.cc",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}:gmock_and_gtest",
       "${tint_src_dir}/utils/containers",
       "${tint_src_dir}/utils/diagnostic",
diff --git a/src/tint/utils/file/BUILD.bazel b/src/tint/utils/file/BUILD.bazel
index d74bc23..b9a96a4 100644
--- a/src/tint/utils/file/BUILD.bazel
+++ b/src/tint/utils/file/BUILD.bazel
@@ -62,6 +62,7 @@
     "//src/tint/utils/ice",
     "//src/tint/utils/macros",
     "//src/tint/utils/text",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
diff --git a/src/tint/utils/file/BUILD.cmake b/src/tint/utils/file/BUILD.cmake
index 0dc6cb8..2326524 100644
--- a/src/tint/utils/file/BUILD.cmake
+++ b/src/tint/utils/file/BUILD.cmake
@@ -48,6 +48,10 @@
   tint_utils_text
 )
 
+tint_target_add_external_dependencies(tint_utils_file lib
+  "src_utils"
+)
+
 if((NOT TINT_BUILD_IS_LINUX) AND (NOT TINT_BUILD_IS_MAC) AND (NOT TINT_BUILD_IS_WIN))
   tint_target_add_sources(tint_utils_file lib
     "utils/file/tmpfile_other.cc"
diff --git a/src/tint/utils/file/BUILD.gn b/src/tint/utils/file/BUILD.gn
index 62e1cdc..02b5efa 100644
--- a/src/tint/utils/file/BUILD.gn
+++ b/src/tint/utils/file/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -45,6 +46,7 @@
 libtint_source_set("file") {
   sources = [ "tmpfile.h" ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/utils/ice",
     "${tint_src_dir}/utils/macros",
     "${tint_src_dir}/utils/text",
diff --git a/src/tint/utils/generator/BUILD.bazel b/src/tint/utils/generator/BUILD.bazel
index 9465052..0773d98 100644
--- a/src/tint/utils/generator/BUILD.bazel
+++ b/src/tint/utils/generator/BUILD.bazel
@@ -54,6 +54,7 @@
     "//src/tint/utils/rtti",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
diff --git a/src/tint/utils/generator/BUILD.cmake b/src/tint/utils/generator/BUILD.cmake
index 994da1a..19ac62a 100644
--- a/src/tint/utils/generator/BUILD.cmake
+++ b/src/tint/utils/generator/BUILD.cmake
@@ -54,3 +54,7 @@
   tint_utils_text
   tint_utils_traits
 )
+
+tint_target_add_external_dependencies(tint_utils_generator lib
+  "src_utils"
+)
diff --git a/src/tint/utils/generator/BUILD.gn b/src/tint/utils/generator/BUILD.gn
index ed5402a..97ea666 100644
--- a/src/tint/utils/generator/BUILD.gn
+++ b/src/tint/utils/generator/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -44,6 +45,7 @@
     "text_generator.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/utils/containers",
     "${tint_src_dir}/utils/diagnostic",
     "${tint_src_dir}/utils/ice",
diff --git a/src/tint/utils/ice/BUILD.bazel b/src/tint/utils/ice/BUILD.bazel
index 9b7d8be..e64afb8 100644
--- a/src/tint/utils/ice/BUILD.bazel
+++ b/src/tint/utils/ice/BUILD.bazel
@@ -47,6 +47,7 @@
   deps = [
     "//src/tint/utils/debug",
     "//src/tint/utils/macros",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -61,6 +62,7 @@
     "//src/tint/utils/ice",
     "//src/tint/utils/macros",
     "@gtest",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
diff --git a/src/tint/utils/ice/BUILD.cmake b/src/tint/utils/ice/BUILD.cmake
index f5c15a1..dcf955a 100644
--- a/src/tint/utils/ice/BUILD.cmake
+++ b/src/tint/utils/ice/BUILD.cmake
@@ -48,6 +48,10 @@
   tint_utils_macros
 )
 
+tint_target_add_external_dependencies(tint_utils_ice lib
+  "src_utils"
+)
+
 ################################################################################
 # Target:    tint_utils_ice_test
 # Kind:      test
@@ -63,4 +67,5 @@
 
 tint_target_add_external_dependencies(tint_utils_ice_test test
   "gtest"
+  "src_utils"
 )
diff --git a/src/tint/utils/ice/BUILD.gn b/src/tint/utils/ice/BUILD.gn
index 05c3e77..d487312 100644
--- a/src/tint/utils/ice/BUILD.gn
+++ b/src/tint/utils/ice/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -48,6 +49,7 @@
     "ice.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/utils/debug",
     "${tint_src_dir}/utils/macros",
   ]
@@ -56,6 +58,7 @@
   tint_unittests_source_set("unittests") {
     sources = [ "ice_test.cc" ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}:gmock_and_gtest",
       "${tint_src_dir}/utils/ice",
       "${tint_src_dir}/utils/macros",
diff --git a/src/tint/utils/id/BUILD.bazel b/src/tint/utils/id/BUILD.bazel
index b818527..4699685 100644
--- a/src/tint/utils/id/BUILD.bazel
+++ b/src/tint/utils/id/BUILD.bazel
@@ -49,6 +49,7 @@
     "//src/tint/utils/macros",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
diff --git a/src/tint/utils/id/BUILD.cmake b/src/tint/utils/id/BUILD.cmake
index 12880a3..bf1abd5 100644
--- a/src/tint/utils/id/BUILD.cmake
+++ b/src/tint/utils/id/BUILD.cmake
@@ -49,3 +49,7 @@
   tint_utils_text
   tint_utils_traits
 )
+
+tint_target_add_external_dependencies(tint_utils_id lib
+  "src_utils"
+)
diff --git a/src/tint/utils/id/BUILD.gn b/src/tint/utils/id/BUILD.gn
index 162f44e..6ed229d 100644
--- a/src/tint/utils/id/BUILD.gn
+++ b/src/tint/utils/id/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -44,6 +45,7 @@
     "generation_id.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/utils/ice",
     "${tint_src_dir}/utils/macros",
     "${tint_src_dir}/utils/text",
diff --git a/src/tint/utils/macros/BUILD.bazel b/src/tint/utils/macros/BUILD.bazel
index d4a443b..da2a1fa 100644
--- a/src/tint/utils/macros/BUILD.bazel
+++ b/src/tint/utils/macros/BUILD.bazel
@@ -50,6 +50,7 @@
     "static_init.h",
   ],
   deps = [
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
diff --git a/src/tint/utils/macros/BUILD.cmake b/src/tint/utils/macros/BUILD.cmake
index c1527a5..06d2205 100644
--- a/src/tint/utils/macros/BUILD.cmake
+++ b/src/tint/utils/macros/BUILD.cmake
@@ -48,6 +48,10 @@
   utils/macros/static_init.h
 )
 
+tint_target_add_external_dependencies(tint_utils_macros lib
+  "src_utils"
+)
+
 ################################################################################
 # Target:    tint_utils_macros_test
 # Kind:      test
diff --git a/src/tint/utils/macros/BUILD.gn b/src/tint/utils/macros/BUILD.gn
index e656c36..cffac0f 100644
--- a/src/tint/utils/macros/BUILD.gn
+++ b/src/tint/utils/macros/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -52,7 +53,7 @@
     "scoped_assignment.h",
     "static_init.h",
   ]
-  deps = []
+  deps = [ "${dawn_root}/src/utils:utils" ]
 }
 if (tint_build_unittests) {
   tint_unittests_source_set("unittests") {
diff --git a/src/tint/utils/macros/compiler.h b/src/tint/utils/macros/compiler.h
index 6a2c818..b32f2a0 100644
--- a/src/tint/utils/macros/compiler.h
+++ b/src/tint/utils/macros/compiler.h
@@ -26,18 +26,13 @@
 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 #include "src/tint/utils/macros/concat.h"
+#include "src/utils/compiler.h"
 
 #ifndef SRC_TINT_UTILS_MACROS_COMPILER_H_
 #define SRC_TINT_UTILS_MACROS_COMPILER_H_
 
 #define TINT_REQUIRE_SEMICOLON static_assert(true)
 
-#if defined(__has_attribute)
-#define TINT_HAS_ATTRIBUTE(x) __has_attribute(x)
-#else
-#define TINT_HAS_ATTRIBUTE(x) 0
-#endif
-
 #if TINT_HAS_ATTRIBUTE(no_sanitize)
 #define TINT_NO_SANITIZE(instrumentation) __attribute__((no_sanitize(instrumentation)))
 #else
diff --git a/src/tint/utils/math/BUILD.bazel b/src/tint/utils/math/BUILD.bazel
index 33a099c..e72ad6b 100644
--- a/src/tint/utils/math/BUILD.bazel
+++ b/src/tint/utils/math/BUILD.bazel
@@ -68,6 +68,7 @@
     "//src/tint/utils/rtti",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
diff --git a/src/tint/utils/math/BUILD.cmake b/src/tint/utils/math/BUILD.cmake
index d6bf13c..cc70159 100644
--- a/src/tint/utils/math/BUILD.cmake
+++ b/src/tint/utils/math/BUILD.cmake
@@ -67,4 +67,5 @@
 
 tint_target_add_external_dependencies(tint_utils_math_test test
   "gtest"
+  "src_utils"
 )
diff --git a/src/tint/utils/math/BUILD.gn b/src/tint/utils/math/BUILD.gn
index 94a722c..7b4feee 100644
--- a/src/tint/utils/math/BUILD.gn
+++ b/src/tint/utils/math/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -59,6 +60,7 @@
       "math_test.cc",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}:gmock_and_gtest",
       "${tint_src_dir}/utils/containers",
       "${tint_src_dir}/utils/ice",
diff --git a/src/tint/utils/memory/BUILD.bazel b/src/tint/utils/memory/BUILD.bazel
index 6cb1b67..be209de 100644
--- a/src/tint/utils/memory/BUILD.bazel
+++ b/src/tint/utils/memory/BUILD.bazel
@@ -50,6 +50,7 @@
   deps = [
     "//src/tint/utils/macros",
     "//src/tint/utils/math",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -67,6 +68,7 @@
     "//src/tint/utils/math",
     "//src/tint/utils/memory",
     "@gtest",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
diff --git a/src/tint/utils/memory/BUILD.cmake b/src/tint/utils/memory/BUILD.cmake
index 1d69077..021881c 100644
--- a/src/tint/utils/memory/BUILD.cmake
+++ b/src/tint/utils/memory/BUILD.cmake
@@ -51,6 +51,10 @@
   tint_utils_math
 )
 
+tint_target_add_external_dependencies(tint_utils_memory lib
+  "src_utils"
+)
+
 ################################################################################
 # Target:    tint_utils_memory_test
 # Kind:      test
@@ -69,4 +73,5 @@
 
 tint_target_add_external_dependencies(tint_utils_memory_test test
   "gtest"
+  "src_utils"
 )
diff --git a/src/tint/utils/memory/BUILD.gn b/src/tint/utils/memory/BUILD.gn
index 0ab12e1..347b9fc 100644
--- a/src/tint/utils/memory/BUILD.gn
+++ b/src/tint/utils/memory/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -51,6 +52,7 @@
     "memory.cc",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/utils/macros",
     "${tint_src_dir}/utils/math",
   ]
@@ -63,6 +65,7 @@
       "bump_allocator_test.cc",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}:gmock_and_gtest",
       "${tint_src_dir}/utils/macros",
       "${tint_src_dir}/utils/math",
diff --git a/src/tint/utils/protos/BUILD.gn b/src/tint/utils/protos/BUILD.gn
index 5dfc24c..41f2688 100644
--- a/src/tint/utils/protos/BUILD.gn
+++ b/src/tint/utils/protos/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
diff --git a/src/tint/utils/protos/ir/BUILD.gn b/src/tint/utils/protos/ir/BUILD.gn
index 2056e07..6120bf8 100644
--- a/src/tint/utils/protos/ir/BUILD.gn
+++ b/src/tint/utils/protos/ir/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
diff --git a/src/tint/utils/protos/ir_fuzz/BUILD.gn b/src/tint/utils/protos/ir_fuzz/BUILD.gn
index 21ac599..644809b 100644
--- a/src/tint/utils/protos/ir_fuzz/BUILD.gn
+++ b/src/tint/utils/protos/ir_fuzz/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
diff --git a/src/tint/utils/reflection/BUILD.bazel b/src/tint/utils/reflection/BUILD.bazel
index a262d24..012c8c3 100644
--- a/src/tint/utils/reflection/BUILD.bazel
+++ b/src/tint/utils/reflection/BUILD.bazel
@@ -55,6 +55,7 @@
     "//src/tint/utils/rtti",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -78,6 +79,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
diff --git a/src/tint/utils/reflection/BUILD.cmake b/src/tint/utils/reflection/BUILD.cmake
index 3071a7c..51a2ef0 100644
--- a/src/tint/utils/reflection/BUILD.cmake
+++ b/src/tint/utils/reflection/BUILD.cmake
@@ -56,6 +56,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_utils_reflection lib
+  "src_utils"
+)
+
 ################################################################################
 # Target:    tint_utils_reflection_test
 # Kind:      test
@@ -80,4 +84,5 @@
 
 tint_target_add_external_dependencies(tint_utils_reflection_test test
   "gtest"
+  "src_utils"
 )
diff --git a/src/tint/utils/reflection/BUILD.gn b/src/tint/utils/reflection/BUILD.gn
index f363dc6..f1c86ca 100644
--- a/src/tint/utils/reflection/BUILD.gn
+++ b/src/tint/utils/reflection/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -48,6 +49,7 @@
     "reflection.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/utils/containers",
     "${tint_src_dir}/utils/diagnostic",
     "${tint_src_dir}/utils/ice",
@@ -64,6 +66,7 @@
   tint_unittests_source_set("unittests") {
     sources = [ "reflection_test.cc" ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}:gmock_and_gtest",
       "${tint_src_dir}/utils/containers",
       "${tint_src_dir}/utils/diagnostic",
diff --git a/src/tint/utils/result/BUILD.bazel b/src/tint/utils/result/BUILD.bazel
index 4266f7a..c9988f0 100644
--- a/src/tint/utils/result/BUILD.bazel
+++ b/src/tint/utils/result/BUILD.bazel
@@ -54,6 +54,7 @@
     "//src/tint/utils/rtti",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -76,6 +77,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
diff --git a/src/tint/utils/result/BUILD.cmake b/src/tint/utils/result/BUILD.cmake
index 3aaca93..8d76d44 100644
--- a/src/tint/utils/result/BUILD.cmake
+++ b/src/tint/utils/result/BUILD.cmake
@@ -55,6 +55,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_utils_result lib
+  "src_utils"
+)
+
 ################################################################################
 # Target:    tint_utils_result_test
 # Kind:      test
@@ -78,4 +82,5 @@
 
 tint_target_add_external_dependencies(tint_utils_result_test test
   "gtest"
+  "src_utils"
 )
diff --git a/src/tint/utils/result/BUILD.gn b/src/tint/utils/result/BUILD.gn
index f6ba238..c99b1aa 100644
--- a/src/tint/utils/result/BUILD.gn
+++ b/src/tint/utils/result/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -48,6 +49,7 @@
     "result.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/utils/containers",
     "${tint_src_dir}/utils/diagnostic",
     "${tint_src_dir}/utils/ice",
@@ -63,6 +65,7 @@
   tint_unittests_source_set("unittests") {
     sources = [ "result_test.cc" ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}:gmock_and_gtest",
       "${tint_src_dir}/utils/containers",
       "${tint_src_dir}/utils/diagnostic",
diff --git a/src/tint/utils/rtti/BUILD.bazel b/src/tint/utils/rtti/BUILD.bazel
index 56b972c..2f326d5 100644
--- a/src/tint/utils/rtti/BUILD.bazel
+++ b/src/tint/utils/rtti/BUILD.bazel
@@ -53,6 +53,7 @@
     "//src/tint/utils/math",
     "//src/tint/utils/memory",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -71,6 +72,7 @@
     "//src/tint/utils/rtti",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -88,6 +90,7 @@
     "//src/tint/utils/rtti",
     "//src/tint/utils/traits",
     "@benchmark",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
diff --git a/src/tint/utils/rtti/BUILD.cmake b/src/tint/utils/rtti/BUILD.cmake
index 72e5490..48253b2 100644
--- a/src/tint/utils/rtti/BUILD.cmake
+++ b/src/tint/utils/rtti/BUILD.cmake
@@ -54,6 +54,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_utils_rtti lib
+  "src_utils"
+)
+
 ################################################################################
 # Target:    tint_utils_rtti_test
 # Kind:      test
@@ -73,6 +77,7 @@
 
 tint_target_add_external_dependencies(tint_utils_rtti_test test
   "gtest"
+  "src_utils"
 )
 
 ################################################################################
@@ -93,4 +98,5 @@
 
 tint_target_add_external_dependencies(tint_utils_rtti_bench bench
   "google-benchmark"
+  "src_utils"
 )
diff --git a/src/tint/utils/rtti/BUILD.gn b/src/tint/utils/rtti/BUILD.gn
index 5f88e84..590125a 100644
--- a/src/tint/utils/rtti/BUILD.gn
+++ b/src/tint/utils/rtti/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -51,6 +52,7 @@
     "switch.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/utils/ice",
     "${tint_src_dir}/utils/macros",
     "${tint_src_dir}/utils/math",
@@ -65,6 +67,7 @@
       "switch_test.cc",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}:gmock_and_gtest",
       "${tint_src_dir}/utils/macros",
       "${tint_src_dir}/utils/math",
@@ -78,6 +81,7 @@
   tint_benchmarks_source_set("bench") {
     sources = [ "switch_bench.cc" ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}:google_benchmark",
       "${tint_src_dir}/utils/macros",
       "${tint_src_dir}/utils/math",
diff --git a/src/tint/utils/socket/BUILD.bazel b/src/tint/utils/socket/BUILD.bazel
index c236531..41e3e43 100644
--- a/src/tint/utils/socket/BUILD.bazel
+++ b/src/tint/utils/socket/BUILD.bazel
@@ -47,6 +47,7 @@
   ],
   deps = [
     "//src/tint/utils/macros",
+    "//src/utils",
   ] + select({
     ":tint_build_is_win": [
       
diff --git a/src/tint/utils/socket/BUILD.cmake b/src/tint/utils/socket/BUILD.cmake
index 6c69f4c..78e2460 100644
--- a/src/tint/utils/socket/BUILD.cmake
+++ b/src/tint/utils/socket/BUILD.cmake
@@ -48,6 +48,10 @@
   tint_utils_macros
 )
 
+tint_target_add_external_dependencies(tint_utils_socket lib
+  "src_utils"
+)
+
 if(TINT_BUILD_IS_WIN)
   tint_target_add_external_dependencies(tint_utils_socket lib
     "winsock"
diff --git a/src/tint/utils/socket/BUILD.gn b/src/tint/utils/socket/BUILD.gn
index 746a415..a9cc023 100644
--- a/src/tint/utils/socket/BUILD.gn
+++ b/src/tint/utils/socket/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -44,7 +45,10 @@
     "socket.cc",
     "socket.h",
   ]
-  deps = [ "${tint_src_dir}/utils/macros" ]
+  deps = [
+    "${dawn_root}/src/utils:utils",
+    "${tint_src_dir}/utils/macros",
+  ]
 
   if (tint_build_is_win) {
     deps += [ "${tint_src_dir}:winsock" ]
diff --git a/src/tint/utils/strconv/BUILD.bazel b/src/tint/utils/strconv/BUILD.bazel
index 0d1102a..186fa60 100644
--- a/src/tint/utils/strconv/BUILD.bazel
+++ b/src/tint/utils/strconv/BUILD.bazel
@@ -58,6 +58,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@abseil_cpp//absl/strings",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
diff --git a/src/tint/utils/strconv/BUILD.cmake b/src/tint/utils/strconv/BUILD.cmake
index 38db12b..943f7be 100644
--- a/src/tint/utils/strconv/BUILD.cmake
+++ b/src/tint/utils/strconv/BUILD.cmake
@@ -60,6 +60,7 @@
 
 tint_target_add_external_dependencies(tint_utils_strconv lib
   "abseil"
+  "src_utils"
 )
 
 ################################################################################
diff --git a/src/tint/utils/strconv/BUILD.gn b/src/tint/utils/strconv/BUILD.gn
index d0977eb..a7ba3cf 100644
--- a/src/tint/utils/strconv/BUILD.gn
+++ b/src/tint/utils/strconv/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -50,6 +51,7 @@
     "parse_num.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}:abseil",
     "${tint_src_dir}/utils/containers",
     "${tint_src_dir}/utils/diagnostic",
diff --git a/src/tint/utils/symbol/BUILD.bazel b/src/tint/utils/symbol/BUILD.bazel
index aceeeba..d720768 100644
--- a/src/tint/utils/symbol/BUILD.bazel
+++ b/src/tint/utils/symbol/BUILD.bazel
@@ -56,6 +56,7 @@
     "//src/tint/utils/rtti",
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -79,6 +80,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
diff --git a/src/tint/utils/symbol/BUILD.cmake b/src/tint/utils/symbol/BUILD.cmake
index 08d283f..e5eadcf 100644
--- a/src/tint/utils/symbol/BUILD.cmake
+++ b/src/tint/utils/symbol/BUILD.cmake
@@ -57,6 +57,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_utils_symbol lib
+  "src_utils"
+)
+
 ################################################################################
 # Target:    tint_utils_symbol_test
 # Kind:      test
@@ -81,4 +85,5 @@
 
 tint_target_add_external_dependencies(tint_utils_symbol_test test
   "gtest"
+  "src_utils"
 )
diff --git a/src/tint/utils/symbol/BUILD.gn b/src/tint/utils/symbol/BUILD.gn
index 68cb101..dae3f1f 100644
--- a/src/tint/utils/symbol/BUILD.gn
+++ b/src/tint/utils/symbol/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -50,6 +51,7 @@
     "symbol_table.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/utils/containers",
     "${tint_src_dir}/utils/ice",
     "${tint_src_dir}/utils/id",
@@ -68,6 +70,7 @@
       "symbol_test.cc",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}:gmock_and_gtest",
       "${tint_src_dir}/utils/containers",
       "${tint_src_dir}/utils/ice",
diff --git a/src/tint/utils/system/BUILD.bazel b/src/tint/utils/system/BUILD.bazel
index 4c739e3..75861b6 100644
--- a/src/tint/utils/system/BUILD.bazel
+++ b/src/tint/utils/system/BUILD.bazel
@@ -73,6 +73,7 @@
     "//src/tint/utils/memory",
     "//src/tint/utils/rtti",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
diff --git a/src/tint/utils/system/BUILD.cmake b/src/tint/utils/system/BUILD.cmake
index f9b377f..62570e0 100644
--- a/src/tint/utils/system/BUILD.cmake
+++ b/src/tint/utils/system/BUILD.cmake
@@ -53,6 +53,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_utils_system lib
+  "src_utils"
+)
+
 if((NOT TINT_BUILD_IS_LINUX) AND (NOT TINT_BUILD_IS_MAC) AND (NOT TINT_BUILD_IS_WIN))
   tint_target_add_sources(tint_utils_system lib
     "utils/system/terminal_other.cc"
diff --git a/src/tint/utils/system/BUILD.gn b/src/tint/utils/system/BUILD.gn
index 285aa06..19a3f5f 100644
--- a/src/tint/utils/system/BUILD.gn
+++ b/src/tint/utils/system/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -44,6 +45,7 @@
     "terminal.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/utils/containers",
     "${tint_src_dir}/utils/ice",
     "${tint_src_dir}/utils/macros",
diff --git a/src/tint/utils/text/BUILD.bazel b/src/tint/utils/text/BUILD.bazel
index 33e241b..acf689c 100644
--- a/src/tint/utils/text/BUILD.bazel
+++ b/src/tint/utils/text/BUILD.bazel
@@ -84,6 +84,7 @@
     "//src/tint/utils/rtti",
     "//src/tint/utils/system",
     "//src/tint/utils/traits",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
@@ -109,6 +110,7 @@
     "//src/tint/utils/text",
     "//src/tint/utils/traits",
     "@gtest",
+    "//src/utils",
   ],
   copts = COPTS,
   visibility = ["//visibility:public"],
diff --git a/src/tint/utils/text/BUILD.cmake b/src/tint/utils/text/BUILD.cmake
index 4383356..28db930 100644
--- a/src/tint/utils/text/BUILD.cmake
+++ b/src/tint/utils/text/BUILD.cmake
@@ -70,6 +70,10 @@
   tint_utils_traits
 )
 
+tint_target_add_external_dependencies(tint_utils_text lib
+  "src_utils"
+)
+
 if((NOT TINT_BUILD_IS_LINUX) AND (NOT TINT_BUILD_IS_MAC) AND (NOT TINT_BUILD_IS_WIN))
   tint_target_add_sources(tint_utils_text lib
     "utils/text/styled_text_printer_other.cc"
@@ -114,4 +118,5 @@
 
 tint_target_add_external_dependencies(tint_utils_text_test test
   "gtest"
+  "src_utils"
 )
diff --git a/src/tint/utils/text/BUILD.gn b/src/tint/utils/text/BUILD.gn
index f522561..a8883e4 100644
--- a/src/tint/utils/text/BUILD.gn
+++ b/src/tint/utils/text/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
@@ -64,6 +65,7 @@
     "unicode.h",
   ]
   deps = [
+    "${dawn_root}/src/utils:utils",
     "${tint_src_dir}/utils/containers",
     "${tint_src_dir}/utils/ice",
     "${tint_src_dir}/utils/macros",
@@ -97,6 +99,7 @@
       "unicode_test.cc",
     ]
     deps = [
+      "${dawn_root}/src/utils:utils",
       "${tint_src_dir}:gmock_and_gtest",
       "${tint_src_dir}/utils/containers",
       "${tint_src_dir}/utils/ice",
diff --git a/src/tint/utils/traits/BUILD.gn b/src/tint/utils/traits/BUILD.gn
index 20faff3..505fd61 100644
--- a/src/tint/utils/traits/BUILD.gn
+++ b/src/tint/utils/traits/BUILD.gn
@@ -34,6 +34,7 @@
 #                       Do not modify this file directly
 ################################################################################
 
+import("../../../../scripts/dawn_overrides_with_defaults.gni")
 import("../../../../scripts/tint_overrides_with_defaults.gni")
 
 import("${tint_src_dir}/tint.gni")
diff --git a/src/utils/BUILD.bazel b/src/utils/BUILD.bazel
new file mode 100644
index 0000000..23139e0
--- /dev/null
+++ b/src/utils/BUILD.bazel
@@ -0,0 +1,41 @@
+# Copyright 2023 The Dawn & Tint Authors
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# 1. Redistributions of source code must retain the above copyright notice, this
+#    list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright notice,
+#    this list of conditions and the following disclaimer in the documentation
+#    and/or other materials provided with the distribution.
+#
+# 3. Neither the name of the copyright holder nor the names of its
+#    contributors may be used to endorse or promote products derived from
+#    this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+load("//src/tint:flags.bzl", "COPTS")
+
+cc_library(
+  name = "utils",
+  hdrs = [
+    "compiler.h",
+  ],
+  srcs = [
+    "placeholder.cc",
+  ],
+  deps = [],
+  copts = COPTS,
+  visibility = ["//visibility:public"],
+)
diff --git a/src/utils/BUILD.gn b/src/utils/BUILD.gn
new file mode 100644
index 0000000..8ed9784
--- /dev/null
+++ b/src/utils/BUILD.gn
@@ -0,0 +1,45 @@
+# Copyright 2024 The Dawn & Tint Authors
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# 1. Redistributions of source code must retain the above copyright notice, this
+#    list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright notice,
+#    this list of conditions and the following disclaimer in the documentation
+#    and/or other materials provided with the distribution.
+#
+# 3. Neither the name of the copyright holder nor the names of its
+#    contributors may be used to endorse or promote products derived from
+#    this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+###############################################################################
+# Utils library
+###############################################################################
+
+import("../../scripts/dawn_overrides_with_defaults.gni")
+
+config("internal_config") {
+  include_dirs = [ "${dawn_root}" ]
+}
+
+static_library("utils") {
+  sources = [
+    "compiler.h",
+    "placeholder.cc",
+  ]
+
+  public_configs = [ ":internal_config" ]
+}
diff --git a/src/utils/CMakeLists.txt b/src/utils/CMakeLists.txt
new file mode 100644
index 0000000..5e177b4
--- /dev/null
+++ b/src/utils/CMakeLists.txt
@@ -0,0 +1,47 @@
+# Copyright 2024 The Dawn & Tint Authors
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# 1. Redistributions of source code must retain the above copyright notice, this
+#    list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright notice,
+#    this list of conditions and the following disclaimer in the documentation
+#    and/or other materials provided with the distribution.
+#
+# 3. Neither the name of the copyright holder nor the names of its
+#    contributors may be used to endorse or promote products derived from
+#    this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+set(private_headers
+    "compiler.h"
+)
+
+set(sources
+    "placeholder.cc"
+)
+
+set(conditional_private_depends)
+
+dawn_add_library(
+    dawn_shared_utils
+    ENABLE_EMSCRIPTEN
+    HEADER_ONLY
+    UTILITY_TARGET dawn_internal_config
+    HEADERS
+        ${private_headers}
+    SOURCES
+        ${sources}
+)
diff --git a/src/utils/OWNERS b/src/utils/OWNERS
new file mode 100644
index 0000000..7660659
--- /dev/null
+++ b/src/utils/OWNERS
@@ -0,0 +1,3 @@
+cwallez@chromium.org
+dsinclair@chromium.org
+jrprice@google.com
diff --git a/src/utils/compiler.h b/src/utils/compiler.h
new file mode 100644
index 0000000..6229552
--- /dev/null
+++ b/src/utils/compiler.h
@@ -0,0 +1,56 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+//    list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+//    this list of conditions and the following disclaimer in the documentation
+//    and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+//    contributors may be used to endorse or promote products derived from
+//    this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#ifndef SRC_UTILS_COMPILER_H_
+#define SRC_UTILS_COMPILER_H_
+
+#if defined(__has_attribute)
+#define TINT_HAS_ATTRIBUTE(x) __has_attribute(x)
+#else
+#define TINT_HAS_ATTRIBUTE(x) 0
+#endif
+
+// DAWN_HAS_ATTRIBUTE
+//
+// A wrapper around `__has_attribute`. This test whether its operand is recognized by the compiler.
+#if defined(__has_attribute)
+#define DAWN_HAS_ATTRIBUTE(x) __has_attribute(x)
+#else
+#define DAWN_HAS_ATTRIBUTE(x) 0
+#endif
+
+// DAWN_HAS_CPP_ATTRIBUTE
+//
+// A wrapper around `__has_cpp_attribute`. This test whether its operand is recognized by the
+// compiler.
+#if defined(__has_cpp_attribute)
+#define DAWN_HAS_CPP_ATTRIBUTE(x) __has_cpp_attribute(x)
+#else
+#define DAWN_HAS_CPP_ATTRIBUTE(x) 0
+#endif
+
+#endif  // SRC_UTILS_COMPILER_H_
diff --git a/src/utils/placeholder.cc b/src/utils/placeholder.cc
new file mode 100644
index 0000000..05a68bd
--- /dev/null
+++ b/src/utils/placeholder.cc
@@ -0,0 +1,33 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+//    list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+//    this list of conditions and the following disclaimer in the documentation
+//    and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+//    contributors may be used to endorse or promote products derived from
+//    this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#if defined(__clang__)
+#pragma clang diagnostic ignored "-Wmissing-variable-declarations"
+#endif
+
+// A placeholder symbol used to emit a symbol for this lib target.
+int src_utils_symbol = 1;