[tint] Move headers from include/tint to src/tint/api

Breaks dependency hops from src/tint -> include/tint -> src/tint which
bazel won't accept.

Change-Id: I86efffd249d596a5a17a88d0c2b680f0edc041d5
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/147060
Reviewed-by: Dan Sinclair <dsinclair@chromium.org>
Commit-Queue: Ben Clayton <bclayton@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
Auto-Submit: Ben Clayton <bclayton@google.com>
Reviewed-by: James Price <jrprice@google.com>
diff --git a/include/tint/tint.h b/include/tint/tint.h
index 046a685..c8f6581 100644
--- a/include/tint/tint.h
+++ b/include/tint/tint.h
@@ -21,6 +21,10 @@
 // TODO(tint:88): When implementing support for an install target, all of these
 //                headers will need to be moved to include/tint/.
 
+#include "src/tint/api/common/binding_point.h"
+#include "src/tint/api/options/array_length_from_uniform.h"
+#include "src/tint/api/options/binding_remapper.h"
+#include "src/tint/api/options/external_texture.h"
 #include "src/tint/api/tint.h"
 #include "src/tint/lang/core/type/manager.h"
 #include "src/tint/lang/wgsl/ast/transform/first_index_offset.h"
@@ -33,10 +37,6 @@
 #include "src/tint/lang/wgsl/inspector/inspector.h"
 #include "src/tint/utils/diagnostic/formatter.h"
 #include "src/tint/utils/diagnostic/printer.h"
-#include "tint/array_length_from_uniform_options.h"
-#include "tint/binding_point.h"
-#include "tint/binding_remapper_options.h"
-#include "tint/external_texture_options.h"
 
 #if TINT_BUILD_SPV_READER
 #include "src/tint/lang/spirv/reader/reader.h"
diff --git a/src/dawn/native/ShaderModule.h b/src/dawn/native/ShaderModule.h
index 5872015..995c426 100644
--- a/src/dawn/native/ShaderModule.h
+++ b/src/dawn/native/ShaderModule.h
@@ -39,7 +39,7 @@
 #include "dawn/native/PerStage.h"
 #include "dawn/native/VertexFormat.h"
 #include "dawn/native/dawn_platform.h"
-#include "tint/override_id.h"
+#include "tint/tint.h"
 
 namespace tint {
 
diff --git a/src/tint/api/BUILD.cmake b/src/tint/api/BUILD.cmake
index b8d0aa9..31e7f42 100644
--- a/src/tint/api/BUILD.cmake
+++ b/src/tint/api/BUILD.cmake
@@ -20,12 +20,17 @@
 # Do not modify this file directly
 ################################################################################
 
+include(api/common/BUILD.cmake)
+include(api/options/BUILD.cmake)
+
 tint_add_target("api"
   api/tint.cc
   api/tint.h
 )
 
 tint_target_add_dependencies("api"
+  "api/common"
+  "api/options"
   "lang/core"
   "lang/core/constant"
   "lang/core/type"
diff --git a/src/tint/api/common/BUILD.cmake b/src/tint/api/common/BUILD.cmake
new file mode 100644
index 0000000..c1e403d
--- /dev/null
+++ b/src/tint/api/common/BUILD.cmake
@@ -0,0 +1,35 @@
+# Copyright 2023 The Tint Authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+################################################################################
+# File generated by tools/src/cmd/gen
+# using the template:
+#   tools/src/cmd/gen/build/BUILD.cmake.tmpl
+#
+# Do not modify this file directly
+################################################################################
+
+tint_add_target("api/common"
+  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"
+)
diff --git a/include/tint/binding_point.h b/src/tint/api/common/binding_point.h
similarity index 95%
rename from include/tint/binding_point.h
rename to src/tint/api/common/binding_point.h
index e23a5aa..4be738a 100644
--- a/include/tint/binding_point.h
+++ b/src/tint/api/common/binding_point.h
@@ -12,8 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef INCLUDE_TINT_BINDING_POINT_H_
-#define INCLUDE_TINT_BINDING_POINT_H_
+#ifndef SRC_TINT_API_COMMON_BINDING_POINT_H_
+#define SRC_TINT_API_COMMON_BINDING_POINT_H_
 
 #include <stdint.h>
 
@@ -89,4 +89,4 @@
 
 }  // namespace std
 
-#endif  // INCLUDE_TINT_BINDING_POINT_H_
+#endif  // SRC_TINT_API_COMMON_BINDING_POINT_H_
diff --git a/src/tint/api/common/common.cc b/src/tint/api/common/common.cc
new file mode 100644
index 0000000..620401a
--- /dev/null
+++ b/src/tint/api/common/common.cc
@@ -0,0 +1,20 @@
+// Copyright 2023 The Tint Authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#if defined(_MSC_VER) && !defined(__clang__)
+
+// A placeholder symbol used to make MSVC emit a .lib for this lib target.
+int tint_api_common_symbol = 1;
+
+#endif
diff --git a/include/tint/override_id.h b/src/tint/api/common/override_id.h
similarity index 92%
rename from include/tint/override_id.h
rename to src/tint/api/common/override_id.h
index f7b5ef8..3094bcf 100644
--- a/include/tint/override_id.h
+++ b/src/tint/api/common/override_id.h
@@ -12,8 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef SRC_TINT_OVERRIDE_ID_H_
-#define SRC_TINT_OVERRIDE_ID_H_
+#ifndef SRC_TINT_API_COMMON_OVERRIDE_ID_H_
+#define SRC_TINT_API_COMMON_OVERRIDE_ID_H_
 
 #include <stdint.h>
 #include <functional>
@@ -24,6 +24,7 @@
 
 /// OverrideId is a numerical identifier for an override variable, unique per program.
 struct OverrideId {
+    /// The identifier value
     uint16_t value = 0;
 
     /// Reflect the fields of this struct so that it can be used by tint::ForeachField()
@@ -63,4 +64,4 @@
 
 }  // namespace std
 
-#endif  // SRC_TINT_OVERRIDE_ID_H_
+#endif  // SRC_TINT_API_COMMON_OVERRIDE_ID_H_
diff --git a/src/tint/api/options/BUILD.cmake b/src/tint/api/options/BUILD.cmake
new file mode 100644
index 0000000..4a257cf
--- /dev/null
+++ b/src/tint/api/options/BUILD.cmake
@@ -0,0 +1,38 @@
+# Copyright 2023 The Tint Authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+################################################################################
+# File generated by tools/src/cmd/gen
+# using the template:
+#   tools/src/cmd/gen/build/BUILD.cmake.tmpl
+#
+# Do not modify this file directly
+################################################################################
+
+tint_add_target("api/options"
+  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"
+)
diff --git a/include/tint/array_length_from_uniform_options.h b/src/tint/api/options/array_length_from_uniform.h
similarity index 84%
rename from include/tint/array_length_from_uniform_options.h
rename to src/tint/api/options/array_length_from_uniform.h
index 0070566..6241276 100644
--- a/include/tint/array_length_from_uniform_options.h
+++ b/src/tint/api/options/array_length_from_uniform.h
@@ -12,12 +12,12 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef INCLUDE_TINT_ARRAY_LENGTH_FROM_UNIFORM_OPTIONS_H_
-#define INCLUDE_TINT_ARRAY_LENGTH_FROM_UNIFORM_OPTIONS_H_
+#ifndef SRC_TINT_API_OPTIONS_ARRAY_LENGTH_FROM_UNIFORM_H_
+#define SRC_TINT_API_OPTIONS_ARRAY_LENGTH_FROM_UNIFORM_H_
 
 #include <unordered_map>
 
-#include "tint/binding_point.h"
+#include "src/tint/api/common/binding_point.h"
 
 namespace tint {
 
@@ -37,4 +37,4 @@
 
 }  // namespace tint
 
-#endif  // INCLUDE_TINT_ARRAY_LENGTH_FROM_UNIFORM_OPTIONS_H_
+#endif  // SRC_TINT_API_OPTIONS_ARRAY_LENGTH_FROM_UNIFORM_H_
diff --git a/include/tint/binding_remapper_options.h b/src/tint/api/options/binding_remapper.h
similarity index 88%
rename from include/tint/binding_remapper_options.h
rename to src/tint/api/options/binding_remapper.h
index d92c3b9..e1cd178 100644
--- a/include/tint/binding_remapper_options.h
+++ b/src/tint/api/options/binding_remapper.h
@@ -12,13 +12,13 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef INCLUDE_TINT_BINDING_REMAPPER_OPTIONS_H_
-#define INCLUDE_TINT_BINDING_REMAPPER_OPTIONS_H_
+#ifndef SRC_TINT_API_OPTIONS_BINDING_REMAPPER_H_
+#define SRC_TINT_API_OPTIONS_BINDING_REMAPPER_H_
 
 #include <unordered_map>
 
+#include "src/tint/api/common/binding_point.h"
 #include "src/tint/lang/core/access.h"
-#include "tint/binding_point.h"
 
 namespace tint {
 
@@ -46,4 +46,4 @@
 
 }  // namespace tint
 
-#endif  // INCLUDE_TINT_BINDING_REMAPPER_OPTIONS_H_
+#endif  // SRC_TINT_API_OPTIONS_BINDING_REMAPPER_H_
diff --git a/include/tint/external_texture_options.h b/src/tint/api/options/external_texture.h
similarity index 89%
rename from include/tint/external_texture_options.h
rename to src/tint/api/options/external_texture.h
index 669cb8d..9454917 100644
--- a/include/tint/external_texture_options.h
+++ b/src/tint/api/options/external_texture.h
@@ -12,12 +12,12 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#ifndef INCLUDE_TINT_EXTERNAL_TEXTURE_OPTIONS_H_
-#define INCLUDE_TINT_EXTERNAL_TEXTURE_OPTIONS_H_
+#ifndef SRC_TINT_API_OPTIONS_EXTERNAL_TEXTURE_H_
+#define SRC_TINT_API_OPTIONS_EXTERNAL_TEXTURE_H_
 
 #include <unordered_map>
 
-#include "tint/binding_point.h"
+#include "src/tint/api/common/binding_point.h"
 
 namespace tint {
 
@@ -51,4 +51,4 @@
 
 }  // namespace tint
 
-#endif  // INCLUDE_TINT_EXTERNAL_TEXTURE_OPTIONS_H_
+#endif  // SRC_TINT_API_OPTIONS_EXTERNAL_TEXTURE_H_
diff --git a/src/tint/api/options/options.cc b/src/tint/api/options/options.cc
new file mode 100644
index 0000000..3d6e3fd
--- /dev/null
+++ b/src/tint/api/options/options.cc
@@ -0,0 +1,20 @@
+// Copyright 2023 The Tint Authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#if defined(_MSC_VER) && !defined(__clang__)
+
+// A placeholder symbol used to make MSVC emit a .lib for this lib target.
+int tint_api_options_symbol = 1;
+
+#endif
diff --git a/src/tint/api/tint.cc b/src/tint/api/tint.cc
index 21f90ac..e6a8d2a 100644
--- a/src/tint/api/tint.cc
+++ b/src/tint/api/tint.cc
@@ -18,6 +18,9 @@
 // The following includes are used by './tools/run gen' to add an implicit
 // dependency from 'tint/api' to the libraries used to make up the Tint API.
 ////////////////////////////////////////////////////////////////////////////////
+#include "src/tint/api/common/override_id.h"
+#include "src/tint/api/options/array_length_from_uniform.h"
+
 #if TINT_BUILD_GLSL_WRITER
 #include "src/tint/lang/glsl/writer/writer.h"  // nogncheck
 #endif
diff --git a/src/tint/cmd/common/BUILD.cmake b/src/tint/cmd/common/BUILD.cmake
index 6d210d2..cdda147 100644
--- a/src/tint/cmd/common/BUILD.cmake
+++ b/src/tint/cmd/common/BUILD.cmake
@@ -28,6 +28,8 @@
 )
 
 tint_target_add_dependencies("cmd/common"
+  "api/common"
+  "api/options"
   "lang/core"
   "lang/core/constant"
   "lang/core/type"
@@ -70,6 +72,8 @@
 )
 
 tint_target_add_dependencies("cmd/common:test"
+  "api/common"
+  "api/options"
   "cmd/common"
   "lang/core"
   "lang/core/constant"
@@ -85,6 +89,7 @@
   "utils/macros"
   "utils/math"
   "utils/memory"
+  "utils/reflection"
   "utils/result"
   "utils/rtti"
   "utils/symbol"
diff --git a/src/tint/cmd/common/generate_external_texture_bindings.cc b/src/tint/cmd/common/generate_external_texture_bindings.cc
index a8a40b3..0253b71 100644
--- a/src/tint/cmd/common/generate_external_texture_bindings.cc
+++ b/src/tint/cmd/common/generate_external_texture_bindings.cc
@@ -18,11 +18,11 @@
 #include <unordered_map>
 #include <vector>
 
+#include "src/tint/api/common/binding_point.h"
 #include "src/tint/lang/core/type/external_texture.h"
 #include "src/tint/lang/wgsl/ast/module.h"
 #include "src/tint/lang/wgsl/program/program.h"
 #include "src/tint/lang/wgsl/sem/variable.h"
-#include "tint/binding_point.h"
 
 namespace tint::cmd {
 
diff --git a/src/tint/cmd/common/generate_external_texture_bindings.h b/src/tint/cmd/common/generate_external_texture_bindings.h
index eee5ae9..7c3d79c 100644
--- a/src/tint/cmd/common/generate_external_texture_bindings.h
+++ b/src/tint/cmd/common/generate_external_texture_bindings.h
@@ -15,7 +15,7 @@
 #ifndef SRC_TINT_CMD_COMMON_GENERATE_EXTERNAL_TEXTURE_BINDINGS_H_
 #define SRC_TINT_CMD_COMMON_GENERATE_EXTERNAL_TEXTURE_BINDINGS_H_
 
-#include "tint/external_texture_options.h"
+#include "src/tint/api/options/external_texture.h"
 
 // Forward declarations
 namespace tint {
diff --git a/src/tint/cmd/common/generate_external_texture_bindings_test.cc b/src/tint/cmd/common/generate_external_texture_bindings_test.cc
index 9d6fdd5..c404294 100644
--- a/src/tint/cmd/common/generate_external_texture_bindings_test.cc
+++ b/src/tint/cmd/common/generate_external_texture_bindings_test.cc
@@ -15,10 +15,10 @@
 #include <utility>
 
 #include "gtest/gtest.h"
+#include "src/tint/api/common/binding_point.h"
 #include "src/tint/cmd/common/generate_external_texture_bindings.h"
 #include "src/tint/lang/wgsl/program/program_builder.h"
 #include "src/tint/lang/wgsl/resolver/resolve.h"
-#include "tint/binding_point.h"
 
 namespace tint::cmd {
 namespace {
diff --git a/src/tint/cmd/info/BUILD.cmake b/src/tint/cmd/info/BUILD.cmake
index ba03eca..ff8461b 100644
--- a/src/tint/cmd/info/BUILD.cmake
+++ b/src/tint/cmd/info/BUILD.cmake
@@ -25,6 +25,7 @@
 )
 
 tint_target_add_dependencies("cmd/info:cmd"
+  "api/common"
   "cmd/common"
   "lang/core"
   "lang/core/constant"
@@ -42,6 +43,7 @@
   "utils/macros"
   "utils/math"
   "utils/memory"
+  "utils/reflection"
   "utils/result"
   "utils/rtti"
   "utils/symbol"
diff --git a/src/tint/cmd/loopy/BUILD.cmake b/src/tint/cmd/loopy/BUILD.cmake
index a881479..58bc80f 100644
--- a/src/tint/cmd/loopy/BUILD.cmake
+++ b/src/tint/cmd/loopy/BUILD.cmake
@@ -26,6 +26,8 @@
 
 tint_target_add_dependencies("cmd/loopy:cmd"
   "api"
+  "api/common"
+  "api/options"
   "cmd/common"
   "lang/core"
   "lang/core/constant"
diff --git a/src/tint/cmd/tint/BUILD.cmake b/src/tint/cmd/tint/BUILD.cmake
index 34ec55d..1cde733 100644
--- a/src/tint/cmd/tint/BUILD.cmake
+++ b/src/tint/cmd/tint/BUILD.cmake
@@ -26,6 +26,8 @@
 
 tint_target_add_dependencies("cmd/tint:cmd"
   "api"
+  "api/common"
+  "api/options"
   "cmd/common"
   "lang/core"
   "lang/core/constant"
diff --git a/src/tint/fuzzers/tint_common_fuzzer.cc b/src/tint/fuzzers/tint_common_fuzzer.cc
index 3328f14..b8e74ed 100644
--- a/src/tint/fuzzers/tint_common_fuzzer.cc
+++ b/src/tint/fuzzers/tint_common_fuzzer.cc
@@ -30,6 +30,7 @@
 #include "spirv-tools/libspirv.hpp"
 #endif  // TINT_BUILD_SPV_READER || TINT_BUILD_SPV_WRITER
 
+#include "src/tint/api/common/binding_point.h"
 #include "src/tint/fuzzers/apply_substitute_overrides.h"
 #include "src/tint/lang/core/type/external_texture.h"
 #include "src/tint/lang/wgsl/ast/module.h"
@@ -39,7 +40,6 @@
 #include "src/tint/utils/diagnostic/formatter.h"
 #include "src/tint/utils/diagnostic/printer.h"
 #include "src/tint/utils/math/hash.h"
-#include "tint/binding_point.h"
 
 namespace tint::fuzzers {
 
diff --git a/src/tint/lang/core/BUILD.cmake b/src/tint/lang/core/BUILD.cmake
index e6015c1..ab277c5 100644
--- a/src/tint/lang/core/BUILD.cmake
+++ b/src/tint/lang/core/BUILD.cmake
@@ -92,6 +92,7 @@
 )
 
 tint_target_add_dependencies("lang/core:test"
+  "api/common"
   "lang/core"
   "lang/core/constant"
   "lang/core/type"
@@ -105,6 +106,7 @@
   "utils/macros"
   "utils/math"
   "utils/memory"
+  "utils/reflection"
   "utils/result"
   "utils/rtti"
   "utils/symbol"
diff --git a/src/tint/lang/core/constant/BUILD.cmake b/src/tint/lang/core/constant/BUILD.cmake
index fc1e8e2..71ce141 100644
--- a/src/tint/lang/core/constant/BUILD.cmake
+++ b/src/tint/lang/core/constant/BUILD.cmake
@@ -75,6 +75,7 @@
 )
 
 tint_target_add_dependencies("lang/core/constant:test"
+  "api/common"
   "lang/core"
   "lang/core/constant"
   "lang/core/intrinsic"
@@ -93,6 +94,7 @@
   "utils/macros"
   "utils/math"
   "utils/memory"
+  "utils/reflection"
   "utils/result"
   "utils/rtti"
   "utils/symbol"
diff --git a/src/tint/lang/core/intrinsic/BUILD.cmake b/src/tint/lang/core/intrinsic/BUILD.cmake
index aef5e03..09fc728 100644
--- a/src/tint/lang/core/intrinsic/BUILD.cmake
+++ b/src/tint/lang/core/intrinsic/BUILD.cmake
@@ -53,6 +53,7 @@
 )
 
 tint_target_add_dependencies("lang/core/intrinsic:test"
+  "api/common"
   "lang/core"
   "lang/core/constant"
   "lang/core/intrinsic"
@@ -71,6 +72,7 @@
   "utils/macros"
   "utils/math"
   "utils/memory"
+  "utils/reflection"
   "utils/result"
   "utils/rtti"
   "utils/symbol"
diff --git a/src/tint/lang/core/ir/BUILD.cmake b/src/tint/lang/core/ir/BUILD.cmake
index 59467b6..c03b4fe 100644
--- a/src/tint/lang/core/ir/BUILD.cmake
+++ b/src/tint/lang/core/ir/BUILD.cmake
@@ -124,6 +124,7 @@
 )
 
 tint_target_add_dependencies("lang/core/ir"
+  "api/common"
   "lang/core"
   "lang/core/constant"
   "lang/core/type"
@@ -134,6 +135,7 @@
   "utils/macros"
   "utils/math"
   "utils/memory"
+  "utils/reflection"
   "utils/result"
   "utils/rtti"
   "utils/symbol"
@@ -187,6 +189,7 @@
 )
 
 tint_target_add_dependencies("lang/core/ir:test"
+  "api/common"
   "lang/core"
   "lang/core/constant"
   "lang/core/type"
@@ -197,6 +200,7 @@
   "utils/macros"
   "utils/math"
   "utils/memory"
+  "utils/reflection"
   "utils/result"
   "utils/rtti"
   "utils/symbol"
diff --git a/src/tint/lang/core/ir/function_param.h b/src/tint/lang/core/ir/function_param.h
index b1e5145..f8f83d4 100644
--- a/src/tint/lang/core/ir/function_param.h
+++ b/src/tint/lang/core/ir/function_param.h
@@ -17,12 +17,12 @@
 
 #include <utility>
 
+#include "src/tint/api/common/binding_point.h"
 #include "src/tint/lang/core/ir/location.h"
 #include "src/tint/lang/core/ir/value.h"
 #include "src/tint/utils/containers/vector.h"
 #include "src/tint/utils/ice/ice.h"
 #include "src/tint/utils/rtti/castable.h"
-#include "tint/binding_point.h"
 
 namespace tint::core::ir {
 
diff --git a/src/tint/lang/core/ir/transform/BUILD.cmake b/src/tint/lang/core/ir/transform/BUILD.cmake
index 3224ab5..27a01de 100644
--- a/src/tint/lang/core/ir/transform/BUILD.cmake
+++ b/src/tint/lang/core/ir/transform/BUILD.cmake
@@ -43,6 +43,8 @@
 )
 
 tint_target_add_dependencies("lang/core/ir/transform"
+  "api/common"
+  "api/options"
   "lang/core"
   "lang/core/constant"
   "lang/core/type"
@@ -53,6 +55,7 @@
   "utils/macros"
   "utils/math"
   "utils/memory"
+  "utils/reflection"
   "utils/result"
   "utils/rtti"
   "utils/symbol"
@@ -81,6 +84,8 @@
 )
 
 tint_target_add_dependencies("lang/core/ir/transform:test"
+  "api/common"
+  "api/options"
   "lang/core"
   "lang/core/constant"
   "lang/core/type"
@@ -91,6 +96,7 @@
   "utils/macros"
   "utils/math"
   "utils/memory"
+  "utils/reflection"
   "utils/result"
   "utils/rtti"
   "utils/symbol"
diff --git a/src/tint/lang/core/ir/transform/binding_remapper.h b/src/tint/lang/core/ir/transform/binding_remapper.h
index 535a856..821f1d9 100644
--- a/src/tint/lang/core/ir/transform/binding_remapper.h
+++ b/src/tint/lang/core/ir/transform/binding_remapper.h
@@ -17,8 +17,8 @@
 
 #include <string>
 
+#include "src/tint/api/options/binding_remapper.h"
 #include "src/tint/utils/result/result.h"
-#include "tint/binding_remapper_options.h"
 
 // Forward declarations.
 namespace tint::core::ir {
diff --git a/src/tint/lang/core/ir/transform/multiplanar_external_texture.h b/src/tint/lang/core/ir/transform/multiplanar_external_texture.h
index 31df37a..780953b 100644
--- a/src/tint/lang/core/ir/transform/multiplanar_external_texture.h
+++ b/src/tint/lang/core/ir/transform/multiplanar_external_texture.h
@@ -17,8 +17,8 @@
 
 #include <string>
 
+#include "src/tint/api/options/external_texture.h"
 #include "src/tint/utils/result/result.h"
-#include "tint/external_texture_options.h"
 
 // Forward declarations.
 namespace tint::core::ir {
diff --git a/src/tint/lang/core/ir/var.h b/src/tint/lang/core/ir/var.h
index 96d3b62..8349be5 100644
--- a/src/tint/lang/core/ir/var.h
+++ b/src/tint/lang/core/ir/var.h
@@ -15,13 +15,13 @@
 #ifndef SRC_TINT_LANG_CORE_IR_VAR_H_
 #define SRC_TINT_LANG_CORE_IR_VAR_H_
 
+#include "src/tint/api/common/binding_point.h"
 #include "src/tint/lang/core/access.h"
 #include "src/tint/lang/core/address_space.h"
 #include "src/tint/lang/core/ir/operand_instruction.h"
 #include "src/tint/lang/core/type/pointer.h"
 #include "src/tint/utils/containers/vector.h"
 #include "src/tint/utils/rtti/castable.h"
-#include "tint/binding_point.h"
 
 namespace tint::core::ir {
 
diff --git a/src/tint/lang/core/type/BUILD.cmake b/src/tint/lang/core/type/BUILD.cmake
index 1132fa0..ab4a194 100644
--- a/src/tint/lang/core/type/BUILD.cmake
+++ b/src/tint/lang/core/type/BUILD.cmake
@@ -136,6 +136,7 @@
 )
 
 tint_target_add_dependencies("lang/core/type:test"
+  "api/common"
   "lang/core"
   "lang/core/constant"
   "lang/core/type"
@@ -150,6 +151,7 @@
   "utils/macros"
   "utils/math"
   "utils/memory"
+  "utils/reflection"
   "utils/result"
   "utils/rtti"
   "utils/symbol"
diff --git a/src/tint/lang/glsl/writer/BUILD.cmake b/src/tint/lang/glsl/writer/BUILD.cmake
index dfe82ef..4cf7437 100644
--- a/src/tint/lang/glsl/writer/BUILD.cmake
+++ b/src/tint/lang/glsl/writer/BUILD.cmake
@@ -32,6 +32,8 @@
 )
 
 tint_target_add_dependencies("lang/glsl/writer"
+  "api/common"
+  "api/options"
   "lang/core"
   "lang/core/constant"
   "lang/core/type"
@@ -47,6 +49,7 @@
   "utils/macros"
   "utils/math"
   "utils/memory"
+  "utils/reflection"
   "utils/result"
   "utils/rtti"
   "utils/symbol"
@@ -68,6 +71,8 @@
 )
 
 tint_target_add_dependencies("lang/glsl/writer:bench"
+  "api/common"
+  "api/options"
   "cmd/bench"
   "lang/core"
   "lang/core/constant"
@@ -82,6 +87,7 @@
   "utils/macros"
   "utils/math"
   "utils/memory"
+  "utils/reflection"
   "utils/result"
   "utils/rtti"
   "utils/symbol"
diff --git a/src/tint/lang/glsl/writer/ast_printer/BUILD.cmake b/src/tint/lang/glsl/writer/ast_printer/BUILD.cmake
index e06b488..e0f94d1 100644
--- a/src/tint/lang/glsl/writer/ast_printer/BUILD.cmake
+++ b/src/tint/lang/glsl/writer/ast_printer/BUILD.cmake
@@ -27,6 +27,8 @@
 )
 
 tint_target_add_dependencies("lang/glsl/writer/ast_printer"
+  "api/common"
+  "api/options"
   "lang/core"
   "lang/core/constant"
   "lang/core/type"
@@ -43,6 +45,7 @@
   "utils/macros"
   "utils/math"
   "utils/memory"
+  "utils/reflection"
   "utils/result"
   "utils/rtti"
   "utils/strconv"
@@ -95,6 +98,8 @@
 )
 
 tint_target_add_dependencies("lang/glsl/writer/ast_printer:test"
+  "api/common"
+  "api/options"
   "lang/core"
   "lang/core/constant"
   "lang/core/type"
@@ -112,6 +117,7 @@
   "utils/macros"
   "utils/math"
   "utils/memory"
+  "utils/reflection"
   "utils/result"
   "utils/rtti"
   "utils/symbol"
diff --git a/src/tint/lang/glsl/writer/common/BUILD.cmake b/src/tint/lang/glsl/writer/common/BUILD.cmake
index d171b15..6f11b86 100644
--- a/src/tint/lang/glsl/writer/common/BUILD.cmake
+++ b/src/tint/lang/glsl/writer/common/BUILD.cmake
@@ -28,8 +28,13 @@
 )
 
 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"
 )
diff --git a/src/tint/lang/glsl/writer/common/options.h b/src/tint/lang/glsl/writer/common/options.h
index 0bb1e23..e2aadd7 100644
--- a/src/tint/lang/glsl/writer/common/options.h
+++ b/src/tint/lang/glsl/writer/common/options.h
@@ -18,10 +18,10 @@
 #include <string>
 #include <unordered_map>
 
+#include "src/tint/api/options/external_texture.h"
 #include "src/tint/lang/core/access.h"
 #include "src/tint/lang/glsl/writer/common/version.h"
 #include "src/tint/lang/wgsl/sem/sampler_texture_pair.h"
-#include "tint/external_texture_options.h"
 
 namespace tint::glsl::writer {
 
diff --git a/src/tint/lang/hlsl/writer/BUILD.cmake b/src/tint/lang/hlsl/writer/BUILD.cmake
index 1254bfc..8d6a374 100644
--- a/src/tint/lang/hlsl/writer/BUILD.cmake
+++ b/src/tint/lang/hlsl/writer/BUILD.cmake
@@ -32,6 +32,8 @@
 )
 
 tint_target_add_dependencies("lang/hlsl/writer"
+  "api/common"
+  "api/options"
   "lang/core"
   "lang/core/constant"
   "lang/core/type"
@@ -69,6 +71,8 @@
 )
 
 tint_target_add_dependencies("lang/hlsl/writer:bench"
+  "api/common"
+  "api/options"
   "cmd/bench"
   "lang/core"
   "lang/core/constant"
diff --git a/src/tint/lang/hlsl/writer/ast_printer/BUILD.cmake b/src/tint/lang/hlsl/writer/ast_printer/BUILD.cmake
index 57fb681..31ce08e 100644
--- a/src/tint/lang/hlsl/writer/ast_printer/BUILD.cmake
+++ b/src/tint/lang/hlsl/writer/ast_printer/BUILD.cmake
@@ -27,6 +27,8 @@
 )
 
 tint_target_add_dependencies("lang/hlsl/writer/ast_printer"
+  "api/common"
+  "api/options"
   "lang/core"
   "lang/core/constant"
   "lang/core/type"
@@ -90,6 +92,8 @@
 )
 
 tint_target_add_dependencies("lang/hlsl/writer/ast_printer:test"
+  "api/common"
+  "api/options"
   "lang/core"
   "lang/core/constant"
   "lang/core/type"
diff --git a/src/tint/lang/hlsl/writer/ast_printer/ast_printer.h b/src/tint/lang/hlsl/writer/ast_printer/ast_printer.h
index ca4489c..f7fc52a 100644
--- a/src/tint/lang/hlsl/writer/ast_printer/ast_printer.h
+++ b/src/tint/lang/hlsl/writer/ast_printer/ast_printer.h
@@ -21,6 +21,8 @@
 #include <unordered_set>
 #include <utility>
 
+#include "src/tint/api/common/binding_point.h"
+#include "src/tint/api/options/array_length_from_uniform.h"
 #include "src/tint/lang/core/builtin_value.h"
 #include "src/tint/lang/hlsl/writer/common/options.h"
 #include "src/tint/lang/wgsl/ast/transform/decompose_memory_access.h"
@@ -28,8 +30,6 @@
 #include "src/tint/utils/containers/scope_stack.h"
 #include "src/tint/utils/generator/text_generator.h"
 #include "src/tint/utils/math/hash.h"
-#include "tint/array_length_from_uniform_options.h"
-#include "tint/binding_point.h"
 
 // Forward declarations
 namespace tint::sem {
diff --git a/src/tint/lang/hlsl/writer/common/BUILD.cmake b/src/tint/lang/hlsl/writer/common/BUILD.cmake
index 4833152..6bd1d15 100644
--- a/src/tint/lang/hlsl/writer/common/BUILD.cmake
+++ b/src/tint/lang/hlsl/writer/common/BUILD.cmake
@@ -26,6 +26,12 @@
 )
 
 tint_target_add_dependencies("lang/hlsl/writer/common"
+  "api/common"
+  "api/options"
+  "lang/core"
   "utils/macros"
+  "utils/math"
   "utils/reflection"
+  "utils/text"
+  "utils/traits"
 )
diff --git a/src/tint/lang/hlsl/writer/common/options.h b/src/tint/lang/hlsl/writer/common/options.h
index 5be8c43..4540a35 100644
--- a/src/tint/lang/hlsl/writer/common/options.h
+++ b/src/tint/lang/hlsl/writer/common/options.h
@@ -19,11 +19,11 @@
 #include <optional>
 #include <vector>
 
+#include "src/tint/api/common/binding_point.h"
+#include "src/tint/api/options/array_length_from_uniform.h"
+#include "src/tint/api/options/binding_remapper.h"
+#include "src/tint/api/options/external_texture.h"
 #include "src/tint/utils/reflection/reflection.h"
-#include "tint/array_length_from_uniform_options.h"
-#include "tint/binding_point.h"
-#include "tint/binding_remapper_options.h"
-#include "tint/external_texture_options.h"
 
 namespace tint::hlsl::writer {
 
diff --git a/src/tint/lang/msl/writer/BUILD.cmake b/src/tint/lang/msl/writer/BUILD.cmake
index 87c3673..5e86d85 100644
--- a/src/tint/lang/msl/writer/BUILD.cmake
+++ b/src/tint/lang/msl/writer/BUILD.cmake
@@ -34,6 +34,8 @@
 )
 
 tint_target_add_dependencies("lang/msl/writer"
+  "api/common"
+  "api/options"
   "lang/core"
   "lang/core/constant"
   "lang/core/type"
@@ -84,6 +86,8 @@
 )
 
 tint_target_add_dependencies("lang/msl/writer:bench"
+  "api/common"
+  "api/options"
   "cmd/bench"
   "lang/core"
   "lang/core/constant"
diff --git a/src/tint/lang/msl/writer/ast_printer/BUILD.cmake b/src/tint/lang/msl/writer/ast_printer/BUILD.cmake
index b0dbf53..edb1ee0 100644
--- a/src/tint/lang/msl/writer/ast_printer/BUILD.cmake
+++ b/src/tint/lang/msl/writer/ast_printer/BUILD.cmake
@@ -27,6 +27,8 @@
 )
 
 tint_target_add_dependencies("lang/msl/writer/ast_printer"
+  "api/common"
+  "api/options"
   "lang/core"
   "lang/core/constant"
   "lang/core/type"
@@ -93,6 +95,8 @@
 )
 
 tint_target_add_dependencies("lang/msl/writer/ast_printer:test"
+  "api/common"
+  "api/options"
   "lang/core"
   "lang/core/constant"
   "lang/core/type"
diff --git a/src/tint/lang/msl/writer/ast_printer/ast_printer.h b/src/tint/lang/msl/writer/ast_printer/ast_printer.h
index 3194f84..31ef50b 100644
--- a/src/tint/lang/msl/writer/ast_printer/ast_printer.h
+++ b/src/tint/lang/msl/writer/ast_printer/ast_printer.h
@@ -21,6 +21,7 @@
 #include <unordered_set>
 #include <vector>
 
+#include "src/tint/api/options/array_length_from_uniform.h"
 #include "src/tint/lang/core/builtin_value.h"
 #include "src/tint/lang/msl/writer/common/options.h"
 #include "src/tint/lang/wgsl/ast/assignment_statement.h"
@@ -44,7 +45,6 @@
 #include "src/tint/utils/containers/scope_stack.h"
 #include "src/tint/utils/generator/text_generator.h"
 #include "src/tint/utils/text/string_stream.h"
-#include "tint/array_length_from_uniform_options.h"
 
 namespace tint::sem {
 class Builtin;
diff --git a/src/tint/lang/msl/writer/common/BUILD.cmake b/src/tint/lang/msl/writer/common/BUILD.cmake
index b946bdd..2757b7f 100644
--- a/src/tint/lang/msl/writer/common/BUILD.cmake
+++ b/src/tint/lang/msl/writer/common/BUILD.cmake
@@ -29,6 +29,8 @@
 )
 
 tint_target_add_dependencies("lang/msl/writer/common"
+  "api/common"
+  "api/options"
   "lang/core"
   "lang/core/type"
   "utils/containers"
diff --git a/src/tint/lang/msl/writer/common/options.h b/src/tint/lang/msl/writer/common/options.h
index 770f682..16d2b34 100644
--- a/src/tint/lang/msl/writer/common/options.h
+++ b/src/tint/lang/msl/writer/common/options.h
@@ -15,10 +15,10 @@
 #ifndef SRC_TINT_LANG_MSL_WRITER_COMMON_OPTIONS_H_
 #define SRC_TINT_LANG_MSL_WRITER_COMMON_OPTIONS_H_
 
+#include "src/tint/api/options/array_length_from_uniform.h"
+#include "src/tint/api/options/binding_remapper.h"
+#include "src/tint/api/options/external_texture.h"
 #include "src/tint/utils/reflection/reflection.h"
-#include "tint/array_length_from_uniform_options.h"
-#include "tint/binding_remapper_options.h"
-#include "tint/external_texture_options.h"
 
 namespace tint::msl::writer {
 
diff --git a/src/tint/lang/msl/writer/printer/BUILD.cmake b/src/tint/lang/msl/writer/printer/BUILD.cmake
index 0bf4c58..53f0942 100644
--- a/src/tint/lang/msl/writer/printer/BUILD.cmake
+++ b/src/tint/lang/msl/writer/printer/BUILD.cmake
@@ -27,6 +27,7 @@
 )
 
 tint_target_add_dependencies("lang/msl/writer/printer"
+  "api/common"
   "lang/core"
   "lang/core/constant"
   "lang/core/type"
@@ -38,6 +39,7 @@
   "utils/macros"
   "utils/math"
   "utils/memory"
+  "utils/reflection"
   "utils/result"
   "utils/rtti"
   "utils/symbol"
@@ -72,6 +74,7 @@
 )
 
 tint_target_add_dependencies("lang/msl/writer/printer:test"
+  "api/common"
   "lang/core"
   "lang/core/constant"
   "lang/core/type"
@@ -84,6 +87,7 @@
   "utils/macros"
   "utils/math"
   "utils/memory"
+  "utils/reflection"
   "utils/result"
   "utils/rtti"
   "utils/symbol"
diff --git a/src/tint/lang/spirv/reader/ast_parser/BUILD.cmake b/src/tint/lang/spirv/reader/ast_parser/BUILD.cmake
index 998dcab..93f7a28 100644
--- a/src/tint/lang/spirv/reader/ast_parser/BUILD.cmake
+++ b/src/tint/lang/spirv/reader/ast_parser/BUILD.cmake
@@ -45,6 +45,7 @@
 )
 
 tint_target_add_dependencies("lang/spirv/reader/ast_parser"
+  "api/common"
   "lang/core"
   "lang/core/constant"
   "lang/core/type"
@@ -61,6 +62,7 @@
   "utils/macros"
   "utils/math"
   "utils/memory"
+  "utils/reflection"
   "utils/result"
   "utils/rtti"
   "utils/symbol"
@@ -115,6 +117,7 @@
 )
 
 tint_target_add_dependencies("lang/spirv/reader/ast_parser:test"
+  "api/common"
   "lang/core"
   "lang/core/constant"
   "lang/core/type"
@@ -131,6 +134,7 @@
   "utils/macros"
   "utils/math"
   "utils/memory"
+  "utils/reflection"
   "utils/result"
   "utils/rtti"
   "utils/symbol"
diff --git a/src/tint/lang/spirv/reader/common/common.cc b/src/tint/lang/spirv/reader/common/common.cc
index 66dc3af..928b7f2 100644
--- a/src/tint/lang/spirv/reader/common/common.cc
+++ b/src/tint/lang/spirv/reader/common/common.cc
@@ -15,6 +15,6 @@
 #if defined(_MSC_VER) && !defined(__clang__)
 
 // A placeholder symbol used to make MSVC emit a .lib for this lib target.
-int tint_lang_spirv_reader_common = 1;
+int tint_lang_spirv_reader_common_symbol = 1;
 
 #endif
diff --git a/src/tint/lang/spirv/writer/BUILD.cmake b/src/tint/lang/spirv/writer/BUILD.cmake
index d5da3e6..b076e96 100644
--- a/src/tint/lang/spirv/writer/BUILD.cmake
+++ b/src/tint/lang/spirv/writer/BUILD.cmake
@@ -33,6 +33,8 @@
 )
 
 tint_target_add_dependencies("lang/spirv/writer"
+  "api/common"
+  "api/options"
   "lang/core"
   "lang/core/constant"
   "lang/core/type"
@@ -88,6 +90,8 @@
 )
 
 tint_target_add_dependencies("lang/spirv/writer:test"
+  "api/common"
+  "api/options"
   "lang/core"
   "lang/core/constant"
   "lang/core/type"
@@ -161,6 +165,8 @@
 )
 
 tint_target_add_dependencies("lang/spirv/writer:bench"
+  "api/common"
+  "api/options"
   "cmd/bench"
   "lang/core"
   "lang/core/constant"
diff --git a/src/tint/lang/spirv/writer/ast_printer/BUILD.cmake b/src/tint/lang/spirv/writer/ast_printer/BUILD.cmake
index 46a304b..2a1cb7b 100644
--- a/src/tint/lang/spirv/writer/ast_printer/BUILD.cmake
+++ b/src/tint/lang/spirv/writer/ast_printer/BUILD.cmake
@@ -30,6 +30,8 @@
 )
 
 tint_target_add_dependencies("lang/spirv/writer/ast_printer"
+  "api/common"
+  "api/options"
   "lang/core"
   "lang/core/constant"
   "lang/core/type"
@@ -99,6 +101,8 @@
 )
 
 tint_target_add_dependencies("lang/spirv/writer/ast_printer:test"
+  "api/common"
+  "api/options"
   "lang/core"
   "lang/core/constant"
   "lang/core/type"
diff --git a/src/tint/lang/spirv/writer/common/BUILD.cmake b/src/tint/lang/spirv/writer/common/BUILD.cmake
index 1292eeb..95d9238 100644
--- a/src/tint/lang/spirv/writer/common/BUILD.cmake
+++ b/src/tint/lang/spirv/writer/common/BUILD.cmake
@@ -36,9 +36,14 @@
 )
 
 tint_target_add_dependencies("lang/spirv/writer/common"
+  "api/common"
+  "api/options"
+  "lang/core"
   "utils/macros"
   "utils/math"
   "utils/reflection"
+  "utils/text"
+  "utils/traits"
 )
 
 if (TINT_BUILD_SPV_READER  OR  TINT_BUILD_SPV_WRITER)
@@ -59,6 +64,8 @@
 )
 
 tint_target_add_dependencies("lang/spirv/writer/common:test"
+  "api/common"
+  "api/options"
   "lang/core"
   "lang/core/constant"
   "lang/core/type"
diff --git a/src/tint/lang/spirv/writer/common/options.h b/src/tint/lang/spirv/writer/common/options.h
index 53b7a6f..8741fa7 100644
--- a/src/tint/lang/spirv/writer/common/options.h
+++ b/src/tint/lang/spirv/writer/common/options.h
@@ -15,9 +15,9 @@
 #ifndef SRC_TINT_LANG_SPIRV_WRITER_COMMON_OPTIONS_H_
 #define SRC_TINT_LANG_SPIRV_WRITER_COMMON_OPTIONS_H_
 
+#include "src/tint/api/options/binding_remapper.h"
+#include "src/tint/api/options/external_texture.h"
 #include "src/tint/utils/reflection/reflection.h"
-#include "tint/binding_remapper_options.h"
-#include "tint/external_texture_options.h"
 
 namespace tint::spirv::writer {
 
diff --git a/src/tint/lang/spirv/writer/printer/BUILD.cmake b/src/tint/lang/spirv/writer/printer/BUILD.cmake
index aa0fd15..c262465 100644
--- a/src/tint/lang/spirv/writer/printer/BUILD.cmake
+++ b/src/tint/lang/spirv/writer/printer/BUILD.cmake
@@ -27,6 +27,8 @@
 )
 
 tint_target_add_dependencies("lang/spirv/writer/printer"
+  "api/common"
+  "api/options"
   "lang/core"
   "lang/core/constant"
   "lang/core/type"
diff --git a/src/tint/lang/spirv/writer/raise/BUILD.cmake b/src/tint/lang/spirv/writer/raise/BUILD.cmake
index b41a2a7..ca021b3 100644
--- a/src/tint/lang/spirv/writer/raise/BUILD.cmake
+++ b/src/tint/lang/spirv/writer/raise/BUILD.cmake
@@ -39,6 +39,8 @@
 )
 
 tint_target_add_dependencies("lang/spirv/writer/raise"
+  "api/common"
+  "api/options"
   "lang/core"
   "lang/core/constant"
   "lang/core/type"
@@ -88,6 +90,7 @@
 )
 
 tint_target_add_dependencies("lang/spirv/writer/raise:test"
+  "api/common"
   "lang/core"
   "lang/core/constant"
   "lang/core/type"
@@ -98,6 +101,7 @@
   "utils/macros"
   "utils/math"
   "utils/memory"
+  "utils/reflection"
   "utils/result"
   "utils/rtti"
   "utils/symbol"
diff --git a/src/tint/lang/wgsl/BUILD.cmake b/src/tint/lang/wgsl/BUILD.cmake
index 0f9000d..185674f 100644
--- a/src/tint/lang/wgsl/BUILD.cmake
+++ b/src/tint/lang/wgsl/BUILD.cmake
@@ -33,6 +33,7 @@
 )
 
 tint_target_add_dependencies("lang/wgsl:test"
+  "api/common"
   "lang/core"
   "lang/core/constant"
   "lang/core/type"
diff --git a/src/tint/lang/wgsl/ast/BUILD.cmake b/src/tint/lang/wgsl/ast/BUILD.cmake
index f9f1d2e..e96ed79 100644
--- a/src/tint/lang/wgsl/ast/BUILD.cmake
+++ b/src/tint/lang/wgsl/ast/BUILD.cmake
@@ -182,6 +182,7 @@
 )
 
 tint_target_add_dependencies("lang/wgsl/ast"
+  "api/common"
   "lang/core"
   "lang/core/constant"
   "lang/core/type"
@@ -192,6 +193,7 @@
   "utils/macros"
   "utils/math"
   "utils/memory"
+  "utils/reflection"
   "utils/result"
   "utils/rtti"
   "utils/symbol"
@@ -266,6 +268,7 @@
 )
 
 tint_target_add_dependencies("lang/wgsl/ast:test"
+  "api/common"
   "lang/core"
   "lang/core/constant"
   "lang/core/type"
diff --git a/src/tint/lang/wgsl/ast/builder.h b/src/tint/lang/wgsl/ast/builder.h
index 4b7a8be..872e20c 100644
--- a/src/tint/lang/wgsl/ast/builder.h
+++ b/src/tint/lang/wgsl/ast/builder.h
@@ -19,7 +19,7 @@
 #include <unordered_set>
 #include <utility>
 
-#include "tint/override_id.h"
+#include "src/tint/api/common/override_id.h"
 
 #include "src/tint/lang/core/constant/manager.h"
 #include "src/tint/lang/core/extension.h"
diff --git a/src/tint/lang/wgsl/ast/transform/BUILD.cmake b/src/tint/lang/wgsl/ast/transform/BUILD.cmake
index 3927bcc..c682e25 100644
--- a/src/tint/lang/wgsl/ast/transform/BUILD.cmake
+++ b/src/tint/lang/wgsl/ast/transform/BUILD.cmake
@@ -132,6 +132,8 @@
 )
 
 tint_target_add_dependencies("lang/wgsl/ast/transform"
+  "api/common"
+  "api/options"
   "lang/core"
   "lang/core/constant"
   "lang/core/type"
@@ -215,6 +217,8 @@
 )
 
 tint_target_add_dependencies("lang/wgsl/ast/transform:test"
+  "api/common"
+  "api/options"
   "lang/core"
   "lang/core/constant"
   "lang/core/type"
diff --git a/src/tint/lang/wgsl/ast/transform/array_length_from_uniform.h b/src/tint/lang/wgsl/ast/transform/array_length_from_uniform.h
index 413d89d..7f0acdb 100644
--- a/src/tint/lang/wgsl/ast/transform/array_length_from_uniform.h
+++ b/src/tint/lang/wgsl/ast/transform/array_length_from_uniform.h
@@ -18,8 +18,8 @@
 #include <unordered_map>
 #include <unordered_set>
 
+#include "src/tint/api/common/binding_point.h"
 #include "src/tint/lang/wgsl/ast/transform/transform.h"
-#include "tint/binding_point.h"
 
 namespace tint::ast::transform {
 
diff --git a/src/tint/lang/wgsl/ast/transform/binding_remapper.h b/src/tint/lang/wgsl/ast/transform/binding_remapper.h
index 5e33cf1..62183b9 100644
--- a/src/tint/lang/wgsl/ast/transform/binding_remapper.h
+++ b/src/tint/lang/wgsl/ast/transform/binding_remapper.h
@@ -17,9 +17,9 @@
 
 #include <unordered_map>
 
+#include "src/tint/api/common/binding_point.h"
 #include "src/tint/lang/core/access.h"
 #include "src/tint/lang/wgsl/ast/transform/transform.h"
-#include "tint/binding_point.h"
 
 namespace tint::ast::transform {
 
diff --git a/src/tint/lang/wgsl/ast/transform/multiplanar_external_texture.h b/src/tint/lang/wgsl/ast/transform/multiplanar_external_texture.h
index 66a208d..189c06d 100644
--- a/src/tint/lang/wgsl/ast/transform/multiplanar_external_texture.h
+++ b/src/tint/lang/wgsl/ast/transform/multiplanar_external_texture.h
@@ -18,11 +18,11 @@
 #include <unordered_map>
 #include <utility>
 
+#include "src/tint/api/common/binding_point.h"
+#include "src/tint/api/options/external_texture.h"
 #include "src/tint/lang/core/function.h"
 #include "src/tint/lang/wgsl/ast/struct_member.h"
 #include "src/tint/lang/wgsl/ast/transform/transform.h"
-#include "tint/binding_point.h"
-#include "tint/external_texture_options.h"
 
 namespace tint::ast::transform {
 
diff --git a/src/tint/lang/wgsl/ast/transform/num_workgroups_from_uniform.h b/src/tint/lang/wgsl/ast/transform/num_workgroups_from_uniform.h
index c05e773..50407e4 100644
--- a/src/tint/lang/wgsl/ast/transform/num_workgroups_from_uniform.h
+++ b/src/tint/lang/wgsl/ast/transform/num_workgroups_from_uniform.h
@@ -17,8 +17,8 @@
 
 #include <optional>
 
+#include "src/tint/api/common/binding_point.h"
 #include "src/tint/lang/wgsl/ast/transform/transform.h"
-#include "tint/binding_point.h"
 
 namespace tint::ast::transform {
 
diff --git a/src/tint/lang/wgsl/ast/transform/robustness.h b/src/tint/lang/wgsl/ast/transform/robustness.h
index cfb7595..bf8d5be 100644
--- a/src/tint/lang/wgsl/ast/transform/robustness.h
+++ b/src/tint/lang/wgsl/ast/transform/robustness.h
@@ -17,8 +17,8 @@
 
 #include <unordered_set>
 
+#include "src/tint/api/common/binding_point.h"
 #include "src/tint/lang/wgsl/ast/transform/transform.h"
-#include "tint/binding_point.h"
 
 namespace tint::ast::transform {
 
diff --git a/src/tint/lang/wgsl/ast/transform/substitute_override.h b/src/tint/lang/wgsl/ast/transform/substitute_override.h
index 8e4b9d5..2108dca 100644
--- a/src/tint/lang/wgsl/ast/transform/substitute_override.h
+++ b/src/tint/lang/wgsl/ast/transform/substitute_override.h
@@ -18,7 +18,7 @@
 #include <string>
 #include <unordered_map>
 
-#include "tint/override_id.h"
+#include "src/tint/api/common/override_id.h"
 
 #include "src/tint/lang/wgsl/ast/transform/transform.h"
 #include "src/tint/utils/reflection/reflection.h"
diff --git a/src/tint/lang/wgsl/ast/transform/truncate_interstage_variables.h b/src/tint/lang/wgsl/ast/transform/truncate_interstage_variables.h
index 5afd982..7c45cd9 100644
--- a/src/tint/lang/wgsl/ast/transform/truncate_interstage_variables.h
+++ b/src/tint/lang/wgsl/ast/transform/truncate_interstage_variables.h
@@ -17,8 +17,8 @@
 
 #include <bitset>
 
+#include "src/tint/api/common/binding_point.h"
 #include "src/tint/lang/wgsl/ast/transform/transform.h"
-#include "tint/binding_point.h"
 
 namespace tint::ast::transform {
 
diff --git a/src/tint/lang/wgsl/helpers/BUILD.cmake b/src/tint/lang/wgsl/helpers/BUILD.cmake
index 8194543..477692c 100644
--- a/src/tint/lang/wgsl/helpers/BUILD.cmake
+++ b/src/tint/lang/wgsl/helpers/BUILD.cmake
@@ -30,6 +30,7 @@
 )
 
 tint_target_add_dependencies("lang/wgsl/helpers"
+  "api/common"
   "lang/core"
   "lang/core/constant"
   "lang/core/type"
@@ -45,6 +46,7 @@
   "utils/macros"
   "utils/math"
   "utils/memory"
+  "utils/reflection"
   "utils/result"
   "utils/rtti"
   "utils/symbol"
@@ -60,6 +62,7 @@
 )
 
 tint_target_add_dependencies("lang/wgsl/helpers:test"
+  "api/common"
   "lang/core"
   "lang/core/constant"
   "lang/core/intrinsic"
@@ -78,6 +81,7 @@
   "utils/macros"
   "utils/math"
   "utils/memory"
+  "utils/reflection"
   "utils/result"
   "utils/rtti"
   "utils/symbol"
diff --git a/src/tint/lang/wgsl/helpers/flatten_bindings.cc b/src/tint/lang/wgsl/helpers/flatten_bindings.cc
index f13ecc4..1647a1a 100644
--- a/src/tint/lang/wgsl/helpers/flatten_bindings.cc
+++ b/src/tint/lang/wgsl/helpers/flatten_bindings.cc
@@ -16,10 +16,10 @@
 
 #include <utility>
 
+#include "src/tint/api/common/binding_point.h"
 #include "src/tint/lang/wgsl/ast/transform/binding_remapper.h"
 #include "src/tint/lang/wgsl/ast/transform/manager.h"
 #include "src/tint/lang/wgsl/inspector/inspector.h"
-#include "tint/binding_point.h"
 
 namespace tint::writer {
 
diff --git a/src/tint/lang/wgsl/inspector/BUILD.cmake b/src/tint/lang/wgsl/inspector/BUILD.cmake
index a51c743..9ed1b23 100644
--- a/src/tint/lang/wgsl/inspector/BUILD.cmake
+++ b/src/tint/lang/wgsl/inspector/BUILD.cmake
@@ -32,6 +32,7 @@
 )
 
 tint_target_add_dependencies("lang/wgsl/inspector"
+  "api/common"
   "lang/core"
   "lang/core/constant"
   "lang/core/type"
@@ -45,6 +46,7 @@
   "utils/macros"
   "utils/math"
   "utils/memory"
+  "utils/reflection"
   "utils/result"
   "utils/rtti"
   "utils/symbol"
@@ -61,6 +63,7 @@
 )
 
 tint_target_add_dependencies("lang/wgsl/inspector:test"
+  "api/common"
   "lang/core"
   "lang/core/constant"
   "lang/core/type"
@@ -77,6 +80,7 @@
   "utils/macros"
   "utils/math"
   "utils/memory"
+  "utils/reflection"
   "utils/result"
   "utils/rtti"
   "utils/symbol"
diff --git a/src/tint/lang/wgsl/inspector/entry_point.h b/src/tint/lang/wgsl/inspector/entry_point.h
index 4194ec9..1c7525f 100644
--- a/src/tint/lang/wgsl/inspector/entry_point.h
+++ b/src/tint/lang/wgsl/inspector/entry_point.h
@@ -20,7 +20,7 @@
 #include <tuple>
 #include <vector>
 
-#include "tint/override_id.h"
+#include "src/tint/api/common/override_id.h"
 
 #include "src/tint/lang/wgsl/ast/interpolate_attribute.h"
 #include "src/tint/lang/wgsl/ast/pipeline_stage.h"
diff --git a/src/tint/lang/wgsl/inspector/inspector.h b/src/tint/lang/wgsl/inspector/inspector.h
index ec88c04..afa9b02 100644
--- a/src/tint/lang/wgsl/inspector/inspector.h
+++ b/src/tint/lang/wgsl/inspector/inspector.h
@@ -23,7 +23,7 @@
 #include <utility>
 #include <vector>
 
-#include "tint/override_id.h"
+#include "src/tint/api/common/override_id.h"
 
 #include "src/tint/lang/core/builtin_value.h"
 #include "src/tint/lang/wgsl/inspector/entry_point.h"
diff --git a/src/tint/lang/wgsl/program/BUILD.cmake b/src/tint/lang/wgsl/program/BUILD.cmake
index 87c3057..e7348c9 100644
--- a/src/tint/lang/wgsl/program/BUILD.cmake
+++ b/src/tint/lang/wgsl/program/BUILD.cmake
@@ -30,6 +30,7 @@
 )
 
 tint_target_add_dependencies("lang/wgsl/program"
+  "api/common"
   "lang/core"
   "lang/core/constant"
   "lang/core/type"
@@ -42,6 +43,7 @@
   "utils/macros"
   "utils/math"
   "utils/memory"
+  "utils/reflection"
   "utils/result"
   "utils/rtti"
   "utils/symbol"
@@ -56,6 +58,7 @@
 )
 
 tint_target_add_dependencies("lang/wgsl/program:test"
+  "api/common"
   "lang/core"
   "lang/core/constant"
   "lang/core/type"
@@ -71,6 +74,7 @@
   "utils/macros"
   "utils/math"
   "utils/memory"
+  "utils/reflection"
   "utils/result"
   "utils/rtti"
   "utils/symbol"
diff --git a/src/tint/lang/wgsl/program/program_builder.h b/src/tint/lang/wgsl/program/program_builder.h
index 391d251..9daac97 100644
--- a/src/tint/lang/wgsl/program/program_builder.h
+++ b/src/tint/lang/wgsl/program/program_builder.h
@@ -19,7 +19,7 @@
 #include <unordered_set>
 #include <utility>
 
-#include "tint/override_id.h"
+#include "src/tint/api/common/override_id.h"
 
 #include "src/tint/lang/core/constant/manager.h"
 #include "src/tint/lang/core/extension.h"
diff --git a/src/tint/lang/wgsl/reader/BUILD.cmake b/src/tint/lang/wgsl/reader/BUILD.cmake
index c1bbfd7..10cadae 100644
--- a/src/tint/lang/wgsl/reader/BUILD.cmake
+++ b/src/tint/lang/wgsl/reader/BUILD.cmake
@@ -29,6 +29,7 @@
 )
 
 tint_target_add_dependencies("lang/wgsl/reader"
+  "api/common"
   "lang/core"
   "lang/core/constant"
   "lang/core/type"
@@ -44,6 +45,7 @@
   "utils/macros"
   "utils/math"
   "utils/memory"
+  "utils/reflection"
   "utils/result"
   "utils/rtti"
   "utils/symbol"
diff --git a/src/tint/lang/wgsl/reader/parser/BUILD.cmake b/src/tint/lang/wgsl/reader/parser/BUILD.cmake
index c071041..6a3e835 100644
--- a/src/tint/lang/wgsl/reader/parser/BUILD.cmake
+++ b/src/tint/lang/wgsl/reader/parser/BUILD.cmake
@@ -33,6 +33,7 @@
 )
 
 tint_target_add_dependencies("lang/wgsl/reader/parser"
+  "api/common"
   "lang/core"
   "lang/core/constant"
   "lang/core/type"
@@ -47,6 +48,7 @@
   "utils/macros"
   "utils/math"
   "utils/memory"
+  "utils/reflection"
   "utils/result"
   "utils/rtti"
   "utils/strconv"
@@ -126,6 +128,7 @@
 )
 
 tint_target_add_dependencies("lang/wgsl/reader/parser:test"
+  "api/common"
   "lang/core"
   "lang/core/constant"
   "lang/core/type"
@@ -142,6 +145,7 @@
   "utils/macros"
   "utils/math"
   "utils/memory"
+  "utils/reflection"
   "utils/result"
   "utils/rtti"
   "utils/symbol"
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 9678f65..0080b1f 100644
--- a/src/tint/lang/wgsl/reader/program_to_ir/BUILD.cmake
+++ b/src/tint/lang/wgsl/reader/program_to_ir/BUILD.cmake
@@ -27,6 +27,7 @@
 )
 
 tint_target_add_dependencies("lang/wgsl/reader/program_to_ir"
+  "api/common"
   "lang/core"
   "lang/core/constant"
   "lang/core/type"
@@ -40,6 +41,7 @@
   "utils/macros"
   "utils/math"
   "utils/memory"
+  "utils/reflection"
   "utils/result"
   "utils/rtti"
   "utils/symbol"
@@ -72,6 +74,7 @@
 )
 
 tint_target_add_dependencies("lang/wgsl/reader/program_to_ir:test"
+  "api/common"
   "lang/core"
   "lang/core/constant"
   "lang/core/type"
@@ -88,6 +91,7 @@
   "utils/macros"
   "utils/math"
   "utils/memory"
+  "utils/reflection"
   "utils/result"
   "utils/rtti"
   "utils/symbol"
diff --git a/src/tint/lang/wgsl/resolver/BUILD.cmake b/src/tint/lang/wgsl/resolver/BUILD.cmake
index a108d45..0a04da2 100644
--- a/src/tint/lang/wgsl/resolver/BUILD.cmake
+++ b/src/tint/lang/wgsl/resolver/BUILD.cmake
@@ -36,6 +36,7 @@
 )
 
 tint_target_add_dependencies("lang/wgsl/resolver"
+  "api/common"
   "lang/core"
   "lang/core/constant"
   "lang/core/intrinsic"
@@ -51,6 +52,7 @@
   "utils/macros"
   "utils/math"
   "utils/memory"
+  "utils/reflection"
   "utils/result"
   "utils/rtti"
   "utils/symbol"
@@ -118,6 +120,7 @@
 )
 
 tint_target_add_dependencies("lang/wgsl/resolver:test"
+  "api/common"
   "lang/core"
   "lang/core/constant"
   "lang/core/intrinsic"
@@ -138,6 +141,7 @@
   "utils/macros"
   "utils/math"
   "utils/memory"
+  "utils/reflection"
   "utils/result"
   "utils/rtti"
   "utils/symbol"
diff --git a/src/tint/lang/wgsl/resolver/resolver.h b/src/tint/lang/wgsl/resolver/resolver.h
index 4c9ac88..09305a2 100644
--- a/src/tint/lang/wgsl/resolver/resolver.h
+++ b/src/tint/lang/wgsl/resolver/resolver.h
@@ -23,6 +23,7 @@
 #include <utility>
 #include <vector>
 
+#include "src/tint/api/common/binding_point.h"
 #include "src/tint/lang/core/constant/eval.h"
 #include "src/tint/lang/core/constant/value.h"
 #include "src/tint/lang/core/intrinsic/table.h"
@@ -35,7 +36,6 @@
 #include "src/tint/lang/wgsl/sem/struct.h"
 #include "src/tint/utils/containers/bitset.h"
 #include "src/tint/utils/containers/unique_vector.h"
-#include "tint/binding_point.h"
 
 // Forward declarations
 namespace tint::ast {
diff --git a/src/tint/lang/wgsl/sem/BUILD.cmake b/src/tint/lang/wgsl/sem/BUILD.cmake
index 4871cb0..3503a14 100644
--- a/src/tint/lang/wgsl/sem/BUILD.cmake
+++ b/src/tint/lang/wgsl/sem/BUILD.cmake
@@ -89,6 +89,7 @@
 )
 
 tint_target_add_dependencies("lang/wgsl/sem"
+  "api/common"
   "lang/core"
   "lang/core/constant"
   "lang/core/type"
@@ -100,6 +101,7 @@
   "utils/macros"
   "utils/math"
   "utils/memory"
+  "utils/reflection"
   "utils/result"
   "utils/rtti"
   "utils/symbol"
@@ -116,6 +118,7 @@
 )
 
 tint_target_add_dependencies("lang/wgsl/sem:test"
+  "api/common"
   "lang/core"
   "lang/core/constant"
   "lang/core/type"
@@ -130,6 +133,7 @@
   "utils/macros"
   "utils/math"
   "utils/memory"
+  "utils/reflection"
   "utils/result"
   "utils/rtti"
   "utils/symbol"
diff --git a/src/tint/lang/wgsl/sem/sampler_texture_pair.h b/src/tint/lang/wgsl/sem/sampler_texture_pair.h
index 51e3dc2..f20562a 100644
--- a/src/tint/lang/wgsl/sem/sampler_texture_pair.h
+++ b/src/tint/lang/wgsl/sem/sampler_texture_pair.h
@@ -18,8 +18,8 @@
 #include <cstdint>
 #include <functional>
 
+#include "src/tint/api/common/binding_point.h"
 #include "src/tint/utils/text/string_stream.h"
-#include "tint/binding_point.h"
 
 namespace tint::sem {
 
diff --git a/src/tint/lang/wgsl/sem/variable.h b/src/tint/lang/wgsl/sem/variable.h
index 7b0f33d..a894a83 100644
--- a/src/tint/lang/wgsl/sem/variable.h
+++ b/src/tint/lang/wgsl/sem/variable.h
@@ -19,8 +19,9 @@
 #include <utility>
 #include <vector>
 
-#include "tint/override_id.h"
+#include "src/tint/api/common/override_id.h"
 
+#include "src/tint/api/common/binding_point.h"
 #include "src/tint/lang/core/access.h"
 #include "src/tint/lang/core/address_space.h"
 #include "src/tint/lang/core/parameter_usage.h"
@@ -28,7 +29,6 @@
 #include "src/tint/lang/wgsl/ast/parameter.h"
 #include "src/tint/lang/wgsl/sem/value_expression.h"
 #include "src/tint/utils/containers/unique_vector.h"
-#include "tint/binding_point.h"
 
 // Forward declarations
 namespace tint::ast {
diff --git a/src/tint/lang/wgsl/writer/ast_printer/BUILD.cmake b/src/tint/lang/wgsl/writer/ast_printer/BUILD.cmake
index 63ef359..ba8ad54 100644
--- a/src/tint/lang/wgsl/writer/ast_printer/BUILD.cmake
+++ b/src/tint/lang/wgsl/writer/ast_printer/BUILD.cmake
@@ -83,6 +83,7 @@
 )
 
 tint_target_add_dependencies("lang/wgsl/writer/ast_printer:test"
+  "api/common"
   "lang/core"
   "lang/core/constant"
   "lang/core/type"
@@ -99,6 +100,7 @@
   "utils/macros"
   "utils/math"
   "utils/memory"
+  "utils/reflection"
   "utils/result"
   "utils/rtti"
   "utils/symbol"
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 fadedb6..48d25e1 100644
--- a/src/tint/lang/wgsl/writer/ir_to_program/BUILD.cmake
+++ b/src/tint/lang/wgsl/writer/ir_to_program/BUILD.cmake
@@ -29,6 +29,7 @@
 )
 
 tint_target_add_dependencies("lang/wgsl/writer/ir_to_program"
+  "api/common"
   "lang/core"
   "lang/core/constant"
   "lang/core/type"
@@ -43,6 +44,7 @@
   "utils/macros"
   "utils/math"
   "utils/memory"
+  "utils/reflection"
   "utils/result"
   "utils/rtti"
   "utils/symbol"
@@ -66,6 +68,7 @@
 )
 
 tint_target_add_dependencies("lang/wgsl/writer/ir_to_program:test"
+  "api/common"
   "lang/core"
   "lang/core/constant"
   "lang/core/type"
diff --git a/src/tint/lang/wgsl/writer/options.cc b/src/tint/lang/wgsl/writer/options.cc
index 6d66d87..4d3be83 100644
--- a/src/tint/lang/wgsl/writer/options.cc
+++ b/src/tint/lang/wgsl/writer/options.cc
@@ -12,6 +12,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
+#ifdef TINT_BUILD_SYNTAX_TREE_WRITER
+
 #include "src/tint/lang/wgsl/writer/options.h"
 
 namespace tint::wgsl::writer {
@@ -25,3 +27,5 @@
 Options& Options::operator=(const Options&) = default;
 
 }  // namespace tint::wgsl::writer
+
+#endif  // TINT_BUILD_SYNTAX_TREE_WRITER
diff --git a/src/tint/utils/containers/BUILD.cmake b/src/tint/utils/containers/BUILD.cmake
index 3712f41..9c4e6e6 100644
--- a/src/tint/utils/containers/BUILD.cmake
+++ b/src/tint/utils/containers/BUILD.cmake
@@ -64,6 +64,7 @@
 )
 
 tint_target_add_dependencies("utils/containers:test"
+  "api/common"
   "lang/core"
   "lang/core/constant"
   "lang/core/type"
@@ -77,6 +78,7 @@
   "utils/macros"
   "utils/math"
   "utils/memory"
+  "utils/reflection"
   "utils/result"
   "utils/rtti"
   "utils/symbol"