[tint][build][cmake] Drop GN-style target names

This was required when we were globbing test and benchmark files to a pair of targets.
Now we use OBJECT libraries, we don't need this filth.

Change-Id: Ib3af9acf99ba619c67134eaeff611afb5dc68cd1
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/147522
Commit-Queue: Ben Clayton <bclayton@google.com>
Auto-Submit: Ben Clayton <bclayton@google.com>
Reviewed-by: Dan Sinclair <dsinclair@chromium.org>
Kokoro: Kokoro <noreply+kokoro@google.com>
diff --git a/src/tint/CMakeLists.txt b/src/tint/CMakeLists.txt
index 01f4a45..1720eadd4 100644
--- a/src/tint/CMakeLists.txt
+++ b/src/tint/CMakeLists.txt
@@ -239,103 +239,61 @@
 # See also: docs/tint/gen.md
 ################################################################################
 
-# A special name given to targets and target kinds that are not to be built due
-# to the active CMake flags.
-set(TINT_TARGET_DISABLED "<DISABLED>")
-
-# tint_translate_target(TARGET_OUT KIND_OUT GN_TARGET_IN)
+# tint_check_target_is_enabled(IS_ENABLED KIND)
 #
-# Translates a GN-style target to a CMake target name, and target kind.
-# The GN-style target is of the form `<path>` for a 'lib' target or
-# `<path>:<kind>` for any other target kind.
+# Checks whether a target of the kind KIND is enabled.
+# Assigns TRUE or FALSE to IS_ENABLED based on whether the target is enabled.
 #
 # Parameters:
-#   TARGET_OUT   - The name of the variable receieving the CMake target name
-#   KIND_OUT     - The name of the variable receieving the target kind
-#   GN_TARGET_IN - The GN-style target name
-function(tint_translate_target TARGET_OUT KIND_OUT GN_TARGET_IN)
-  string(REGEX MATCH "^([^:]+):(.+)$" MATCH ${GN_TARGET_IN})
-  if(MATCH)
-    # Explicit target kind
-    set(TARGET ${CMAKE_MATCH_1})
-    set(KIND ${CMAKE_MATCH_2})
-  else()
-    # Implicit 'lib'
-    set(TARGET ${GN_TARGET_IN})
-    set(KIND "lib")
-  endif()
-
-  # Replace path slashes with underscores.
-  string(REPLACE "/" "_" TARGET "${TARGET}")
-
-  # Add 'tint_' prefix
-  set(TARGET "tint_${TARGET}")
-
-  # Disable targets that aren't enabled with build flags and add test / bench
-  # target name suffixes
+#   IS_ENABLED - the output variable
+#   KIND       - the target kind
+function(tint_check_target_is_enabled IS_ENABLED KIND)
+  set(IS_ENABLED FALSE PARENT_SCOPE) # Default to disabled
   if(${KIND} STREQUAL cmd)
     if(TINT_BUILD_CMD_TOOLS)
-      set(TARGET "${TARGET}_cmd")
-    else()
-      set(TARGET TINT_TARGET_DISABLED)
-      set(KIND   TINT_TARGET_DISABLED)
+      set(IS_ENABLED TRUE PARENT_SCOPE)
     endif()
   elseif(${KIND} STREQUAL test_cmd)
     if(TINT_BUILD_TESTS)
-      set(TARGET "${TARGET}_test_cmd")
-    else()
-      set(TARGET TINT_TARGET_DISABLED)
-      set(KIND   TINT_TARGET_DISABLED)
+      set(IS_ENABLED TRUE PARENT_SCOPE)
     endif()
   elseif(${KIND} STREQUAL bench_cmd)
     if(TINT_BUILD_BENCHMARKS)
-      set(TARGET "${TARGET}_bench_cmd")
-    else()
-      set(TARGET TINT_TARGET_DISABLED)
-      set(KIND   TINT_TARGET_DISABLED)
+      set(IS_ENABLED TRUE PARENT_SCOPE)
     endif()
   elseif(${KIND} STREQUAL test)
     if(TINT_BUILD_TESTS)
-      set(TARGET "${TARGET}_test")
-    else()
-      set(TARGET TINT_TARGET_DISABLED)
-      set(KIND   TINT_TARGET_DISABLED)
+      set(IS_ENABLED TRUE PARENT_SCOPE)
     endif()
   elseif(${KIND} STREQUAL bench)
     if(TINT_BUILD_BENCHMARKS)
-      set(TARGET "${TARGET}_bench")
-    else()
-      set(TARGET TINT_TARGET_DISABLED)
-      set(KIND   TINT_TARGET_DISABLED)
+      set(IS_ENABLED TRUE PARENT_SCOPE)
     endif()
   elseif(${KIND} STREQUAL lib)
+    set(IS_ENABLED TRUE PARENT_SCOPE)
   else()
     message(FATAL_ERROR "unhandled target kind ${KIND}")
   endif()
-
-  # Output values
-  set(${TARGET_OUT} ${TARGET} PARENT_SCOPE)
-  set(${KIND_OUT}   ${KIND}   PARENT_SCOPE)
 endfunction()
 
-# tint_add_target(GN_TARGET [SOURCES...])
+# tint_add_target(TARGET KIND [SOURCES...])
 #
-# Registers the target with the given GN-style target name, with the provided
-# sources. Additional sources can be appended with subsequent calls to
-# tint_target_add_sources()
+# Registers a Tint target with the provided sources.
+# Additional sources can be appended with subsequent calls to tint_target_add_sources()
 #
 # Parameters:
-#   GN_TARGET - The GN-style target name
-#   SOURCES   - a list of source files, relative to this directory
-function(tint_add_target GN_TARGET)
+#   TARGET   - The target name
+#   KIND     - The target kind
+#   SOURCES  - a list of source files, relative to this directory
+function(tint_add_target TARGET KIND)
   set(SOURCES ${ARGN})
 
-  # Split the GN-style target name into the CMake target name and target kind
-  tint_translate_target(TARGET KIND ${GN_TARGET})
-
-  if(${KIND} STREQUAL ${TINT_TARGET_DISABLED})
+  tint_check_target_is_enabled(IS_ENABLED ${KIND})
+  if(NOT IS_ENABLED)
     return() # Target is disabled via build flags
-  elseif(${KIND} STREQUAL lib)
+  endif()
+
+  if(${KIND} STREQUAL lib)
     add_library(${TARGET} STATIC EXCLUDE_FROM_ALL)
     tint_default_compile_options(${TARGET})
 
@@ -370,20 +328,19 @@
   target_sources(${TARGET} PRIVATE ${SOURCES})
 endfunction()
 
-# tint_target_add_sources(GN_TARGET [SOURCES...])
+# tint_target_add_sources(TARGET [SOURCES...])
 #
-# Adds source files to the target with the given GN-style target name.
+# Adds source files to a Tint target
 #
 # Parameters:
-#   GN_TARGET - The GN-style target name
-#   SOURCES   - a list of source files, relative to this directory
-function(tint_target_add_sources GN_TARGET)
+#   TARGET   - The target name
+#   KIND     - The target kind
+#   SOURCES  - a list of source files, relative to this directory
+function(tint_target_add_sources TARGET KIND)
   set(SOURCES ${ARGN})
 
-  # Split the GN-style target name into the CMake target name and target kind
-  tint_translate_target(TARGET KIND ${GN_TARGET})
-
-  if(${KIND} STREQUAL ${TINT_TARGET_DISABLED})
+  tint_check_target_is_enabled(IS_ENABLED ${KIND})
+  if(NOT IS_ENABLED)
     return() # Target is disabled via build flags
   endif()
 
@@ -396,63 +353,54 @@
   endif()
 endfunction()
 
-# tint_target_add_dependencies(GN_TARGET DEPENDENCIES...)
+# tint_target_add_dependencies(TARGET DEPENDENCIES...)
 #
-# Adds dependencies to the target with the given GN-style target name.
+# Adds dependencies to a Tint target.
 #
 # Parameters:
-#   GN_TARGET    - The GN-style target name
-#   DEPENDENCIES - a list of GN-style target names
-function(tint_target_add_dependencies GN_TARGET)
+#   TARGET       - The target name
+#   KIND         - The target kind
+#   DEPENDENCIES - a list of target names
+function(tint_target_add_dependencies TARGET KIND)
   set(DEPENDENCIES ${ARGN})
 
-  # Split the GN-style target name into the CMake target name and target kind
-  tint_translate_target(TARGET KIND ${GN_TARGET})
-
-  if(${KIND} STREQUAL ${TINT_TARGET_DISABLED})
+  tint_check_target_is_enabled(IS_ENABLED ${KIND})
+  if(NOT IS_ENABLED)
     return() # Target is disabled via build flags
   endif()
 
-  # Translate list of GN-style target names to CMake target names
-  set(DEPENDENCY_TARGETS "")
-  foreach(DEPENDENCY ${DEPENDENCIES})
-    tint_translate_target(DEP_TARGET DEP_KIND ${DEPENDENCY})
-    list(APPEND DEPENDENCY_TARGETS ${DEP_TARGET})
-  endforeach()
-
   # Register the dependencies
-  target_link_libraries(${TARGET} PRIVATE ${DEPENDENCY_TARGETS})
+  target_link_libraries(${TARGET} PRIVATE ${DEPENDENCIES})
 
   # If there's a corresponding fuzz target for this target, add the corresponding fuzz dependencies
   # to the fuzz target.
   set(FUZZ_TARGET "${TARGET}${TINT_FUZZ_SUFFIX}")
   if(TARGET "${FUZZ_TARGET}")
-    set(FUZZ_DEPENDENCY_TARGETS "")
+    set(FUZZ_DEPENDENCIES "")
 
-    foreach(TARGET ${DEPENDENCY_TARGETS})
-      list(APPEND FUZZ_DEPENDENCY_TARGETS "${TARGET}${TINT_FUZZ_SUFFIX}")
+    foreach(TARGET ${DEPENDENCIES})
+      list(APPEND FUZZ_DEPENDENCIES "${TARGET}${TINT_FUZZ_SUFFIX}")
     endforeach()
 
-    target_link_libraries("${FUZZ_TARGET}" PRIVATE ${FUZZ_DEPENDENCY_TARGETS})
+    target_link_libraries("${FUZZ_TARGET}" PRIVATE ${FUZZ_DEPENDENCIES})
   endif()
 endfunction()
 
-# tint_target_add_external_dependencies(GN_TARGET DEPENDENCIES...)
+# tint_target_add_external_dependencies(TARGET KIND DEPENDENCIES...)
 #
-# Adds external dependencies to the target with the given GN-style target name.
+# Adds external dependencies to a Tint target.
 #
 # Parameters:
-#   GN_TARGET    - The GN-style target name
+#   TARGET       - The target name
+#   KIND         - The target kind
 #   DEPENDENCIES - a list of external target names
 #
 # See tools/src/cmd/gen/build/externals.json for the list of external dependencies.
-function(tint_target_add_external_dependencies GN_TARGET)
+function(tint_target_add_external_dependencies UNSUFFIXED_TARGET KIND)
   set(DEPENDENCIES ${ARGN})
 
-  # Split the GN-style target name into the CMake target name and target kind
-  tint_translate_target(UNSUFFIXED_TARGET KIND ${GN_TARGET})
-
-  if(${KIND} STREQUAL ${TINT_TARGET_DISABLED})
+  tint_check_target_is_enabled(IS_ENABLED ${KIND})
+  if(NOT IS_ENABLED)
     return() # Target is disabled via build flags
   endif()
 
@@ -507,18 +455,17 @@
   endforeach()
 endfunction()
 
-# tint_target_set_output_name(GN_TARGET OUTPUT_NAME)
+# tint_target_set_output_name(TARGET KIND OUTPUT_NAME)
 #
 # Overrides the output name for the given target
 #
 # Parameters:
-#   GN_TARGET   - The GN-style target name
+#   TARGET      - The target name
+#   KIND        - The target kind
 #   OUTPUT_NAME - the new name for the target output
-function(tint_target_set_output_name GN_TARGET OUTPUT_NAME)
-  # Split the GN-style target name into the CMake target name and target kind
-  tint_translate_target(TARGET KIND ${GN_TARGET})
-
-  if(${KIND} STREQUAL ${TINT_TARGET_DISABLED})
+function(tint_target_set_output_name TARGET KIND OUTPUT_NAME)
+  tint_check_target_is_enabled(IS_ENABLED ${KIND})
+  if(NOT IS_ENABLED)
     return() # Target is disabled via build flags
   endif()
 
diff --git a/src/tint/api/BUILD.cmake b/src/tint/api/BUILD.cmake
index 73d8ef0..e10faf6 100644
--- a/src/tint/api/BUILD.cmake
+++ b/src/tint/api/BUILD.cmake
@@ -24,70 +24,71 @@
 include(api/options/BUILD.cmake)
 
 ################################################################################
-# CMake target: 'tint_api'
+# Target:    tint_api
+# Kind:      lib
 ################################################################################
-tint_add_target("api"
+tint_add_target(tint_api lib
   api/tint.cc
   api/tint.h
 )
 
-tint_target_add_dependencies("api"
-  "api/common"
-  "api/options"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/hlsl/writer/common"
-  "lang/spirv/reader/common"
-  "lang/wgsl/ast"
-  "lang/wgsl/program"
-  "lang/wgsl/reader"
-  "lang/wgsl/sem"
-  "lang/wgsl/writer"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_api lib
+  tint_api_common
+  tint_api_options
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_hlsl_writer_common
+  tint_lang_spirv_reader_common
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_program
+  tint_lang_wgsl_reader
+  tint_lang_wgsl_sem
+  tint_lang_wgsl_writer
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
 if (TINT_BUILD_GLSL_WRITER)
-  tint_target_add_dependencies("api"
-    "lang/glsl/writer"
-    "lang/glsl/writer/common"
+  tint_target_add_dependencies(tint_api lib
+    tint_lang_glsl_writer
+    tint_lang_glsl_writer_common
   )
 endif(TINT_BUILD_GLSL_WRITER)
 
 if (TINT_BUILD_HLSL_WRITER)
-  tint_target_add_dependencies("api"
-    "lang/hlsl/writer"
+  tint_target_add_dependencies(tint_api lib
+    tint_lang_hlsl_writer
   )
 endif(TINT_BUILD_HLSL_WRITER)
 
 if (TINT_BUILD_MSL_WRITER)
-  tint_target_add_dependencies("api"
-    "lang/msl/writer"
-    "lang/msl/writer/common"
+  tint_target_add_dependencies(tint_api lib
+    tint_lang_msl_writer
+    tint_lang_msl_writer_common
   )
 endif(TINT_BUILD_MSL_WRITER)
 
 if (TINT_BUILD_SPV_READER)
-  tint_target_add_dependencies("api"
-    "lang/spirv/reader"
+  tint_target_add_dependencies(tint_api lib
+    tint_lang_spirv_reader
   )
 endif(TINT_BUILD_SPV_READER)
 
 if (TINT_BUILD_SPV_WRITER)
-  tint_target_add_dependencies("api"
-    "lang/spirv/writer"
-    "lang/spirv/writer/common"
+  tint_target_add_dependencies(tint_api lib
+    tint_lang_spirv_writer
+    tint_lang_spirv_writer_common
   )
 endif(TINT_BUILD_SPV_WRITER)
diff --git a/src/tint/api/common/BUILD.cmake b/src/tint/api/common/BUILD.cmake
index 372b9e0..4078b21 100644
--- a/src/tint/api/common/BUILD.cmake
+++ b/src/tint/api/common/BUILD.cmake
@@ -21,18 +21,19 @@
 ################################################################################
 
 ################################################################################
-# CMake target: 'tint_api_common'
+# Target:    tint_api_common
+# Kind:      lib
 ################################################################################
-tint_add_target("api/common"
+tint_add_target(tint_api_common lib
   api/common/binding_point.h
   api/common/common.cc
   api/common/override_id.h
 )
 
-tint_target_add_dependencies("api/common"
-  "utils/macros"
-  "utils/math"
-  "utils/reflection"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_api_common lib
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_reflection
+  tint_utils_text
+  tint_utils_traits
 )
diff --git a/src/tint/api/options/BUILD.cmake b/src/tint/api/options/BUILD.cmake
index 20a89c8..2edad38 100644
--- a/src/tint/api/options/BUILD.cmake
+++ b/src/tint/api/options/BUILD.cmake
@@ -21,21 +21,22 @@
 ################################################################################
 
 ################################################################################
-# CMake target: 'tint_api_options'
+# Target:    tint_api_options
+# Kind:      lib
 ################################################################################
-tint_add_target("api/options"
+tint_add_target(tint_api_options lib
   api/options/array_length_from_uniform.h
   api/options/binding_remapper.h
   api/options/external_texture.h
   api/options/options.cc
 )
 
-tint_target_add_dependencies("api/options"
-  "api/common"
-  "lang/core"
-  "utils/macros"
-  "utils/math"
-  "utils/reflection"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_api_options lib
+  tint_api_common
+  tint_lang_core
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_reflection
+  tint_utils_text
+  tint_utils_traits
 )
diff --git a/src/tint/cmd/bench/BUILD.cmake b/src/tint/cmd/bench/BUILD.cmake
index 78ad975..4964e60 100644
--- a/src/tint/cmd/bench/BUILD.cmake
+++ b/src/tint/cmd/bench/BUILD.cmake
@@ -21,99 +21,101 @@
 ################################################################################
 
 ################################################################################
-# CMake target: 'tint_cmd_bench'
+# Target:    tint_cmd_bench
+# Kind:      lib
 ################################################################################
-tint_add_target("cmd/bench"
+tint_add_target(tint_cmd_bench lib
   cmd/bench/bench.h
   cmd/bench/benchmark.cc
 )
 
-tint_target_add_dependencies("cmd/bench"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/wgsl/ast"
-  "lang/wgsl/program"
-  "lang/wgsl/sem"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_cmd_bench lib
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_program
+  tint_lang_wgsl_sem
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
 ################################################################################
-# CMake target: 'tint_cmd_bench_bench_cmd'
+# Target:    tint_cmd_bench_bench_cmd
+# Kind:      bench_cmd
 ################################################################################
-tint_add_target("cmd/bench:bench_cmd"
+tint_add_target(tint_cmd_bench_bench_cmd bench_cmd
   cmd/bench/main_bench.cc
 )
 
-tint_target_add_dependencies("cmd/bench:bench_cmd"
-  "cmd/bench"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/core:bench"
-  "lang/spirv/reader/common"
-  "lang/wgsl/ast"
-  "lang/wgsl/program"
-  "lang/wgsl/reader"
-  "lang/wgsl/reader:bench"
-  "lang/wgsl/sem"
-  "lang/wgsl/writer"
-  "lang/wgsl/writer:bench"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/rtti:bench"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_cmd_bench_bench_cmd bench_cmd
+  tint_cmd_bench
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_core_bench
+  tint_lang_spirv_reader_common
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_program
+  tint_lang_wgsl_reader
+  tint_lang_wgsl_reader_bench
+  tint_lang_wgsl_sem
+  tint_lang_wgsl_writer
+  tint_lang_wgsl_writer_bench
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_rtti_bench
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
 if (TINT_BUILD_GLSL_WRITER)
-  tint_target_add_dependencies("cmd/bench:bench_cmd"
-    "lang/glsl/writer:bench"
+  tint_target_add_dependencies(tint_cmd_bench_bench_cmd bench_cmd
+    tint_lang_glsl_writer_bench
   )
 endif(TINT_BUILD_GLSL_WRITER)
 
 if (TINT_BUILD_HLSL_WRITER)
-  tint_target_add_dependencies("cmd/bench:bench_cmd"
-    "lang/hlsl/writer:bench"
+  tint_target_add_dependencies(tint_cmd_bench_bench_cmd bench_cmd
+    tint_lang_hlsl_writer_bench
   )
 endif(TINT_BUILD_HLSL_WRITER)
 
 if (TINT_BUILD_MSL_WRITER)
-  tint_target_add_dependencies("cmd/bench:bench_cmd"
-    "lang/msl/writer:bench"
+  tint_target_add_dependencies(tint_cmd_bench_bench_cmd bench_cmd
+    tint_lang_msl_writer_bench
   )
 endif(TINT_BUILD_MSL_WRITER)
 
 if (TINT_BUILD_SPV_READER)
-  tint_target_add_dependencies("cmd/bench:bench_cmd"
-    "lang/spirv/reader"
+  tint_target_add_dependencies(tint_cmd_bench_bench_cmd bench_cmd
+    tint_lang_spirv_reader
   )
 endif(TINT_BUILD_SPV_READER)
 
 if (TINT_BUILD_SPV_WRITER)
-  tint_target_add_dependencies("cmd/bench:bench_cmd"
-    "lang/spirv/writer:bench"
+  tint_target_add_dependencies(tint_cmd_bench_bench_cmd bench_cmd
+    tint_lang_spirv_writer_bench
   )
 endif(TINT_BUILD_SPV_WRITER)
 
-tint_target_set_output_name("cmd/bench:bench_cmd" "tint_benchmark")
+tint_target_set_output_name(tint_cmd_bench_bench_cmd bench_cmd "tint_benchmark")
diff --git a/src/tint/cmd/common/BUILD.cmake b/src/tint/cmd/common/BUILD.cmake
index ad0b204..468cbee 100644
--- a/src/tint/cmd/common/BUILD.cmake
+++ b/src/tint/cmd/common/BUILD.cmake
@@ -21,88 +21,90 @@
 ################################################################################
 
 ################################################################################
-# CMake target: 'tint_cmd_common'
+# Target:    tint_cmd_common
+# Kind:      lib
 ################################################################################
-tint_add_target("cmd/common"
+tint_add_target(tint_cmd_common lib
   cmd/common/generate_external_texture_bindings.cc
   cmd/common/generate_external_texture_bindings.h
   cmd/common/helper.cc
   cmd/common/helper.h
 )
 
-tint_target_add_dependencies("cmd/common"
-  "api/common"
-  "api/options"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/spirv/reader/common"
-  "lang/wgsl/ast"
-  "lang/wgsl/inspector"
-  "lang/wgsl/program"
-  "lang/wgsl/reader"
-  "lang/wgsl/sem"
-  "lang/wgsl/writer"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_cmd_common lib
+  tint_api_common
+  tint_api_options
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_spirv_reader_common
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_inspector
+  tint_lang_wgsl_program
+  tint_lang_wgsl_reader
+  tint_lang_wgsl_sem
+  tint_lang_wgsl_writer
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
 if (TINT_BUILD_SPV_READER)
-  tint_target_add_dependencies("cmd/common"
-    "lang/spirv/reader"
+  tint_target_add_dependencies(tint_cmd_common lib
+    tint_lang_spirv_reader
   )
 endif(TINT_BUILD_SPV_READER)
 
 if (TINT_BUILD_SPV_READER  OR  TINT_BUILD_SPV_WRITER)
-  tint_target_add_external_dependencies("cmd/common"
+  tint_target_add_external_dependencies(tint_cmd_common lib
     "spirv-tools"
   )
 endif(TINT_BUILD_SPV_READER  OR  TINT_BUILD_SPV_WRITER)
 
 ################################################################################
-# CMake target: 'tint_cmd_common_test'
+# Target:    tint_cmd_common_test
+# Kind:      test
 ################################################################################
-tint_add_target("cmd/common:test"
+tint_add_target(tint_cmd_common_test test
   cmd/common/generate_external_texture_bindings_test.cc
 )
 
-tint_target_add_dependencies("cmd/common:test"
-  "api/common"
-  "api/options"
-  "cmd/common"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/wgsl/ast"
-  "lang/wgsl/program"
-  "lang/wgsl/resolver"
-  "lang/wgsl/sem"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_cmd_common_test test
+  tint_api_common
+  tint_api_options
+  tint_cmd_common
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_program
+  tint_lang_wgsl_resolver
+  tint_lang_wgsl_sem
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
-tint_target_add_external_dependencies("cmd/common:test"
+tint_target_add_external_dependencies(tint_cmd_common_test test
   "gtest"
 )
diff --git a/src/tint/cmd/info/BUILD.cmake b/src/tint/cmd/info/BUILD.cmake
index e604940..6c8faf8 100644
--- a/src/tint/cmd/info/BUILD.cmake
+++ b/src/tint/cmd/info/BUILD.cmake
@@ -21,43 +21,44 @@
 ################################################################################
 
 ################################################################################
-# CMake target: 'tint_cmd_info_cmd'
+# Target:    tint_cmd_info_cmd
+# Kind:      cmd
 ################################################################################
-tint_add_target("cmd/info:cmd"
+tint_add_target(tint_cmd_info_cmd cmd
   cmd/info/main.cc
 )
 
-tint_target_add_dependencies("cmd/info:cmd"
-  "api/common"
-  "cmd/common"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/spirv/reader/common"
-  "lang/wgsl/ast"
-  "lang/wgsl/inspector"
-  "lang/wgsl/program"
-  "lang/wgsl/sem"
-  "utils/command"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_cmd_info_cmd cmd
+  tint_api_common
+  tint_cmd_common
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_spirv_reader_common
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_inspector
+  tint_lang_wgsl_program
+  tint_lang_wgsl_sem
+  tint_utils_command
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
 if (TINT_BUILD_SPV_READER  OR  TINT_BUILD_SPV_WRITER)
-  tint_target_add_external_dependencies("cmd/info:cmd"
+  tint_target_add_external_dependencies(tint_cmd_info_cmd cmd
     "spirv-tools"
   )
 endif(TINT_BUILD_SPV_READER  OR  TINT_BUILD_SPV_WRITER)
 
-tint_target_set_output_name("cmd/info:cmd" "tint_info")
+tint_target_set_output_name(tint_cmd_info_cmd cmd "tint_info")
diff --git a/src/tint/cmd/loopy/BUILD.cmake b/src/tint/cmd/loopy/BUILD.cmake
index 9ae1046..850af26 100644
--- a/src/tint/cmd/loopy/BUILD.cmake
+++ b/src/tint/cmd/loopy/BUILD.cmake
@@ -21,82 +21,83 @@
 ################################################################################
 
 ################################################################################
-# CMake target: 'tint_cmd_loopy_cmd'
+# Target:    tint_cmd_loopy_cmd
+# Kind:      cmd
 ################################################################################
-tint_add_target("cmd/loopy:cmd"
+tint_add_target(tint_cmd_loopy_cmd cmd
   cmd/loopy/main.cc
 )
 
-tint_target_add_dependencies("cmd/loopy:cmd"
-  "api"
-  "api/common"
-  "api/options"
-  "cmd/common"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/hlsl/writer/common"
-  "lang/spirv/reader/common"
-  "lang/wgsl/ast"
-  "lang/wgsl/helpers"
-  "lang/wgsl/inspector"
-  "lang/wgsl/program"
-  "lang/wgsl/reader"
-  "lang/wgsl/sem"
-  "lang/wgsl/writer"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_cmd_loopy_cmd cmd
+  tint_api
+  tint_api_common
+  tint_api_options
+  tint_cmd_common
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_hlsl_writer_common
+  tint_lang_spirv_reader_common
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_helpers
+  tint_lang_wgsl_inspector
+  tint_lang_wgsl_program
+  tint_lang_wgsl_reader
+  tint_lang_wgsl_sem
+  tint_lang_wgsl_writer
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
 if (TINT_BUILD_GLSL_WRITER)
-  tint_target_add_dependencies("cmd/loopy:cmd"
-    "lang/glsl/writer"
-    "lang/glsl/writer/common"
+  tint_target_add_dependencies(tint_cmd_loopy_cmd cmd
+    tint_lang_glsl_writer
+    tint_lang_glsl_writer_common
   )
 endif(TINT_BUILD_GLSL_WRITER)
 
 if (TINT_BUILD_HLSL_WRITER)
-  tint_target_add_dependencies("cmd/loopy:cmd"
-    "lang/hlsl/writer"
+  tint_target_add_dependencies(tint_cmd_loopy_cmd cmd
+    tint_lang_hlsl_writer
   )
 endif(TINT_BUILD_HLSL_WRITER)
 
 if (TINT_BUILD_IR)
-  tint_target_add_dependencies("cmd/loopy:cmd"
-    "lang/core/ir"
-    "lang/wgsl/reader/program_to_ir"
+  tint_target_add_dependencies(tint_cmd_loopy_cmd cmd
+    tint_lang_core_ir
+    tint_lang_wgsl_reader_program_to_ir
   )
 endif(TINT_BUILD_IR)
 
 if (TINT_BUILD_MSL_WRITER)
-  tint_target_add_dependencies("cmd/loopy:cmd"
-    "lang/msl/writer"
-    "lang/msl/writer/common"
+  tint_target_add_dependencies(tint_cmd_loopy_cmd cmd
+    tint_lang_msl_writer
+    tint_lang_msl_writer_common
   )
 endif(TINT_BUILD_MSL_WRITER)
 
 if (TINT_BUILD_SPV_READER)
-  tint_target_add_dependencies("cmd/loopy:cmd"
-    "lang/spirv/reader"
+  tint_target_add_dependencies(tint_cmd_loopy_cmd cmd
+    tint_lang_spirv_reader
   )
 endif(TINT_BUILD_SPV_READER)
 
 if (TINT_BUILD_SPV_WRITER)
-  tint_target_add_dependencies("cmd/loopy:cmd"
-    "lang/spirv/writer"
-    "lang/spirv/writer/common"
+  tint_target_add_dependencies(tint_cmd_loopy_cmd cmd
+    tint_lang_spirv_writer
+    tint_lang_spirv_writer_common
   )
 endif(TINT_BUILD_SPV_WRITER)
 
-tint_target_set_output_name("cmd/loopy:cmd" "tint_loopy")
+tint_target_set_output_name(tint_cmd_loopy_cmd cmd "tint_loopy")
diff --git a/src/tint/cmd/test/BUILD.cmake b/src/tint/cmd/test/BUILD.cmake
index 1141a24..59e2502 100644
--- a/src/tint/cmd/test/BUILD.cmake
+++ b/src/tint/cmd/test/BUILD.cmake
@@ -21,105 +21,106 @@
 ################################################################################
 
 ################################################################################
-# CMake target: 'tint_cmd_test_test_cmd'
+# Target:    tint_cmd_test_test_cmd
+# Kind:      test_cmd
 ################################################################################
-tint_add_target("cmd/test:test_cmd"
+tint_add_target(tint_cmd_test_test_cmd test_cmd
   cmd/test/main_test.cc
 )
 
-tint_target_add_dependencies("cmd/test:test_cmd"
-  "api"
-  "cmd/common:test"
-  "lang/core/constant:test"
-  "lang/core/intrinsic:test"
-  "lang/core/type:test"
-  "lang/core:test"
-  "lang/wgsl/ast/transform:test"
-  "lang/wgsl/ast:test"
-  "lang/wgsl/helpers:test"
-  "lang/wgsl/inspector:test"
-  "lang/wgsl/program:test"
-  "lang/wgsl/reader/parser:test"
-  "lang/wgsl/resolver:test"
-  "lang/wgsl/sem:test"
-  "lang/wgsl/writer/ast_printer:test"
-  "lang/wgsl:test"
-  "utils/cli:test"
-  "utils/command:test"
-  "utils/containers:test"
-  "utils/diagnostic:test"
-  "utils/file:test"
-  "utils/ice"
-  "utils/ice:test"
-  "utils/macros"
-  "utils/macros:test"
-  "utils/math:test"
-  "utils/memory:test"
-  "utils/reflection:test"
-  "utils/result:test"
-  "utils/rtti:test"
-  "utils/strconv:test"
-  "utils/symbol:test"
-  "utils/text:test"
-  "utils/traits:test"
+tint_target_add_dependencies(tint_cmd_test_test_cmd test_cmd
+  tint_api
+  tint_cmd_common_test
+  tint_lang_core_constant_test
+  tint_lang_core_intrinsic_test
+  tint_lang_core_type_test
+  tint_lang_core_test
+  tint_lang_wgsl_ast_transform_test
+  tint_lang_wgsl_ast_test
+  tint_lang_wgsl_helpers_test
+  tint_lang_wgsl_inspector_test
+  tint_lang_wgsl_program_test
+  tint_lang_wgsl_reader_parser_test
+  tint_lang_wgsl_resolver_test
+  tint_lang_wgsl_sem_test
+  tint_lang_wgsl_writer_ast_printer_test
+  tint_lang_wgsl_test
+  tint_utils_cli_test
+  tint_utils_command_test
+  tint_utils_containers_test
+  tint_utils_diagnostic_test
+  tint_utils_file_test
+  tint_utils_ice
+  tint_utils_ice_test
+  tint_utils_macros
+  tint_utils_macros_test
+  tint_utils_math_test
+  tint_utils_memory_test
+  tint_utils_reflection_test
+  tint_utils_result_test
+  tint_utils_rtti_test
+  tint_utils_strconv_test
+  tint_utils_symbol_test
+  tint_utils_text_test
+  tint_utils_traits_test
 )
 
-tint_target_add_external_dependencies("cmd/test:test_cmd"
+tint_target_add_external_dependencies(tint_cmd_test_test_cmd test_cmd
   "gtest"
 )
 
 if (TINT_BUILD_GLSL_WRITER)
-  tint_target_add_dependencies("cmd/test:test_cmd"
-    "lang/glsl/writer/ast_printer:test"
+  tint_target_add_dependencies(tint_cmd_test_test_cmd test_cmd
+    tint_lang_glsl_writer_ast_printer_test
   )
 endif(TINT_BUILD_GLSL_WRITER)
 
 if (TINT_BUILD_HLSL_WRITER)
-  tint_target_add_dependencies("cmd/test:test_cmd"
-    "lang/hlsl/writer/ast_printer:test"
+  tint_target_add_dependencies(tint_cmd_test_test_cmd test_cmd
+    tint_lang_hlsl_writer_ast_printer_test
   )
 endif(TINT_BUILD_HLSL_WRITER)
 
 if (TINT_BUILD_IR)
-  tint_target_add_dependencies("cmd/test:test_cmd"
-    "lang/core/ir/transform:test"
-    "lang/core/ir:test"
-    "lang/wgsl/reader/program_to_ir:test"
-    "lang/wgsl/writer/ir_to_program:test"
+  tint_target_add_dependencies(tint_cmd_test_test_cmd test_cmd
+    tint_lang_core_ir_transform_test
+    tint_lang_core_ir_test
+    tint_lang_wgsl_reader_program_to_ir_test
+    tint_lang_wgsl_writer_ir_to_program_test
   )
 endif(TINT_BUILD_IR)
 
 if (TINT_BUILD_MSL_WRITER)
-  tint_target_add_dependencies("cmd/test:test_cmd"
-    "lang/msl/writer/ast_printer:test"
-    "lang/msl/writer/common:test"
+  tint_target_add_dependencies(tint_cmd_test_test_cmd test_cmd
+    tint_lang_msl_writer_ast_printer_test
+    tint_lang_msl_writer_common_test
   )
 endif(TINT_BUILD_MSL_WRITER)
 
 if (TINT_BUILD_MSL_WRITER  AND  TINT_BUILD_IR)
-  tint_target_add_dependencies("cmd/test:test_cmd"
-    "lang/msl/writer/printer:test"
+  tint_target_add_dependencies(tint_cmd_test_test_cmd test_cmd
+    tint_lang_msl_writer_printer_test
   )
 endif(TINT_BUILD_MSL_WRITER  AND  TINT_BUILD_IR)
 
 if (TINT_BUILD_SPV_READER)
-  tint_target_add_dependencies("cmd/test:test_cmd"
-    "lang/spirv/reader/ast_parser:test"
+  tint_target_add_dependencies(tint_cmd_test_test_cmd test_cmd
+    tint_lang_spirv_reader_ast_parser_test
   )
 endif(TINT_BUILD_SPV_READER)
 
 if (TINT_BUILD_SPV_WRITER)
-  tint_target_add_dependencies("cmd/test:test_cmd"
-    "lang/spirv/writer/ast_printer:test"
-    "lang/spirv/writer/common:test"
-    "lang/spirv/writer:test"
+  tint_target_add_dependencies(tint_cmd_test_test_cmd test_cmd
+    tint_lang_spirv_writer_ast_printer_test
+    tint_lang_spirv_writer_common_test
+    tint_lang_spirv_writer_test
   )
 endif(TINT_BUILD_SPV_WRITER)
 
 if (TINT_BUILD_SPV_WRITER  AND  TINT_BUILD_IR)
-  tint_target_add_dependencies("cmd/test:test_cmd"
-    "lang/spirv/writer/raise:test"
+  tint_target_add_dependencies(tint_cmd_test_test_cmd test_cmd
+    tint_lang_spirv_writer_raise_test
   )
 endif(TINT_BUILD_SPV_WRITER  AND  TINT_BUILD_IR)
 
-tint_target_set_output_name("cmd/test:test_cmd" "tint_unittests")
+tint_target_set_output_name(tint_cmd_test_test_cmd test_cmd "tint_unittests")
diff --git a/src/tint/cmd/tint/BUILD.cmake b/src/tint/cmd/tint/BUILD.cmake
index c8d56e9..8885563 100644
--- a/src/tint/cmd/tint/BUILD.cmake
+++ b/src/tint/cmd/tint/BUILD.cmake
@@ -21,98 +21,99 @@
 ################################################################################
 
 ################################################################################
-# CMake target: 'tint_cmd_tint_cmd'
+# Target:    tint_cmd_tint_cmd
+# Kind:      cmd
 ################################################################################
-tint_add_target("cmd/tint:cmd"
+tint_add_target(tint_cmd_tint_cmd cmd
   cmd/tint/main.cc
 )
 
-tint_target_add_dependencies("cmd/tint:cmd"
-  "api"
-  "api/common"
-  "api/options"
-  "cmd/common"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/hlsl/writer/common"
-  "lang/spirv/reader/common"
-  "lang/wgsl/ast"
-  "lang/wgsl/ast/transform"
-  "lang/wgsl/helpers"
-  "lang/wgsl/inspector"
-  "lang/wgsl/program"
-  "lang/wgsl/reader"
-  "lang/wgsl/sem"
-  "lang/wgsl/writer"
-  "utils/cli"
-  "utils/command"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/strconv"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_cmd_tint_cmd cmd
+  tint_api
+  tint_api_common
+  tint_api_options
+  tint_cmd_common
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_hlsl_writer_common
+  tint_lang_spirv_reader_common
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_ast_transform
+  tint_lang_wgsl_helpers
+  tint_lang_wgsl_inspector
+  tint_lang_wgsl_program
+  tint_lang_wgsl_reader
+  tint_lang_wgsl_sem
+  tint_lang_wgsl_writer
+  tint_utils_cli
+  tint_utils_command
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_strconv
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
 if (TINT_BUILD_GLSL_WRITER)
-  tint_target_add_dependencies("cmd/tint:cmd"
-    "lang/glsl/writer"
-    "lang/glsl/writer/common"
+  tint_target_add_dependencies(tint_cmd_tint_cmd cmd
+    tint_lang_glsl_writer
+    tint_lang_glsl_writer_common
   )
-  tint_target_add_external_dependencies("cmd/tint:cmd"
+  tint_target_add_external_dependencies(tint_cmd_tint_cmd cmd
     "glslang"
     "glslang-res-limits"
   )
 endif(TINT_BUILD_GLSL_WRITER)
 
 if (TINT_BUILD_HLSL_WRITER)
-  tint_target_add_dependencies("cmd/tint:cmd"
-    "lang/hlsl/validate"
-    "lang/hlsl/writer"
+  tint_target_add_dependencies(tint_cmd_tint_cmd cmd
+    tint_lang_hlsl_validate
+    tint_lang_hlsl_writer
   )
 endif(TINT_BUILD_HLSL_WRITER)
 
 if (TINT_BUILD_IR)
-  tint_target_add_dependencies("cmd/tint:cmd"
-    "lang/core/ir"
-    "lang/wgsl/reader/program_to_ir"
+  tint_target_add_dependencies(tint_cmd_tint_cmd cmd
+    tint_lang_core_ir
+    tint_lang_wgsl_reader_program_to_ir
   )
 endif(TINT_BUILD_IR)
 
 if (TINT_BUILD_MSL_WRITER)
-  tint_target_add_dependencies("cmd/tint:cmd"
-    "lang/msl/validate"
-    "lang/msl/writer"
-    "lang/msl/writer/common"
+  tint_target_add_dependencies(tint_cmd_tint_cmd cmd
+    tint_lang_msl_validate
+    tint_lang_msl_writer
+    tint_lang_msl_writer_common
   )
 endif(TINT_BUILD_MSL_WRITER)
 
 if (TINT_BUILD_SPV_READER)
-  tint_target_add_dependencies("cmd/tint:cmd"
-    "lang/spirv/reader"
+  tint_target_add_dependencies(tint_cmd_tint_cmd cmd
+    tint_lang_spirv_reader
   )
 endif(TINT_BUILD_SPV_READER)
 
 if (TINT_BUILD_SPV_READER  OR  TINT_BUILD_SPV_WRITER)
-  tint_target_add_external_dependencies("cmd/tint:cmd"
+  tint_target_add_external_dependencies(tint_cmd_tint_cmd cmd
     "spirv-tools"
   )
 endif(TINT_BUILD_SPV_READER  OR  TINT_BUILD_SPV_WRITER)
 
 if (TINT_BUILD_SPV_WRITER)
-  tint_target_add_dependencies("cmd/tint:cmd"
-    "lang/spirv/writer"
-    "lang/spirv/writer/common"
+  tint_target_add_dependencies(tint_cmd_tint_cmd cmd
+    tint_lang_spirv_writer
+    tint_lang_spirv_writer_common
   )
 endif(TINT_BUILD_SPV_WRITER)
 
-tint_target_set_output_name("cmd/tint:cmd" "tint")
+tint_target_set_output_name(tint_cmd_tint_cmd cmd "tint")
diff --git a/src/tint/lang/core/BUILD.cmake b/src/tint/lang/core/BUILD.cmake
index 02d5087..734da34 100644
--- a/src/tint/lang/core/BUILD.cmake
+++ b/src/tint/lang/core/BUILD.cmake
@@ -26,9 +26,10 @@
 include(lang/core/type/BUILD.cmake)
 
 ################################################################################
-# CMake target: 'tint_lang_core'
+# Target:    tint_lang_core
+# Kind:      lib
 ################################################################################
-tint_add_target("lang/core"
+tint_add_target(tint_lang_core lib
   lang/core/access.cc
   lang/core/access.h
   lang/core/address_space.cc
@@ -66,23 +67,24 @@
   lang/core/unary_op.h
 )
 
-tint_target_add_dependencies("lang/core"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/result"
-  "utils/rtti"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_core lib
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_text
+  tint_utils_traits
 )
 
 ################################################################################
-# CMake target: 'tint_lang_core_test'
+# Target:    tint_lang_core_test
+# Kind:      test
 ################################################################################
-tint_add_target("lang/core:test"
+tint_add_target(tint_lang_core_test test
   lang/core/access_test.cc
   lang/core/address_space_test.cc
   lang/core/attribute_test.cc
@@ -97,37 +99,38 @@
   lang/core/texel_format_test.cc
 )
 
-tint_target_add_dependencies("lang/core:test"
-  "api/common"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/wgsl/ast"
-  "lang/wgsl/program"
-  "lang/wgsl/sem"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_core_test test
+  tint_api_common
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_program
+  tint_lang_wgsl_sem
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
-tint_target_add_external_dependencies("lang/core:test"
+tint_target_add_external_dependencies(tint_lang_core_test test
   "gtest"
 )
 
 ################################################################################
-# CMake target: 'tint_lang_core_bench'
+# Target:    tint_lang_core_bench
+# Kind:      bench
 ################################################################################
-tint_add_target("lang/core:bench"
+tint_add_target(tint_lang_core_bench bench
   lang/core/access_bench.cc
   lang/core/address_space_bench.cc
   lang/core/attribute_bench.cc
@@ -141,15 +144,15 @@
   lang/core/texel_format_bench.cc
 )
 
-tint_target_add_dependencies("lang/core:bench"
-  "lang/core"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/rtti"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_core_bench bench
+  tint_lang_core
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_rtti
+  tint_utils_text
+  tint_utils_traits
 )
diff --git a/src/tint/lang/core/constant/BUILD.cmake b/src/tint/lang/core/constant/BUILD.cmake
index dd69f41..efc090b 100644
--- a/src/tint/lang/core/constant/BUILD.cmake
+++ b/src/tint/lang/core/constant/BUILD.cmake
@@ -21,9 +21,10 @@
 ################################################################################
 
 ################################################################################
-# CMake target: 'tint_lang_core_constant'
+# Target:    tint_lang_core_constant
+# Kind:      lib
 ################################################################################
-tint_add_target("lang/core/constant"
+tint_add_target(tint_lang_core_constant lib
   lang/core/constant/clone_context.h
   lang/core/constant/composite.cc
   lang/core/constant/composite.h
@@ -41,27 +42,28 @@
   lang/core/constant/value.h
 )
 
-tint_target_add_dependencies("lang/core/constant"
-  "lang/core"
-  "lang/core/type"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_core_constant lib
+  tint_lang_core
+  tint_lang_core_type
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
 ################################################################################
-# CMake target: 'tint_lang_core_constant_test'
+# Target:    tint_lang_core_constant_test
+# Kind:      test
 ################################################################################
-tint_add_target("lang/core/constant:test"
+tint_add_target(tint_lang_core_constant_test test
   lang/core/constant/composite_test.cc
   lang/core/constant/eval_binary_op_test.cc
   lang/core/constant/eval_bitcast_test.cc
@@ -80,34 +82,34 @@
   lang/core/constant/value_test.cc
 )
 
-tint_target_add_dependencies("lang/core/constant:test"
-  "api/common"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/intrinsic"
-  "lang/core/type"
-  "lang/core/type:test"
-  "lang/wgsl/ast"
-  "lang/wgsl/program"
-  "lang/wgsl/reader"
-  "lang/wgsl/resolver"
-  "lang/wgsl/resolver:test"
-  "lang/wgsl/sem"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_core_constant_test test
+  tint_api_common
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_intrinsic
+  tint_lang_core_type
+  tint_lang_core_type_test
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_program
+  tint_lang_wgsl_reader
+  tint_lang_wgsl_resolver
+  tint_lang_wgsl_resolver_test
+  tint_lang_wgsl_sem
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
-tint_target_add_external_dependencies("lang/core/constant:test"
+tint_target_add_external_dependencies(tint_lang_core_constant_test test
   "gtest"
 )
diff --git a/src/tint/lang/core/intrinsic/BUILD.cmake b/src/tint/lang/core/intrinsic/BUILD.cmake
index f7507de..faa135a 100644
--- a/src/tint/lang/core/intrinsic/BUILD.cmake
+++ b/src/tint/lang/core/intrinsic/BUILD.cmake
@@ -23,9 +23,10 @@
 include(lang/core/intrinsic/data/BUILD.cmake)
 
 ################################################################################
-# CMake target: 'tint_lang_core_intrinsic'
+# Target:    tint_lang_core_intrinsic
+# Kind:      lib
 ################################################################################
-tint_add_target("lang/core/intrinsic"
+tint_add_target(tint_lang_core_intrinsic lib
   lang/core/intrinsic/ctor_conv.cc
   lang/core/intrinsic/ctor_conv.h
   lang/core/intrinsic/table.cc
@@ -33,59 +34,60 @@
   lang/core/intrinsic/table_data.h
 )
 
-tint_target_add_dependencies("lang/core/intrinsic"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_core_intrinsic lib
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
 ################################################################################
-# CMake target: 'tint_lang_core_intrinsic_test'
+# Target:    tint_lang_core_intrinsic_test
+# Kind:      test
 ################################################################################
-tint_add_target("lang/core/intrinsic:test"
+tint_add_target(tint_lang_core_intrinsic_test test
   lang/core/intrinsic/table_test.cc
 )
 
-tint_target_add_dependencies("lang/core/intrinsic:test"
-  "api/common"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/intrinsic"
-  "lang/core/intrinsic/data"
-  "lang/core/type"
-  "lang/core/type:test"
-  "lang/wgsl/ast"
-  "lang/wgsl/program"
-  "lang/wgsl/resolver"
-  "lang/wgsl/resolver:test"
-  "lang/wgsl/sem"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_core_intrinsic_test test
+  tint_api_common
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_intrinsic
+  tint_lang_core_intrinsic_data
+  tint_lang_core_type
+  tint_lang_core_type_test
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_program
+  tint_lang_wgsl_resolver
+  tint_lang_wgsl_resolver_test
+  tint_lang_wgsl_sem
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
-tint_target_add_external_dependencies("lang/core/intrinsic:test"
+tint_target_add_external_dependencies(tint_lang_core_intrinsic_test test
   "gtest"
 )
diff --git a/src/tint/lang/core/intrinsic/data/BUILD.cmake b/src/tint/lang/core/intrinsic/data/BUILD.cmake
index 3cf2caa..8990ca3 100644
--- a/src/tint/lang/core/intrinsic/data/BUILD.cmake
+++ b/src/tint/lang/core/intrinsic/data/BUILD.cmake
@@ -21,28 +21,29 @@
 ################################################################################
 
 ################################################################################
-# CMake target: 'tint_lang_core_intrinsic_data'
+# Target:    tint_lang_core_intrinsic_data
+# Kind:      lib
 ################################################################################
-tint_add_target("lang/core/intrinsic/data"
+tint_add_target(tint_lang_core_intrinsic_data lib
   lang/core/intrinsic/data/data.cc
   lang/core/intrinsic/data/data.h
   lang/core/intrinsic/data/type_matchers.h
 )
 
-tint_target_add_dependencies("lang/core/intrinsic/data"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/intrinsic"
-  "lang/core/type"
-  "utils/containers"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_core_intrinsic_data lib
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_intrinsic
+  tint_lang_core_type
+  tint_utils_containers
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
diff --git a/src/tint/lang/core/ir/BUILD.cmake b/src/tint/lang/core/ir/BUILD.cmake
index 1407f98..8b5402f 100644
--- a/src/tint/lang/core/ir/BUILD.cmake
+++ b/src/tint/lang/core/ir/BUILD.cmake
@@ -24,9 +24,11 @@
 
 if(TINT_BUILD_IR)
 ################################################################################
-# CMake target: 'tint_lang_core_ir'
+# Target:    tint_lang_core_ir
+# Kind:      lib
+# Condition: TINT_BUILD_IR
 ################################################################################
-tint_add_target("lang/core/ir"
+tint_add_target(tint_lang_core_ir lib
   lang/core/ir/access.cc
   lang/core/ir/access.h
   lang/core/ir/binary.cc
@@ -126,32 +128,34 @@
   lang/core/ir/var.h
 )
 
-tint_target_add_dependencies("lang/core/ir"
-  "api/common"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_core_ir lib
+  tint_api_common
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
 endif(TINT_BUILD_IR)
 if(TINT_BUILD_IR)
 ################################################################################
-# CMake target: 'tint_lang_core_ir_test'
+# Target:    tint_lang_core_ir_test
+# Kind:      test
+# Condition: TINT_BUILD_IR
 ################################################################################
-tint_add_target("lang/core/ir:test"
+tint_add_target(tint_lang_core_ir_test test
   lang/core/ir/access_test.cc
   lang/core/ir/binary_test.cc
   lang/core/ir/bitcast_test.cc
@@ -194,33 +198,33 @@
   lang/core/ir/var_test.cc
 )
 
-tint_target_add_dependencies("lang/core/ir:test"
-  "api/common"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_core_ir_test test
+  tint_api_common
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
-tint_target_add_external_dependencies("lang/core/ir:test"
+tint_target_add_external_dependencies(tint_lang_core_ir_test test
   "gtest"
 )
 
 if (TINT_BUILD_IR)
-  tint_target_add_dependencies("lang/core/ir:test"
-    "lang/core/ir"
+  tint_target_add_dependencies(tint_lang_core_ir_test test
+    tint_lang_core_ir
   )
 endif(TINT_BUILD_IR)
 
diff --git a/src/tint/lang/core/ir/transform/BUILD.cmake b/src/tint/lang/core/ir/transform/BUILD.cmake
index 9bd5c07..01ee55d 100644
--- a/src/tint/lang/core/ir/transform/BUILD.cmake
+++ b/src/tint/lang/core/ir/transform/BUILD.cmake
@@ -22,9 +22,11 @@
 
 if(TINT_BUILD_IR)
 ################################################################################
-# CMake target: 'tint_lang_core_ir_transform'
+# Target:    tint_lang_core_ir_transform
+# Kind:      lib
+# Condition: TINT_BUILD_IR
 ################################################################################
-tint_add_target("lang/core/ir/transform"
+tint_add_target(tint_lang_core_ir_transform lib
   lang/core/ir/transform/add_empty_entry_point.cc
   lang/core/ir/transform/add_empty_entry_point.h
   lang/core/ir/transform/bgra8unorm_polyfill.cc
@@ -45,39 +47,41 @@
   lang/core/ir/transform/std140.h
 )
 
-tint_target_add_dependencies("lang/core/ir/transform"
-  "api/common"
-  "api/options"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_core_ir_transform lib
+  tint_api_common
+  tint_api_options
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
 if (TINT_BUILD_IR)
-  tint_target_add_dependencies("lang/core/ir/transform"
-    "lang/core/ir"
+  tint_target_add_dependencies(tint_lang_core_ir_transform lib
+    tint_lang_core_ir
   )
 endif(TINT_BUILD_IR)
 
 endif(TINT_BUILD_IR)
 if(TINT_BUILD_IR)
 ################################################################################
-# CMake target: 'tint_lang_core_ir_transform_test'
+# Target:    tint_lang_core_ir_transform_test
+# Kind:      test
+# Condition: TINT_BUILD_IR
 ################################################################################
-tint_add_target("lang/core/ir/transform:test"
+tint_add_target(tint_lang_core_ir_transform_test test
   lang/core/ir/transform/add_empty_entry_point_test.cc
   lang/core/ir/transform/bgra8unorm_polyfill_test.cc
   lang/core/ir/transform/binding_remapper_test.cc
@@ -89,35 +93,35 @@
   lang/core/ir/transform/std140_test.cc
 )
 
-tint_target_add_dependencies("lang/core/ir/transform:test"
-  "api/common"
-  "api/options"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_core_ir_transform_test test
+  tint_api_common
+  tint_api_options
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
-tint_target_add_external_dependencies("lang/core/ir/transform:test"
+tint_target_add_external_dependencies(tint_lang_core_ir_transform_test test
   "gtest"
 )
 
 if (TINT_BUILD_IR)
-  tint_target_add_dependencies("lang/core/ir/transform:test"
-    "lang/core/ir"
-    "lang/core/ir/transform"
+  tint_target_add_dependencies(tint_lang_core_ir_transform_test test
+    tint_lang_core_ir
+    tint_lang_core_ir_transform
   )
 endif(TINT_BUILD_IR)
 
diff --git a/src/tint/lang/core/type/BUILD.cmake b/src/tint/lang/core/type/BUILD.cmake
index 0b0caaa..fbf89d0 100644
--- a/src/tint/lang/core/type/BUILD.cmake
+++ b/src/tint/lang/core/type/BUILD.cmake
@@ -21,9 +21,10 @@
 ################################################################################
 
 ################################################################################
-# CMake target: 'tint_lang_core_type'
+# Target:    tint_lang_core_type
+# Kind:      lib
 ################################################################################
-tint_add_target("lang/core/type"
+tint_add_target(tint_lang_core_type lib
   lang/core/type/abstract_float.cc
   lang/core/type/abstract_float.h
   lang/core/type/abstract_int.cc
@@ -95,26 +96,27 @@
   lang/core/type/void.h
 )
 
-tint_target_add_dependencies("lang/core/type"
-  "lang/core"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_core_type lib
+  tint_lang_core
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
 ################################################################################
-# CMake target: 'tint_lang_core_type_test'
+# Target:    tint_lang_core_type_test
+# Kind:      test
 ################################################################################
-tint_add_target("lang/core/type:test"
+tint_add_target(tint_lang_core_type_test test
   lang/core/type/array_test.cc
   lang/core/type/atomic_test.cc
   lang/core/type/bool_test.cc
@@ -141,30 +143,30 @@
   lang/core/type/vector_test.cc
 )
 
-tint_target_add_dependencies("lang/core/type:test"
-  "api/common"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/wgsl/ast"
-  "lang/wgsl/program"
-  "lang/wgsl/resolver"
-  "lang/wgsl/sem"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_core_type_test test
+  tint_api_common
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_program
+  tint_lang_wgsl_resolver
+  tint_lang_wgsl_sem
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
-tint_target_add_external_dependencies("lang/core/type:test"
+tint_target_add_external_dependencies(tint_lang_core_type_test test
   "gtest"
 )
diff --git a/src/tint/lang/glsl/writer/BUILD.cmake b/src/tint/lang/glsl/writer/BUILD.cmake
index dbf29f8..ad259c4 100644
--- a/src/tint/lang/glsl/writer/BUILD.cmake
+++ b/src/tint/lang/glsl/writer/BUILD.cmake
@@ -25,86 +25,90 @@
 
 if(TINT_BUILD_GLSL_WRITER)
 ################################################################################
-# CMake target: 'tint_lang_glsl_writer'
+# Target:    tint_lang_glsl_writer
+# Kind:      lib
+# Condition: TINT_BUILD_GLSL_WRITER
 ################################################################################
-tint_add_target("lang/glsl/writer"
+tint_add_target(tint_lang_glsl_writer lib
   lang/glsl/writer/output.cc
   lang/glsl/writer/output.h
   lang/glsl/writer/writer.cc
   lang/glsl/writer/writer.h
 )
 
-tint_target_add_dependencies("lang/glsl/writer"
-  "api/common"
-  "api/options"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/wgsl/ast"
-  "lang/wgsl/ast/transform"
-  "lang/wgsl/program"
-  "lang/wgsl/sem"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/generator"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_glsl_writer lib
+  tint_api_common
+  tint_api_options
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_ast_transform
+  tint_lang_wgsl_program
+  tint_lang_wgsl_sem
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_generator
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
 if (TINT_BUILD_GLSL_WRITER)
-  tint_target_add_dependencies("lang/glsl/writer"
-    "lang/glsl/writer/ast_printer"
-    "lang/glsl/writer/common"
+  tint_target_add_dependencies(tint_lang_glsl_writer lib
+    tint_lang_glsl_writer_ast_printer
+    tint_lang_glsl_writer_common
   )
 endif(TINT_BUILD_GLSL_WRITER)
 
 endif(TINT_BUILD_GLSL_WRITER)
 if(TINT_BUILD_GLSL_WRITER)
 ################################################################################
-# CMake target: 'tint_lang_glsl_writer_bench'
+# Target:    tint_lang_glsl_writer_bench
+# Kind:      bench
+# Condition: TINT_BUILD_GLSL_WRITER
 ################################################################################
-tint_add_target("lang/glsl/writer:bench"
+tint_add_target(tint_lang_glsl_writer_bench bench
   lang/glsl/writer/writer_bench.cc
 )
 
-tint_target_add_dependencies("lang/glsl/writer:bench"
-  "api/common"
-  "api/options"
-  "cmd/bench"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/wgsl/ast"
-  "lang/wgsl/program"
-  "lang/wgsl/sem"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_glsl_writer_bench bench
+  tint_api_common
+  tint_api_options
+  tint_cmd_bench
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_program
+  tint_lang_wgsl_sem
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
 if (TINT_BUILD_GLSL_WRITER)
-  tint_target_add_dependencies("lang/glsl/writer:bench"
-    "lang/glsl/writer"
-    "lang/glsl/writer/common"
+  tint_target_add_dependencies(tint_lang_glsl_writer_bench bench
+    tint_lang_glsl_writer
+    tint_lang_glsl_writer_common
   )
 endif(TINT_BUILD_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 fa1ce1e..a42bb39 100644
--- a/src/tint/lang/glsl/writer/ast_printer/BUILD.cmake
+++ b/src/tint/lang/glsl/writer/ast_printer/BUILD.cmake
@@ -22,53 +22,57 @@
 
 if(TINT_BUILD_GLSL_WRITER)
 ################################################################################
-# CMake target: 'tint_lang_glsl_writer_ast_printer'
+# Target:    tint_lang_glsl_writer_ast_printer
+# Kind:      lib
+# Condition: TINT_BUILD_GLSL_WRITER
 ################################################################################
-tint_add_target("lang/glsl/writer/ast_printer"
+tint_add_target(tint_lang_glsl_writer_ast_printer lib
   lang/glsl/writer/ast_printer/ast_printer.cc
   lang/glsl/writer/ast_printer/ast_printer.h
 )
 
-tint_target_add_dependencies("lang/glsl/writer/ast_printer"
-  "api/common"
-  "api/options"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/wgsl/ast"
-  "lang/wgsl/ast/transform"
-  "lang/wgsl/helpers"
-  "lang/wgsl/program"
-  "lang/wgsl/sem"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/generator"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/strconv"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_glsl_writer_ast_printer lib
+  tint_api_common
+  tint_api_options
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_ast_transform
+  tint_lang_wgsl_helpers
+  tint_lang_wgsl_program
+  tint_lang_wgsl_sem
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_generator
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_strconv
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
 if (TINT_BUILD_GLSL_WRITER)
-  tint_target_add_dependencies("lang/glsl/writer/ast_printer"
-    "lang/glsl/writer/common"
+  tint_target_add_dependencies(tint_lang_glsl_writer_ast_printer lib
+    tint_lang_glsl_writer_common
   )
 endif(TINT_BUILD_GLSL_WRITER)
 
 endif(TINT_BUILD_GLSL_WRITER)
 if(TINT_BUILD_GLSL_WRITER)
 ################################################################################
-# CMake target: 'tint_lang_glsl_writer_ast_printer_test'
+# Target:    tint_lang_glsl_writer_ast_printer_test
+# Kind:      test
+# Condition: TINT_BUILD_GLSL_WRITER
 ################################################################################
-tint_add_target("lang/glsl/writer/ast_printer:test"
+tint_add_target(tint_lang_glsl_writer_ast_printer_test test
   lang/glsl/writer/ast_printer/array_accessor_test.cc
   lang/glsl/writer/ast_printer/assign_test.cc
   lang/glsl/writer/ast_printer/ast_printer_test.cc
@@ -103,43 +107,43 @@
   lang/glsl/writer/ast_printer/workgroup_var_test.cc
 )
 
-tint_target_add_dependencies("lang/glsl/writer/ast_printer:test"
-  "api/common"
-  "api/options"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/wgsl/ast"
-  "lang/wgsl/ast/transform"
-  "lang/wgsl/ast:test"
-  "lang/wgsl/program"
-  "lang/wgsl/resolver"
-  "lang/wgsl/sem"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/generator"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_glsl_writer_ast_printer_test test
+  tint_api_common
+  tint_api_options
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_ast_transform
+  tint_lang_wgsl_ast_test
+  tint_lang_wgsl_program
+  tint_lang_wgsl_resolver
+  tint_lang_wgsl_sem
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_generator
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
-tint_target_add_external_dependencies("lang/glsl/writer/ast_printer:test"
+tint_target_add_external_dependencies(tint_lang_glsl_writer_ast_printer_test test
   "gtest"
 )
 
 if (TINT_BUILD_GLSL_WRITER)
-  tint_target_add_dependencies("lang/glsl/writer/ast_printer:test"
-    "lang/glsl/writer"
-    "lang/glsl/writer/ast_printer"
-    "lang/glsl/writer/common"
+  tint_target_add_dependencies(tint_lang_glsl_writer_ast_printer_test test
+    tint_lang_glsl_writer
+    tint_lang_glsl_writer_ast_printer
+    tint_lang_glsl_writer_common
   )
 endif(TINT_BUILD_GLSL_WRITER)
 
diff --git a/src/tint/lang/glsl/writer/common/BUILD.cmake b/src/tint/lang/glsl/writer/common/BUILD.cmake
index 3586c39..a08de21 100644
--- a/src/tint/lang/glsl/writer/common/BUILD.cmake
+++ b/src/tint/lang/glsl/writer/common/BUILD.cmake
@@ -22,24 +22,26 @@
 
 if(TINT_BUILD_GLSL_WRITER)
 ################################################################################
-# CMake target: 'tint_lang_glsl_writer_common'
+# Target:    tint_lang_glsl_writer_common
+# Kind:      lib
+# Condition: TINT_BUILD_GLSL_WRITER
 ################################################################################
-tint_add_target("lang/glsl/writer/common"
+tint_add_target(tint_lang_glsl_writer_common lib
   lang/glsl/writer/common/options.cc
   lang/glsl/writer/common/options.h
   lang/glsl/writer/common/version.h
 )
 
-tint_target_add_dependencies("lang/glsl/writer/common"
-  "api/common"
-  "api/options"
-  "lang/core"
-  "lang/wgsl/sem"
-  "utils/macros"
-  "utils/math"
-  "utils/reflection"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_glsl_writer_common lib
+  tint_api_common
+  tint_api_options
+  tint_lang_core
+  tint_lang_wgsl_sem
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_reflection
+  tint_utils_text
+  tint_utils_traits
 )
 
 endif(TINT_BUILD_GLSL_WRITER)
\ No newline at end of file
diff --git a/src/tint/lang/hlsl/validate/BUILD.cmake b/src/tint/lang/hlsl/validate/BUILD.cmake
index 7f1b072..b4fd065 100644
--- a/src/tint/lang/hlsl/validate/BUILD.cmake
+++ b/src/tint/lang/hlsl/validate/BUILD.cmake
@@ -22,25 +22,27 @@
 
 if(TINT_BUILD_HLSL_WRITER)
 ################################################################################
-# CMake target: 'tint_lang_hlsl_validate'
+# Target:    tint_lang_hlsl_validate
+# Kind:      lib
+# Condition: TINT_BUILD_HLSL_WRITER
 ################################################################################
-tint_add_target("lang/hlsl/validate"
+tint_add_target(tint_lang_hlsl_validate lib
   lang/hlsl/validate/hlsl.cc
   lang/hlsl/validate/val.h
 )
 
-tint_target_add_dependencies("lang/hlsl/validate"
-  "lang/wgsl/ast"
-  "utils/command"
-  "utils/containers"
-  "utils/file"
-  "utils/ice"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/rtti"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_hlsl_validate lib
+  tint_lang_wgsl_ast
+  tint_utils_command
+  tint_utils_containers
+  tint_utils_file
+  tint_utils_ice
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_rtti
+  tint_utils_text
+  tint_utils_traits
 )
 
 endif(TINT_BUILD_HLSL_WRITER)
\ No newline at end of file
diff --git a/src/tint/lang/hlsl/writer/BUILD.cmake b/src/tint/lang/hlsl/writer/BUILD.cmake
index 9069984..84d1744 100644
--- a/src/tint/lang/hlsl/writer/BUILD.cmake
+++ b/src/tint/lang/hlsl/writer/BUILD.cmake
@@ -25,86 +25,90 @@
 
 if(TINT_BUILD_HLSL_WRITER)
 ################################################################################
-# CMake target: 'tint_lang_hlsl_writer'
+# Target:    tint_lang_hlsl_writer
+# Kind:      lib
+# Condition: TINT_BUILD_HLSL_WRITER
 ################################################################################
-tint_add_target("lang/hlsl/writer"
+tint_add_target(tint_lang_hlsl_writer lib
   lang/hlsl/writer/output.cc
   lang/hlsl/writer/output.h
   lang/hlsl/writer/writer.cc
   lang/hlsl/writer/writer.h
 )
 
-tint_target_add_dependencies("lang/hlsl/writer"
-  "api/common"
-  "api/options"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/hlsl/writer/common"
-  "lang/wgsl/ast"
-  "lang/wgsl/ast/transform"
-  "lang/wgsl/program"
-  "lang/wgsl/sem"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/generator"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_hlsl_writer lib
+  tint_api_common
+  tint_api_options
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_hlsl_writer_common
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_ast_transform
+  tint_lang_wgsl_program
+  tint_lang_wgsl_sem
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_generator
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
 if (TINT_BUILD_HLSL_WRITER)
-  tint_target_add_dependencies("lang/hlsl/writer"
-    "lang/hlsl/writer/ast_printer"
+  tint_target_add_dependencies(tint_lang_hlsl_writer lib
+    tint_lang_hlsl_writer_ast_printer
   )
 endif(TINT_BUILD_HLSL_WRITER)
 
 endif(TINT_BUILD_HLSL_WRITER)
 if(TINT_BUILD_HLSL_WRITER)
 ################################################################################
-# CMake target: 'tint_lang_hlsl_writer_bench'
+# Target:    tint_lang_hlsl_writer_bench
+# Kind:      bench
+# Condition: TINT_BUILD_HLSL_WRITER
 ################################################################################
-tint_add_target("lang/hlsl/writer:bench"
+tint_add_target(tint_lang_hlsl_writer_bench bench
   lang/hlsl/writer/writer_bench.cc
 )
 
-tint_target_add_dependencies("lang/hlsl/writer:bench"
-  "api/common"
-  "api/options"
-  "cmd/bench"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/hlsl/writer/common"
-  "lang/wgsl/ast"
-  "lang/wgsl/program"
-  "lang/wgsl/sem"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_hlsl_writer_bench bench
+  tint_api_common
+  tint_api_options
+  tint_cmd_bench
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_hlsl_writer_common
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_program
+  tint_lang_wgsl_sem
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
 if (TINT_BUILD_HLSL_WRITER)
-  tint_target_add_dependencies("lang/hlsl/writer:bench"
-    "lang/hlsl/writer"
+  tint_target_add_dependencies(tint_lang_hlsl_writer_bench bench
+    tint_lang_hlsl_writer
   )
 endif(TINT_BUILD_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 13ce507..1033bc4 100644
--- a/src/tint/lang/hlsl/writer/ast_printer/BUILD.cmake
+++ b/src/tint/lang/hlsl/writer/ast_printer/BUILD.cmake
@@ -22,48 +22,52 @@
 
 if(TINT_BUILD_HLSL_WRITER)
 ################################################################################
-# CMake target: 'tint_lang_hlsl_writer_ast_printer'
+# Target:    tint_lang_hlsl_writer_ast_printer
+# Kind:      lib
+# Condition: TINT_BUILD_HLSL_WRITER
 ################################################################################
-tint_add_target("lang/hlsl/writer/ast_printer"
+tint_add_target(tint_lang_hlsl_writer_ast_printer lib
   lang/hlsl/writer/ast_printer/ast_printer.cc
   lang/hlsl/writer/ast_printer/ast_printer.h
 )
 
-tint_target_add_dependencies("lang/hlsl/writer/ast_printer"
-  "api/common"
-  "api/options"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/hlsl/writer/common"
-  "lang/wgsl/ast"
-  "lang/wgsl/ast/transform"
-  "lang/wgsl/helpers"
-  "lang/wgsl/program"
-  "lang/wgsl/sem"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/generator"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/strconv"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_hlsl_writer_ast_printer lib
+  tint_api_common
+  tint_api_options
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_hlsl_writer_common
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_ast_transform
+  tint_lang_wgsl_helpers
+  tint_lang_wgsl_program
+  tint_lang_wgsl_sem
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_generator
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_strconv
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
 endif(TINT_BUILD_HLSL_WRITER)
 if(TINT_BUILD_HLSL_WRITER)
 ################################################################################
-# CMake target: 'tint_lang_hlsl_writer_ast_printer_test'
+# Target:    tint_lang_hlsl_writer_ast_printer_test
+# Kind:      test
+# Condition: TINT_BUILD_HLSL_WRITER
 ################################################################################
-tint_add_target("lang/hlsl/writer/ast_printer:test"
+tint_add_target(tint_lang_hlsl_writer_ast_printer_test test
   lang/hlsl/writer/ast_printer/array_accessor_test.cc
   lang/hlsl/writer/ast_printer/assign_test.cc
   lang/hlsl/writer/ast_printer/ast_printer_test.cc
@@ -97,43 +101,43 @@
   lang/hlsl/writer/ast_printer/workgroup_var_test.cc
 )
 
-tint_target_add_dependencies("lang/hlsl/writer/ast_printer:test"
-  "api/common"
-  "api/options"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/hlsl/writer/common"
-  "lang/wgsl/ast"
-  "lang/wgsl/ast/transform"
-  "lang/wgsl/ast:test"
-  "lang/wgsl/program"
-  "lang/wgsl/resolver"
-  "lang/wgsl/sem"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/generator"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_hlsl_writer_ast_printer_test test
+  tint_api_common
+  tint_api_options
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_hlsl_writer_common
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_ast_transform
+  tint_lang_wgsl_ast_test
+  tint_lang_wgsl_program
+  tint_lang_wgsl_resolver
+  tint_lang_wgsl_sem
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_generator
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
-tint_target_add_external_dependencies("lang/hlsl/writer/ast_printer:test"
+tint_target_add_external_dependencies(tint_lang_hlsl_writer_ast_printer_test test
   "gtest"
 )
 
 if (TINT_BUILD_HLSL_WRITER)
-  tint_target_add_dependencies("lang/hlsl/writer/ast_printer:test"
-    "lang/hlsl/writer"
-    "lang/hlsl/writer/ast_printer"
+  tint_target_add_dependencies(tint_lang_hlsl_writer_ast_printer_test test
+    tint_lang_hlsl_writer
+    tint_lang_hlsl_writer_ast_printer
   )
 endif(TINT_BUILD_HLSL_WRITER)
 
diff --git a/src/tint/lang/hlsl/writer/common/BUILD.cmake b/src/tint/lang/hlsl/writer/common/BUILD.cmake
index 62d47a2..5304c77 100644
--- a/src/tint/lang/hlsl/writer/common/BUILD.cmake
+++ b/src/tint/lang/hlsl/writer/common/BUILD.cmake
@@ -21,20 +21,21 @@
 ################################################################################
 
 ################################################################################
-# CMake target: 'tint_lang_hlsl_writer_common'
+# Target:    tint_lang_hlsl_writer_common
+# Kind:      lib
 ################################################################################
-tint_add_target("lang/hlsl/writer/common"
+tint_add_target(tint_lang_hlsl_writer_common lib
   lang/hlsl/writer/common/options.cc
   lang/hlsl/writer/common/options.h
 )
 
-tint_target_add_dependencies("lang/hlsl/writer/common"
-  "api/common"
-  "api/options"
-  "lang/core"
-  "utils/macros"
-  "utils/math"
-  "utils/reflection"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_hlsl_writer_common lib
+  tint_api_common
+  tint_api_options
+  tint_lang_core
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_reflection
+  tint_utils_text
+  tint_utils_traits
 )
diff --git a/src/tint/lang/msl/validate/BUILD.cmake b/src/tint/lang/msl/validate/BUILD.cmake
index 12ccb8e..29924ff 100644
--- a/src/tint/lang/msl/validate/BUILD.cmake
+++ b/src/tint/lang/msl/validate/BUILD.cmake
@@ -22,34 +22,36 @@
 
 if(TINT_BUILD_MSL_WRITER)
 ################################################################################
-# CMake target: 'tint_lang_msl_validate'
+# Target:    tint_lang_msl_validate
+# Kind:      lib
+# Condition: TINT_BUILD_MSL_WRITER
 ################################################################################
-tint_add_target("lang/msl/validate"
+tint_add_target(tint_lang_msl_validate lib
   lang/msl/validate/msl.cc
   lang/msl/validate/val.h
 )
 
-tint_target_add_dependencies("lang/msl/validate"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/wgsl/ast"
-  "lang/wgsl/program"
-  "lang/wgsl/sem"
-  "utils/command"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/file"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_msl_validate lib
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_program
+  tint_lang_wgsl_sem
+  tint_utils_command
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_file
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
 endif(TINT_BUILD_MSL_WRITER)
\ No newline at end of file
diff --git a/src/tint/lang/msl/writer/BUILD.cmake b/src/tint/lang/msl/writer/BUILD.cmake
index 41587a0..bba6007 100644
--- a/src/tint/lang/msl/writer/BUILD.cmake
+++ b/src/tint/lang/msl/writer/BUILD.cmake
@@ -27,99 +27,103 @@
 
 if(TINT_BUILD_MSL_WRITER)
 ################################################################################
-# CMake target: 'tint_lang_msl_writer'
+# Target:    tint_lang_msl_writer
+# Kind:      lib
+# Condition: TINT_BUILD_MSL_WRITER
 ################################################################################
-tint_add_target("lang/msl/writer"
+tint_add_target(tint_lang_msl_writer lib
   lang/msl/writer/output.cc
   lang/msl/writer/output.h
   lang/msl/writer/writer.cc
   lang/msl/writer/writer.h
 )
 
-tint_target_add_dependencies("lang/msl/writer"
-  "api/common"
-  "api/options"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/msl/writer/raise"
-  "lang/wgsl/ast"
-  "lang/wgsl/program"
-  "lang/wgsl/sem"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/generator"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_msl_writer lib
+  tint_api_common
+  tint_api_options
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_msl_writer_raise
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_program
+  tint_lang_wgsl_sem
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_generator
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
 if (TINT_BUILD_IR)
-  tint_target_add_dependencies("lang/msl/writer"
-    "lang/core/ir"
-    "lang/wgsl/reader/program_to_ir"
+  tint_target_add_dependencies(tint_lang_msl_writer lib
+    tint_lang_core_ir
+    tint_lang_wgsl_reader_program_to_ir
   )
 endif(TINT_BUILD_IR)
 
 if (TINT_BUILD_MSL_WRITER)
-  tint_target_add_dependencies("lang/msl/writer"
-    "lang/msl/writer/ast_printer"
-    "lang/msl/writer/common"
+  tint_target_add_dependencies(tint_lang_msl_writer lib
+    tint_lang_msl_writer_ast_printer
+    tint_lang_msl_writer_common
   )
 endif(TINT_BUILD_MSL_WRITER)
 
 if (TINT_BUILD_MSL_WRITER  AND  TINT_BUILD_IR)
-  tint_target_add_dependencies("lang/msl/writer"
-    "lang/msl/writer/printer"
+  tint_target_add_dependencies(tint_lang_msl_writer lib
+    tint_lang_msl_writer_printer
   )
 endif(TINT_BUILD_MSL_WRITER  AND  TINT_BUILD_IR)
 
 endif(TINT_BUILD_MSL_WRITER)
 if(TINT_BUILD_MSL_WRITER)
 ################################################################################
-# CMake target: 'tint_lang_msl_writer_bench'
+# Target:    tint_lang_msl_writer_bench
+# Kind:      bench
+# Condition: TINT_BUILD_MSL_WRITER
 ################################################################################
-tint_add_target("lang/msl/writer:bench"
+tint_add_target(tint_lang_msl_writer_bench bench
   lang/msl/writer/writer_bench.cc
 )
 
-tint_target_add_dependencies("lang/msl/writer:bench"
-  "api/common"
-  "api/options"
-  "cmd/bench"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/wgsl/ast"
-  "lang/wgsl/program"
-  "lang/wgsl/sem"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_msl_writer_bench bench
+  tint_api_common
+  tint_api_options
+  tint_cmd_bench
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_program
+  tint_lang_wgsl_sem
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
 if (TINT_BUILD_MSL_WRITER)
-  tint_target_add_dependencies("lang/msl/writer:bench"
-    "lang/msl/writer"
-    "lang/msl/writer/common"
+  tint_target_add_dependencies(tint_lang_msl_writer_bench bench
+    tint_lang_msl_writer
+    tint_lang_msl_writer_common
   )
 endif(TINT_BUILD_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 7817967..0f8fc43 100644
--- a/src/tint/lang/msl/writer/ast_printer/BUILD.cmake
+++ b/src/tint/lang/msl/writer/ast_printer/BUILD.cmake
@@ -22,52 +22,56 @@
 
 if(TINT_BUILD_MSL_WRITER)
 ################################################################################
-# CMake target: 'tint_lang_msl_writer_ast_printer'
+# Target:    tint_lang_msl_writer_ast_printer
+# Kind:      lib
+# Condition: TINT_BUILD_MSL_WRITER
 ################################################################################
-tint_add_target("lang/msl/writer/ast_printer"
+tint_add_target(tint_lang_msl_writer_ast_printer lib
   lang/msl/writer/ast_printer/ast_printer.cc
   lang/msl/writer/ast_printer/ast_printer.h
 )
 
-tint_target_add_dependencies("lang/msl/writer/ast_printer"
-  "api/common"
-  "api/options"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/wgsl/ast"
-  "lang/wgsl/ast/transform"
-  "lang/wgsl/helpers"
-  "lang/wgsl/program"
-  "lang/wgsl/sem"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/generator"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_msl_writer_ast_printer lib
+  tint_api_common
+  tint_api_options
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_ast_transform
+  tint_lang_wgsl_helpers
+  tint_lang_wgsl_program
+  tint_lang_wgsl_sem
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_generator
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
 if (TINT_BUILD_MSL_WRITER)
-  tint_target_add_dependencies("lang/msl/writer/ast_printer"
-    "lang/msl/writer/common"
+  tint_target_add_dependencies(tint_lang_msl_writer_ast_printer lib
+    tint_lang_msl_writer_common
   )
 endif(TINT_BUILD_MSL_WRITER)
 
 endif(TINT_BUILD_MSL_WRITER)
 if(TINT_BUILD_MSL_WRITER)
 ################################################################################
-# CMake target: 'tint_lang_msl_writer_ast_printer_test'
+# Target:    tint_lang_msl_writer_ast_printer_test
+# Kind:      test
+# Condition: TINT_BUILD_MSL_WRITER
 ################################################################################
-tint_add_target("lang/msl/writer/ast_printer:test"
+tint_add_target(tint_lang_msl_writer_ast_printer_test test
   lang/msl/writer/ast_printer/array_accessor_test.cc
   lang/msl/writer/ast_printer/assign_test.cc
   lang/msl/writer/ast_printer/ast_function_test.cc
@@ -100,42 +104,42 @@
   lang/msl/writer/ast_printer/variable_decl_statement_test.cc
 )
 
-tint_target_add_dependencies("lang/msl/writer/ast_printer:test"
-  "api/common"
-  "api/options"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/wgsl/ast"
-  "lang/wgsl/ast:test"
-  "lang/wgsl/program"
-  "lang/wgsl/resolver"
-  "lang/wgsl/sem"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/generator"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_msl_writer_ast_printer_test test
+  tint_api_common
+  tint_api_options
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_ast_test
+  tint_lang_wgsl_program
+  tint_lang_wgsl_resolver
+  tint_lang_wgsl_sem
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_generator
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
-tint_target_add_external_dependencies("lang/msl/writer/ast_printer:test"
+tint_target_add_external_dependencies(tint_lang_msl_writer_ast_printer_test test
   "gtest"
 )
 
 if (TINT_BUILD_MSL_WRITER)
-  tint_target_add_dependencies("lang/msl/writer/ast_printer:test"
-    "lang/msl/writer"
-    "lang/msl/writer/ast_printer"
-    "lang/msl/writer/common"
+  tint_target_add_dependencies(tint_lang_msl_writer_ast_printer_test test
+    tint_lang_msl_writer
+    tint_lang_msl_writer_ast_printer
+    tint_lang_msl_writer_common
   )
 endif(TINT_BUILD_MSL_WRITER)
 
diff --git a/src/tint/lang/msl/writer/common/BUILD.cmake b/src/tint/lang/msl/writer/common/BUILD.cmake
index 0135d93..6aa766e 100644
--- a/src/tint/lang/msl/writer/common/BUILD.cmake
+++ b/src/tint/lang/msl/writer/common/BUILD.cmake
@@ -22,63 +22,67 @@
 
 if(TINT_BUILD_MSL_WRITER)
 ################################################################################
-# CMake target: 'tint_lang_msl_writer_common'
+# Target:    tint_lang_msl_writer_common
+# Kind:      lib
+# Condition: TINT_BUILD_MSL_WRITER
 ################################################################################
-tint_add_target("lang/msl/writer/common"
+tint_add_target(tint_lang_msl_writer_common lib
   lang/msl/writer/common/options.cc
   lang/msl/writer/common/options.h
   lang/msl/writer/common/printer_support.cc
   lang/msl/writer/common/printer_support.h
 )
 
-tint_target_add_dependencies("lang/msl/writer/common"
-  "api/common"
-  "api/options"
-  "lang/core"
-  "lang/core/type"
-  "utils/containers"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/rtti"
-  "utils/strconv"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_msl_writer_common lib
+  tint_api_common
+  tint_api_options
+  tint_lang_core
+  tint_lang_core_type
+  tint_utils_containers
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_rtti
+  tint_utils_strconv
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
 endif(TINT_BUILD_MSL_WRITER)
 if(TINT_BUILD_MSL_WRITER)
 ################################################################################
-# CMake target: 'tint_lang_msl_writer_common_test'
+# Target:    tint_lang_msl_writer_common_test
+# Kind:      test
+# Condition: TINT_BUILD_MSL_WRITER
 ################################################################################
-tint_add_target("lang/msl/writer/common:test"
+tint_add_target(tint_lang_msl_writer_common_test test
   lang/msl/writer/common/printer_support_test.cc
 )
 
-tint_target_add_dependencies("lang/msl/writer/common:test"
-  "lang/core"
-  "lang/core/type"
-  "utils/containers"
-  "utils/ice"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/rtti"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_msl_writer_common_test test
+  tint_lang_core
+  tint_lang_core_type
+  tint_utils_containers
+  tint_utils_ice
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_rtti
+  tint_utils_text
+  tint_utils_traits
 )
 
-tint_target_add_external_dependencies("lang/msl/writer/common:test"
+tint_target_add_external_dependencies(tint_lang_msl_writer_common_test test
   "gtest"
 )
 
 if (TINT_BUILD_MSL_WRITER)
-  tint_target_add_dependencies("lang/msl/writer/common:test"
-    "lang/msl/writer/common"
+  tint_target_add_dependencies(tint_lang_msl_writer_common_test test
+    tint_lang_msl_writer_common
   )
 endif(TINT_BUILD_MSL_WRITER)
 
diff --git a/src/tint/lang/msl/writer/printer/BUILD.cmake b/src/tint/lang/msl/writer/printer/BUILD.cmake
index 7a0abd1..6b53c2f 100644
--- a/src/tint/lang/msl/writer/printer/BUILD.cmake
+++ b/src/tint/lang/msl/writer/printer/BUILD.cmake
@@ -22,52 +22,56 @@
 
 if(TINT_BUILD_MSL_WRITER  AND  TINT_BUILD_IR)
 ################################################################################
-# CMake target: 'tint_lang_msl_writer_printer'
+# Target:    tint_lang_msl_writer_printer
+# Kind:      lib
+# Condition: TINT_BUILD_MSL_WRITER  AND  TINT_BUILD_IR
 ################################################################################
-tint_add_target("lang/msl/writer/printer"
+tint_add_target(tint_lang_msl_writer_printer lib
   lang/msl/writer/printer/printer.cc
   lang/msl/writer/printer/printer.h
 )
 
-tint_target_add_dependencies("lang/msl/writer/printer"
-  "api/common"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/generator"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_msl_writer_printer lib
+  tint_api_common
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_generator
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
 if (TINT_BUILD_IR)
-  tint_target_add_dependencies("lang/msl/writer/printer"
-    "lang/core/ir"
+  tint_target_add_dependencies(tint_lang_msl_writer_printer lib
+    tint_lang_core_ir
   )
 endif(TINT_BUILD_IR)
 
 if (TINT_BUILD_MSL_WRITER)
-  tint_target_add_dependencies("lang/msl/writer/printer"
-    "lang/msl/writer/common"
+  tint_target_add_dependencies(tint_lang_msl_writer_printer lib
+    tint_lang_msl_writer_common
   )
 endif(TINT_BUILD_MSL_WRITER)
 
 endif(TINT_BUILD_MSL_WRITER  AND  TINT_BUILD_IR)
 if(TINT_BUILD_MSL_WRITER  AND  TINT_BUILD_IR)
 ################################################################################
-# CMake target: 'tint_lang_msl_writer_printer_test'
+# Target:    tint_lang_msl_writer_printer_test
+# Kind:      test
+# Condition: TINT_BUILD_MSL_WRITER  AND  TINT_BUILD_IR
 ################################################################################
-tint_add_target("lang/msl/writer/printer:test"
+tint_add_target(tint_lang_msl_writer_printer_test test
   lang/msl/writer/printer/binary_test.cc
   lang/msl/writer/printer/constant_test.cc
   lang/msl/writer/printer/function_test.cc
@@ -79,41 +83,41 @@
   lang/msl/writer/printer/var_test.cc
 )
 
-tint_target_add_dependencies("lang/msl/writer/printer:test"
-  "api/common"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/msl/writer/raise"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/generator"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_msl_writer_printer_test test
+  tint_api_common
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_msl_writer_raise
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_generator
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
-tint_target_add_external_dependencies("lang/msl/writer/printer:test"
+tint_target_add_external_dependencies(tint_lang_msl_writer_printer_test test
   "gtest"
 )
 
 if (TINT_BUILD_IR)
-  tint_target_add_dependencies("lang/msl/writer/printer:test"
-    "lang/core/ir"
+  tint_target_add_dependencies(tint_lang_msl_writer_printer_test test
+    tint_lang_core_ir
   )
 endif(TINT_BUILD_IR)
 
 if (TINT_BUILD_MSL_WRITER  AND  TINT_BUILD_IR)
-  tint_target_add_dependencies("lang/msl/writer/printer:test"
-    "lang/msl/writer/printer"
+  tint_target_add_dependencies(tint_lang_msl_writer_printer_test test
+    tint_lang_msl_writer_printer
   )
 endif(TINT_BUILD_MSL_WRITER  AND  TINT_BUILD_IR)
 
diff --git a/src/tint/lang/msl/writer/raise/BUILD.cmake b/src/tint/lang/msl/writer/raise/BUILD.cmake
index 6cf99f7..080c14e 100644
--- a/src/tint/lang/msl/writer/raise/BUILD.cmake
+++ b/src/tint/lang/msl/writer/raise/BUILD.cmake
@@ -21,17 +21,18 @@
 ################################################################################
 
 ################################################################################
-# CMake target: 'tint_lang_msl_writer_raise'
+# Target:    tint_lang_msl_writer_raise
+# Kind:      lib
 ################################################################################
-tint_add_target("lang/msl/writer/raise"
+tint_add_target(tint_lang_msl_writer_raise lib
   lang/msl/writer/raise/raise.cc
   lang/msl/writer/raise/raise.h
 )
 
-tint_target_add_dependencies("lang/msl/writer/raise"
-  "utils/ice"
-  "utils/macros"
-  "utils/result"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_msl_writer_raise lib
+  tint_utils_ice
+  tint_utils_macros
+  tint_utils_result
+  tint_utils_text
+  tint_utils_traits
 )
diff --git a/src/tint/lang/spirv/reader/BUILD.cmake b/src/tint/lang/spirv/reader/BUILD.cmake
index c4afbe3..f54eb77 100644
--- a/src/tint/lang/spirv/reader/BUILD.cmake
+++ b/src/tint/lang/spirv/reader/BUILD.cmake
@@ -25,38 +25,40 @@
 
 if(TINT_BUILD_SPV_READER)
 ################################################################################
-# CMake target: 'tint_lang_spirv_reader'
+# Target:    tint_lang_spirv_reader
+# Kind:      lib
+# Condition: TINT_BUILD_SPV_READER
 ################################################################################
-tint_add_target("lang/spirv/reader"
+tint_add_target(tint_lang_spirv_reader lib
   lang/spirv/reader/reader.cc
   lang/spirv/reader/reader.h
 )
 
-tint_target_add_dependencies("lang/spirv/reader"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/spirv/reader/common"
-  "lang/wgsl/ast"
-  "lang/wgsl/program"
-  "lang/wgsl/sem"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_spirv_reader lib
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_spirv_reader_common
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_program
+  tint_lang_wgsl_sem
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
 if (TINT_BUILD_SPV_READER)
-  tint_target_add_dependencies("lang/spirv/reader"
-    "lang/spirv/reader/ast_parser"
+  tint_target_add_dependencies(tint_lang_spirv_reader lib
+    tint_lang_spirv_reader_ast_parser
   )
 endif(TINT_BUILD_SPV_READER)
 
diff --git a/src/tint/lang/spirv/reader/ast_parser/BUILD.cmake b/src/tint/lang/spirv/reader/ast_parser/BUILD.cmake
index 3c38d41..7047e93 100644
--- a/src/tint/lang/spirv/reader/ast_parser/BUILD.cmake
+++ b/src/tint/lang/spirv/reader/ast_parser/BUILD.cmake
@@ -22,9 +22,11 @@
 
 if(TINT_BUILD_SPV_READER)
 ################################################################################
-# CMake target: 'tint_lang_spirv_reader_ast_parser'
+# Target:    tint_lang_spirv_reader_ast_parser
+# Kind:      lib
+# Condition: TINT_BUILD_SPV_READER
 ################################################################################
-tint_add_target("lang/spirv/reader/ast_parser"
+tint_add_target(tint_lang_spirv_reader_ast_parser lib
   lang/spirv/reader/ast_parser/ast_parser.cc
   lang/spirv/reader/ast_parser/ast_parser.h
   lang/spirv/reader/ast_parser/attributes.h
@@ -47,34 +49,34 @@
   lang/spirv/reader/ast_parser/usage.h
 )
 
-tint_target_add_dependencies("lang/spirv/reader/ast_parser"
-  "api/common"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/spirv/reader/common"
-  "lang/wgsl/ast"
-  "lang/wgsl/ast/transform"
-  "lang/wgsl/program"
-  "lang/wgsl/resolver"
-  "lang/wgsl/sem"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_spirv_reader_ast_parser lib
+  tint_api_common
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_spirv_reader_common
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_ast_transform
+  tint_lang_wgsl_program
+  tint_lang_wgsl_resolver
+  tint_lang_wgsl_sem
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
 if (TINT_BUILD_SPV_READER  OR  TINT_BUILD_SPV_WRITER)
-  tint_target_add_external_dependencies("lang/spirv/reader/ast_parser"
+  tint_target_add_external_dependencies(tint_lang_spirv_reader_ast_parser lib
     "spirv-headers"
     "spirv-opt-internal"
   )
@@ -83,9 +85,11 @@
 endif(TINT_BUILD_SPV_READER)
 if(TINT_BUILD_SPV_READER)
 ################################################################################
-# CMake target: 'tint_lang_spirv_reader_ast_parser_test'
+# Target:    tint_lang_spirv_reader_ast_parser_test
+# Kind:      test
+# Condition: TINT_BUILD_SPV_READER
 ################################################################################
-tint_add_target("lang/spirv/reader/ast_parser:test"
+tint_add_target(tint_lang_spirv_reader_ast_parser_test test
   lang/spirv/reader/ast_parser/ast_parser_test.cc
   lang/spirv/reader/ast_parser/barrier_test.cc
   lang/spirv/reader/ast_parser/constant_test.cc
@@ -122,44 +126,44 @@
   lang/spirv/reader/ast_parser/user_name_test.cc
 )
 
-tint_target_add_dependencies("lang/spirv/reader/ast_parser:test"
-  "api/common"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/spirv/reader/common"
-  "lang/wgsl/ast"
-  "lang/wgsl/program"
-  "lang/wgsl/sem"
-  "lang/wgsl/writer/ast_printer"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/generator"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_spirv_reader_ast_parser_test test
+  tint_api_common
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_spirv_reader_common
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_program
+  tint_lang_wgsl_sem
+  tint_lang_wgsl_writer_ast_printer
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_generator
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
-tint_target_add_external_dependencies("lang/spirv/reader/ast_parser:test"
+tint_target_add_external_dependencies(tint_lang_spirv_reader_ast_parser_test test
   "gtest"
 )
 
 if (TINT_BUILD_SPV_READER)
-  tint_target_add_dependencies("lang/spirv/reader/ast_parser:test"
-    "lang/spirv/reader/ast_parser"
+  tint_target_add_dependencies(tint_lang_spirv_reader_ast_parser_test test
+    tint_lang_spirv_reader_ast_parser
   )
 endif(TINT_BUILD_SPV_READER)
 
 if (TINT_BUILD_SPV_READER  OR  TINT_BUILD_SPV_WRITER)
-  tint_target_add_external_dependencies("lang/spirv/reader/ast_parser:test"
+  tint_target_add_external_dependencies(tint_lang_spirv_reader_ast_parser_test test
     "spirv-headers"
     "spirv-opt-internal"
     "spirv-tools"
diff --git a/src/tint/lang/spirv/reader/common/BUILD.cmake b/src/tint/lang/spirv/reader/common/BUILD.cmake
index b2ee7ce..6d8e6c0 100644
--- a/src/tint/lang/spirv/reader/common/BUILD.cmake
+++ b/src/tint/lang/spirv/reader/common/BUILD.cmake
@@ -21,9 +21,10 @@
 ################################################################################
 
 ################################################################################
-# CMake target: 'tint_lang_spirv_reader_common'
+# Target:    tint_lang_spirv_reader_common
+# Kind:      lib
 ################################################################################
-tint_add_target("lang/spirv/reader/common"
+tint_add_target(tint_lang_spirv_reader_common lib
   lang/spirv/reader/common/common.cc
   lang/spirv/reader/common/options.h
 )
diff --git a/src/tint/lang/spirv/writer/BUILD.cmake b/src/tint/lang/spirv/writer/BUILD.cmake
index e26a5c9..2c8e5d4 100644
--- a/src/tint/lang/spirv/writer/BUILD.cmake
+++ b/src/tint/lang/spirv/writer/BUILD.cmake
@@ -27,101 +27,105 @@
 
 if(TINT_BUILD_SPV_WRITER)
 ################################################################################
-# CMake target: 'tint_lang_spirv_writer'
+# Target:    tint_lang_spirv_writer
+# Kind:      lib
+# Condition: TINT_BUILD_SPV_WRITER
 ################################################################################
-tint_add_target("lang/spirv/writer"
+tint_add_target(tint_lang_spirv_writer lib
   lang/spirv/writer/output.h
   lang/spirv/writer/writer.cc
   lang/spirv/writer/writer.h
 )
 
-tint_target_add_dependencies("lang/spirv/writer"
-  "api/common"
-  "api/options"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/wgsl/ast"
-  "lang/wgsl/program"
-  "lang/wgsl/sem"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_spirv_writer lib
+  tint_api_common
+  tint_api_options
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_program
+  tint_lang_wgsl_sem
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
 if (TINT_BUILD_IR)
-  tint_target_add_dependencies("lang/spirv/writer"
-    "lang/core/ir"
-    "lang/core/ir/transform"
-    "lang/wgsl/reader/program_to_ir"
+  tint_target_add_dependencies(tint_lang_spirv_writer lib
+    tint_lang_core_ir
+    tint_lang_core_ir_transform
+    tint_lang_wgsl_reader_program_to_ir
   )
 endif(TINT_BUILD_IR)
 
 if (TINT_BUILD_SPV_READER  OR  TINT_BUILD_SPV_WRITER)
-  tint_target_add_external_dependencies("lang/spirv/writer"
+  tint_target_add_external_dependencies(tint_lang_spirv_writer lib
     "spirv-headers"
   )
 endif(TINT_BUILD_SPV_READER  OR  TINT_BUILD_SPV_WRITER)
 
 if (TINT_BUILD_SPV_WRITER)
-  tint_target_add_dependencies("lang/spirv/writer"
-    "lang/spirv/writer/ast_printer"
-    "lang/spirv/writer/common"
+  tint_target_add_dependencies(tint_lang_spirv_writer lib
+    tint_lang_spirv_writer_ast_printer
+    tint_lang_spirv_writer_common
   )
 endif(TINT_BUILD_SPV_WRITER)
 
 if (TINT_BUILD_SPV_WRITER  AND  TINT_BUILD_IR)
-  tint_target_add_dependencies("lang/spirv/writer"
-    "lang/spirv/writer/printer"
-    "lang/spirv/writer/raise"
+  tint_target_add_dependencies(tint_lang_spirv_writer lib
+    tint_lang_spirv_writer_printer
+    tint_lang_spirv_writer_raise
   )
 endif(TINT_BUILD_SPV_WRITER  AND  TINT_BUILD_IR)
 
 endif(TINT_BUILD_SPV_WRITER)
 if(TINT_BUILD_SPV_WRITER)
 ################################################################################
-# CMake target: 'tint_lang_spirv_writer_test'
+# Target:    tint_lang_spirv_writer_test
+# Kind:      test
+# Condition: TINT_BUILD_SPV_WRITER
 ################################################################################
-tint_add_target("lang/spirv/writer:test"
+tint_add_target(tint_lang_spirv_writer_test test
 )
 
-tint_target_add_dependencies("lang/spirv/writer:test"
-  "api/common"
-  "api/options"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_spirv_writer_test test
+  tint_api_common
+  tint_api_options
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
-tint_target_add_external_dependencies("lang/spirv/writer:test"
+tint_target_add_external_dependencies(tint_lang_spirv_writer_test test
   "gtest"
 )
 
 if (TINT_BUILD_IR)
-  tint_target_add_sources("lang/spirv/writer:test"
+  tint_target_add_sources(tint_lang_spirv_writer_test test
     "lang/spirv/writer/access_test.cc"
     "lang/spirv/writer/atomic_builtin_test.cc"
     "lang/spirv/writer/binary_test.cc"
@@ -143,75 +147,77 @@
     "lang/spirv/writer/var_test.cc"
     "lang/spirv/writer/writer_test.cc"
   )
-  tint_target_add_dependencies("lang/spirv/writer:test"
-    "lang/core/ir"
+  tint_target_add_dependencies(tint_lang_spirv_writer_test test
+    tint_lang_core_ir
   )
 endif(TINT_BUILD_IR)
 
 if (TINT_BUILD_SPV_READER  OR  TINT_BUILD_SPV_WRITER)
-  tint_target_add_external_dependencies("lang/spirv/writer:test"
+  tint_target_add_external_dependencies(tint_lang_spirv_writer_test test
     "spirv-headers"
     "spirv-tools"
   )
 endif(TINT_BUILD_SPV_READER  OR  TINT_BUILD_SPV_WRITER)
 
 if (TINT_BUILD_SPV_WRITER)
-  tint_target_add_dependencies("lang/spirv/writer:test"
-    "lang/spirv/writer/common"
-    "lang/spirv/writer/common:test"
+  tint_target_add_dependencies(tint_lang_spirv_writer_test test
+    tint_lang_spirv_writer_common
+    tint_lang_spirv_writer_common_test
   )
 endif(TINT_BUILD_SPV_WRITER)
 
 if (TINT_BUILD_SPV_WRITER  AND  TINT_BUILD_IR)
-  tint_target_add_dependencies("lang/spirv/writer:test"
-    "lang/spirv/writer/printer"
-    "lang/spirv/writer/raise"
+  tint_target_add_dependencies(tint_lang_spirv_writer_test test
+    tint_lang_spirv_writer_printer
+    tint_lang_spirv_writer_raise
   )
 endif(TINT_BUILD_SPV_WRITER  AND  TINT_BUILD_IR)
 
 endif(TINT_BUILD_SPV_WRITER)
 if(TINT_BUILD_SPV_WRITER)
 ################################################################################
-# CMake target: 'tint_lang_spirv_writer_bench'
+# Target:    tint_lang_spirv_writer_bench
+# Kind:      bench
+# Condition: TINT_BUILD_SPV_WRITER
 ################################################################################
-tint_add_target("lang/spirv/writer:bench"
+tint_add_target(tint_lang_spirv_writer_bench bench
 )
 
-tint_target_add_dependencies("lang/spirv/writer:bench"
-  "api/common"
-  "api/options"
-  "cmd/bench"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/wgsl/ast"
-  "lang/wgsl/program"
-  "lang/wgsl/sem"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_spirv_writer_bench bench
+  tint_api_common
+  tint_api_options
+  tint_cmd_bench
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_program
+  tint_lang_wgsl_sem
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
 if (TINT_BUILD_IR)
-  tint_target_add_sources("lang/spirv/writer:bench"
+  tint_target_add_sources(tint_lang_spirv_writer_bench bench
     "lang/spirv/writer/writer_bench.cc"
   )
 endif(TINT_BUILD_IR)
 
 if (TINT_BUILD_SPV_WRITER)
-  tint_target_add_dependencies("lang/spirv/writer:bench"
-    "lang/spirv/writer"
-    "lang/spirv/writer/common"
+  tint_target_add_dependencies(tint_lang_spirv_writer_bench bench
+    tint_lang_spirv_writer
+    tint_lang_spirv_writer_common
   )
 endif(TINT_BUILD_SPV_WRITER)
 
diff --git a/src/tint/lang/spirv/writer/ast_printer/BUILD.cmake b/src/tint/lang/spirv/writer/ast_printer/BUILD.cmake
index 24bb725..b14b0d6 100644
--- a/src/tint/lang/spirv/writer/ast_printer/BUILD.cmake
+++ b/src/tint/lang/spirv/writer/ast_printer/BUILD.cmake
@@ -22,9 +22,11 @@
 
 if(TINT_BUILD_SPV_WRITER)
 ################################################################################
-# CMake target: 'tint_lang_spirv_writer_ast_printer'
+# Target:    tint_lang_spirv_writer_ast_printer
+# Kind:      lib
+# Condition: TINT_BUILD_SPV_WRITER
 ################################################################################
-tint_add_target("lang/spirv/writer/ast_printer"
+tint_add_target(tint_lang_spirv_writer_ast_printer lib
   lang/spirv/writer/ast_printer/ast_printer.cc
   lang/spirv/writer/ast_printer/ast_printer.h
   lang/spirv/writer/ast_printer/builder.cc
@@ -32,50 +34,52 @@
   lang/spirv/writer/ast_printer/scalar_constant.h
 )
 
-tint_target_add_dependencies("lang/spirv/writer/ast_printer"
-  "api/common"
-  "api/options"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/wgsl/ast"
-  "lang/wgsl/ast/transform"
-  "lang/wgsl/helpers"
-  "lang/wgsl/program"
-  "lang/wgsl/sem"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_spirv_writer_ast_printer lib
+  tint_api_common
+  tint_api_options
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_ast_transform
+  tint_lang_wgsl_helpers
+  tint_lang_wgsl_program
+  tint_lang_wgsl_sem
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
 if (TINT_BUILD_SPV_READER  OR  TINT_BUILD_SPV_WRITER)
-  tint_target_add_external_dependencies("lang/spirv/writer/ast_printer"
+  tint_target_add_external_dependencies(tint_lang_spirv_writer_ast_printer lib
     "spirv-headers"
   )
 endif(TINT_BUILD_SPV_READER  OR  TINT_BUILD_SPV_WRITER)
 
 if (TINT_BUILD_SPV_WRITER)
-  tint_target_add_dependencies("lang/spirv/writer/ast_printer"
-    "lang/spirv/writer/common"
+  tint_target_add_dependencies(tint_lang_spirv_writer_ast_printer lib
+    tint_lang_spirv_writer_common
   )
 endif(TINT_BUILD_SPV_WRITER)
 
 endif(TINT_BUILD_SPV_WRITER)
 if(TINT_BUILD_SPV_WRITER)
 ################################################################################
-# CMake target: 'tint_lang_spirv_writer_ast_printer_test'
+# Target:    tint_lang_spirv_writer_ast_printer_test
+# Kind:      test
+# Condition: TINT_BUILD_SPV_WRITER
 ################################################################################
-tint_add_target("lang/spirv/writer/ast_printer:test"
+tint_add_target(tint_lang_spirv_writer_ast_printer_test test
   lang/spirv/writer/ast_printer/accessor_expression_test.cc
   lang/spirv/writer/ast_printer/assign_test.cc
   lang/spirv/writer/ast_printer/ast_builtin_test.cc
@@ -106,49 +110,49 @@
   lang/spirv/writer/ast_printer/unary_op_expression_test.cc
 )
 
-tint_target_add_dependencies("lang/spirv/writer/ast_printer:test"
-  "api/common"
-  "api/options"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/wgsl/ast"
-  "lang/wgsl/ast:test"
-  "lang/wgsl/program"
-  "lang/wgsl/resolver"
-  "lang/wgsl/sem"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_spirv_writer_ast_printer_test test
+  tint_api_common
+  tint_api_options
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_ast_test
+  tint_lang_wgsl_program
+  tint_lang_wgsl_resolver
+  tint_lang_wgsl_sem
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
-tint_target_add_external_dependencies("lang/spirv/writer/ast_printer:test"
+tint_target_add_external_dependencies(tint_lang_spirv_writer_ast_printer_test test
   "gtest"
 )
 
 if (TINT_BUILD_SPV_READER  OR  TINT_BUILD_SPV_WRITER)
-  tint_target_add_external_dependencies("lang/spirv/writer/ast_printer:test"
+  tint_target_add_external_dependencies(tint_lang_spirv_writer_ast_printer_test test
     "spirv-headers"
     "spirv-tools"
   )
 endif(TINT_BUILD_SPV_READER  OR  TINT_BUILD_SPV_WRITER)
 
 if (TINT_BUILD_SPV_WRITER)
-  tint_target_add_dependencies("lang/spirv/writer/ast_printer:test"
-    "lang/spirv/writer"
-    "lang/spirv/writer/ast_printer"
-    "lang/spirv/writer/common"
-    "lang/spirv/writer/common:test"
+  tint_target_add_dependencies(tint_lang_spirv_writer_ast_printer_test test
+    tint_lang_spirv_writer
+    tint_lang_spirv_writer_ast_printer
+    tint_lang_spirv_writer_common
+    tint_lang_spirv_writer_common_test
   )
 endif(TINT_BUILD_SPV_WRITER)
 
diff --git a/src/tint/lang/spirv/writer/common/BUILD.cmake b/src/tint/lang/spirv/writer/common/BUILD.cmake
index a8a9817..e9f82aa 100644
--- a/src/tint/lang/spirv/writer/common/BUILD.cmake
+++ b/src/tint/lang/spirv/writer/common/BUILD.cmake
@@ -22,9 +22,11 @@
 
 if(TINT_BUILD_SPV_WRITER)
 ################################################################################
-# CMake target: 'tint_lang_spirv_writer_common'
+# Target:    tint_lang_spirv_writer_common
+# Kind:      lib
+# Condition: TINT_BUILD_SPV_WRITER
 ################################################################################
-tint_add_target("lang/spirv/writer/common"
+tint_add_target(tint_lang_spirv_writer_common lib
   lang/spirv/writer/common/binary_writer.cc
   lang/spirv/writer/common/binary_writer.h
   lang/spirv/writer/common/function.cc
@@ -38,19 +40,19 @@
   lang/spirv/writer/common/options.h
 )
 
-tint_target_add_dependencies("lang/spirv/writer/common"
-  "api/common"
-  "api/options"
-  "lang/core"
-  "utils/macros"
-  "utils/math"
-  "utils/reflection"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_spirv_writer_common lib
+  tint_api_common
+  tint_api_options
+  tint_lang_core
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_reflection
+  tint_utils_text
+  tint_utils_traits
 )
 
 if (TINT_BUILD_SPV_READER  OR  TINT_BUILD_SPV_WRITER)
-  tint_target_add_external_dependencies("lang/spirv/writer/common"
+  tint_target_add_external_dependencies(tint_lang_spirv_writer_common lib
     "spirv-headers"
   )
 endif(TINT_BUILD_SPV_READER  OR  TINT_BUILD_SPV_WRITER)
@@ -58,9 +60,11 @@
 endif(TINT_BUILD_SPV_WRITER)
 if(TINT_BUILD_SPV_WRITER)
 ################################################################################
-# CMake target: 'tint_lang_spirv_writer_common_test'
+# Target:    tint_lang_spirv_writer_common_test
+# Kind:      test
+# Condition: TINT_BUILD_SPV_WRITER
 ################################################################################
-tint_add_target("lang/spirv/writer/common:test"
+tint_add_target(tint_lang_spirv_writer_common_test test
   lang/spirv/writer/common/binary_writer_test.cc
   lang/spirv/writer/common/instruction_test.cc
   lang/spirv/writer/common/module_test.cc
@@ -69,57 +73,57 @@
   lang/spirv/writer/common/spv_dump_test.h
 )
 
-tint_target_add_dependencies("lang/spirv/writer/common:test"
-  "api/common"
-  "api/options"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_spirv_writer_common_test test
+  tint_api_common
+  tint_api_options
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
-tint_target_add_external_dependencies("lang/spirv/writer/common:test"
+tint_target_add_external_dependencies(tint_lang_spirv_writer_common_test test
   "gtest"
 )
 
 if (TINT_BUILD_IR)
-  tint_target_add_sources("lang/spirv/writer/common:test"
+  tint_target_add_sources(tint_lang_spirv_writer_common_test test
     "lang/spirv/writer/common/helper_test.h"
   )
-  tint_target_add_dependencies("lang/spirv/writer/common:test"
-    "lang/core/ir"
+  tint_target_add_dependencies(tint_lang_spirv_writer_common_test test
+    tint_lang_core_ir
   )
 endif(TINT_BUILD_IR)
 
 if (TINT_BUILD_SPV_READER  OR  TINT_BUILD_SPV_WRITER)
-  tint_target_add_external_dependencies("lang/spirv/writer/common:test"
+  tint_target_add_external_dependencies(tint_lang_spirv_writer_common_test test
     "spirv-headers"
     "spirv-tools"
   )
 endif(TINT_BUILD_SPV_READER  OR  TINT_BUILD_SPV_WRITER)
 
 if (TINT_BUILD_SPV_WRITER)
-  tint_target_add_dependencies("lang/spirv/writer/common:test"
-    "lang/spirv/writer/common"
+  tint_target_add_dependencies(tint_lang_spirv_writer_common_test test
+    tint_lang_spirv_writer_common
   )
 endif(TINT_BUILD_SPV_WRITER)
 
 if (TINT_BUILD_SPV_WRITER  AND  TINT_BUILD_IR)
-  tint_target_add_dependencies("lang/spirv/writer/common:test"
-    "lang/spirv/writer/printer"
-    "lang/spirv/writer/raise"
+  tint_target_add_dependencies(tint_lang_spirv_writer_common_test test
+    tint_lang_spirv_writer_printer
+    tint_lang_spirv_writer_raise
   )
 endif(TINT_BUILD_SPV_WRITER  AND  TINT_BUILD_IR)
 
diff --git a/src/tint/lang/spirv/writer/printer/BUILD.cmake b/src/tint/lang/spirv/writer/printer/BUILD.cmake
index 3fd4c77..126f52f 100644
--- a/src/tint/lang/spirv/writer/printer/BUILD.cmake
+++ b/src/tint/lang/spirv/writer/printer/BUILD.cmake
@@ -22,59 +22,61 @@
 
 if(TINT_BUILD_SPV_WRITER  AND  TINT_BUILD_IR)
 ################################################################################
-# CMake target: 'tint_lang_spirv_writer_printer'
+# Target:    tint_lang_spirv_writer_printer
+# Kind:      lib
+# Condition: TINT_BUILD_SPV_WRITER  AND  TINT_BUILD_IR
 ################################################################################
-tint_add_target("lang/spirv/writer/printer"
+tint_add_target(tint_lang_spirv_writer_printer lib
   lang/spirv/writer/printer/printer.cc
   lang/spirv/writer/printer/printer.h
 )
 
-tint_target_add_dependencies("lang/spirv/writer/printer"
-  "api/common"
-  "api/options"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/wgsl/ast"
-  "lang/wgsl/program"
-  "lang/wgsl/sem"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_spirv_writer_printer lib
+  tint_api_common
+  tint_api_options
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_program
+  tint_lang_wgsl_sem
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
 if (TINT_BUILD_IR)
-  tint_target_add_dependencies("lang/spirv/writer/printer"
-    "lang/core/ir"
+  tint_target_add_dependencies(tint_lang_spirv_writer_printer lib
+    tint_lang_core_ir
   )
 endif(TINT_BUILD_IR)
 
 if (TINT_BUILD_SPV_READER  OR  TINT_BUILD_SPV_WRITER)
-  tint_target_add_external_dependencies("lang/spirv/writer/printer"
+  tint_target_add_external_dependencies(tint_lang_spirv_writer_printer lib
     "spirv-headers"
   )
 endif(TINT_BUILD_SPV_READER  OR  TINT_BUILD_SPV_WRITER)
 
 if (TINT_BUILD_SPV_WRITER)
-  tint_target_add_dependencies("lang/spirv/writer/printer"
-    "lang/spirv/writer/ast_printer"
-    "lang/spirv/writer/common"
+  tint_target_add_dependencies(tint_lang_spirv_writer_printer lib
+    tint_lang_spirv_writer_ast_printer
+    tint_lang_spirv_writer_common
   )
 endif(TINT_BUILD_SPV_WRITER)
 
 if (TINT_BUILD_SPV_WRITER  AND  TINT_BUILD_IR)
-  tint_target_add_dependencies("lang/spirv/writer/printer"
-    "lang/spirv/writer/raise"
+  tint_target_add_dependencies(tint_lang_spirv_writer_printer lib
+    tint_lang_spirv_writer_raise
   )
 endif(TINT_BUILD_SPV_WRITER  AND  TINT_BUILD_IR)
 
diff --git a/src/tint/lang/spirv/writer/raise/BUILD.cmake b/src/tint/lang/spirv/writer/raise/BUILD.cmake
index 640a55f..c4bf2d7 100644
--- a/src/tint/lang/spirv/writer/raise/BUILD.cmake
+++ b/src/tint/lang/spirv/writer/raise/BUILD.cmake
@@ -22,9 +22,11 @@
 
 if(TINT_BUILD_SPV_WRITER  AND  TINT_BUILD_IR)
 ################################################################################
-# CMake target: 'tint_lang_spirv_writer_raise'
+# Target:    tint_lang_spirv_writer_raise
+# Kind:      lib
+# Condition: TINT_BUILD_SPV_WRITER  AND  TINT_BUILD_IR
 ################################################################################
-tint_add_target("lang/spirv/writer/raise"
+tint_add_target(tint_lang_spirv_writer_raise lib
   lang/spirv/writer/raise/builtin_polyfill.cc
   lang/spirv/writer/raise/builtin_polyfill.h
   lang/spirv/writer/raise/expand_implicit_splats.cc
@@ -41,52 +43,54 @@
   lang/spirv/writer/raise/var_for_dynamic_index.h
 )
 
-tint_target_add_dependencies("lang/spirv/writer/raise"
-  "api/common"
-  "api/options"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_spirv_writer_raise lib
+  tint_api_common
+  tint_api_options
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
 if (TINT_BUILD_IR)
-  tint_target_add_dependencies("lang/spirv/writer/raise"
-    "lang/core/ir"
-    "lang/core/ir/transform"
+  tint_target_add_dependencies(tint_lang_spirv_writer_raise lib
+    tint_lang_core_ir
+    tint_lang_core_ir_transform
   )
 endif(TINT_BUILD_IR)
 
 if (TINT_BUILD_SPV_READER  OR  TINT_BUILD_SPV_WRITER)
-  tint_target_add_external_dependencies("lang/spirv/writer/raise"
+  tint_target_add_external_dependencies(tint_lang_spirv_writer_raise lib
     "spirv-headers"
   )
 endif(TINT_BUILD_SPV_READER  OR  TINT_BUILD_SPV_WRITER)
 
 if (TINT_BUILD_SPV_WRITER)
-  tint_target_add_dependencies("lang/spirv/writer/raise"
-    "lang/spirv/writer/common"
+  tint_target_add_dependencies(tint_lang_spirv_writer_raise lib
+    tint_lang_spirv_writer_common
   )
 endif(TINT_BUILD_SPV_WRITER)
 
 endif(TINT_BUILD_SPV_WRITER  AND  TINT_BUILD_IR)
 if(TINT_BUILD_SPV_WRITER  AND  TINT_BUILD_IR)
 ################################################################################
-# CMake target: 'tint_lang_spirv_writer_raise_test'
+# Target:    tint_lang_spirv_writer_raise_test
+# Kind:      test
+# Condition: TINT_BUILD_SPV_WRITER  AND  TINT_BUILD_IR
 ################################################################################
-tint_add_target("lang/spirv/writer/raise:test"
+tint_add_target(tint_lang_spirv_writer_raise_test test
   lang/spirv/writer/raise/builtin_polyfill_test.cc
   lang/spirv/writer/raise/expand_implicit_splats_test.cc
   lang/spirv/writer/raise/handle_matrix_arithmetic_test.cc
@@ -95,40 +99,40 @@
   lang/spirv/writer/raise/var_for_dynamic_index_test.cc
 )
 
-tint_target_add_dependencies("lang/spirv/writer/raise:test"
-  "api/common"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_spirv_writer_raise_test test
+  tint_api_common
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
-tint_target_add_external_dependencies("lang/spirv/writer/raise:test"
+tint_target_add_external_dependencies(tint_lang_spirv_writer_raise_test test
   "gtest"
 )
 
 if (TINT_BUILD_IR)
-  tint_target_add_dependencies("lang/spirv/writer/raise:test"
-    "lang/core/ir"
-    "lang/core/ir/transform:test"
+  tint_target_add_dependencies(tint_lang_spirv_writer_raise_test test
+    tint_lang_core_ir
+    tint_lang_core_ir_transform_test
   )
 endif(TINT_BUILD_IR)
 
 if (TINT_BUILD_SPV_WRITER  AND  TINT_BUILD_IR)
-  tint_target_add_dependencies("lang/spirv/writer/raise:test"
-    "lang/spirv/writer/raise"
+  tint_target_add_dependencies(tint_lang_spirv_writer_raise_test test
+    tint_lang_spirv_writer_raise
   )
 endif(TINT_BUILD_SPV_WRITER  AND  TINT_BUILD_IR)
 
diff --git a/src/tint/lang/wgsl/BUILD.cmake b/src/tint/lang/wgsl/BUILD.cmake
index 321c2ff..c55570f 100644
--- a/src/tint/lang/wgsl/BUILD.cmake
+++ b/src/tint/lang/wgsl/BUILD.cmake
@@ -30,53 +30,54 @@
 include(lang/wgsl/writer/BUILD.cmake)
 
 ################################################################################
-# CMake target: 'tint_lang_wgsl_test'
+# Target:    tint_lang_wgsl_test
+# Kind:      test
 ################################################################################
-tint_add_target("lang/wgsl:test"
+tint_add_target(tint_lang_wgsl_test test
   lang/wgsl/wgsl_test.cc
 )
 
-tint_target_add_dependencies("lang/wgsl:test"
-  "api/common"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/wgsl/ast"
-  "lang/wgsl/helpers:test"
-  "lang/wgsl/program"
-  "lang/wgsl/reader"
-  "lang/wgsl/resolver"
-  "lang/wgsl/sem"
-  "lang/wgsl/writer"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_wgsl_test test
+  tint_api_common
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_helpers_test
+  tint_lang_wgsl_program
+  tint_lang_wgsl_reader
+  tint_lang_wgsl_resolver
+  tint_lang_wgsl_sem
+  tint_lang_wgsl_writer
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
-tint_target_add_external_dependencies("lang/wgsl:test"
+tint_target_add_external_dependencies(tint_lang_wgsl_test test
   "gtest"
 )
 
 if (TINT_BUILD_IR)
-  tint_target_add_dependencies("lang/wgsl:test"
-    "lang/core/ir"
-    "lang/wgsl/reader/program_to_ir"
-    "lang/wgsl/writer/ir_to_program"
+  tint_target_add_dependencies(tint_lang_wgsl_test test
+    tint_lang_core_ir
+    tint_lang_wgsl_reader_program_to_ir
+    tint_lang_wgsl_writer_ir_to_program
   )
 endif(TINT_BUILD_IR)
 
 if (TINT_BUILD_WGSL_READER  AND  TINT_BUILD_WGSL_WRITER  AND  TINT_BUILD_IR)
-  tint_target_add_sources("lang/wgsl:test"
+  tint_target_add_sources(tint_lang_wgsl_test test
     "lang/wgsl/ir_roundtrip_test.cc"
   )
 endif(TINT_BUILD_WGSL_READER  AND  TINT_BUILD_WGSL_WRITER  AND  TINT_BUILD_IR)
diff --git a/src/tint/lang/wgsl/ast/BUILD.cmake b/src/tint/lang/wgsl/ast/BUILD.cmake
index cff5e0b..f44a041 100644
--- a/src/tint/lang/wgsl/ast/BUILD.cmake
+++ b/src/tint/lang/wgsl/ast/BUILD.cmake
@@ -23,9 +23,10 @@
 include(lang/wgsl/ast/transform/BUILD.cmake)
 
 ################################################################################
-# CMake target: 'tint_lang_wgsl_ast'
+# Target:    tint_lang_wgsl_ast
+# Kind:      lib
 ################################################################################
-tint_add_target("lang/wgsl/ast"
+tint_add_target(tint_lang_wgsl_ast lib
   lang/wgsl/ast/accessor_expression.cc
   lang/wgsl/ast/accessor_expression.h
   lang/wgsl/ast/alias.cc
@@ -184,30 +185,31 @@
   lang/wgsl/ast/workgroup_attribute.h
 )
 
-tint_target_add_dependencies("lang/wgsl/ast"
-  "api/common"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_wgsl_ast lib
+  tint_api_common
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
 ################################################################################
-# CMake target: 'tint_lang_wgsl_ast_test'
+# Target:    tint_lang_wgsl_ast_test
+# Kind:      test
 ################################################################################
-tint_add_target("lang/wgsl/ast:test"
+tint_add_target(tint_lang_wgsl_ast_test test
   lang/wgsl/ast/alias_test.cc
   lang/wgsl/ast/assignment_statement_test.cc
   lang/wgsl/ast/binary_expression_test.cc
@@ -273,33 +275,33 @@
   lang/wgsl/ast/workgroup_attribute_test.cc
 )
 
-tint_target_add_dependencies("lang/wgsl/ast:test"
-  "api/common"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/wgsl/ast"
-  "lang/wgsl/ast/transform"
-  "lang/wgsl/program"
-  "lang/wgsl/reader"
-  "lang/wgsl/resolver"
-  "lang/wgsl/sem"
-  "lang/wgsl/writer"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_wgsl_ast_test test
+  tint_api_common
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_ast_transform
+  tint_lang_wgsl_program
+  tint_lang_wgsl_reader
+  tint_lang_wgsl_resolver
+  tint_lang_wgsl_sem
+  tint_lang_wgsl_writer
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
-tint_target_add_external_dependencies("lang/wgsl/ast:test"
+tint_target_add_external_dependencies(tint_lang_wgsl_ast_test test
   "gtest"
 )
diff --git a/src/tint/lang/wgsl/ast/transform/BUILD.cmake b/src/tint/lang/wgsl/ast/transform/BUILD.cmake
index 4c86603..e56ea18 100644
--- a/src/tint/lang/wgsl/ast/transform/BUILD.cmake
+++ b/src/tint/lang/wgsl/ast/transform/BUILD.cmake
@@ -21,9 +21,10 @@
 ################################################################################
 
 ################################################################################
-# CMake target: 'tint_lang_wgsl_ast_transform'
+# Target:    tint_lang_wgsl_ast_transform
+# Kind:      lib
 ################################################################################
-tint_add_target("lang/wgsl/ast/transform"
+tint_add_target(tint_lang_wgsl_ast_transform lib
   lang/wgsl/ast/transform/add_block_attribute.cc
   lang/wgsl/ast/transform/add_block_attribute.h
   lang/wgsl/ast/transform/add_empty_entry_point.cc
@@ -134,35 +135,36 @@
   lang/wgsl/ast/transform/zero_init_workgroup_memory.h
 )
 
-tint_target_add_dependencies("lang/wgsl/ast/transform"
-  "api/common"
-  "api/options"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/wgsl/ast"
-  "lang/wgsl/program"
-  "lang/wgsl/resolver"
-  "lang/wgsl/sem"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_wgsl_ast_transform lib
+  tint_api_common
+  tint_api_options
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_program
+  tint_lang_wgsl_resolver
+  tint_lang_wgsl_sem
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
 ################################################################################
-# CMake target: 'tint_lang_wgsl_ast_transform_test'
+# Target:    tint_lang_wgsl_ast_transform_test
+# Kind:      test
 ################################################################################
-tint_add_target("lang/wgsl/ast/transform:test"
+tint_add_target(tint_lang_wgsl_ast_transform_test test
   lang/wgsl/ast/transform/add_block_attribute_test.cc
   lang/wgsl/ast/transform/add_empty_entry_point_test.cc
   lang/wgsl/ast/transform/array_length_from_uniform_test.cc
@@ -222,36 +224,36 @@
   lang/wgsl/ast/transform/zero_init_workgroup_memory_test.cc
 )
 
-tint_target_add_dependencies("lang/wgsl/ast/transform:test"
-  "api/common"
-  "api/options"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/wgsl/ast"
-  "lang/wgsl/ast/transform"
-  "lang/wgsl/ast:test"
-  "lang/wgsl/program"
-  "lang/wgsl/reader"
-  "lang/wgsl/reader/parser"
-  "lang/wgsl/resolver"
-  "lang/wgsl/sem"
-  "lang/wgsl/writer"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_wgsl_ast_transform_test test
+  tint_api_common
+  tint_api_options
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_ast_transform
+  tint_lang_wgsl_ast_test
+  tint_lang_wgsl_program
+  tint_lang_wgsl_reader
+  tint_lang_wgsl_reader_parser
+  tint_lang_wgsl_resolver
+  tint_lang_wgsl_sem
+  tint_lang_wgsl_writer
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
-tint_target_add_external_dependencies("lang/wgsl/ast/transform:test"
+tint_target_add_external_dependencies(tint_lang_wgsl_ast_transform_test test
   "gtest"
 )
diff --git a/src/tint/lang/wgsl/helpers/BUILD.cmake b/src/tint/lang/wgsl/helpers/BUILD.cmake
index 9905e48..d8a6beb 100644
--- a/src/tint/lang/wgsl/helpers/BUILD.cmake
+++ b/src/tint/lang/wgsl/helpers/BUILD.cmake
@@ -21,9 +21,10 @@
 ################################################################################
 
 ################################################################################
-# CMake target: 'tint_lang_wgsl_helpers'
+# Target:    tint_lang_wgsl_helpers
+# Kind:      lib
 ################################################################################
-tint_add_target("lang/wgsl/helpers"
+tint_add_target(tint_lang_wgsl_helpers lib
   lang/wgsl/helpers/append_vector.cc
   lang/wgsl/helpers/append_vector.h
   lang/wgsl/helpers/check_supported_extensions.cc
@@ -32,76 +33,77 @@
   lang/wgsl/helpers/flatten_bindings.h
 )
 
-tint_target_add_dependencies("lang/wgsl/helpers"
-  "api/common"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/wgsl/ast"
-  "lang/wgsl/ast/transform"
-  "lang/wgsl/inspector"
-  "lang/wgsl/program"
-  "lang/wgsl/sem"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_wgsl_helpers lib
+  tint_api_common
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_ast_transform
+  tint_lang_wgsl_inspector
+  tint_lang_wgsl_program
+  tint_lang_wgsl_sem
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
 ################################################################################
-# CMake target: 'tint_lang_wgsl_helpers_test'
+# Target:    tint_lang_wgsl_helpers_test
+# Kind:      test
 ################################################################################
-tint_add_target("lang/wgsl/helpers:test"
+tint_add_target(tint_lang_wgsl_helpers_test test
   lang/wgsl/helpers/append_vector_test.cc
   lang/wgsl/helpers/check_supported_extensions_test.cc
   lang/wgsl/helpers/flatten_bindings_test.cc
   lang/wgsl/helpers/ir_program_test.h
 )
 
-tint_target_add_dependencies("lang/wgsl/helpers:test"
-  "api/common"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/intrinsic"
-  "lang/core/type"
-  "lang/wgsl/ast"
-  "lang/wgsl/ast:test"
-  "lang/wgsl/helpers"
-  "lang/wgsl/program"
-  "lang/wgsl/reader"
-  "lang/wgsl/resolver"
-  "lang/wgsl/sem"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_wgsl_helpers_test test
+  tint_api_common
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_intrinsic
+  tint_lang_core_type
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_ast_test
+  tint_lang_wgsl_helpers
+  tint_lang_wgsl_program
+  tint_lang_wgsl_reader
+  tint_lang_wgsl_resolver
+  tint_lang_wgsl_sem
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
-tint_target_add_external_dependencies("lang/wgsl/helpers:test"
+tint_target_add_external_dependencies(tint_lang_wgsl_helpers_test test
   "gtest"
 )
 
 if (TINT_BUILD_IR)
-  tint_target_add_dependencies("lang/wgsl/helpers:test"
-    "lang/core/ir"
-    "lang/wgsl/reader/program_to_ir"
+  tint_target_add_dependencies(tint_lang_wgsl_helpers_test test
+    tint_lang_core_ir
+    tint_lang_wgsl_reader_program_to_ir
   )
 endif(TINT_BUILD_IR)
diff --git a/src/tint/lang/wgsl/inspector/BUILD.cmake b/src/tint/lang/wgsl/inspector/BUILD.cmake
index b903eef..2e4ea3d 100644
--- a/src/tint/lang/wgsl/inspector/BUILD.cmake
+++ b/src/tint/lang/wgsl/inspector/BUILD.cmake
@@ -21,9 +21,10 @@
 ################################################################################
 
 ################################################################################
-# CMake target: 'tint_lang_wgsl_inspector'
+# Target:    tint_lang_wgsl_inspector
+# Kind:      lib
 ################################################################################
-tint_add_target("lang/wgsl/inspector"
+tint_add_target(tint_lang_wgsl_inspector lib
   lang/wgsl/inspector/entry_point.cc
   lang/wgsl/inspector/entry_point.h
   lang/wgsl/inspector/inspector.cc
@@ -34,33 +35,34 @@
   lang/wgsl/inspector/scalar.h
 )
 
-tint_target_add_dependencies("lang/wgsl/inspector"
-  "api/common"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/wgsl/ast"
-  "lang/wgsl/program"
-  "lang/wgsl/sem"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_wgsl_inspector lib
+  tint_api_common
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_program
+  tint_lang_wgsl_sem
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
 ################################################################################
-# CMake target: 'tint_lang_wgsl_inspector_test'
+# Target:    tint_lang_wgsl_inspector_test
+# Kind:      test
 ################################################################################
-tint_add_target("lang/wgsl/inspector:test"
+tint_add_target(tint_lang_wgsl_inspector_test test
   lang/wgsl/inspector/inspector_builder_test.cc
   lang/wgsl/inspector/inspector_builder_test.h
   lang/wgsl/inspector/inspector_runner_test.cc
@@ -68,32 +70,32 @@
   lang/wgsl/inspector/inspector_test.cc
 )
 
-tint_target_add_dependencies("lang/wgsl/inspector:test"
-  "api/common"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/wgsl/ast"
-  "lang/wgsl/inspector"
-  "lang/wgsl/program"
-  "lang/wgsl/reader"
-  "lang/wgsl/resolver"
-  "lang/wgsl/sem"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_wgsl_inspector_test test
+  tint_api_common
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_inspector
+  tint_lang_wgsl_program
+  tint_lang_wgsl_reader
+  tint_lang_wgsl_resolver
+  tint_lang_wgsl_sem
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
-tint_target_add_external_dependencies("lang/wgsl/inspector:test"
+tint_target_add_external_dependencies(tint_lang_wgsl_inspector_test test
   "gtest"
 )
diff --git a/src/tint/lang/wgsl/program/BUILD.cmake b/src/tint/lang/wgsl/program/BUILD.cmake
index 3f7e1d7..eac1123 100644
--- a/src/tint/lang/wgsl/program/BUILD.cmake
+++ b/src/tint/lang/wgsl/program/BUILD.cmake
@@ -21,9 +21,10 @@
 ################################################################################
 
 ################################################################################
-# CMake target: 'tint_lang_wgsl_program'
+# Target:    tint_lang_wgsl_program
+# Kind:      lib
 ################################################################################
-tint_add_target("lang/wgsl/program"
+tint_add_target(tint_lang_wgsl_program lib
   lang/wgsl/program/clone_context.cc
   lang/wgsl/program/clone_context.h
   lang/wgsl/program/program.cc
@@ -32,62 +33,63 @@
   lang/wgsl/program/program_builder.h
 )
 
-tint_target_add_dependencies("lang/wgsl/program"
-  "api/common"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/wgsl/ast"
-  "lang/wgsl/sem"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_wgsl_program lib
+  tint_api_common
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_sem
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
 ################################################################################
-# CMake target: 'tint_lang_wgsl_program_test'
+# Target:    tint_lang_wgsl_program_test
+# Kind:      test
 ################################################################################
-tint_add_target("lang/wgsl/program:test"
+tint_add_target(tint_lang_wgsl_program_test test
   lang/wgsl/program/clone_context_test.cc
   lang/wgsl/program/program_builder_test.cc
   lang/wgsl/program/program_test.cc
 )
 
-tint_target_add_dependencies("lang/wgsl/program:test"
-  "api/common"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/wgsl/ast"
-  "lang/wgsl/ast:test"
-  "lang/wgsl/program"
-  "lang/wgsl/resolver"
-  "lang/wgsl/sem"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_wgsl_program_test test
+  tint_api_common
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_ast_test
+  tint_lang_wgsl_program
+  tint_lang_wgsl_resolver
+  tint_lang_wgsl_sem
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
-tint_target_add_external_dependencies("lang/wgsl/program:test"
+tint_target_add_external_dependencies(tint_lang_wgsl_program_test test
   "gtest"
 )
diff --git a/src/tint/lang/wgsl/reader/BUILD.cmake b/src/tint/lang/wgsl/reader/BUILD.cmake
index 7919338..02401cf 100644
--- a/src/tint/lang/wgsl/reader/BUILD.cmake
+++ b/src/tint/lang/wgsl/reader/BUILD.cmake
@@ -24,64 +24,66 @@
 include(lang/wgsl/reader/program_to_ir/BUILD.cmake)
 
 ################################################################################
-# CMake target: 'tint_lang_wgsl_reader'
+# Target:    tint_lang_wgsl_reader
+# Kind:      lib
 ################################################################################
-tint_add_target("lang/wgsl/reader"
+tint_add_target(tint_lang_wgsl_reader lib
   lang/wgsl/reader/reader.cc
   lang/wgsl/reader/reader.h
 )
 
-tint_target_add_dependencies("lang/wgsl/reader"
-  "api/common"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/wgsl/ast"
-  "lang/wgsl/program"
-  "lang/wgsl/reader/parser"
-  "lang/wgsl/resolver"
-  "lang/wgsl/sem"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_wgsl_reader lib
+  tint_api_common
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_program
+  tint_lang_wgsl_reader_parser
+  tint_lang_wgsl_resolver
+  tint_lang_wgsl_sem
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
 ################################################################################
-# CMake target: 'tint_lang_wgsl_reader_bench'
+# Target:    tint_lang_wgsl_reader_bench
+# Kind:      bench
 ################################################################################
-tint_add_target("lang/wgsl/reader:bench"
+tint_add_target(tint_lang_wgsl_reader_bench bench
   lang/wgsl/reader/reader_bench.cc
 )
 
-tint_target_add_dependencies("lang/wgsl/reader:bench"
-  "cmd/bench"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/wgsl/ast"
-  "lang/wgsl/program"
-  "lang/wgsl/reader"
-  "lang/wgsl/sem"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_wgsl_reader_bench bench
+  tint_cmd_bench
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_program
+  tint_lang_wgsl_reader
+  tint_lang_wgsl_sem
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
diff --git a/src/tint/lang/wgsl/reader/parser/BUILD.cmake b/src/tint/lang/wgsl/reader/parser/BUILD.cmake
index ee2aef6..d201571 100644
--- a/src/tint/lang/wgsl/reader/parser/BUILD.cmake
+++ b/src/tint/lang/wgsl/reader/parser/BUILD.cmake
@@ -21,9 +21,10 @@
 ################################################################################
 
 ################################################################################
-# CMake target: 'tint_lang_wgsl_reader_parser'
+# Target:    tint_lang_wgsl_reader_parser
+# Kind:      lib
 ################################################################################
-tint_add_target("lang/wgsl/reader/parser"
+tint_add_target(tint_lang_wgsl_reader_parser lib
   lang/wgsl/reader/parser/classify_template_args.cc
   lang/wgsl/reader/parser/classify_template_args.h
   lang/wgsl/reader/parser/detail.h
@@ -35,35 +36,36 @@
   lang/wgsl/reader/parser/token.h
 )
 
-tint_target_add_dependencies("lang/wgsl/reader/parser"
-  "api/common"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/wgsl/ast"
-  "lang/wgsl/program"
-  "lang/wgsl/resolver"
-  "lang/wgsl/sem"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/strconv"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_wgsl_reader_parser lib
+  tint_api_common
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_program
+  tint_lang_wgsl_resolver
+  tint_lang_wgsl_sem
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_strconv
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
 ################################################################################
-# CMake target: 'tint_lang_wgsl_reader_parser_test'
+# Target:    tint_lang_wgsl_reader_parser_test
+# Kind:      test
 ################################################################################
-tint_add_target("lang/wgsl/reader/parser:test"
+tint_add_target(tint_lang_wgsl_reader_parser_test test
   lang/wgsl/reader/parser/additive_expression_test.cc
   lang/wgsl/reader/parser/argument_expression_list_test.cc
   lang/wgsl/reader/parser/assignment_stmt_test.cc
@@ -133,32 +135,32 @@
   lang/wgsl/reader/parser/while_stmt_test.cc
 )
 
-tint_target_add_dependencies("lang/wgsl/reader/parser:test"
-  "api/common"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/wgsl/ast"
-  "lang/wgsl/ast:test"
-  "lang/wgsl/program"
-  "lang/wgsl/reader/parser"
-  "lang/wgsl/resolver"
-  "lang/wgsl/sem"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_wgsl_reader_parser_test test
+  tint_api_common
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_ast_test
+  tint_lang_wgsl_program
+  tint_lang_wgsl_reader_parser
+  tint_lang_wgsl_resolver
+  tint_lang_wgsl_sem
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
-tint_target_add_external_dependencies("lang/wgsl/reader/parser:test"
+tint_target_add_external_dependencies(tint_lang_wgsl_reader_parser_test test
   "gtest"
 )
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 dd42622..3b4f6dc 100644
--- a/src/tint/lang/wgsl/reader/program_to_ir/BUILD.cmake
+++ b/src/tint/lang/wgsl/reader/program_to_ir/BUILD.cmake
@@ -22,48 +22,52 @@
 
 if(TINT_BUILD_IR)
 ################################################################################
-# CMake target: 'tint_lang_wgsl_reader_program_to_ir'
+# Target:    tint_lang_wgsl_reader_program_to_ir
+# Kind:      lib
+# Condition: TINT_BUILD_IR
 ################################################################################
-tint_add_target("lang/wgsl/reader/program_to_ir"
+tint_add_target(tint_lang_wgsl_reader_program_to_ir lib
   lang/wgsl/reader/program_to_ir/program_to_ir.cc
   lang/wgsl/reader/program_to_ir/program_to_ir.h
 )
 
-tint_target_add_dependencies("lang/wgsl/reader/program_to_ir"
-  "api/common"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/wgsl/ast"
-  "lang/wgsl/program"
-  "lang/wgsl/sem"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_wgsl_reader_program_to_ir lib
+  tint_api_common
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_program
+  tint_lang_wgsl_sem
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
 if (TINT_BUILD_IR)
-  tint_target_add_dependencies("lang/wgsl/reader/program_to_ir"
-    "lang/core/ir"
+  tint_target_add_dependencies(tint_lang_wgsl_reader_program_to_ir lib
+    tint_lang_core_ir
   )
 endif(TINT_BUILD_IR)
 
 endif(TINT_BUILD_IR)
 if(TINT_BUILD_IR)
 ################################################################################
-# CMake target: 'tint_lang_wgsl_reader_program_to_ir_test'
+# Target:    tint_lang_wgsl_reader_program_to_ir_test
+# Kind:      test
+# Condition: TINT_BUILD_IR
 ################################################################################
-tint_add_target("lang/wgsl/reader/program_to_ir:test"
+tint_add_target(tint_lang_wgsl_reader_program_to_ir_test test
   lang/wgsl/reader/program_to_ir/accessor_test.cc
   lang/wgsl/reader/program_to_ir/binary_test.cc
   lang/wgsl/reader/program_to_ir/builtin_test.cc
@@ -79,40 +83,40 @@
   lang/wgsl/reader/program_to_ir/var_test.cc
 )
 
-tint_target_add_dependencies("lang/wgsl/reader/program_to_ir:test"
-  "api/common"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/wgsl/ast"
-  "lang/wgsl/helpers:test"
-  "lang/wgsl/program"
-  "lang/wgsl/reader"
-  "lang/wgsl/resolver"
-  "lang/wgsl/sem"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_wgsl_reader_program_to_ir_test test
+  tint_api_common
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_helpers_test
+  tint_lang_wgsl_program
+  tint_lang_wgsl_reader
+  tint_lang_wgsl_resolver
+  tint_lang_wgsl_sem
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
-tint_target_add_external_dependencies("lang/wgsl/reader/program_to_ir:test"
+tint_target_add_external_dependencies(tint_lang_wgsl_reader_program_to_ir_test test
   "gtest"
 )
 
 if (TINT_BUILD_IR)
-  tint_target_add_dependencies("lang/wgsl/reader/program_to_ir:test"
-    "lang/core/ir"
-    "lang/wgsl/reader/program_to_ir"
+  tint_target_add_dependencies(tint_lang_wgsl_reader_program_to_ir_test test
+    tint_lang_core_ir
+    tint_lang_wgsl_reader_program_to_ir
   )
 endif(TINT_BUILD_IR)
 
diff --git a/src/tint/lang/wgsl/resolver/BUILD.cmake b/src/tint/lang/wgsl/resolver/BUILD.cmake
index eba6a5d..1e09e9f 100644
--- a/src/tint/lang/wgsl/resolver/BUILD.cmake
+++ b/src/tint/lang/wgsl/resolver/BUILD.cmake
@@ -21,9 +21,10 @@
 ################################################################################
 
 ################################################################################
-# CMake target: 'tint_lang_wgsl_resolver'
+# Target:    tint_lang_wgsl_resolver
+# Kind:      lib
 ################################################################################
-tint_add_target("lang/wgsl/resolver"
+tint_add_target(tint_lang_wgsl_resolver lib
   lang/wgsl/resolver/dependency_graph.cc
   lang/wgsl/resolver/dependency_graph.h
   lang/wgsl/resolver/resolve.cc
@@ -38,35 +39,36 @@
   lang/wgsl/resolver/validator.h
 )
 
-tint_target_add_dependencies("lang/wgsl/resolver"
-  "api/common"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/intrinsic"
-  "lang/core/intrinsic/data"
-  "lang/core/type"
-  "lang/wgsl/ast"
-  "lang/wgsl/program"
-  "lang/wgsl/sem"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_wgsl_resolver lib
+  tint_api_common
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_intrinsic
+  tint_lang_core_intrinsic_data
+  tint_lang_core_type
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_program
+  tint_lang_wgsl_sem
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
 ################################################################################
-# CMake target: 'tint_lang_wgsl_resolver_test'
+# Target:    tint_lang_wgsl_resolver_test
+# Kind:      test
 ################################################################################
-tint_add_target("lang/wgsl/resolver:test"
+tint_add_target(tint_lang_wgsl_resolver_test test
   lang/wgsl/resolver/address_space_layout_validation_test.cc
   lang/wgsl/resolver/address_space_validation_test.cc
   lang/wgsl/resolver/alias_analysis_test.cc
@@ -125,36 +127,36 @@
   lang/wgsl/resolver/variable_validation_test.cc
 )
 
-tint_target_add_dependencies("lang/wgsl/resolver:test"
-  "api/common"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/intrinsic"
-  "lang/core/type"
-  "lang/core/type:test"
-  "lang/wgsl/ast"
-  "lang/wgsl/ast/transform"
-  "lang/wgsl/ast:test"
-  "lang/wgsl/program"
-  "lang/wgsl/reader"
-  "lang/wgsl/resolver"
-  "lang/wgsl/sem"
-  "lang/wgsl/sem:test"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_wgsl_resolver_test test
+  tint_api_common
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_intrinsic
+  tint_lang_core_type
+  tint_lang_core_type_test
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_ast_transform
+  tint_lang_wgsl_ast_test
+  tint_lang_wgsl_program
+  tint_lang_wgsl_reader
+  tint_lang_wgsl_resolver
+  tint_lang_wgsl_sem
+  tint_lang_wgsl_sem_test
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
-tint_target_add_external_dependencies("lang/wgsl/resolver:test"
+tint_target_add_external_dependencies(tint_lang_wgsl_resolver_test test
   "gtest"
 )
diff --git a/src/tint/lang/wgsl/sem/BUILD.cmake b/src/tint/lang/wgsl/sem/BUILD.cmake
index 09c2d4c..ecd7e85 100644
--- a/src/tint/lang/wgsl/sem/BUILD.cmake
+++ b/src/tint/lang/wgsl/sem/BUILD.cmake
@@ -21,9 +21,10 @@
 ################################################################################
 
 ################################################################################
-# CMake target: 'tint_lang_wgsl_sem'
+# Target:    tint_lang_wgsl_sem
+# Kind:      lib
 ################################################################################
-tint_add_target("lang/wgsl/sem"
+tint_add_target(tint_lang_wgsl_sem lib
   lang/wgsl/sem/accessor_expression.cc
   lang/wgsl/sem/accessor_expression.h
   lang/wgsl/sem/array_count.cc
@@ -91,31 +92,32 @@
   lang/wgsl/sem/while_statement.h
 )
 
-tint_target_add_dependencies("lang/wgsl/sem"
-  "api/common"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/wgsl/ast"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_wgsl_sem lib
+  tint_api_common
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_wgsl_ast
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
 ################################################################################
-# CMake target: 'tint_lang_wgsl_sem_test'
+# Target:    tint_lang_wgsl_sem_test
+# Kind:      test
 ################################################################################
-tint_add_target("lang/wgsl/sem:test"
+tint_add_target(tint_lang_wgsl_sem_test test
   lang/wgsl/sem/builtin_test.cc
   lang/wgsl/sem/diagnostic_severity_test.cc
   lang/wgsl/sem/helper_test.h
@@ -123,30 +125,30 @@
   lang/wgsl/sem/value_expression_test.cc
 )
 
-tint_target_add_dependencies("lang/wgsl/sem:test"
-  "api/common"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/wgsl/ast"
-  "lang/wgsl/program"
-  "lang/wgsl/resolver"
-  "lang/wgsl/sem"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_wgsl_sem_test test
+  tint_api_common
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_program
+  tint_lang_wgsl_resolver
+  tint_lang_wgsl_sem
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
-tint_target_add_external_dependencies("lang/wgsl/sem:test"
+tint_target_add_external_dependencies(tint_lang_wgsl_sem_test test
   "gtest"
 )
diff --git a/src/tint/lang/wgsl/writer/BUILD.cmake b/src/tint/lang/wgsl/writer/BUILD.cmake
index 68d6fa4..53ee652 100644
--- a/src/tint/lang/wgsl/writer/BUILD.cmake
+++ b/src/tint/lang/wgsl/writer/BUILD.cmake
@@ -25,9 +25,10 @@
 include(lang/wgsl/writer/syntax_tree_printer/BUILD.cmake)
 
 ################################################################################
-# CMake target: 'tint_lang_wgsl_writer'
+# Target:    tint_lang_wgsl_writer
+# Kind:      lib
 ################################################################################
-tint_add_target("lang/wgsl/writer"
+tint_add_target(tint_lang_wgsl_writer lib
   lang/wgsl/writer/options.cc
   lang/wgsl/writer/options.h
   lang/wgsl/writer/output.cc
@@ -36,58 +37,59 @@
   lang/wgsl/writer/writer.h
 )
 
-tint_target_add_dependencies("lang/wgsl/writer"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/wgsl/ast"
-  "lang/wgsl/program"
-  "lang/wgsl/sem"
-  "lang/wgsl/writer/ast_printer"
-  "lang/wgsl/writer/syntax_tree_printer"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/generator"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_wgsl_writer lib
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_program
+  tint_lang_wgsl_sem
+  tint_lang_wgsl_writer_ast_printer
+  tint_lang_wgsl_writer_syntax_tree_printer
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_generator
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
 ################################################################################
-# CMake target: 'tint_lang_wgsl_writer_bench'
+# Target:    tint_lang_wgsl_writer_bench
+# Kind:      bench
 ################################################################################
-tint_add_target("lang/wgsl/writer:bench"
+tint_add_target(tint_lang_wgsl_writer_bench bench
   lang/wgsl/writer/writer_bench.cc
 )
 
-tint_target_add_dependencies("lang/wgsl/writer:bench"
-  "cmd/bench"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/wgsl/ast"
-  "lang/wgsl/program"
-  "lang/wgsl/sem"
-  "lang/wgsl/writer"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_wgsl_writer_bench bench
+  tint_cmd_bench
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_program
+  tint_lang_wgsl_sem
+  tint_lang_wgsl_writer
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
diff --git a/src/tint/lang/wgsl/writer/ast_printer/BUILD.cmake b/src/tint/lang/wgsl/writer/ast_printer/BUILD.cmake
index 8e6b5ab..fd4338f 100644
--- a/src/tint/lang/wgsl/writer/ast_printer/BUILD.cmake
+++ b/src/tint/lang/wgsl/writer/ast_printer/BUILD.cmake
@@ -21,40 +21,42 @@
 ################################################################################
 
 ################################################################################
-# CMake target: 'tint_lang_wgsl_writer_ast_printer'
+# Target:    tint_lang_wgsl_writer_ast_printer
+# Kind:      lib
 ################################################################################
-tint_add_target("lang/wgsl/writer/ast_printer"
+tint_add_target(tint_lang_wgsl_writer_ast_printer lib
   lang/wgsl/writer/ast_printer/ast_printer.cc
   lang/wgsl/writer/ast_printer/ast_printer.h
 )
 
-tint_target_add_dependencies("lang/wgsl/writer/ast_printer"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/wgsl/ast"
-  "lang/wgsl/program"
-  "lang/wgsl/sem"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/generator"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/result"
-  "utils/rtti"
-  "utils/strconv"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_wgsl_writer_ast_printer lib
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_program
+  tint_lang_wgsl_sem
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_generator
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_strconv
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
 ################################################################################
-# CMake target: 'tint_lang_wgsl_writer_ast_printer_test'
+# Target:    tint_lang_wgsl_writer_ast_printer_test
+# Kind:      test
 ################################################################################
-tint_add_target("lang/wgsl/writer/ast_printer:test"
+tint_add_target(tint_lang_wgsl_writer_ast_printer_test test
   lang/wgsl/writer/ast_printer/alias_type_test.cc
   lang/wgsl/writer/ast_printer/array_accessor_test.cc
   lang/wgsl/writer/ast_printer/assign_test.cc
@@ -88,32 +90,32 @@
   lang/wgsl/writer/ast_printer/variable_test.cc
 )
 
-tint_target_add_dependencies("lang/wgsl/writer/ast_printer:test"
-  "api/common"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/wgsl/ast"
-  "lang/wgsl/program"
-  "lang/wgsl/resolver"
-  "lang/wgsl/sem"
-  "lang/wgsl/writer/ast_printer"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/generator"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_wgsl_writer_ast_printer_test test
+  tint_api_common
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_program
+  tint_lang_wgsl_resolver
+  tint_lang_wgsl_sem
+  tint_lang_wgsl_writer_ast_printer
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_generator
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
-tint_target_add_external_dependencies("lang/wgsl/writer/ast_printer:test"
+tint_target_add_external_dependencies(tint_lang_wgsl_writer_ast_printer_test test
   "gtest"
 )
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 bd373aa..e76162b 100644
--- a/src/tint/lang/wgsl/writer/ir_to_program/BUILD.cmake
+++ b/src/tint/lang/wgsl/writer/ir_to_program/BUILD.cmake
@@ -22,90 +22,94 @@
 
 if(TINT_BUILD_IR)
 ################################################################################
-# CMake target: 'tint_lang_wgsl_writer_ir_to_program'
+# Target:    tint_lang_wgsl_writer_ir_to_program
+# Kind:      lib
+# Condition: TINT_BUILD_IR
 ################################################################################
-tint_add_target("lang/wgsl/writer/ir_to_program"
+tint_add_target(tint_lang_wgsl_writer_ir_to_program lib
   lang/wgsl/writer/ir_to_program/ir_to_program.cc
   lang/wgsl/writer/ir_to_program/ir_to_program.h
   lang/wgsl/writer/ir_to_program/rename_conflicts.cc
   lang/wgsl/writer/ir_to_program/rename_conflicts.h
 )
 
-tint_target_add_dependencies("lang/wgsl/writer/ir_to_program"
-  "api/common"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/wgsl/ast"
-  "lang/wgsl/program"
-  "lang/wgsl/resolver"
-  "lang/wgsl/sem"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_wgsl_writer_ir_to_program lib
+  tint_api_common
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_program
+  tint_lang_wgsl_resolver
+  tint_lang_wgsl_sem
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
 if (TINT_BUILD_IR)
-  tint_target_add_dependencies("lang/wgsl/writer/ir_to_program"
-    "lang/core/ir"
+  tint_target_add_dependencies(tint_lang_wgsl_writer_ir_to_program lib
+    tint_lang_core_ir
   )
 endif(TINT_BUILD_IR)
 
 endif(TINT_BUILD_IR)
 if(TINT_BUILD_IR)
 ################################################################################
-# CMake target: 'tint_lang_wgsl_writer_ir_to_program_test'
+# Target:    tint_lang_wgsl_writer_ir_to_program_test
+# Kind:      test
+# Condition: TINT_BUILD_IR
 ################################################################################
-tint_add_target("lang/wgsl/writer/ir_to_program:test"
+tint_add_target(tint_lang_wgsl_writer_ir_to_program_test test
   lang/wgsl/writer/ir_to_program/inlining_test.cc
   lang/wgsl/writer/ir_to_program/ir_to_program_test.cc
   lang/wgsl/writer/ir_to_program/ir_to_program_test.h
   lang/wgsl/writer/ir_to_program/rename_conflicts_test.cc
 )
 
-tint_target_add_dependencies("lang/wgsl/writer/ir_to_program:test"
-  "api/common"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/wgsl/ast"
-  "lang/wgsl/program"
-  "lang/wgsl/sem"
-  "lang/wgsl/writer"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_wgsl_writer_ir_to_program_test test
+  tint_api_common
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_program
+  tint_lang_wgsl_sem
+  tint_lang_wgsl_writer
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
-tint_target_add_external_dependencies("lang/wgsl/writer/ir_to_program:test"
+tint_target_add_external_dependencies(tint_lang_wgsl_writer_ir_to_program_test test
   "gtest"
 )
 
 if (TINT_BUILD_IR)
-  tint_target_add_dependencies("lang/wgsl/writer/ir_to_program:test"
-    "lang/core/ir"
-    "lang/core/ir:test"
-    "lang/wgsl/writer/ir_to_program"
+  tint_target_add_dependencies(tint_lang_wgsl_writer_ir_to_program_test test
+    tint_lang_core_ir
+    tint_lang_core_ir_test
+    tint_lang_wgsl_writer_ir_to_program
   )
 endif(TINT_BUILD_IR)
 
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 75ff9b8..44ec253 100644
--- a/src/tint/lang/wgsl/writer/syntax_tree_printer/BUILD.cmake
+++ b/src/tint/lang/wgsl/writer/syntax_tree_printer/BUILD.cmake
@@ -21,32 +21,33 @@
 ################################################################################
 
 ################################################################################
-# CMake target: 'tint_lang_wgsl_writer_syntax_tree_printer'
+# Target:    tint_lang_wgsl_writer_syntax_tree_printer
+# Kind:      lib
 ################################################################################
-tint_add_target("lang/wgsl/writer/syntax_tree_printer"
+tint_add_target(tint_lang_wgsl_writer_syntax_tree_printer lib
   lang/wgsl/writer/syntax_tree_printer/syntax_tree_printer.cc
   lang/wgsl/writer/syntax_tree_printer/syntax_tree_printer.h
 )
 
-tint_target_add_dependencies("lang/wgsl/writer/syntax_tree_printer"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/wgsl/ast"
-  "lang/wgsl/program"
-  "lang/wgsl/sem"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/generator"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/result"
-  "utils/rtti"
-  "utils/strconv"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_lang_wgsl_writer_syntax_tree_printer lib
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_program
+  tint_lang_wgsl_sem
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_generator
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_strconv
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
diff --git a/src/tint/utils/cli/BUILD.cmake b/src/tint/utils/cli/BUILD.cmake
index 940e276..f0a0c88 100644
--- a/src/tint/utils/cli/BUILD.cmake
+++ b/src/tint/utils/cli/BUILD.cmake
@@ -21,47 +21,49 @@
 ################################################################################
 
 ################################################################################
-# CMake target: 'tint_utils_cli'
+# Target:    tint_utils_cli
+# Kind:      lib
 ################################################################################
-tint_add_target("utils/cli"
+tint_add_target(tint_utils_cli lib
   utils/cli/cli.cc
   utils/cli/cli.h
 )
 
-tint_target_add_dependencies("utils/cli"
-  "utils/containers"
-  "utils/ice"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/result"
-  "utils/rtti"
-  "utils/strconv"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_utils_cli lib
+  tint_utils_containers
+  tint_utils_ice
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_strconv
+  tint_utils_text
+  tint_utils_traits
 )
 
 ################################################################################
-# CMake target: 'tint_utils_cli_test'
+# Target:    tint_utils_cli_test
+# Kind:      test
 ################################################################################
-tint_add_target("utils/cli:test"
+tint_add_target(tint_utils_cli_test test
   utils/cli/cli_test.cc
 )
 
-tint_target_add_dependencies("utils/cli:test"
-  "utils/cli"
-  "utils/containers"
-  "utils/ice"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/result"
-  "utils/rtti"
-  "utils/strconv"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_utils_cli_test test
+  tint_utils_cli
+  tint_utils_containers
+  tint_utils_ice
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_strconv
+  tint_utils_text
+  tint_utils_traits
 )
 
-tint_target_add_external_dependencies("utils/cli:test"
+tint_target_add_external_dependencies(tint_utils_cli_test test
   "gtest"
 )
diff --git a/src/tint/utils/command/BUILD.cmake b/src/tint/utils/command/BUILD.cmake
index 2101d0d..ccdc44f 100644
--- a/src/tint/utils/command/BUILD.cmake
+++ b/src/tint/utils/command/BUILD.cmake
@@ -21,46 +21,48 @@
 ################################################################################
 
 ################################################################################
-# CMake target: 'tint_utils_command'
+# Target:    tint_utils_command
+# Kind:      lib
 ################################################################################
-tint_add_target("utils/command"
+tint_add_target(tint_utils_command lib
   utils/command/command.h
 )
 
-tint_target_add_dependencies("utils/command"
-  "utils/macros"
-  "utils/text"
+tint_target_add_dependencies(tint_utils_command lib
+  tint_utils_macros
+  tint_utils_text
 )
 
 if ((NOT IS_LINUX)  AND  (NOT IS_MAC)  AND  (NOT IS_WIN))
-  tint_target_add_sources("utils/command"
+  tint_target_add_sources(tint_utils_command lib
     "utils/command/command_other.cc"
   )
 endif((NOT IS_LINUX)  AND  (NOT IS_MAC)  AND  (NOT IS_WIN))
 
 if (IS_LINUX  OR  IS_MAC)
-  tint_target_add_sources("utils/command"
+  tint_target_add_sources(tint_utils_command lib
     "utils/command/command_posix.cc"
   )
 endif(IS_LINUX  OR  IS_MAC)
 
 if (IS_WIN)
-  tint_target_add_sources("utils/command"
+  tint_target_add_sources(tint_utils_command lib
     "utils/command/command_windows.cc"
   )
 endif(IS_WIN)
 
 ################################################################################
-# CMake target: 'tint_utils_command_test'
+# Target:    tint_utils_command_test
+# Kind:      test
 ################################################################################
-tint_add_target("utils/command:test"
+tint_add_target(tint_utils_command_test test
   utils/command/command_test.cc
 )
 
-tint_target_add_dependencies("utils/command:test"
-  "utils/command"
+tint_target_add_dependencies(tint_utils_command_test test
+  tint_utils_command
 )
 
-tint_target_add_external_dependencies("utils/command:test"
+tint_target_add_external_dependencies(tint_utils_command_test test
   "gtest"
 )
diff --git a/src/tint/utils/containers/BUILD.cmake b/src/tint/utils/containers/BUILD.cmake
index a34f556..3b677a4 100644
--- a/src/tint/utils/containers/BUILD.cmake
+++ b/src/tint/utils/containers/BUILD.cmake
@@ -21,9 +21,10 @@
 ################################################################################
 
 ################################################################################
-# CMake target: 'tint_utils_containers'
+# Target:    tint_utils_containers
+# Kind:      lib
 ################################################################################
-tint_add_target("utils/containers"
+tint_add_target(tint_utils_containers lib
   utils/containers/bitset.h
   utils/containers/containers.cc
   utils/containers/enum_set.h
@@ -41,19 +42,20 @@
   utils/containers/vector.h
 )
 
-tint_target_add_dependencies("utils/containers"
-  "utils/ice"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/rtti"
-  "utils/traits"
+tint_target_add_dependencies(tint_utils_containers lib
+  tint_utils_ice
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_rtti
+  tint_utils_traits
 )
 
 ################################################################################
-# CMake target: 'tint_utils_containers_test'
+# Target:    tint_utils_containers_test
+# Kind:      test
 ################################################################################
-tint_add_target("utils/containers:test"
+tint_add_target(tint_utils_containers_test test
   utils/containers/bitset_test.cc
   utils/containers/enum_set_test.cc
   utils/containers/hashmap_test.cc
@@ -69,29 +71,29 @@
   utils/containers/vector_test.cc
 )
 
-tint_target_add_dependencies("utils/containers:test"
-  "api/common"
-  "lang/core"
-  "lang/core/constant"
-  "lang/core/type"
-  "lang/wgsl/ast"
-  "lang/wgsl/program"
-  "lang/wgsl/sem"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/reflection"
-  "utils/result"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_utils_containers_test test
+  tint_api_common
+  tint_lang_core
+  tint_lang_core_constant
+  tint_lang_core_type
+  tint_lang_wgsl_ast
+  tint_lang_wgsl_program
+  tint_lang_wgsl_sem
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_reflection
+  tint_utils_result
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
-tint_target_add_external_dependencies("utils/containers:test"
+tint_target_add_external_dependencies(tint_utils_containers_test test
   "gtest"
 )
diff --git a/src/tint/utils/debug/BUILD.cmake b/src/tint/utils/debug/BUILD.cmake
index bf7233c..930b205 100644
--- a/src/tint/utils/debug/BUILD.cmake
+++ b/src/tint/utils/debug/BUILD.cmake
@@ -21,9 +21,10 @@
 ################################################################################
 
 ################################################################################
-# CMake target: 'tint_utils_debug'
+# Target:    tint_utils_debug
+# Kind:      lib
 ################################################################################
-tint_add_target("utils/debug"
+tint_add_target(tint_utils_debug lib
   utils/debug/debugger.cc
   utils/debug/debugger.h
 )
diff --git a/src/tint/utils/diagnostic/BUILD.cmake b/src/tint/utils/diagnostic/BUILD.cmake
index 03b1356..f5cae61 100644
--- a/src/tint/utils/diagnostic/BUILD.cmake
+++ b/src/tint/utils/diagnostic/BUILD.cmake
@@ -21,9 +21,10 @@
 ################################################################################
 
 ################################################################################
-# CMake target: 'tint_utils_diagnostic'
+# Target:    tint_utils_diagnostic
+# Kind:      lib
 ################################################################################
-tint_add_target("utils/diagnostic"
+tint_add_target(tint_utils_diagnostic lib
   utils/diagnostic/diagnostic.cc
   utils/diagnostic/diagnostic.h
   utils/diagnostic/formatter.cc
@@ -34,45 +35,46 @@
   utils/diagnostic/source.h
 )
 
-tint_target_add_dependencies("utils/diagnostic"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_utils_diagnostic lib
+  tint_utils_text
+  tint_utils_traits
 )
 
 if ((NOT IS_LINUX)  AND  (NOT IS_MAC)  AND  (NOT IS_WIN))
-  tint_target_add_sources("utils/diagnostic"
+  tint_target_add_sources(tint_utils_diagnostic lib
     "utils/diagnostic/printer_other.cc"
   )
 endif((NOT IS_LINUX)  AND  (NOT IS_MAC)  AND  (NOT IS_WIN))
 
 if (IS_LINUX  OR  IS_MAC)
-  tint_target_add_sources("utils/diagnostic"
+  tint_target_add_sources(tint_utils_diagnostic lib
     "utils/diagnostic/printer_posix.cc"
   )
 endif(IS_LINUX  OR  IS_MAC)
 
 if (IS_WIN)
-  tint_target_add_sources("utils/diagnostic"
+  tint_target_add_sources(tint_utils_diagnostic lib
     "utils/diagnostic/printer_windows.cc"
   )
 endif(IS_WIN)
 
 ################################################################################
-# CMake target: 'tint_utils_diagnostic_test'
+# Target:    tint_utils_diagnostic_test
+# Kind:      test
 ################################################################################
-tint_add_target("utils/diagnostic:test"
+tint_add_target(tint_utils_diagnostic_test test
   utils/diagnostic/diagnostic_test.cc
   utils/diagnostic/formatter_test.cc
   utils/diagnostic/printer_test.cc
   utils/diagnostic/source_test.cc
 )
 
-tint_target_add_dependencies("utils/diagnostic:test"
-  "utils/diagnostic"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_utils_diagnostic_test test
+  tint_utils_diagnostic
+  tint_utils_text
+  tint_utils_traits
 )
 
-tint_target_add_external_dependencies("utils/diagnostic:test"
+tint_target_add_external_dependencies(tint_utils_diagnostic_test test
   "gtest"
 )
diff --git a/src/tint/utils/file/BUILD.cmake b/src/tint/utils/file/BUILD.cmake
index 06662c6..3ba7bea 100644
--- a/src/tint/utils/file/BUILD.cmake
+++ b/src/tint/utils/file/BUILD.cmake
@@ -21,48 +21,50 @@
 ################################################################################
 
 ################################################################################
-# CMake target: 'tint_utils_file'
+# Target:    tint_utils_file
+# Kind:      lib
 ################################################################################
-tint_add_target("utils/file"
+tint_add_target(tint_utils_file lib
   utils/file/tmpfile.h
 )
 
-tint_target_add_dependencies("utils/file"
-  "utils/ice"
-  "utils/macros"
-  "utils/text"
+tint_target_add_dependencies(tint_utils_file lib
+  tint_utils_ice
+  tint_utils_macros
+  tint_utils_text
 )
 
 if ((NOT IS_LINUX)  AND  (NOT IS_MAC)  AND  (NOT IS_WIN))
-  tint_target_add_sources("utils/file"
+  tint_target_add_sources(tint_utils_file lib
     "utils/file/tmpfile_other.cc"
   )
 endif((NOT IS_LINUX)  AND  (NOT IS_MAC)  AND  (NOT IS_WIN))
 
 if (IS_LINUX  OR  IS_MAC)
-  tint_target_add_sources("utils/file"
+  tint_target_add_sources(tint_utils_file lib
     "utils/file/tmpfile_posix.cc"
   )
 endif(IS_LINUX  OR  IS_MAC)
 
 if (IS_WIN)
-  tint_target_add_sources("utils/file"
+  tint_target_add_sources(tint_utils_file lib
     "utils/file/tmpfile_windows.cc"
   )
 endif(IS_WIN)
 
 ################################################################################
-# CMake target: 'tint_utils_file_test'
+# Target:    tint_utils_file_test
+# Kind:      test
 ################################################################################
-tint_add_target("utils/file:test"
+tint_add_target(tint_utils_file_test test
   utils/file/tmpfile_test.cc
 )
 
-tint_target_add_dependencies("utils/file:test"
-  "utils/file"
-  "utils/text"
+tint_target_add_dependencies(tint_utils_file_test test
+  tint_utils_file
+  tint_utils_text
 )
 
-tint_target_add_external_dependencies("utils/file:test"
+tint_target_add_external_dependencies(tint_utils_file_test test
   "gtest"
 )
diff --git a/src/tint/utils/generator/BUILD.cmake b/src/tint/utils/generator/BUILD.cmake
index 4a40967..c91c3a7 100644
--- a/src/tint/utils/generator/BUILD.cmake
+++ b/src/tint/utils/generator/BUILD.cmake
@@ -21,18 +21,19 @@
 ################################################################################
 
 ################################################################################
-# CMake target: 'tint_utils_generator'
+# Target:    tint_utils_generator
+# Kind:      lib
 ################################################################################
-tint_add_target("utils/generator"
+tint_add_target(tint_utils_generator lib
   utils/generator/text_generator.cc
   utils/generator/text_generator.h
 )
 
-tint_target_add_dependencies("utils/generator"
-  "utils/containers"
-  "utils/diagnostic"
-  "utils/ice"
-  "utils/macros"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_utils_generator lib
+  tint_utils_containers
+  tint_utils_diagnostic
+  tint_utils_ice
+  tint_utils_macros
+  tint_utils_text
+  tint_utils_traits
 )
diff --git a/src/tint/utils/ice/BUILD.cmake b/src/tint/utils/ice/BUILD.cmake
index 483d19b..a135b18 100644
--- a/src/tint/utils/ice/BUILD.cmake
+++ b/src/tint/utils/ice/BUILD.cmake
@@ -21,30 +21,32 @@
 ################################################################################
 
 ################################################################################
-# CMake target: 'tint_utils_ice'
+# Target:    tint_utils_ice
+# Kind:      lib
 ################################################################################
-tint_add_target("utils/ice"
+tint_add_target(tint_utils_ice lib
   utils/ice/ice.cc
   utils/ice/ice.h
 )
 
-tint_target_add_dependencies("utils/ice"
-  "utils/debug"
-  "utils/macros"
+tint_target_add_dependencies(tint_utils_ice lib
+  tint_utils_debug
+  tint_utils_macros
 )
 
 ################################################################################
-# CMake target: 'tint_utils_ice_test'
+# Target:    tint_utils_ice_test
+# Kind:      test
 ################################################################################
-tint_add_target("utils/ice:test"
+tint_add_target(tint_utils_ice_test test
   utils/ice/ice_test.cc
 )
 
-tint_target_add_dependencies("utils/ice:test"
-  "utils/ice"
-  "utils/macros"
+tint_target_add_dependencies(tint_utils_ice_test test
+  tint_utils_ice
+  tint_utils_macros
 )
 
-tint_target_add_external_dependencies("utils/ice:test"
+tint_target_add_external_dependencies(tint_utils_ice_test test
   "gtest"
 )
diff --git a/src/tint/utils/id/BUILD.cmake b/src/tint/utils/id/BUILD.cmake
index b9fc288..2b1bca6 100644
--- a/src/tint/utils/id/BUILD.cmake
+++ b/src/tint/utils/id/BUILD.cmake
@@ -21,16 +21,17 @@
 ################################################################################
 
 ################################################################################
-# CMake target: 'tint_utils_id'
+# Target:    tint_utils_id
+# Kind:      lib
 ################################################################################
-tint_add_target("utils/id"
+tint_add_target(tint_utils_id lib
   utils/id/generation_id.cc
   utils/id/generation_id.h
 )
 
-tint_target_add_dependencies("utils/id"
-  "utils/ice"
-  "utils/macros"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_utils_id lib
+  tint_utils_ice
+  tint_utils_macros
+  tint_utils_text
+  tint_utils_traits
 )
diff --git a/src/tint/utils/macros/BUILD.cmake b/src/tint/utils/macros/BUILD.cmake
index b4d0b97..64ea187 100644
--- a/src/tint/utils/macros/BUILD.cmake
+++ b/src/tint/utils/macros/BUILD.cmake
@@ -21,9 +21,10 @@
 ################################################################################
 
 ################################################################################
-# CMake target: 'tint_utils_macros'
+# Target:    tint_utils_macros
+# Kind:      lib
 ################################################################################
-tint_add_target("utils/macros"
+tint_add_target(tint_utils_macros lib
   utils/macros/compiler.h
   utils/macros/concat.h
   utils/macros/defer.h
@@ -33,17 +34,18 @@
 )
 
 ################################################################################
-# CMake target: 'tint_utils_macros_test'
+# Target:    tint_utils_macros_test
+# Kind:      test
 ################################################################################
-tint_add_target("utils/macros:test"
+tint_add_target(tint_utils_macros_test test
   utils/macros/defer_test.cc
   utils/macros/scoped_assignment_test.cc
 )
 
-tint_target_add_dependencies("utils/macros:test"
-  "utils/macros"
+tint_target_add_dependencies(tint_utils_macros_test test
+  tint_utils_macros
 )
 
-tint_target_add_external_dependencies("utils/macros:test"
+tint_target_add_external_dependencies(tint_utils_macros_test test
   "gtest"
 )
diff --git a/src/tint/utils/math/BUILD.cmake b/src/tint/utils/math/BUILD.cmake
index feb8246..8f869c3 100644
--- a/src/tint/utils/math/BUILD.cmake
+++ b/src/tint/utils/math/BUILD.cmake
@@ -21,9 +21,10 @@
 ################################################################################
 
 ################################################################################
-# CMake target: 'tint_utils_math'
+# Target:    tint_utils_math
+# Kind:      lib
 ################################################################################
-tint_add_target("utils/math"
+tint_add_target(tint_utils_math lib
   utils/math/crc32.h
   utils/math/hash.h
   utils/math/math.cc
@@ -31,24 +32,25 @@
 )
 
 ################################################################################
-# CMake target: 'tint_utils_math_test'
+# Target:    tint_utils_math_test
+# Kind:      test
 ################################################################################
-tint_add_target("utils/math:test"
+tint_add_target(tint_utils_math_test test
   utils/math/crc32_test.cc
   utils/math/hash_test.cc
   utils/math/math_test.cc
 )
 
-tint_target_add_dependencies("utils/math:test"
-  "utils/containers"
-  "utils/ice"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/rtti"
-  "utils/traits"
+tint_target_add_dependencies(tint_utils_math_test test
+  tint_utils_containers
+  tint_utils_ice
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_rtti
+  tint_utils_traits
 )
 
-tint_target_add_external_dependencies("utils/math:test"
+tint_target_add_external_dependencies(tint_utils_math_test test
   "gtest"
 )
diff --git a/src/tint/utils/memory/BUILD.cmake b/src/tint/utils/memory/BUILD.cmake
index 0b37c1a..82dd843 100644
--- a/src/tint/utils/memory/BUILD.cmake
+++ b/src/tint/utils/memory/BUILD.cmake
@@ -21,33 +21,35 @@
 ################################################################################
 
 ################################################################################
-# CMake target: 'tint_utils_memory'
+# Target:    tint_utils_memory
+# Kind:      lib
 ################################################################################
-tint_add_target("utils/memory"
+tint_add_target(tint_utils_memory lib
   utils/memory/bitcast.h
   utils/memory/block_allocator.h
   utils/memory/bump_allocator.h
   utils/memory/memory.cc
 )
 
-tint_target_add_dependencies("utils/memory"
-  "utils/math"
+tint_target_add_dependencies(tint_utils_memory lib
+  tint_utils_math
 )
 
 ################################################################################
-# CMake target: 'tint_utils_memory_test'
+# Target:    tint_utils_memory_test
+# Kind:      test
 ################################################################################
-tint_add_target("utils/memory:test"
+tint_add_target(tint_utils_memory_test test
   utils/memory/bitcast_test.cc
   utils/memory/block_allocator_test.cc
   utils/memory/bump_allocator_test.cc
 )
 
-tint_target_add_dependencies("utils/memory:test"
-  "utils/math"
-  "utils/memory"
+tint_target_add_dependencies(tint_utils_memory_test test
+  tint_utils_math
+  tint_utils_memory
 )
 
-tint_target_add_external_dependencies("utils/memory:test"
+tint_target_add_external_dependencies(tint_utils_memory_test test
   "gtest"
 )
diff --git a/src/tint/utils/reflection/BUILD.cmake b/src/tint/utils/reflection/BUILD.cmake
index 3c97b21..25c714a 100644
--- a/src/tint/utils/reflection/BUILD.cmake
+++ b/src/tint/utils/reflection/BUILD.cmake
@@ -21,29 +21,31 @@
 ################################################################################
 
 ################################################################################
-# CMake target: 'tint_utils_reflection'
+# Target:    tint_utils_reflection
+# Kind:      lib
 ################################################################################
-tint_add_target("utils/reflection"
+tint_add_target(tint_utils_reflection lib
   utils/reflection/reflection.cc
   utils/reflection/reflection.h
 )
 
-tint_target_add_dependencies("utils/reflection"
-  "utils/macros"
+tint_target_add_dependencies(tint_utils_reflection lib
+  tint_utils_macros
 )
 
 ################################################################################
-# CMake target: 'tint_utils_reflection_test'
+# Target:    tint_utils_reflection_test
+# Kind:      test
 ################################################################################
-tint_add_target("utils/reflection:test"
+tint_add_target(tint_utils_reflection_test test
   utils/reflection/reflection_test.cc
 )
 
-tint_target_add_dependencies("utils/reflection:test"
-  "utils/macros"
-  "utils/reflection"
+tint_target_add_dependencies(tint_utils_reflection_test test
+  tint_utils_macros
+  tint_utils_reflection
 )
 
-tint_target_add_external_dependencies("utils/reflection:test"
+tint_target_add_external_dependencies(tint_utils_reflection_test test
   "gtest"
 )
diff --git a/src/tint/utils/result/BUILD.cmake b/src/tint/utils/result/BUILD.cmake
index ffe50ac..7ec5422 100644
--- a/src/tint/utils/result/BUILD.cmake
+++ b/src/tint/utils/result/BUILD.cmake
@@ -21,35 +21,37 @@
 ################################################################################
 
 ################################################################################
-# CMake target: 'tint_utils_result'
+# Target:    tint_utils_result
+# Kind:      lib
 ################################################################################
-tint_add_target("utils/result"
+tint_add_target(tint_utils_result lib
   utils/result/result.cc
   utils/result/result.h
 )
 
-tint_target_add_dependencies("utils/result"
-  "utils/ice"
-  "utils/macros"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_utils_result lib
+  tint_utils_ice
+  tint_utils_macros
+  tint_utils_text
+  tint_utils_traits
 )
 
 ################################################################################
-# CMake target: 'tint_utils_result_test'
+# Target:    tint_utils_result_test
+# Kind:      test
 ################################################################################
-tint_add_target("utils/result:test"
+tint_add_target(tint_utils_result_test test
   utils/result/result_test.cc
 )
 
-tint_target_add_dependencies("utils/result:test"
-  "utils/ice"
-  "utils/macros"
-  "utils/result"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_utils_result_test test
+  tint_utils_ice
+  tint_utils_macros
+  tint_utils_result
+  tint_utils_text
+  tint_utils_traits
 )
 
-tint_target_add_external_dependencies("utils/result:test"
+tint_target_add_external_dependencies(tint_utils_result_test test
   "gtest"
 )
diff --git a/src/tint/utils/rtti/BUILD.cmake b/src/tint/utils/rtti/BUILD.cmake
index e97af08..a4e4af0 100644
--- a/src/tint/utils/rtti/BUILD.cmake
+++ b/src/tint/utils/rtti/BUILD.cmake
@@ -21,52 +21,55 @@
 ################################################################################
 
 ################################################################################
-# CMake target: 'tint_utils_rtti'
+# Target:    tint_utils_rtti
+# Kind:      lib
 ################################################################################
-tint_add_target("utils/rtti"
+tint_add_target(tint_utils_rtti lib
   utils/rtti/castable.cc
   utils/rtti/castable.h
   utils/rtti/switch.h
 )
 
-tint_target_add_dependencies("utils/rtti"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/traits"
+tint_target_add_dependencies(tint_utils_rtti lib
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_traits
 )
 
 ################################################################################
-# CMake target: 'tint_utils_rtti_test'
+# Target:    tint_utils_rtti_test
+# Kind:      test
 ################################################################################
-tint_add_target("utils/rtti:test"
+tint_add_target(tint_utils_rtti_test test
   utils/rtti/castable_test.cc
   utils/rtti/switch_test.cc
 )
 
-tint_target_add_dependencies("utils/rtti:test"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/rtti"
-  "utils/traits"
+tint_target_add_dependencies(tint_utils_rtti_test test
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_rtti
+  tint_utils_traits
 )
 
-tint_target_add_external_dependencies("utils/rtti:test"
+tint_target_add_external_dependencies(tint_utils_rtti_test test
   "gtest"
 )
 
 ################################################################################
-# CMake target: 'tint_utils_rtti_bench'
+# Target:    tint_utils_rtti_bench
+# Kind:      bench
 ################################################################################
-tint_add_target("utils/rtti:bench"
+tint_add_target(tint_utils_rtti_bench bench
   utils/rtti/switch_bench.cc
 )
 
-tint_target_add_dependencies("utils/rtti:bench"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/rtti"
-  "utils/traits"
+tint_target_add_dependencies(tint_utils_rtti_bench bench
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_rtti
+  tint_utils_traits
 )
diff --git a/src/tint/utils/strconv/BUILD.cmake b/src/tint/utils/strconv/BUILD.cmake
index 76cf27e..e85e5e4 100644
--- a/src/tint/utils/strconv/BUILD.cmake
+++ b/src/tint/utils/strconv/BUILD.cmake
@@ -21,39 +21,41 @@
 ################################################################################
 
 ################################################################################
-# CMake target: 'tint_utils_strconv'
+# Target:    tint_utils_strconv
+# Kind:      lib
 ################################################################################
-tint_add_target("utils/strconv"
+tint_add_target(tint_utils_strconv lib
   utils/strconv/float_to_string.cc
   utils/strconv/float_to_string.h
   utils/strconv/parse_num.cc
   utils/strconv/parse_num.h
 )
 
-tint_target_add_dependencies("utils/strconv"
-  "utils/ice"
-  "utils/macros"
-  "utils/result"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_utils_strconv lib
+  tint_utils_ice
+  tint_utils_macros
+  tint_utils_result
+  tint_utils_text
+  tint_utils_traits
 )
 
-tint_target_add_external_dependencies("utils/strconv"
+tint_target_add_external_dependencies(tint_utils_strconv lib
   "abseil"
 )
 
 ################################################################################
-# CMake target: 'tint_utils_strconv_test'
+# Target:    tint_utils_strconv_test
+# Kind:      test
 ################################################################################
-tint_add_target("utils/strconv:test"
+tint_add_target(tint_utils_strconv_test test
   utils/strconv/float_to_string_test.cc
 )
 
-tint_target_add_dependencies("utils/strconv:test"
-  "utils/memory"
-  "utils/strconv"
+tint_target_add_dependencies(tint_utils_strconv_test test
+  tint_utils_memory
+  tint_utils_strconv
 )
 
-tint_target_add_external_dependencies("utils/strconv:test"
+tint_target_add_external_dependencies(tint_utils_strconv_test test
   "gtest"
 )
diff --git a/src/tint/utils/symbol/BUILD.cmake b/src/tint/utils/symbol/BUILD.cmake
index 3625b96..85799d7 100644
--- a/src/tint/utils/symbol/BUILD.cmake
+++ b/src/tint/utils/symbol/BUILD.cmake
@@ -21,48 +21,50 @@
 ################################################################################
 
 ################################################################################
-# CMake target: 'tint_utils_symbol'
+# Target:    tint_utils_symbol
+# Kind:      lib
 ################################################################################
-tint_add_target("utils/symbol"
+tint_add_target(tint_utils_symbol lib
   utils/symbol/symbol.cc
   utils/symbol/symbol.h
   utils/symbol/symbol_table.cc
   utils/symbol/symbol_table.h
 )
 
-tint_target_add_dependencies("utils/symbol"
-  "utils/containers"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/rtti"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_utils_symbol lib
+  tint_utils_containers
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_rtti
+  tint_utils_text
+  tint_utils_traits
 )
 
 ################################################################################
-# CMake target: 'tint_utils_symbol_test'
+# Target:    tint_utils_symbol_test
+# Kind:      test
 ################################################################################
-tint_add_target("utils/symbol:test"
+tint_add_target(tint_utils_symbol_test test
   utils/symbol/symbol_table_test.cc
   utils/symbol/symbol_test.cc
 )
 
-tint_target_add_dependencies("utils/symbol:test"
-  "utils/containers"
-  "utils/ice"
-  "utils/id"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/rtti"
-  "utils/symbol"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_utils_symbol_test test
+  tint_utils_containers
+  tint_utils_ice
+  tint_utils_id
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_rtti
+  tint_utils_symbol
+  tint_utils_text
+  tint_utils_traits
 )
 
-tint_target_add_external_dependencies("utils/symbol:test"
+tint_target_add_external_dependencies(tint_utils_symbol_test test
   "gtest"
 )
diff --git a/src/tint/utils/text/BUILD.cmake b/src/tint/utils/text/BUILD.cmake
index 45ac87f..379569e 100644
--- a/src/tint/utils/text/BUILD.cmake
+++ b/src/tint/utils/text/BUILD.cmake
@@ -21,9 +21,10 @@
 ################################################################################
 
 ################################################################################
-# CMake target: 'tint_utils_text'
+# Target:    tint_utils_text
+# Kind:      lib
 ################################################################################
-tint_add_target("utils/text"
+tint_add_target(tint_utils_text lib
   utils/text/string.cc
   utils/text/string.h
   utils/text/string_stream.cc
@@ -32,36 +33,37 @@
   utils/text/unicode.h
 )
 
-tint_target_add_dependencies("utils/text"
-  "utils/containers"
-  "utils/ice"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/rtti"
-  "utils/traits"
+tint_target_add_dependencies(tint_utils_text lib
+  tint_utils_containers
+  tint_utils_ice
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_rtti
+  tint_utils_traits
 )
 
 ################################################################################
-# CMake target: 'tint_utils_text_test'
+# Target:    tint_utils_text_test
+# Kind:      test
 ################################################################################
-tint_add_target("utils/text:test"
+tint_add_target(tint_utils_text_test test
   utils/text/string_stream_test.cc
   utils/text/string_test.cc
   utils/text/unicode_test.cc
 )
 
-tint_target_add_dependencies("utils/text:test"
-  "utils/containers"
-  "utils/ice"
-  "utils/macros"
-  "utils/math"
-  "utils/memory"
-  "utils/rtti"
-  "utils/text"
-  "utils/traits"
+tint_target_add_dependencies(tint_utils_text_test test
+  tint_utils_containers
+  tint_utils_ice
+  tint_utils_macros
+  tint_utils_math
+  tint_utils_memory
+  tint_utils_rtti
+  tint_utils_text
+  tint_utils_traits
 )
 
-tint_target_add_external_dependencies("utils/text:test"
+tint_target_add_external_dependencies(tint_utils_text_test test
   "gtest"
 )
diff --git a/src/tint/utils/traits/BUILD.cmake b/src/tint/utils/traits/BUILD.cmake
index 9e0809d..e8452a6 100644
--- a/src/tint/utils/traits/BUILD.cmake
+++ b/src/tint/utils/traits/BUILD.cmake
@@ -21,24 +21,26 @@
 ################################################################################
 
 ################################################################################
-# CMake target: 'tint_utils_traits'
+# Target:    tint_utils_traits
+# Kind:      lib
 ################################################################################
-tint_add_target("utils/traits"
+tint_add_target(tint_utils_traits lib
   utils/traits/traits.cc
   utils/traits/traits.h
 )
 
 ################################################################################
-# CMake target: 'tint_utils_traits_test'
+# Target:    tint_utils_traits_test
+# Kind:      test
 ################################################################################
-tint_add_target("utils/traits:test"
+tint_add_target(tint_utils_traits_test test
   utils/traits/traits_test.cc
 )
 
-tint_target_add_dependencies("utils/traits:test"
-  "utils/traits"
+tint_target_add_dependencies(tint_utils_traits_test test
+  tint_utils_traits
 )
 
-tint_target_add_external_dependencies("utils/traits:test"
+tint_target_add_external_dependencies(tint_utils_traits_test test
   "gtest"
 )
diff --git a/tools/src/cmd/gen/build/BUILD.cmake.tmpl b/tools/src/cmd/gen/build/BUILD.cmake.tmpl
index 64361e6..376be16 100644
--- a/tools/src/cmd/gen/build/BUILD.cmake.tmpl
+++ b/tools/src/cmd/gen/build/BUILD.cmake.tmpl
@@ -40,13 +40,19 @@
 --------------------------------------------------------------------------------
 */ -}}
 {{- define "Target"}}
+{{-   $Kind := $.Kind}}
+{{-   $Name := Eval "TargetName" $}}
 {{-   if $.Condition}}
 if({{Eval "Expression" $.Condition}})
 {{-   end}}
 ################################################################################
-# CMake target: 'tint_{{Replace (print $.Name) "/" "_"  ":" "_"}}'
+# Target:    {{$Name}}
+# Kind:      {{$Kind}}
+{{-   if $.Condition}}
+# Condition: {{Eval "Expression" $.Condition}}
+{{-   end}}
 ################################################################################
-tint_add_target("{{$.Name}}"
+tint_add_target({{$Name}} {{$Kind}}
 {{- /* Emit unconditional files */}}
 {{-   $UnconditionalSourceFiles := $.UnconditionalSourceFiles}}
 {{-   if $UnconditionalSourceFiles }}
@@ -60,9 +66,9 @@
 {{-   $UnconditionalDeps    := $.Dependencies.UnconditionalInternal }}
 {{-   if $UnconditionalDeps}}
 {{/*   newline */}}
-tint_target_add_dependencies("{{$.Name}}"
+tint_target_add_dependencies({{$Name}} {{$Kind}}
 {{-     range $Dep := $UnconditionalDeps}}
-  "{{$Dep.Name}}"
+  {{Eval "TargetName" $Dep}}
 {{-     end}}
 )
 {{-   end}}
@@ -71,7 +77,7 @@
 {{-   $UnconditionalExtDeps := $.Dependencies.UnconditionalExternal }}
 {{-   if $UnconditionalExtDeps}}
 {{/*   newline */}}
-tint_target_add_external_dependencies("{{$.Name}}"
+tint_target_add_external_dependencies({{$Name}} {{$Kind}}
 {{-     range $Dep := $UnconditionalExtDeps}}
   "{{$Dep.Name}}"
 {{-     end}}
@@ -83,21 +89,21 @@
 {{/*   newline */}}
 if ({{Eval "Expression" $Cond.Condition}})
 {{-     if $Cond.SourceFiles}}
-  tint_target_add_sources("{{$.Name}}"
+  tint_target_add_sources({{$Name}} {{$Kind}}
 {{-       range $File := $Cond.SourceFiles}}
     "{{$File.Path}}"
 {{-       end}}
   )
 {{-     end}}
 {{-     if $Cond.InternalDependencies}}
-  tint_target_add_dependencies("{{$.Name}}"
+  tint_target_add_dependencies({{$Name}} {{$Kind}}
 {{-       range $Dep := $Cond.InternalDependencies}}
-    "{{$Dep.Name}}"
+    {{Eval "TargetName" $Dep}}
 {{-       end}}
   )
 {{-     end}}
 {{-     if $Cond.ExternalDependencies}}
-  tint_target_add_external_dependencies("{{$.Name}}"
+  tint_target_add_external_dependencies({{$Name}} {{$Kind}}
 {{-       range $Dep := $Cond.ExternalDependencies}}
     "{{$Dep.Name}}"
 {{-       end}}
@@ -108,7 +114,7 @@
 
 {{-   if $.OutputName}}
 {{/*   newline */}}
-tint_target_set_output_name("{{$.Name}}" "{{$.OutputName}}")
+tint_target_set_output_name({{$Name}} {{$Kind}} "{{$.OutputName}}")
 {{-   end}}
 {{/*   newline */}}
 {{-   if $.Condition}}
@@ -119,6 +125,16 @@
 
 {{- /*
 --------------------------------------------------------------------------------
+-- Emits a CMake target name
+--------------------------------------------------------------------------------
+*/ -}}
+{{- define "TargetName"}}
+{{-   Replace (printf "tint_%v" $.Name) "/" "_"  ":" "_"}}
+{{- end}}
+
+
+{{- /*
+--------------------------------------------------------------------------------
 -- Emits a CMake conditional expression
 --------------------------------------------------------------------------------
 */ -}}
@@ -131,3 +147,4 @@
 {{- end}}
 
 {{- /* eat newlines */ -}}
+