Organize BUILD files.

PiperOrigin-RevId: 762597015
diff --git a/.github/workflows/bazel_test.yml b/.github/workflows/bazel_test.yml
index 62048e0..a83bee7 100644
--- a/.github/workflows/bazel_test.yml
+++ b/.github/workflows/bazel_test.yml
@@ -63,7 +63,7 @@
         if: matrix.config == 'default'
         run: |
           bazel build -c ${{ matrix.compilation_mode }} \
-            --copt=-DFUZZTEST_COMPATIBILITY_MODE -- //fuzztest/internal:compatibility_mode
+            --copt=-DFUZZTEST_COMPATIBILITY_MODE -- //fuzztest:compatibility_mode
       - name: Run end-to-end tests with --config=fuzztest
         if: matrix.config == 'fuzztest'
         run: |
diff --git a/CMakeLists.txt b/CMakeLists.txt
index e38c072..1e34de3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,17 +1,3 @@
-# Copyright 2024 Google LLC
-#
-# 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.
-
 cmake_minimum_required(VERSION 3.19)
 project(fuzztest)
 
@@ -50,7 +36,6 @@
 
 include(cmake/BuildDependencies.cmake)
 include(cmake/FuzzTestHelpers.cmake)
-include(cmake/CompatibilityModeLinkLibFuzzer.cmake)
 
 include_directories(${re2_SOURCE_DIR})
 
@@ -63,16 +48,12 @@
   include(${protobuf_SOURCE_DIR}/cmake/protobuf-generate.cmake)
 endif ()
 
+add_subdirectory(grammar_codegen)
+add_subdirectory(tools)
 add_subdirectory(common)
 add_subdirectory(fuzztest)
-add_subdirectory(fuzztest/grammars)
-add_subdirectory(fuzztest/internal)
-add_subdirectory(fuzztest/internal/domains)
-add_subdirectory(grammar_codegen)
-add_subdirectory(grammar_codegen/generated_antlr_parser)
-add_subdirectory(tools)
+
 if (FUZZTEST_BUILD_TESTING)
   add_subdirectory(domain_tests)
   add_subdirectory(e2e_tests)
-  add_subdirectory(e2e_tests/testdata)
 endif ()
diff --git a/bazel/setup_configs.sh b/bazel/setup_configs.sh
index f4c40c9..cd86628 100755
--- a/bazel/setup_configs.sh
+++ b/bazel/setup_configs.sh
@@ -68,7 +68,7 @@
 # When used in the fuzztest repo itself.
 if [[ ${REPO_NAME} == "@" ]]; then
   COMMON_FILTER="//common:"
-  FUZZTEST_FILTER="//fuzztest:,//fuzztest/internal:,//fuzztest/internal/domains:"
+  FUZZTEST_FILTER="//fuzztest:"
   CENTIPEDE_FILTER="//centipede:,-//centipede/.*fuzz_target"
 else  # When used in a client repo.
   COMMON_FILTER="common/.*"
diff --git a/build_defs/cc_fuzztest_grammar_library.bzl b/build_defs/cc_fuzztest_grammar_library.bzl
index 8d7e0b8..0deafba 100644
--- a/build_defs/cc_fuzztest_grammar_library.bzl
+++ b/build_defs/cc_fuzztest_grammar_library.bzl
@@ -56,5 +56,5 @@
     native.cc_library(
         name = name,
         hdrs = [output_file_name],
-        deps = ["@com_google_fuzztest//fuzztest/internal/domains:in_grammar_impl"],
+        deps = ["@com_google_fuzztest//fuzztest:domain"],
     )
diff --git a/centipede/BUILD b/centipede/BUILD
index 9c43a21..9f6da75 100644
--- a/centipede/BUILD
+++ b/centipede/BUILD
@@ -845,7 +845,7 @@
         "@com_google_fuzztest//common:logging",
         "@com_google_fuzztest//common:remote_file",
         "@com_google_fuzztest//common:status_macros",
-        "@com_google_fuzztest//fuzztest/internal:configuration",
+        "@com_google_fuzztest//fuzztest:configuration",
     ],
 )
 
@@ -878,7 +878,7 @@
         "@com_google_fuzztest//common:logging",
         "@com_google_fuzztest//common:remote_file",
         "@com_google_fuzztest//common:status_macros",
-        "@com_google_fuzztest//fuzztest/internal:configuration",
+        "@com_google_fuzztest//fuzztest:configuration",
     ],
 )
 
@@ -947,7 +947,7 @@
         "@abseil-cpp//absl/types:span",
         "@com_google_fuzztest//common:defs",
         "@com_google_fuzztest//fuzztest:domain_core",
-        "@com_google_fuzztest//fuzztest/internal:table_of_recent_compares",
+        "@com_google_fuzztest//fuzztest:table_of_recent_compares",
     ],
 )
 
@@ -1252,7 +1252,7 @@
         ":environment",
         "@abseil-cpp//absl/log:check",
         "@abseil-cpp//absl/time",
-        "@com_google_fuzztest//fuzztest/internal:configuration",
+        "@com_google_fuzztest//fuzztest:configuration",
         "@googletest//:gtest_main",
     ],
 )
diff --git a/cmake/CompatibilityModeLinkLibFuzzer.cmake b/cmake/CompatibilityModeLinkLibFuzzer.cmake
deleted file mode 100644
index 2b767d0..0000000
--- a/cmake/CompatibilityModeLinkLibFuzzer.cmake
+++ /dev/null
@@ -1,36 +0,0 @@
-# Copyright 2025 Google LLC
-#
-# 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.
-
-function(_link_libfuzzer_in_compatibility_mode name)
-  if (FUZZTEST_COMPATIBILITY_MODE STREQUAL "libfuzzer")
-    EXECUTE_PROCESS (
-        COMMAND bash -c "find \${PATH//:/ } -maxdepth 1 -executable -name 'llvm-config*'"
-        OUTPUT_VARIABLE LLVM_CONFIG OUTPUT_STRIP_TRAILING_WHITESPACE
-    )
-    EXECUTE_PROCESS(
-      COMMAND bash -c "find $(${LLVM_CONFIG} --libdir) \
-      -name libclang_rt.fuzzer_no_main-x86_64.a"
-      OUTPUT_VARIABLE FUZZER_NO_MAIN OUTPUT_STRIP_TRAILING_WHITESPACE
-    )
-    if(NOT FUZZER_NO_MAIN)
-      # LLVM_ENABLE_PER_TARGET_RUNTIME_DIR was set to ON when building LLVM.
-      EXECUTE_PROCESS(
-        COMMAND bash -c "find / -regex \
-        \"$(${LLVM_CONFIG} --libdir).*$(${LLVM_CONFIG} --host-target).*libclang_rt.fuzzer_no_main.a\""
-        OUTPUT_VARIABLE FUZZER_NO_MAIN OUTPUT_STRIP_TRAILING_WHITESPACE
-      )
-    endif()
-    target_link_libraries(${name} PRIVATE ${FUZZER_NO_MAIN})
-  endif ()
-endfunction()
\ No newline at end of file
diff --git a/domain_tests/BUILD b/domain_tests/BUILD
index a2584b1..2756234 100644
--- a/domain_tests/BUILD
+++ b/domain_tests/BUILD
@@ -31,8 +31,8 @@
         "@abseil-cpp//absl/types:span",
         "@abseil-cpp//absl/types:variant",
         "@com_google_fuzztest//fuzztest:domain_core",
-        "@com_google_fuzztest//fuzztest/internal:serialization",
-        "@com_google_fuzztest//fuzztest/internal:type_support",
+        "@com_google_fuzztest//fuzztest:serialization",
+        "@com_google_fuzztest//fuzztest:type_support",
         "@googletest//:gtest_main",
     ],
 )
@@ -48,7 +48,7 @@
         "@abseil-cpp//absl/strings",
         "@abseil-cpp//absl/strings:string_view",
         "@com_google_fuzztest//fuzztest:domain",
-        "@com_google_fuzztest//fuzztest/internal:test_protobuf_cc_proto",
+        "@com_google_fuzztest//fuzztest:test_protobuf_cc_proto",
         "@googletest//:gtest_main",
         "@protobuf",
     ],
@@ -64,11 +64,11 @@
         "@abseil-cpp//absl/random:bit_gen_ref",
         "@abseil-cpp//absl/status",
         "@abseil-cpp//absl/time",
+        "@com_google_fuzztest//fuzztest:absl_helpers",
         "@com_google_fuzztest//fuzztest:domain_core",
-        "@com_google_fuzztest//fuzztest/internal:serialization",
-        "@com_google_fuzztest//fuzztest/internal:test_protobuf_cc_proto",
-        "@com_google_fuzztest//fuzztest/internal:type_support",
-        "@com_google_fuzztest//fuzztest/internal/domains:core_domains_impl",
+        "@com_google_fuzztest//fuzztest:serialization",
+        "@com_google_fuzztest//fuzztest:test_protobuf_cc_proto",
+        "@com_google_fuzztest//fuzztest:type_support",
         "@googletest//:gtest_main",
     ],
 )
@@ -95,7 +95,7 @@
         "@abseil-cpp//absl/random",
         "@abseil-cpp//absl/strings",
         "@com_google_fuzztest//fuzztest:domain_core",
-        "@com_google_fuzztest//fuzztest/internal:meta",
+        "@com_google_fuzztest//fuzztest:meta",
         "@googletest//:gtest_main",
     ],
 )
@@ -109,7 +109,7 @@
         "@abseil-cpp//absl/container:flat_hash_set",
         "@abseil-cpp//absl/random",
         "@com_google_fuzztest//fuzztest:domain_core",
-        "@com_google_fuzztest//fuzztest/internal:table_of_recent_compares",
+        "@com_google_fuzztest//fuzztest:table_of_recent_compares",
         "@googletest//:gtest_main",
     ],
 )
@@ -126,11 +126,11 @@
         "@abseil-cpp//absl/random:bit_gen_ref",
         "@abseil-cpp//absl/status",
         "@abseil-cpp//absl/strings",
-        "@com_google_fuzztest//fuzztest/internal:logging",
-        "@com_google_fuzztest//fuzztest/internal:meta",
-        "@com_google_fuzztest//fuzztest/internal:serialization",
-        "@com_google_fuzztest//fuzztest/internal:test_protobuf_cc_proto",
-        "@com_google_fuzztest//fuzztest/internal/domains:core_domains_impl",
+        "@com_google_fuzztest//fuzztest:domain_core",
+        "@com_google_fuzztest//fuzztest:logging",
+        "@com_google_fuzztest//fuzztest:meta",
+        "@com_google_fuzztest//fuzztest:serialization",
+        "@com_google_fuzztest//fuzztest:test_protobuf_cc_proto",
         "@googletest//:gtest",
         "@protobuf",
     ],
@@ -144,8 +144,8 @@
         "@abseil-cpp//absl/container:flat_hash_set",
         "@abseil-cpp//absl/random",
         "@com_google_fuzztest//fuzztest:domain",
+        "@com_google_fuzztest//fuzztest:serialization",
         "@com_google_fuzztest//fuzztest/grammars:json_grammar",
-        "@com_google_fuzztest//fuzztest/internal:serialization",
         "@googletest//:gtest_main",
         "@nlohmann_json//:json",
     ],
@@ -187,8 +187,8 @@
         "@abseil-cpp//absl/strings",
         "@abseil-cpp//absl/types:span",
         "@com_google_fuzztest//fuzztest:domain_core",
-        "@com_google_fuzztest//fuzztest/internal:meta",
-        "@com_google_fuzztest//fuzztest/internal:type_support",
+        "@com_google_fuzztest//fuzztest:meta",
+        "@com_google_fuzztest//fuzztest:type_support",
         "@googletest//:gtest_main",
     ],
 )
@@ -204,7 +204,7 @@
         "@abseil-cpp//absl/status",
         "@abseil-cpp//absl/strings",
         "@com_google_fuzztest//fuzztest:domain_core",
-        "@com_google_fuzztest//fuzztest/internal:serialization",
+        "@com_google_fuzztest//fuzztest:serialization",
         "@googletest//:gtest_main",
     ],
 )
@@ -253,7 +253,7 @@
         "@abseil-cpp//absl/container:flat_hash_set",
         "@abseil-cpp//absl/random",
         "@com_google_fuzztest//fuzztest:domain_core",
-        "@com_google_fuzztest//fuzztest/internal:table_of_recent_compares",
+        "@com_google_fuzztest//fuzztest:table_of_recent_compares",
         "@googletest//:gtest_main",
     ],
 )
diff --git a/domain_tests/CMakeLists.txt b/domain_tests/CMakeLists.txt
index d7f5088..b7875eb 100644
--- a/domain_tests/CMakeLists.txt
+++ b/domain_tests/CMakeLists.txt
@@ -52,6 +52,7 @@
     absl::random_bit_gen_ref
     absl::status
     absl::time
+    fuzztest::absl_helpers
     fuzztest::domain_core
     fuzztest::serialization
     test_protobuf
diff --git a/domain_tests/arbitrary_domains_test.cc b/domain_tests/arbitrary_domains_test.cc
index ce61170..1df4489 100644
--- a/domain_tests/arbitrary_domains_test.cc
+++ b/domain_tests/arbitrary_domains_test.cc
@@ -37,6 +37,9 @@
 #include "absl/time/time.h"
 #include "./fuzztest/domain_core.h"  // IWYU pragma: keep
 #include "./domain_tests/domain_testing.h"
+#include "./fuzztest/internal/domains/absl_helpers.h"
+#include "./fuzztest/internal/domains/arbitrary_impl.h"
+#include "./fuzztest/internal/domains/container_mutation_helpers.h"
 #include "./fuzztest/internal/domains/domain_base.h"
 #include "./fuzztest/internal/serialization.h"
 #include "./fuzztest/internal/test_protobuf.pb.h"
diff --git a/e2e_tests/BUILD b/e2e_tests/BUILD
index 9f85b8d..71bf36c 100644
--- a/e2e_tests/BUILD
+++ b/e2e_tests/BUILD
@@ -29,8 +29,8 @@
         "@abseil-cpp//absl/strings",
         "@abseil-cpp//absl/strings:string_view",
         "@abseil-cpp//absl/time",
-        "@com_google_fuzztest//fuzztest/internal:flag_name",
-        "@com_google_fuzztest//fuzztest/internal:subprocess",
+        "@com_google_fuzztest//fuzztest:flag_name",
+        "@com_google_fuzztest//fuzztest:subprocess",
     ],
 )
 
@@ -66,13 +66,13 @@
         "@abseil-cpp//absl/time",
         "@com_google_fuzztest//centipede:weak_sancov_stubs",
         "@com_google_fuzztest//common:temp_dir",
-        "@com_google_fuzztest//fuzztest/internal:escaping",
-        "@com_google_fuzztest//fuzztest/internal:io",
-        "@com_google_fuzztest//fuzztest/internal:logging",
-        "@com_google_fuzztest//fuzztest/internal:printer",
-        "@com_google_fuzztest//fuzztest/internal:serialization",
-        "@com_google_fuzztest//fuzztest/internal:subprocess",
-        "@com_google_fuzztest//fuzztest/internal:type_support",
+        "@com_google_fuzztest//fuzztest:escaping",
+        "@com_google_fuzztest//fuzztest:io",
+        "@com_google_fuzztest//fuzztest:logging",
+        "@com_google_fuzztest//fuzztest:printer",
+        "@com_google_fuzztest//fuzztest:serialization",
+        "@com_google_fuzztest//fuzztest:subprocess",
+        "@com_google_fuzztest//fuzztest:type_support",
         "@googletest//:gtest_main",
         "@re2",
     ],
@@ -91,8 +91,8 @@
         "@abseil-cpp//absl/strings",
         "@abseil-cpp//absl/strings:str_format",
         "@abseil-cpp//absl/time",
-        "@com_google_fuzztest//fuzztest/internal:logging",
-        "@com_google_fuzztest//fuzztest/internal:subprocess",
+        "@com_google_fuzztest//fuzztest:logging",
+        "@com_google_fuzztest//fuzztest:subprocess",
         "@re2",
     ],
 )
@@ -127,10 +127,10 @@
         "@abseil-cpp//absl/time",
         "@com_google_fuzztest//centipede:weak_sancov_stubs",
         "@com_google_fuzztest//common:temp_dir",
-        "@com_google_fuzztest//fuzztest/internal:escaping",
-        "@com_google_fuzztest//fuzztest/internal:io",
-        "@com_google_fuzztest//fuzztest/internal:logging",
-        "@com_google_fuzztest//fuzztest/internal:subprocess",
+        "@com_google_fuzztest//fuzztest:escaping",
+        "@com_google_fuzztest//fuzztest:io",
+        "@com_google_fuzztest//fuzztest:logging",
+        "@com_google_fuzztest//fuzztest:subprocess",
         "@googletest//:gtest_main",
     ],
 )
diff --git a/e2e_tests/CMakeLists.txt b/e2e_tests/CMakeLists.txt
index 75a1eb9..59dcaa2 100644
--- a/e2e_tests/CMakeLists.txt
+++ b/e2e_tests/CMakeLists.txt
@@ -1,6 +1,8 @@
 get_filename_component(PARENT_DIR ../ ABSOLUTE)
 include_directories(${PARENT_DIR})
 
+add_subdirectory(testdata)
+
 fuzztest_cc_library(
   NAME
     test_binary_util
diff --git a/e2e_tests/testdata/BUILD b/e2e_tests/testdata/BUILD
index 3c623f3..2d91193 100644
--- a/e2e_tests/testdata/BUILD
+++ b/e2e_tests/testdata/BUILD
@@ -36,7 +36,7 @@
         "@abseil-cpp//absl/strings:string_view",
         "@com_google_fuzztest//fuzztest",
         "@com_google_fuzztest//fuzztest:fuzztest_gtest_main",
-        "@com_google_fuzztest//fuzztest/internal:test_protobuf_cc_proto",
+        "@com_google_fuzztest//fuzztest:test_protobuf_cc_proto",
     ],
 )
 
@@ -55,7 +55,7 @@
         "@abseil-cpp//absl/time",
         "@abseil-cpp//absl/types:span",
         "@com_google_fuzztest//fuzztest",
-        "@com_google_fuzztest//fuzztest/internal:test_protobuf_cc_proto",
+        "@com_google_fuzztest//fuzztest:test_protobuf_cc_proto",
         "@googletest//:gtest",
         "@protobuf",
         "@re2",
@@ -103,8 +103,8 @@
         "@com_google_fuzztest//fuzztest",
         "@com_google_fuzztest//fuzztest:fuzztest_gtest_main",
         "@com_google_fuzztest//fuzztest:googletest_fixture_adapter",
-        "@com_google_fuzztest//fuzztest/internal:logging",
-        "@com_google_fuzztest//fuzztest/internal:test_protobuf_cc_proto",
+        "@com_google_fuzztest//fuzztest:logging",
+        "@com_google_fuzztest//fuzztest:test_protobuf_cc_proto",
         "@protobuf",
         "@re2",
     ],
diff --git a/fuzztest/BUILD b/fuzztest/BUILD
index 7dc2a14..df77213 100644
--- a/fuzztest/BUILD
+++ b/fuzztest/BUILD
@@ -15,6 +15,7 @@
 # FuzzTest: a coverage-guided fuzzing / property-based testing framework.
 
 load("@bazel_skylib//rules:common_settings.bzl", "bool_flag")
+load("@rules_proto//proto:defs.bzl", "proto_library")
 
 package(default_visibility = ["//visibility:public"])
 
@@ -75,14 +76,14 @@
         "fuzztest_macros.h",
     ],
     deps = [
+        ":logging",
+        ":registration",
+        ":registry",
+        ":runtime",
         "@abseil-cpp//absl/status",
         "@abseil-cpp//absl/status:statusor",
         "@abseil-cpp//absl/strings",
         "@abseil-cpp//absl/strings:string_view",
-        "@com_google_fuzztest//fuzztest/internal:logging",
-        "@com_google_fuzztest//fuzztest/internal:registration",
-        "@com_google_fuzztest//fuzztest/internal:registry",
-        "@com_google_fuzztest//fuzztest/internal:runtime",
     ],
 )
 
@@ -115,6 +116,13 @@
     srcs = ["init_fuzztest.cc"],
     hdrs = ["init_fuzztest.h"],
     deps = [
+        ":configuration",
+        ":flag_name",
+        ":googletest_adaptor",
+        ":io",
+        ":logging",
+        ":registry",
+        ":runtime",
         "@abseil-cpp//absl/algorithm:container",
         "@abseil-cpp//absl/base:no_destructor",
         "@abseil-cpp//absl/container:flat_hash_set",
@@ -124,13 +132,6 @@
         "@abseil-cpp//absl/strings",
         "@abseil-cpp//absl/strings:str_format",
         "@abseil-cpp//absl/time",
-        "@com_google_fuzztest//fuzztest/internal:configuration",
-        "@com_google_fuzztest//fuzztest/internal:flag_name",
-        "@com_google_fuzztest//fuzztest/internal:googletest_adaptor",
-        "@com_google_fuzztest//fuzztest/internal:io",
-        "@com_google_fuzztest//fuzztest/internal:logging",
-        "@com_google_fuzztest//fuzztest/internal:registry",
-        "@com_google_fuzztest//fuzztest/internal:runtime",
         "@googletest//:gtest",
     ],
     alwayslink = True,
@@ -155,8 +156,11 @@
     testonly = True,
     srcs = ["llvm_fuzzer_wrapper.cc"],
     deps = [
+        ":domain_core",
         ":fuzztest",
         ":fuzztest_macros",
+        ":io",
+        ":logging",
         "@abseil-cpp//absl/base:core_headers",
         "@abseil-cpp//absl/base:no_destructor",
         "@abseil-cpp//absl/flags:flag",
@@ -164,21 +168,216 @@
         "@abseil-cpp//absl/random",
         "@abseil-cpp//absl/random:bit_gen_ref",
         "@abseil-cpp//absl/synchronization",
-        "@com_google_fuzztest//fuzztest/internal:io",
-        "@com_google_fuzztest//fuzztest/internal:logging",
-        "@com_google_fuzztest//fuzztest/internal/domains:core_domains_impl",
     ],
     alwayslink = True,
 )
 
+################################################################################
+# Internal
+################################################################################
+
+# TODO(lszekeres): Move these to internal/BUILD.
+
 cc_library(
-    name = "domain",
-    hdrs = ["domain.h"],
+    name = "absl_helpers",
+    hdrs = ["internal/domains/absl_helpers.h"],
+    deps = [
+        ":logging",
+        "@abseil-cpp//absl/time",
+    ],
+)
+
+cc_library(
+    name = "any",
+    hdrs = ["internal/any.h"],
+    deps = [
+        ":logging",
+        ":meta",
+    ],
+)
+
+cc_test(
+    name = "any_test",
+    srcs = ["internal/any_test.cc"],
+    deps = [
+        ":any",
+        "@abseil-cpp//absl/strings",
+        "@googletest//:gtest_main",
+    ],
+)
+
+cc_library(
+    name = "centipede_adaptor",
+    srcs = ["internal/centipede_adaptor.cc"],
+    hdrs = ["internal/centipede_adaptor.h"],
+    defines = ["FUZZTEST_USE_CENTIPEDE"],
+    deps = [
+        ":any",
+        ":configuration",
+        ":domain_core",
+        ":escaping",
+        ":fixture_driver",
+        ":flag_name",
+        ":io",
+        ":logging",
+        ":runtime",
+        ":table_of_recent_compares",
+        "@abseil-cpp//absl/algorithm:container",
+        "@abseil-cpp//absl/base:no_destructor",
+        "@abseil-cpp//absl/functional:any_invocable",
+        "@abseil-cpp//absl/log:absl_log",
+        "@abseil-cpp//absl/memory",
+        "@abseil-cpp//absl/random",
+        "@abseil-cpp//absl/random:distributions",
+        "@abseil-cpp//absl/status",
+        "@abseil-cpp//absl/status:statusor",
+        "@abseil-cpp//absl/strings",
+        "@abseil-cpp//absl/strings:str_format",
+        "@abseil-cpp//absl/strings:string_view",
+        "@abseil-cpp//absl/time",
+        "@abseil-cpp//absl/types:span",
+        "@com_google_fuzztest//centipede:centipede_callbacks",
+        "@com_google_fuzztest//centipede:centipede_default_callbacks",
+        "@com_google_fuzztest//centipede:centipede_interface",
+        "@com_google_fuzztest//centipede:centipede_runner_no_main",
+        "@com_google_fuzztest//centipede:environment",
+        "@com_google_fuzztest//centipede:execution_metadata",
+        "@com_google_fuzztest//centipede:mutation_input",
+        "@com_google_fuzztest//centipede:runner_result",
+        "@com_google_fuzztest//centipede:workdir",
+        "@com_google_fuzztest//common:defs",
+        "@com_google_fuzztest//common:remote_file",
+        "@com_google_fuzztest//common:temp_dir",
+    ],
+)
+
+cc_library(
+    name = "compatibility_mode",
+    srcs = ["internal/compatibility_mode.cc"],
+    hdrs = ["internal/compatibility_mode.h"],
     deps = [
         ":domain_core",
-        "@com_google_fuzztest//fuzztest/internal/domains:domains_impl",
-        "@com_google_fuzztest//fuzztest/internal/domains:in_regexp_impl",
-        "@com_google_fuzztest//fuzztest/internal/domains:protobuf_domain_impl",
+        ":fixture_driver",
+        ":logging",
+        ":runtime",
+        "@abseil-cpp//absl/random:distributions",
+        "@abseil-cpp//absl/strings",
+        "@abseil-cpp//absl/strings:str_format",
+        "@abseil-cpp//absl/time",
+    ] + select({
+        "//conditions:default": [],
+    }),
+)
+
+cc_library(
+    name = "configuration",
+    srcs = ["internal/configuration.cc"],
+    hdrs = ["internal/configuration.h"],
+    deps = [
+        "@abseil-cpp//absl/log:absl_check",
+        "@abseil-cpp//absl/status",
+        "@abseil-cpp//absl/status:statusor",
+        "@abseil-cpp//absl/strings",
+        "@abseil-cpp//absl/strings:string_view",
+        "@abseil-cpp//absl/time",
+    ],
+)
+
+cc_test(
+    name = "configuration_test",
+    srcs = ["internal/configuration_test.cc"],
+    deps = [
+        ":configuration",
+        "@abseil-cpp//absl/status:statusor",
+        "@abseil-cpp//absl/time",
+        "@googletest//:gtest_main",
+    ],
+)
+
+cc_library(
+    name = "corpus_database",
+    srcs = ["internal/corpus_database.cc"],
+    hdrs = ["internal/corpus_database.h"],
+    deps = [
+        ":configuration",
+        ":io",
+        "@abseil-cpp//absl/strings",
+        "@abseil-cpp//absl/strings:string_view",
+        "@abseil-cpp//absl/time",
+    ],
+)
+
+cc_library(
+    name = "coverage",
+    srcs = ["internal/coverage.cc"],
+    hdrs = ["internal/coverage.h"],
+    defines = select({
+        "@com_google_fuzztest//fuzztest:use_centipede": ["FUZZTEST_USE_CENTIPEDE"],
+        "//conditions:default": [],
+    }),
+    deps = [
+        ":domain_core",
+        ":flag_name",
+        ":logging",
+        ":table_of_recent_compares",
+        "@abseil-cpp//absl/base:core_headers",
+        "@abseil-cpp//absl/strings:str_format",
+        "@abseil-cpp//absl/types:span",
+    ],
+)
+
+cc_library(
+    name = "domain",
+    srcs = [
+        "internal/domains/in_grammar_impl.cc",
+        "internal/domains/in_regexp_impl.cc",
+    ],
+    hdrs = [
+        "domain.h",
+        "internal/domains/in_grammar_impl.h",
+        "internal/domains/in_regexp_impl.h",
+        "internal/domains/protobuf_domain_impl.h",
+    ],
+    # Public for cc_fuzztest_grammar_library rule.
+    visibility = ["//visibility:public"],
+    deps = [
+        ":any",
+        ":domain_core",
+        ":logging",
+        ":meta",
+        ":regexp_dfa",
+        ":serialization",
+        ":status",
+        ":type_support",
+        "@abseil-cpp//absl/base:core_headers",
+        "@abseil-cpp//absl/base:no_destructor",
+        "@abseil-cpp//absl/container:flat_hash_map",
+        "@abseil-cpp//absl/container:flat_hash_set",
+        "@abseil-cpp//absl/random",
+        "@abseil-cpp//absl/random:bit_gen_ref",
+        "@abseil-cpp//absl/random:distributions",
+        "@abseil-cpp//absl/status",
+        "@abseil-cpp//absl/status:statusor",
+        "@abseil-cpp//absl/strings",
+        "@abseil-cpp//absl/strings:str_format",
+        "@abseil-cpp//absl/synchronization",
+        "@abseil-cpp//absl/types:span",
+    ],
+)
+
+cc_library(
+    name = "utf",
+    srcs = [
+        "internal/domains/rune.cc",
+        "internal/domains/rune.h",
+        "internal/domains/utf.cc",
+    ],
+    hdrs = [
+        "internal/domains/utf.h",
+    ],
+    visibility = ["//visibility:private"],
+    deps = [
+        "@abseil-cpp//absl/strings:string_view",
     ],
 )
 
@@ -186,22 +385,111 @@
 # by the default Centipede mutation.
 cc_library(
     name = "domain_core",
-    hdrs = ["domain_core.h"],
-    deps = [
-        "@abseil-cpp//absl/container:flat_hash_map",
-        "@abseil-cpp//absl/random:bit_gen_ref",
-        "@abseil-cpp//absl/status",
-        "@abseil-cpp//absl/strings:string_view",
-        "@abseil-cpp//absl/types:span",
-        "@com_google_fuzztest//fuzztest/internal:any",
-        "@com_google_fuzztest//fuzztest/internal:logging",
-        "@com_google_fuzztest//fuzztest/internal:meta",
-        "@com_google_fuzztest//fuzztest/internal:printer",
-        "@com_google_fuzztest//fuzztest/internal:serialization",
-        "@com_google_fuzztest//fuzztest/internal:type_support",
-        "@com_google_fuzztest//fuzztest/internal/domains:core_domains_impl",
-        "@com_google_fuzztest//fuzztest/internal/domains:utf",
+    hdrs = [
+        "domain_core.h",
+        "internal/domains/aggregate_of_impl.h",
+        "internal/domains/arbitrary_impl.h",
+        "internal/domains/bit_flag_combination_of_impl.h",
+        "internal/domains/bit_gen_ref.h",
+        "internal/domains/container_mutation_helpers.h",
+        "internal/domains/container_of_impl.h",
+        "internal/domains/domain.h",
+        "internal/domains/domain_base.h",
+        "internal/domains/domain_type_erasure.h",
+        "internal/domains/element_of_impl.h",
+        "internal/domains/filter_impl.h",
+        "internal/domains/flat_map_impl.h",
+        "internal/domains/in_range_impl.h",
+        "internal/domains/map_impl.h",
+        "internal/domains/mutation_metadata.h",
+        "internal/domains/one_of_impl.h",
+        "internal/domains/optional_of_impl.h",
+        "internal/domains/overlap_of_impl.h",
+        "internal/domains/serialization_helpers.h",
+        "internal/domains/smart_pointer_of_impl.h",
+        "internal/domains/special_values.h",
+        "internal/domains/unique_elements_container_of_impl.h",
+        "internal/domains/value_mutation_helpers.h",
+        "internal/domains/variant_of_impl.h",
     ],
+    visibility = ["//visibility:public"],
+    deps = [
+        ":absl_helpers",
+        ":any",
+        ":fuzzing_bit_gen",
+        ":logging",
+        ":meta",
+        ":printer",
+        ":serialization",
+        ":status",
+        ":table_of_recent_compares",
+        ":type_support",
+        ":utf",
+        "@abseil-cpp//absl/container:flat_hash_map",
+        "@abseil-cpp//absl/container:flat_hash_set",
+        "@abseil-cpp//absl/functional:function_ref",
+        "@abseil-cpp//absl/log:absl_check",
+        "@abseil-cpp//absl/log:absl_log",
+        "@abseil-cpp//absl/numeric:bits",
+        "@abseil-cpp//absl/numeric:int128",
+        "@abseil-cpp//absl/random",
+        "@abseil-cpp//absl/random:bit_gen_ref",
+        "@abseil-cpp//absl/random:distributions",
+        "@abseil-cpp//absl/status",
+        "@abseil-cpp//absl/strings",
+        "@abseil-cpp//absl/strings:str_format",
+        "@abseil-cpp//absl/time",
+        "@abseil-cpp//absl/types:span",
+    ],
+)
+
+cc_library(
+    name = "escaping",
+    srcs = ["internal/escaping.cc"],
+    hdrs = ["internal/escaping.h"],
+    deps = [
+        "@abseil-cpp//absl/strings",
+    ],
+)
+
+cc_library(
+    name = "fixture_driver",
+    srcs = ["internal/fixture_driver.cc"],
+    hdrs = ["internal/fixture_driver.h"],
+    deps = [
+        ":any",
+        ":domain_core",
+        ":logging",
+        ":meta",
+        ":printer",
+        ":registration",
+        ":type_support",
+        "@abseil-cpp//absl/functional:any_invocable",
+        "@abseil-cpp//absl/status",
+        "@abseil-cpp//absl/strings:str_format",
+        "@abseil-cpp//absl/types:span",
+    ],
+)
+
+cc_test(
+    name = "fixture_driver_test",
+    size = "small",
+    srcs = ["internal/fixture_driver_test.cc"],
+    deps = [
+        ":any",
+        ":domain_core",
+        ":fixture_driver",
+        ":logging",
+        ":registration",
+        "@abseil-cpp//absl/functional:any_invocable",
+        "@abseil-cpp//absl/types:span",
+        "@googletest//:gtest_main",
+    ],
+)
+
+cc_library(
+    name = "flag_name",
+    hdrs = ["internal/flag_name.h"],
 )
 
 cc_library(
@@ -209,6 +497,7 @@
     srcs = ["fuzzing_bit_gen.cc"],
     hdrs = ["fuzzing_bit_gen.h"],
     deps = [
+        ":register_fuzzing_mocks",
         "@abseil-cpp//absl/base:fast_type_id",
         "@abseil-cpp//absl/base:no_destructor",
         "@abseil-cpp//absl/container:flat_hash_map",
@@ -216,16 +505,363 @@
         "@abseil-cpp//absl/numeric:int128",
         "@abseil-cpp//absl/random:bit_gen_ref",
         "@abseil-cpp//absl/types:span",
-        "@com_google_fuzztest//fuzztest/internal:register_fuzzing_mocks",
     ],
 )
 
 cc_library(
+    name = "googletest_adaptor",
+    testonly = True,
+    srcs = ["internal/googletest_adaptor.cc"],
+    hdrs = ["internal/googletest_adaptor.h"],
+    deps = [
+        ":configuration",
+        ":corpus_database",
+        ":flag_name",
+        ":io",
+        ":registry",
+        ":runtime",
+        "@abseil-cpp//absl/strings",
+        "@abseil-cpp//absl/strings:str_format",
+        "@abseil-cpp//absl/strings:string_view",
+        "@googletest//:gtest",
+    ] + select({
+        "@com_google_fuzztest//fuzztest:use_centipede": [":centipede_adaptor"],
+        "//conditions:default": [],
+    }),
+)
+
+cc_library(
     name = "googletest_fixture_adapter",
     testonly = True,
     hdrs = ["googletest_fixture_adapter.h"],
     deps = [
-        "@com_google_fuzztest//fuzztest/internal:fixture_driver",
+        ":fixture_driver",
         "@googletest//:gtest",
     ],
 )
+
+cc_library(
+    name = "io",
+    srcs = ["internal/io.cc"],
+    hdrs = ["internal/io.h"],
+    deps = [
+        ":logging",
+        "@abseil-cpp//absl/functional:function_ref",
+        "@abseil-cpp//absl/hash",
+        "@abseil-cpp//absl/status",
+        "@abseil-cpp//absl/strings:str_format",
+        "@abseil-cpp//absl/strings:string_view",
+        "@abseil-cpp//absl/time",
+        "@abseil-cpp//absl/types:span",
+        "@com_google_fuzztest//common:blob_file",
+        "@com_google_fuzztest//common:defs",
+        "@com_google_fuzztest//common:remote_file",
+    ] + select({
+        "//conditions:default": [],
+    }),
+)
+
+cc_test(
+    name = "io_test",
+    srcs = ["internal/io_test.cc"],
+    deps = [
+        ":fuzztest_core",
+        ":io",
+        "@abseil-cpp//absl/log:check",
+        "@abseil-cpp//absl/status",
+        "@abseil-cpp//absl/strings",
+        "@abseil-cpp//absl/time",
+        "@com_google_fuzztest//common:blob_file",
+        "@com_google_fuzztest//common:defs",
+        "@com_google_fuzztest//common:temp_dir",
+        "@googletest//:gtest_main",
+    ],
+)
+
+cc_library(
+    name = "logging",
+    srcs = ["internal/logging.cc"],
+    hdrs = ["internal/logging.h"],
+    deps = [
+        "@abseil-cpp//absl/base:core_headers",
+        "@abseil-cpp//absl/strings",
+        "@abseil-cpp//absl/synchronization",
+    ],
+)
+
+cc_library(
+    name = "meta",
+    hdrs = ["internal/meta.h"],
+    deps = ["@abseil-cpp//absl/numeric:int128"],
+)
+
+cc_library(
+    name = "printer",
+    hdrs = ["internal/printer.h"],
+    deps = [
+        ":meta",
+        "@abseil-cpp//absl/strings:str_format",
+    ],
+)
+
+cc_library(
+    name = "regexp_dfa",
+    srcs = ["internal/domains/regexp_dfa.cc"],
+    hdrs = ["internal/domains/regexp_dfa.h"],
+    deps = [
+        ":logging",
+        "@abseil-cpp//absl/container:flat_hash_map",
+        "@abseil-cpp//absl/random:bit_gen_ref",
+        "@abseil-cpp//absl/random:distributions",
+        "@abseil-cpp//absl/status",
+        "@abseil-cpp//absl/status:statusor",
+        "@abseil-cpp//absl/strings",
+        "@abseil-cpp//absl/strings:string_view",
+        "@re2",
+    ],
+)
+
+cc_library(
+    name = "register_fuzzing_mocks",
+    srcs = ["internal/register_fuzzing_mocks.cc"],
+    hdrs = ["internal/register_fuzzing_mocks.h"],
+    deps = [
+        "@abseil-cpp//absl/base:fast_type_id",
+        "@abseil-cpp//absl/functional:function_ref",
+        "@abseil-cpp//absl/log:absl_check",
+        "@abseil-cpp//absl/random:distributions",
+        "@abseil-cpp//absl/types:span",
+    ],
+)
+
+cc_library(
+    name = "registration",
+    hdrs = ["internal/registration.h"],
+    deps = [
+        ":domain_core",
+        ":meta",
+        ":printer",
+        ":type_support",
+        "@abseil-cpp//absl/functional:any_invocable",
+        "@abseil-cpp//absl/status",
+        "@abseil-cpp//absl/strings:str_format",
+        "@abseil-cpp//absl/types:span",
+    ],
+)
+
+cc_library(
+    name = "registry",
+    srcs = ["internal/registry.cc"],
+    hdrs = ["internal/registry.h"],
+    deps = [
+        ":compatibility_mode",
+        ":fixture_driver",
+        ":registration",
+        ":runtime",
+        "@abseil-cpp//absl/container:flat_hash_map",
+        "@abseil-cpp//absl/functional:function_ref",
+        "@abseil-cpp//absl/strings:string_view",
+    ] + select({
+        "@com_google_fuzztest//fuzztest:use_centipede": [":centipede_adaptor"],
+        "//conditions:default": [],
+    }),
+)
+
+cc_library(
+    name = "runtime",
+    srcs = ["internal/runtime.cc"],
+    hdrs = ["internal/runtime.h"],
+    deps = [
+        ":configuration",
+        ":corpus_database",
+        ":coverage",
+        ":domain_core",
+        ":fixture_driver",
+        ":flag_name",
+        ":io",
+        ":logging",
+        ":printer",
+        ":registration",
+        ":seed_seq",
+        ":serialization",
+        ":status",
+        "@abseil-cpp//absl/base:core_headers",
+        "@abseil-cpp//absl/functional:any_invocable",
+        "@abseil-cpp//absl/functional:bind_front",
+        "@abseil-cpp//absl/functional:function_ref",
+        "@abseil-cpp//absl/log:absl_check",
+        "@abseil-cpp//absl/random",
+        "@abseil-cpp//absl/random:bit_gen_ref",
+        "@abseil-cpp//absl/random:distributions",
+        "@abseil-cpp//absl/status",
+        "@abseil-cpp//absl/status:statusor",
+        "@abseil-cpp//absl/strings",
+        "@abseil-cpp//absl/strings:str_format",
+        "@abseil-cpp//absl/time",
+        "@abseil-cpp//absl/types:span",
+        "@com_google_fuzztest//common:bazel",
+    ],
+)
+
+cc_test(
+    name = "runtime_test",
+    srcs = ["internal/runtime_test.cc"],
+    deps = [
+        ":configuration",
+        ":domain_core",
+        ":flag_name",
+        ":runtime",
+        ":test_protobuf_cc_proto",
+        "@abseil-cpp//absl/flags:flag",
+        "@abseil-cpp//absl/strings",
+        "@abseil-cpp//absl/time",
+        "@googletest//:gtest_main",
+    ],
+)
+
+cc_library(
+    name = "seed_seq",
+    srcs = ["internal/seed_seq.cc"],
+    hdrs = ["internal/seed_seq.h"],
+    deps = [
+        ":logging",
+        "@abseil-cpp//absl/random",
+        "@abseil-cpp//absl/strings",
+        "@abseil-cpp//absl/types:span",
+    ],
+)
+
+cc_test(
+    name = "seed_seq_test",
+    srcs = ["internal/seed_seq_test.cc"],
+    deps = [
+        ":seed_seq",
+        "@abseil-cpp//absl/strings",
+        "@abseil-cpp//absl/types:span",
+        "@googletest//:gtest_main",
+    ],
+)
+
+cc_library(
+    name = "serialization",
+    srcs = ["internal/serialization.cc"],
+    hdrs = ["internal/serialization.h"],
+    deps = [
+        ":meta",
+        "@abseil-cpp//absl/numeric:int128",
+        "@abseil-cpp//absl/strings",
+        "@abseil-cpp//absl/strings:str_format",
+        "@abseil-cpp//absl/types:span",
+    ],
+)
+
+cc_test(
+    name = "serialization_test",
+    srcs = ["internal/serialization_test.cc"],
+    deps = [
+        ":serialization",
+        ":test_protobuf_cc_proto",
+        "@googletest//:gtest_main",
+        "@protobuf",
+    ],
+)
+
+cc_library(
+    name = "status",
+    srcs = ["internal/status.cc"],
+    hdrs = ["internal/status.h"],
+    deps = [
+        "@abseil-cpp//absl/status",
+        "@abseil-cpp//absl/strings",
+        "@abseil-cpp//absl/strings:cord",
+    ],
+)
+
+cc_library(
+    name = "subprocess",
+    srcs = ["internal/subprocess.cc"],
+    hdrs = ["internal/subprocess.h"],
+    deps = [
+        ":logging",
+        "@abseil-cpp//absl/container:flat_hash_map",
+        "@abseil-cpp//absl/strings",
+        "@abseil-cpp//absl/time",
+    ],
+)
+
+cc_test(
+    name = "subprocess_test",
+    srcs = ["internal/subprocess_test.cc"],
+    deps = [
+        ":subprocess",
+        "@abseil-cpp//absl/strings",
+        "@abseil-cpp//absl/time",
+        "@googletest//:gtest_main",
+    ],
+)
+
+cc_library(
+    name = "table_of_recent_compares",
+    hdrs = ["internal/table_of_recent_compares.h"],
+    deps = [
+        ":type_support",
+        "@abseil-cpp//absl/container:flat_hash_set",
+        "@abseil-cpp//absl/random:bit_gen_ref",
+        "@abseil-cpp//absl/random:distributions",
+    ],
+)
+
+cc_test(
+    name = "table_of_recent_compares_test",
+    srcs = ["internal/table_of_recent_compares_test.cc"],
+    deps = [
+        ":table_of_recent_compares",
+        "@abseil-cpp//absl/random",
+        "@googletest//:gtest_main",
+    ],
+)
+
+proto_library(
+    name = "test_protobuf",
+    srcs = ["internal/test_protobuf.proto"],
+)
+
+cc_proto_library(
+    name = "test_protobuf_cc_proto",
+    deps = [":test_protobuf"],
+)
+
+cc_library(
+    name = "type_support",
+    srcs = ["internal/type_support.cc"],
+    hdrs = ["internal/type_support.h"],
+    deps = [
+        ":absl_helpers",
+        ":meta",
+        ":printer",
+        "@abseil-cpp//absl/debugging:symbolize",
+        "@abseil-cpp//absl/functional:function_ref",
+        "@abseil-cpp//absl/numeric:int128",
+        "@abseil-cpp//absl/strings",
+        "@abseil-cpp//absl/strings:str_format",
+        "@abseil-cpp//absl/time",
+    ],
+)
+
+cc_test(
+    name = "type_support_test",
+    srcs = ["internal/type_support_test.cc"],
+    deps = [
+        ":domain",
+        ":meta",
+        ":printer",
+        ":test_protobuf_cc_proto",
+        ":type_support",
+        "@abseil-cpp//absl/numeric:int128",
+        "@abseil-cpp//absl/strings",
+        "@abseil-cpp//absl/strings:str_format",
+        "@abseil-cpp//absl/time",
+        "@googletest//:gtest_main",
+        "@protobuf",
+    ],
+)
diff --git a/fuzztest/CMakeLists.txt b/fuzztest/CMakeLists.txt
index 62a854a..64655c6 100644
--- a/fuzztest/CMakeLists.txt
+++ b/fuzztest/CMakeLists.txt
@@ -1,75 +1,40 @@
-# Copyright 2024 Google LLC
-#
-# 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.
+# The DEPS in this file are sorted in the same order as the corresponding
+# deps in the BUILD file. This is to make it easier to compare the two files.
+
+function(_link_libfuzzer_in_compatibility_mode name)
+  if (FUZZTEST_COMPATIBILITY_MODE STREQUAL "libfuzzer")
+    EXECUTE_PROCESS (
+        COMMAND bash -c "find \${PATH//:/ } -maxdepth 1 -executable -name 'llvm-config*'"
+        OUTPUT_VARIABLE LLVM_CONFIG OUTPUT_STRIP_TRAILING_WHITESPACE
+    )
+    EXECUTE_PROCESS(
+      COMMAND bash -c "find $(${LLVM_CONFIG} --libdir) \
+      -name libclang_rt.fuzzer_no_main-x86_64.a"
+      OUTPUT_VARIABLE FUZZER_NO_MAIN OUTPUT_STRIP_TRAILING_WHITESPACE
+    )
+    if(NOT FUZZER_NO_MAIN)
+      # LLVM_ENABLE_PER_TARGET_RUNTIME_DIR was set to ON when building LLVM.
+      EXECUTE_PROCESS(
+        COMMAND bash -c "find / -regex \
+        \"$(${LLVM_CONFIG} --libdir).*$(${LLVM_CONFIG} --host-target).*libclang_rt.fuzzer_no_main.a\""
+        OUTPUT_VARIABLE FUZZER_NO_MAIN OUTPUT_STRIP_TRAILING_WHITESPACE
+      )
+    endif()
+    target_link_libraries(${name} PRIVATE ${FUZZER_NO_MAIN})
+  endif ()
+endfunction()
 
 get_filename_component(PARENT_DIR ../ ABSOLUTE)
 include_directories(${PARENT_DIR})
 
+add_subdirectory(grammars)
+
+
 if (NOT COMPILER_GCC)
   SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize-coverage=0")
   SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize-coverage=0")
 endif()
 
-fuzztest_cc_library(
-  NAME
-    domain
-  HDRS
-    "domain.h"
-  DEPS
-    fuzztest::domain_core
-    fuzztest::domains_impl
-    fuzztest::in_regexp_impl
-    fuzztest::protobuf_domain_impl
-)
-
-fuzztest_cc_library(
-  NAME
-    domain_core
-  HDRS
-    "domain_core.h"
-  DEPS
-    absl::flat_hash_map
-    absl::random_bit_gen_ref
-    absl::status
-    absl::string_view
-    absl::span
-    fuzztest::any
-    fuzztest::logging
-    fuzztest::meta
-    fuzztest::printer
-    fuzztest::serialization
-    fuzztest::type_support
-    fuzztest::core_domains_impl
-    fuzztest::utf
-)
-
-fuzztest_cc_library(
-  NAME
-    fuzzing_bit_gen
-  HDRS
-    "fuzzing_bit_gen.h"
-  SRCS
-    "fuzzing_bit_gen.cc"
-  DEPS
-    absl::fast_type_id
-    absl::no_destructor
-    absl::flat_hash_map
-    absl::bits
-    absl::int128
-    absl::random_bit_gen_ref
-    absl::span
-    fuzztest::register_fuzzing_mocks
-)
 
 fuzztest_cc_library(
   NAME
@@ -93,6 +58,40 @@
 
 fuzztest_cc_library(
   NAME
+    fuzztest_macros
+  HDRS
+    "fuzztest_macros.h"
+  SRCS
+    "fuzztest_macros.cc"
+  DEPS
+    fuzztest::logging
+    fuzztest::registration
+    fuzztest::registry
+    fuzztest::runtime
+    absl::status
+    absl::statusor
+    absl::strings
+    absl::string_view
+)
+
+fuzztest_cc_test(
+  NAME
+    fuzztest_macros_test
+  HDRS
+    "fuzztest_macros_test.h"
+  SRCS
+    "fuzztest_macros_test.cc"
+  DEPS
+    fuzztest::fuzztest_macros
+    GTest::gmock_main
+    absl::check
+    absl::status
+    absl::strings
+    fuzztest::temp_dir
+)
+
+fuzztest_cc_library(
+  NAME
     fuzztest_gtest_main
   SRCS
     "fuzztest_gtest_main.cc"
@@ -103,34 +102,379 @@
 
 fuzztest_cc_library(
   NAME
-    fuzztest_macros
+    init_fuzztest
   HDRS
-    "fuzztest_macros.h"
+    "init_fuzztest.h"
   SRCS
-    "fuzztest_macros.cc"
+    "init_fuzztest.cc"
   DEPS
-    absl::status
-    absl::statusor
-    absl::strings
-    absl::string_view
+    fuzztest::configuration
+    fuzztest::flag_name
+    fuzztest::googletest_adaptor
+    fuzztest::io
     fuzztest::logging
-    fuzztest::registration
     fuzztest::registry
     fuzztest::runtime
+    GTest::gtest
+    absl::algorithm_container
+    absl::no_destructor
+    absl::flat_hash_set
+    absl::flags
+    absl::flags_parse
+    absl::flags_reflection
+    absl::strings
+    absl::str_format
+    absl::time
+)
+
+fuzztest_cc_library(
+  NAME
+    llvm_fuzzer_main
+  SRCS
+    "llvm_fuzzer_main.cc"
+  DEPS
+    fuzztest::init_fuzztest
+    GTest::gtest
+    absl::flags
+    absl::flags_parse
+)
+
+fuzztest_cc_library(
+  NAME
+    llvm_fuzzer_wrapper
+  SRCS
+    "llvm_fuzzer_wrapper.cc"
+  DEPS
+    fuzztest::domain_core
+    fuzztest::fuzztest
+    fuzztest::fuzztest_macros
+    fuzztest::io
+    fuzztest::logging
+    absl::core_headers
+    absl::no_destructor
+    absl::flags
+    absl::absl_check
+    absl::random_random
+    absl::random_bit_gen_ref
+    absl::synchronization
+)
+
+################################################################################
+# Internal
+################################################################################
+
+# TODO(lszekeres): Move these under internal/CMakeLists.txt
+
+fuzztest_cc_library(
+  NAME
+    absl_helpers
+  HDRS
+    "internal/domains/absl_helpers.h"
+  DEPS
+    fuzztest::logging
+    absl::time
+)
+
+fuzztest_cc_library(
+  NAME
+    any
+  HDRS
+    "internal/any.h"
+  DEPS
+    fuzztest::logging
+    fuzztest::meta
 )
 
 fuzztest_cc_test(
   NAME
-    fuzztest_macros_test
+    any_test
   SRCS
-    "fuzztest_macros_test.cc"
+    "internal/any_test.cc"
   DEPS
-    fuzztest::fuzztest_macros
-    absl::check
+    fuzztest::any
+    GTest::gmock_main
+    absl::strings
+)
+
+# TODO(lszekeres): centipede_adaptor
+
+fuzztest_cc_library(
+  NAME
+    compatibility_mode
+  HDRS
+    "internal/compatibility_mode.h"
+  SRCS
+    "internal/compatibility_mode.cc"
+  DEPS
+    fuzztest::domain_core
+    fuzztest::fixture_driver
+    fuzztest::logging
+    fuzztest::runtime
+    absl::random_distributions
+    absl::strings
+    absl::str_format
+    absl::time
+)
+
+_link_libfuzzer_in_compatibility_mode(fuzztest_compatibility_mode)
+
+fuzztest_cc_library(
+  NAME
+    configuration
+  HDRS
+    "internal/configuration.h"
+  SRCS
+    "internal/configuration.cc"
+  DEPS
+    absl::absl_check
+    absl::status
+    absl::statusor
+    absl::strings
+    absl::string_view
+    absl::time
+)
+
+fuzztest_cc_test(
+  NAME
+    configuration_test
+  SRCS
+    "internal/configuration_test.cc"
+  DEPS
+    fuzztest::configuration
+    GTest::gmock_main
+    absl::statusor
+    absl::time
+)
+
+fuzztest_cc_library(
+  NAME
+    corpus_database
+  HDRS
+    "internal/corpus_database.h"
+  SRCS
+    "internal/corpus_database.cc"
+  DEPS
+    fuzztest::configuration
+    fuzztest::io
+    absl::strings
+    absl::string_view
+    absl::time
+)
+
+fuzztest_cc_library(
+  NAME
+    coverage
+  HDRS
+    "internal/coverage.h"
+  SRCS
+    "internal/coverage.cc"
+  DEPS
+    fuzztest::domain_core
+    fuzztest::flag_name
+    fuzztest::logging
+    fuzztest::table_of_recent_compares
+    absl::core_headers
+    absl::str_format
+    absl::span
+)
+
+fuzztest_cc_library(
+  NAME
+    domain
+  HDRS
+    "domain.h"
+    "internal/domains/in_grammar_impl.h"
+    "internal/domains/in_regexp_impl.h"
+    "internal/domains/protobuf_domain_impl.h"
+  SRCS
+    "internal/domains/in_grammar_impl.cc"
+    "internal/domains/in_regexp_impl.cc"
+  DEPS
+    fuzztest::any
+    fuzztest::domain_core
+    fuzztest::logging
+    fuzztest::meta
+    fuzztest::regexp_dfa
+    fuzztest::serialization
+    fuzztest::status
+    fuzztest::type_support
+    absl::core_headers
+    absl::no_destructor
+    absl::flat_hash_map
+    absl::flat_hash_set
+    absl::random_random
+    absl::random_bit_gen_ref
+    absl::random_distributions
+    absl::status
+    absl::statusor
+    absl::strings
+    absl::str_format
+    absl::synchronization
+    absl::span
+)
+
+fuzztest_cc_library(
+  NAME
+    utf
+  HDRS
+    "internal/domains/utf.h"
+  SRCS
+    "internal/domains/rune.cc"
+    "internal/domains/rune.h"
+    "internal/domains/utf.cc"
+  DEPS
+    absl::string_view
+)
+
+fuzztest_cc_library(
+  NAME
+    domain_core
+  HDRS
+    "domain_core.h"
+    "internal/domains/aggregate_of_impl.h"
+    "internal/domains/arbitrary_impl.h"
+    "internal/domains/bit_flag_combination_of_impl.h"
+    "internal/domains/bit_gen_ref.h"
+    "internal/domains/container_mutation_helpers.h"
+    "internal/domains/container_of_impl.h"
+    "internal/domains/domain.h"
+    "internal/domains/domain_base.h"
+    "internal/domains/domain_type_erasure.h"
+    "internal/domains/element_of_impl.h"
+    "internal/domains/filter_impl.h"
+    "internal/domains/flat_map_impl.h"
+    "internal/domains/in_range_impl.h"
+    "internal/domains/map_impl.h"
+    "internal/domains/mutation_metadata.h"
+    "internal/domains/one_of_impl.h"
+    "internal/domains/optional_of_impl.h"
+    "internal/domains/overlap_of_impl.h"
+    "internal/domains/serialization_helpers.h"
+    "internal/domains/smart_pointer_of_impl.h"
+    "internal/domains/special_values.h"
+    "internal/domains/unique_elements_container_of_impl.h"
+    "internal/domains/value_mutation_helpers.h"
+    "internal/domains/variant_of_impl.h"
+  DEPS
+    fuzztest::absl_helpers
+    fuzztest::any
+    fuzztest::fuzzing_bit_gen
+    fuzztest::logging
+    fuzztest::meta
+    fuzztest::printer
+    fuzztest::serialization
+    fuzztest::status
+    fuzztest::table_of_recent_compares
+    fuzztest::type_support
+    fuzztest::utf
+    absl::flat_hash_map
+    absl::flat_hash_set
+    absl::function_ref
+    absl::absl_check
+    absl::absl_log
+    absl::bits
+    absl::int128
+    absl::random_random
+    absl::random_bit_gen_ref
+    absl::random_distributions
     absl::status
     absl::strings
-    fuzztest::temp_dir
+    absl::str_format
+    absl::time
+    absl::span
+)
+
+fuzztest_cc_library(
+  NAME
+    escaping
+  HDRS
+    "internal/escaping.h"
+  SRCS
+    "internal/escaping.cc"
+  DEPS
+    absl::strings
+)
+
+fuzztest_cc_library(
+  NAME
+    fixture_driver
+  HDRS
+    "internal/fixture_driver.h"
+  SRCS
+    "internal/fixture_driver.cc"
+  DEPS
+    fuzztest::any
+    fuzztest::domain_core
+    fuzztest::logging
+    fuzztest::meta
+    fuzztest::printer
+    fuzztest::registration
+    fuzztest::type_support
+    absl::any_invocable
+    absl::status
+    absl::str_format
+    absl::span
+)
+
+fuzztest_cc_test(
+  NAME
+    fixture_driver_test
+  SRCS
+    "internal/fixture_driver_test.cc"
+  DEPS
+    fuzztest::any
+    fuzztest::domain_core
+    fuzztest::fixture_driver
+    fuzztest::logging
+    fuzztest::registration
     GTest::gmock_main
+    absl::any_invocable
+    absl::span
+)
+
+fuzztest_cc_library(
+  NAME
+    flag_name
+  HDRS
+    "internal/flag_name.h"
+)
+
+fuzztest_cc_library(
+  NAME
+    fuzzing_bit_gen
+  HDRS
+    "fuzzing_bit_gen.h"
+  SRCS
+    "fuzzing_bit_gen.cc"
+  DEPS
+    fuzztest::register_fuzzing_mocks
+    absl::fast_type_id
+    absl::no_destructor
+    absl::flat_hash_map
+    absl::bits
+    absl::int128
+    absl::random_bit_gen_ref
+    absl::span
+)
+
+fuzztest_cc_library(
+  NAME
+    googletest_adaptor
+  HDRS
+    "internal/googletest_adaptor.h"
+  SRCS
+    "internal/googletest_adaptor.cc"
+  DEPS
+    fuzztest::configuration
+    fuzztest::corpus_database
+    fuzztest::flag_name
+    fuzztest::io
+    fuzztest::registry
+    fuzztest::runtime
+    GTest::gtest
+    absl::strings
+    absl::str_format
+    absl::string_view
 )
 
 fuzztest_cc_library(
@@ -145,59 +489,382 @@
 
 fuzztest_cc_library(
   NAME
-    init_fuzztest
+    io
   HDRS
-    "init_fuzztest.h"
+    "internal/io.h"
   SRCS
-    "init_fuzztest.cc"
+    "internal/io.cc"
   DEPS
-    absl::algorithm_container
-    absl::no_destructor
-    absl::flat_hash_set
-    absl::flags
-    absl::flags_parse
-    absl::flags_reflection
-    absl::strings
+    fuzztest::logging
+    absl::function_ref
+    absl::hash
+    absl::status
     absl::str_format
+    absl::string_view
     absl::time
+    absl::span
+    fuzztest::blob_file
+    fuzztest::defs
+    fuzztest::remote_file
+)
+
+fuzztest_cc_test(
+  NAME
+    io_test
+  SRCS
+    "internal/io_test.cc"
+  DEPS
+    fuzztest::fuzztest_core
+    fuzztest::io
+    GTest::gmock_main
+    absl::check
+    absl::status
+    absl::strings
+    absl::time
+    fuzztest::blob_file
+    fuzztest::defs
+    fuzztest::temp_dir
+)
+
+fuzztest_cc_library(
+  NAME
+    logging
+  HDRS
+    "internal/logging.h"
+  SRCS
+    "internal/logging.cc"
+  DEPS
+    absl::core_headers
+    absl::strings
+    absl::synchronization
+)
+
+fuzztest_cc_library(
+  NAME
+    meta
+  HDRS
+    "internal/meta.h"
+  DEPS
+    absl::int128
+)
+
+fuzztest_cc_library(
+  NAME
+    printer
+  HDRS
+    "internal/printer.h"
+  DEPS
+    fuzztest::meta
+    absl::str_format
+)
+
+fuzztest_cc_library(
+  NAME
+    regexp_dfa
+  HDRS
+    "internal/domains/regexp_dfa.h"
+  SRCS
+    "internal/domains/regexp_dfa.cc"
+  DEPS
+    fuzztest::logging
+    absl::flat_hash_map
+    absl::random_bit_gen_ref
+    absl::random_distributions
+    absl::status
+    absl::statusor
+    absl::strings
+    absl::string_view
+    re2::re2
+)
+
+fuzztest_cc_library(
+  NAME
+    register_fuzzing_mocks
+  HDRS
+    "internal/register_fuzzing_mocks.h"
+  SRCS
+    "internal/register_fuzzing_mocks.cc"
+  DEPS
+    absl::fast_type_id
+    absl::function_ref
+    absl::absl_check
+    absl::random_distributions
+    absl::span
+)
+
+fuzztest_cc_library(
+  NAME
+    registration
+  HDRS
+    "internal/registration.h"
+  DEPS
+    fuzztest::domain_core
+    fuzztest::meta
+    fuzztest::printer
+    fuzztest::type_support
+    absl::any_invocable
+    absl::status
+    absl::str_format
+    absl::span
+)
+
+fuzztest_cc_library(
+  NAME
+    registry
+  HDRS
+    "internal/registry.h"
+  SRCS
+    "internal/registry.cc"
+  DEPS
+    fuzztest::compatibility_mode
+    fuzztest::fixture_driver
+    fuzztest::registration
+    fuzztest::runtime
+    absl::flat_hash_map
+    absl::function_ref
+    absl::string_view
+)
+
+fuzztest_cc_library(
+  NAME
+    runtime
+  HDRS
+    "internal/runtime.h"
+  SRCS
+    "internal/runtime.cc"
+  DEPS
     fuzztest::configuration
+    fuzztest::corpus_database
+    fuzztest::coverage
+    fuzztest::domain_core
+    fuzztest::fixture_driver
     fuzztest::flag_name
-    fuzztest::googletest_adaptor
     fuzztest::io
     fuzztest::logging
-    fuzztest::registry
-    fuzztest::runtime
-    GTest::gtest
-)
-
-fuzztest_cc_library(
-  NAME
-    llvm_fuzzer_main
-  SRCS
-    "llvm_fuzzer_main.cc"
-  DEPS
-    fuzztest::init_fuzztest
-    absl::flags
-    absl::flags_parse
-    GTest::gtest
-)
-
-fuzztest_cc_library(
-  NAME
-    llvm_fuzzer_wrapper
-  SRCS
-    "llvm_fuzzer_wrapper.cc"
-  DEPS
-    fuzztest::fuzztest
-    fuzztest::fuzztest_macros
+    fuzztest::printer
+    fuzztest::registration
+    fuzztest::seed_seq
+    fuzztest::serialization
+    fuzztest::status
     absl::core_headers
-    absl::no_destructor
-    absl::flags
+    absl::any_invocable
+    absl::bind_front
+    absl::function_ref
     absl::absl_check
     absl::random_random
     absl::random_bit_gen_ref
-    absl::synchronization
-    fuzztest::io
+    absl::random_distributions
+    absl::status
+    absl::statusor
+    absl::strings
+    absl::str_format
+    absl::time
+    absl::span
+    fuzztest::bazel
+)
+
+fuzztest_cc_test(
+  NAME
+    runtime_test
+  SRCS
+    "internal/runtime_test.cc"
+  DEPS
+    fuzztest::configuration
+    fuzztest::domain_core
+    fuzztest::flag_name
+    fuzztest::runtime
+    test_protobuf
+    GTest::gmock_main
+    absl::flags
+    absl::strings
+    absl::time
+)
+
+fuzztest_cc_library(
+  NAME
+    seed_seq
+  HDRS
+    "internal/seed_seq.h"
+  SRCS
+    "internal/seed_seq.cc"
+  DEPS
     fuzztest::logging
-    fuzztest::core_domains_impl
+    absl::random_random
+    absl::strings
+    absl::span
+)
+
+fuzztest_cc_test(
+  NAME
+    seed_seq_test
+  SRCS
+    "internal/seed_seq_test.cc"
+  DEPS
+    fuzztest::seed_seq
+    GTest::gmock_main
+    absl::strings
+    absl::span
+)
+
+fuzztest_cc_library(
+  NAME
+    serialization
+  HDRS
+    "internal/serialization.h"
+  SRCS
+    "internal/serialization.cc"
+  DEPS
+    fuzztest::meta
+    absl::int128
+    absl::strings
+    absl::str_format
+    absl::span
+)
+
+fuzztest_cc_test(
+  NAME
+    serialization_test
+  SRCS
+    "internal/serialization_test.cc"
+  DEPS
+    fuzztest::serialization
+    test_protobuf
+    GTest::gmock_main
+    protobuf::libprotobuf
+)
+
+fuzztest_cc_library(
+  NAME
+    status
+  HDRS
+    "internal/status.h"
+  SRCS
+    "internal/status.cc"
+  DEPS
+    absl::status
+    absl::strings
+    absl::cord
+)
+
+fuzztest_cc_library(
+  NAME
+    subprocess
+  HDRS
+    "internal/subprocess.h"
+  SRCS
+    "internal/subprocess.cc"
+  DEPS
+    fuzztest::logging
+    absl::flat_hash_map
+    absl::strings
+    absl::time
+)
+
+fuzztest_cc_test(
+  NAME
+    subprocess_test
+  SRCS
+    "internal/subprocess_test.cc"
+  DEPS
+    fuzztest::subprocess
+    GTest::gmock_main
+    absl::strings
+    absl::time
+)
+
+fuzztest_cc_library(
+  NAME
+    table_of_recent_compares
+  HDRS
+    "internal/table_of_recent_compares.h"
+  DEPS
+    fuzztest::type_support
+    absl::flat_hash_set
+    absl::random_bit_gen_ref
+    absl::random_distributions
+)
+
+fuzztest_cc_test(
+  NAME
+    table_of_recent_compares_test
+  SRCS
+    "internal/table_of_recent_compares_test.cc"
+  DEPS
+    fuzztest::table_of_recent_compares
+    GTest::gmock_main
+    absl::random_random
+)
+
+# TODO(lszekeres): Support fuzztest_cc_proto_library.
+
+if (FUZZTEST_BUILD_TESTING)
+
+  include_directories(${PROTOBUF_INCLUDE_DIR})
+
+  add_library(
+    test_protobuf
+    OBJECT
+    "${CMAKE_CURRENT_LIST_DIR}/internal/test_protobuf.proto"
+  )
+  target_link_libraries(
+    test_protobuf
+    PUBLIC
+    protobuf::libprotobuf
+  )
+
+  # The output dir of `test_protobuf` might not be created by `protobuf_generate`.
+  file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/internal)
+
+  protobuf_generate(
+    TARGET
+      test_protobuf
+    IMPORT_DIRS
+      ${CMAKE_CURRENT_LIST_DIR}/internal
+    PROTOC_OUT_DIR
+      ${CMAKE_CURRENT_BINARY_DIR}/internal
+  )
+
+  target_include_directories(
+    test_protobuf
+    PUBLIC
+    "${CMAKE_CURRENT_BINARY_DIR}/.."
+  )
+
+endif ()
+
+fuzztest_cc_library(
+  NAME
+    type_support
+  HDRS
+    "internal/type_support.h"
+  SRCS
+    "internal/type_support.cc"
+  DEPS
+    fuzztest::absl_helpers
+    fuzztest::meta
+    fuzztest::printer
+    absl::symbolize
+    absl::function_ref
+    absl::int128
+    absl::strings
+    absl::str_format
+    absl::time
+)
+
+fuzztest_cc_test(
+  NAME
+    type_support_test
+  SRCS
+    "internal/type_support_test.cc"
+  DEPS
+    fuzztest::domain
+    fuzztest::meta
+    fuzztest::printer
+    test_protobuf
+    fuzztest::type_support
+    GTest::gmock_main
+    absl::int128
+    absl::strings
+    absl::str_format
+    absl::time
 )
diff --git a/fuzztest/internal/BUILD b/fuzztest/internal/BUILD
deleted file mode 100644
index fcc20de..0000000
--- a/fuzztest/internal/BUILD
+++ /dev/null
@@ -1,537 +0,0 @@
-# Copyright 2024 Google LLC
-#
-# 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.
-
-load("@rules_proto//proto:defs.bzl", "proto_library")
-
-package(default_visibility = ["@com_google_fuzztest//:__subpackages__"])
-
-licenses(["notice"])
-
-cc_library(
-    name = "any",
-    hdrs = ["any.h"],
-    deps = [
-        ":logging",
-        ":meta",
-    ],
-)
-
-cc_test(
-    name = "any_test",
-    srcs = ["any_test.cc"],
-    deps = [
-        ":any",
-        "@abseil-cpp//absl/strings",
-        "@googletest//:gtest_main",
-    ],
-)
-
-cc_library(
-    name = "centipede_adaptor",
-    srcs = ["centipede_adaptor.cc"],
-    hdrs = ["centipede_adaptor.h"],
-    defines = ["FUZZTEST_USE_CENTIPEDE"],
-    deps = [
-        ":any",
-        ":configuration",
-        ":escaping",
-        ":fixture_driver",
-        ":flag_name",
-        ":io",
-        ":logging",
-        ":runtime",
-        ":table_of_recent_compares",
-        "@abseil-cpp//absl/algorithm:container",
-        "@abseil-cpp//absl/base:no_destructor",
-        "@abseil-cpp//absl/functional:any_invocable",
-        "@abseil-cpp//absl/log:absl_log",
-        "@abseil-cpp//absl/memory",
-        "@abseil-cpp//absl/random",
-        "@abseil-cpp//absl/random:distributions",
-        "@abseil-cpp//absl/status",
-        "@abseil-cpp//absl/status:statusor",
-        "@abseil-cpp//absl/strings",
-        "@abseil-cpp//absl/strings:str_format",
-        "@abseil-cpp//absl/strings:string_view",
-        "@abseil-cpp//absl/time",
-        "@abseil-cpp//absl/types:span",
-        "@com_google_fuzztest//centipede:centipede_callbacks",
-        "@com_google_fuzztest//centipede:centipede_default_callbacks",
-        "@com_google_fuzztest//centipede:centipede_interface",
-        "@com_google_fuzztest//centipede:centipede_runner_no_main",
-        "@com_google_fuzztest//centipede:environment",
-        "@com_google_fuzztest//centipede:execution_metadata",
-        "@com_google_fuzztest//centipede:mutation_input",
-        "@com_google_fuzztest//centipede:runner_result",
-        "@com_google_fuzztest//centipede:workdir",
-        "@com_google_fuzztest//common:defs",
-        "@com_google_fuzztest//common:remote_file",
-        "@com_google_fuzztest//common:temp_dir",
-        "@com_google_fuzztest//fuzztest/internal/domains:core_domains_impl",
-    ],
-)
-
-cc_library(
-    name = "compatibility_mode",
-    srcs = ["compatibility_mode.cc"],
-    hdrs = ["compatibility_mode.h"],
-    deps = [
-        ":fixture_driver",
-        ":logging",
-        ":runtime",
-        "@abseil-cpp//absl/random:distributions",
-        "@abseil-cpp//absl/strings",
-        "@abseil-cpp//absl/strings:str_format",
-        "@abseil-cpp//absl/time",
-        "@com_google_fuzztest//fuzztest/internal/domains:core_domains_impl",
-    ] + select({
-        "//conditions:default": [],
-    }),
-)
-
-cc_library(
-    name = "configuration",
-    srcs = ["configuration.cc"],
-    hdrs = ["configuration.h"],
-    deps = [
-        "@abseil-cpp//absl/log:absl_check",
-        "@abseil-cpp//absl/status",
-        "@abseil-cpp//absl/status:statusor",
-        "@abseil-cpp//absl/strings",
-        "@abseil-cpp//absl/strings:string_view",
-        "@abseil-cpp//absl/time",
-    ],
-)
-
-cc_test(
-    name = "configuration_test",
-    srcs = ["configuration_test.cc"],
-    deps = [
-        ":configuration",
-        "@abseil-cpp//absl/status:statusor",
-        "@abseil-cpp//absl/time",
-        "@googletest//:gtest_main",
-    ],
-)
-
-cc_library(
-    name = "corpus_database",
-    srcs = ["corpus_database.cc"],
-    hdrs = ["corpus_database.h"],
-    deps = [
-        ":configuration",
-        ":io",
-        "@abseil-cpp//absl/strings",
-        "@abseil-cpp//absl/strings:string_view",
-        "@abseil-cpp//absl/time",
-    ],
-)
-
-cc_library(
-    name = "coverage",
-    srcs = ["coverage.cc"],
-    hdrs = ["coverage.h"],
-    defines = select({
-        "@com_google_fuzztest//fuzztest:use_centipede": ["FUZZTEST_USE_CENTIPEDE"],
-        "//conditions:default": [],
-    }),
-    deps = [
-        ":flag_name",
-        ":logging",
-        ":table_of_recent_compares",
-        "@abseil-cpp//absl/base:core_headers",
-        "@abseil-cpp//absl/strings:str_format",
-        "@abseil-cpp//absl/types:span",
-        "@com_google_fuzztest//fuzztest/internal/domains:core_domains_impl",
-    ],
-)
-
-cc_library(
-    name = "escaping",
-    srcs = ["escaping.cc"],
-    hdrs = ["escaping.h"],
-    deps = ["@abseil-cpp//absl/strings"],
-)
-
-cc_library(
-    name = "fixture_driver",
-    srcs = ["fixture_driver.cc"],
-    hdrs = ["fixture_driver.h"],
-    deps = [
-        ":any",
-        ":logging",
-        ":meta",
-        ":printer",
-        ":registration",
-        ":type_support",
-        "@abseil-cpp//absl/functional:any_invocable",
-        "@abseil-cpp//absl/status",
-        "@abseil-cpp//absl/strings:str_format",
-        "@abseil-cpp//absl/types:span",
-        "@com_google_fuzztest//fuzztest/internal/domains:core_domains_impl",
-    ],
-)
-
-cc_test(
-    name = "fixture_driver_test",
-    size = "small",
-    srcs = ["fixture_driver_test.cc"],
-    deps = [
-        ":any",
-        ":fixture_driver",
-        ":logging",
-        ":registration",
-        "@abseil-cpp//absl/functional:any_invocable",
-        "@abseil-cpp//absl/types:span",
-        "@com_google_fuzztest//fuzztest:domain_core",
-        "@googletest//:gtest_main",
-    ],
-)
-
-cc_library(
-    name = "flag_name",
-    hdrs = ["flag_name.h"],
-)
-
-cc_library(
-    name = "googletest_adaptor",
-    testonly = True,
-    srcs = ["googletest_adaptor.cc"],
-    hdrs = ["googletest_adaptor.h"],
-    deps = [
-        ":configuration",
-        ":corpus_database",
-        ":flag_name",
-        ":io",
-        ":registry",
-        ":runtime",
-        "@abseil-cpp//absl/strings",
-        "@abseil-cpp//absl/strings:str_format",
-        "@abseil-cpp//absl/strings:string_view",
-        "@googletest//:gtest",
-    ] + select({
-        "@com_google_fuzztest//fuzztest:use_centipede": [":centipede_adaptor"],
-        "//conditions:default": [],
-    }),
-)
-
-cc_library(
-    name = "io",
-    srcs = ["io.cc"],
-    hdrs = ["io.h"],
-    deps = [
-        ":logging",
-        "@abseil-cpp//absl/functional:function_ref",
-        "@abseil-cpp//absl/hash",
-        "@abseil-cpp//absl/status",
-        "@abseil-cpp//absl/strings:str_format",
-        "@abseil-cpp//absl/strings:string_view",
-        "@abseil-cpp//absl/time",
-        "@abseil-cpp//absl/types:span",
-        "@com_google_fuzztest//common:blob_file",
-        "@com_google_fuzztest//common:defs",
-        "@com_google_fuzztest//common:remote_file",
-    ] + select({
-        "//conditions:default": [],
-    }),
-)
-
-cc_test(
-    name = "io_test",
-    srcs = ["io_test.cc"],
-    deps = [
-        ":io",
-        "@abseil-cpp//absl/log:check",
-        "@abseil-cpp//absl/status",
-        "@abseil-cpp//absl/strings",
-        "@abseil-cpp//absl/time",
-        "@com_google_fuzztest//common:blob_file",
-        "@com_google_fuzztest//common:defs",
-        "@com_google_fuzztest//common:temp_dir",
-        "@com_google_fuzztest//fuzztest:fuzztest_core",
-        "@googletest//:gtest_main",
-    ],
-)
-
-cc_library(
-    name = "logging",
-    srcs = ["logging.cc"],
-    hdrs = ["logging.h"],
-    deps = [
-        "@abseil-cpp//absl/base:core_headers",
-        "@abseil-cpp//absl/strings",
-        "@abseil-cpp//absl/synchronization",
-    ],
-)
-
-cc_library(
-    name = "meta",
-    hdrs = ["meta.h"],
-    deps = ["@abseil-cpp//absl/numeric:int128"],
-)
-
-cc_library(
-    name = "printer",
-    hdrs = ["printer.h"],
-    deps = [
-        ":meta",
-        "@abseil-cpp//absl/strings:str_format",
-    ],
-)
-
-cc_library(
-    name = "register_fuzzing_mocks",
-    srcs = ["register_fuzzing_mocks.cc"],
-    hdrs = ["register_fuzzing_mocks.h"],
-    deps = [
-        "@abseil-cpp//absl/base:fast_type_id",
-        "@abseil-cpp//absl/functional:function_ref",
-        "@abseil-cpp//absl/log:absl_check",
-        "@abseil-cpp//absl/random:distributions",
-        "@abseil-cpp//absl/types:span",
-    ],
-)
-
-cc_library(
-    name = "registration",
-    hdrs = ["registration.h"],
-    deps = [
-        ":meta",
-        ":printer",
-        ":type_support",
-        "@abseil-cpp//absl/functional:any_invocable",
-        "@abseil-cpp//absl/status",
-        "@abseil-cpp//absl/strings:str_format",
-        "@abseil-cpp//absl/types:span",
-        "@com_google_fuzztest//fuzztest:domain_core",
-        "@com_google_fuzztest//fuzztest/internal/domains:core_domains_impl",
-    ],
-)
-
-cc_library(
-    name = "registry",
-    srcs = ["registry.cc"],
-    hdrs = ["registry.h"],
-    deps = [
-        ":compatibility_mode",
-        ":fixture_driver",
-        ":registration",
-        ":runtime",
-        "@abseil-cpp//absl/container:flat_hash_map",
-        "@abseil-cpp//absl/functional:function_ref",
-        "@abseil-cpp//absl/strings:string_view",
-    ] + select({
-        "@com_google_fuzztest//fuzztest:use_centipede": [":centipede_adaptor"],
-        "//conditions:default": [],
-    }),
-)
-
-cc_library(
-    name = "runtime",
-    srcs = ["runtime.cc"],
-    hdrs = ["runtime.h"],
-    deps = [
-        ":configuration",
-        ":corpus_database",
-        ":coverage",
-        ":fixture_driver",
-        ":flag_name",
-        ":io",
-        ":logging",
-        ":printer",
-        ":registration",
-        ":seed_seq",
-        ":serialization",
-        ":status",
-        "@abseil-cpp//absl/base:core_headers",
-        "@abseil-cpp//absl/functional:any_invocable",
-        "@abseil-cpp//absl/functional:bind_front",
-        "@abseil-cpp//absl/functional:function_ref",
-        "@abseil-cpp//absl/log:absl_check",
-        "@abseil-cpp//absl/random",
-        "@abseil-cpp//absl/random:bit_gen_ref",
-        "@abseil-cpp//absl/random:distributions",
-        "@abseil-cpp//absl/status",
-        "@abseil-cpp//absl/status:statusor",
-        "@abseil-cpp//absl/strings",
-        "@abseil-cpp//absl/strings:str_format",
-        "@abseil-cpp//absl/time",
-        "@abseil-cpp//absl/types:span",
-        "@com_google_fuzztest//common:bazel",
-        "@com_google_fuzztest//fuzztest/internal/domains:core_domains_impl",
-    ],
-)
-
-cc_test(
-    name = "runtime_test",
-    srcs = ["runtime_test.cc"],
-    deps = [
-        ":configuration",
-        ":flag_name",
-        ":runtime",
-        ":test_protobuf_cc_proto",
-        "@abseil-cpp//absl/flags:flag",
-        "@abseil-cpp//absl/strings",
-        "@abseil-cpp//absl/time",
-        "@com_google_fuzztest//fuzztest:domain_core",
-        "@googletest//:gtest_main",
-    ],
-)
-
-cc_library(
-    name = "seed_seq",
-    srcs = ["seed_seq.cc"],
-    hdrs = ["seed_seq.h"],
-    deps = [
-        ":logging",
-        "@abseil-cpp//absl/random",
-        "@abseil-cpp//absl/strings",
-        "@abseil-cpp//absl/types:span",
-    ],
-)
-
-cc_test(
-    name = "seed_seq_test",
-    srcs = ["seed_seq_test.cc"],
-    deps = [
-        ":seed_seq",
-        "@abseil-cpp//absl/strings",
-        "@abseil-cpp//absl/types:span",
-        "@googletest//:gtest_main",
-    ],
-)
-
-cc_library(
-    name = "serialization",
-    srcs = ["serialization.cc"],
-    hdrs = ["serialization.h"],
-    deps = [
-        ":meta",
-        "@abseil-cpp//absl/numeric:int128",
-        "@abseil-cpp//absl/strings",
-        "@abseil-cpp//absl/strings:str_format",
-        "@abseil-cpp//absl/types:span",
-    ],
-)
-
-cc_test(
-    name = "serialization_test",
-    srcs = ["serialization_test.cc"],
-    deps = [
-        ":serialization",
-        ":test_protobuf_cc_proto",
-        "@googletest//:gtest_main",
-        "@protobuf",
-    ],
-)
-
-cc_library(
-    name = "status",
-    srcs = ["status.cc"],
-    hdrs = ["status.h"],
-    deps = [
-        "@abseil-cpp//absl/status",
-        "@abseil-cpp//absl/strings",
-        "@abseil-cpp//absl/strings:cord",
-    ],
-)
-
-cc_library(
-    name = "subprocess",
-    srcs = ["subprocess.cc"],
-    hdrs = ["subprocess.h"],
-    deps = [
-        ":logging",
-        "@abseil-cpp//absl/container:flat_hash_map",
-        "@abseil-cpp//absl/strings",
-        "@abseil-cpp//absl/time",
-    ],
-)
-
-cc_test(
-    name = "subprocess_test",
-    srcs = ["subprocess_test.cc"],
-    deps = [
-        ":subprocess",
-        "@abseil-cpp//absl/strings",
-        "@abseil-cpp//absl/time",
-        "@googletest//:gtest_main",
-    ],
-)
-
-cc_library(
-    name = "table_of_recent_compares",
-    hdrs = ["table_of_recent_compares.h"],
-    deps = [
-        ":type_support",
-        "@abseil-cpp//absl/container:flat_hash_set",
-        "@abseil-cpp//absl/random:bit_gen_ref",
-        "@abseil-cpp//absl/random:distributions",
-    ],
-)
-
-cc_test(
-    name = "table_of_recent_compares_test",
-    srcs = ["table_of_recent_compares_test.cc"],
-    deps = [
-        ":table_of_recent_compares",
-        "@abseil-cpp//absl/random",
-        "@googletest//:gtest_main",
-    ],
-)
-
-proto_library(
-    name = "test_protobuf",
-    srcs = ["test_protobuf.proto"],
-)
-
-cc_proto_library(
-    name = "test_protobuf_cc_proto",
-    deps = [":test_protobuf"],
-)
-
-cc_library(
-    name = "type_support",
-    srcs = ["type_support.cc"],
-    hdrs = ["type_support.h"],
-    deps = [
-        ":meta",
-        ":printer",
-        "@abseil-cpp//absl/debugging:symbolize",
-        "@abseil-cpp//absl/functional:function_ref",
-        "@abseil-cpp//absl/numeric:int128",
-        "@abseil-cpp//absl/strings",
-        "@abseil-cpp//absl/strings:str_format",
-        "@abseil-cpp//absl/time",
-        "@com_google_fuzztest//fuzztest/internal/domains:absl_helpers",
-    ],
-)
-
-cc_test(
-    name = "type_support_test",
-    srcs = ["type_support_test.cc"],
-    deps = [
-        ":meta",
-        ":printer",
-        ":test_protobuf_cc_proto",
-        ":type_support",
-        "@abseil-cpp//absl/numeric:int128",
-        "@abseil-cpp//absl/strings",
-        "@abseil-cpp//absl/strings:str_format",
-        "@abseil-cpp//absl/time",
-        "@com_google_fuzztest//fuzztest:domain",
-        "@googletest//:gtest_main",
-        "@protobuf",
-    ],
-)
diff --git a/fuzztest/internal/CMakeLists.txt b/fuzztest/internal/CMakeLists.txt
deleted file mode 100644
index 426cd40..0000000
--- a/fuzztest/internal/CMakeLists.txt
+++ /dev/null
@@ -1,560 +0,0 @@
-# Copyright 2024 Google LLC
-#
-# 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 (NOT COMPILER_GCC)
-  SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize-coverage=0")
-  SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize-coverage=0")
-endif()
-
-fuzztest_cc_library(
-  NAME
-    any
-  HDRS
-    "any.h"
-  DEPS
-    fuzztest::logging
-    fuzztest::meta
-)
-
-fuzztest_cc_test(
-  NAME
-    any_test
-  SRCS
-    "any_test.cc"
-  DEPS
-    fuzztest::any
-    absl::strings
-    GTest::gmock_main
-)
-
-fuzztest_cc_library(
-  NAME
-    compatibility_mode
-  HDRS
-    "compatibility_mode.h"
-  SRCS
-    "compatibility_mode.cc"
-  DEPS
-    fuzztest::fixture_driver
-    fuzztest::logging
-    fuzztest::runtime
-    absl::random_distributions
-    absl::strings
-    absl::str_format
-    absl::time
-    fuzztest::core_domains_impl
-)
-
-_link_libfuzzer_in_compatibility_mode(fuzztest_compatibility_mode)
-
-fuzztest_cc_library(
-  NAME
-    configuration
-  HDRS
-    "configuration.h"
-  SRCS
-    "configuration.cc"
-  DEPS
-    absl::absl_check
-    absl::status
-    absl::statusor
-    absl::strings
-    absl::string_view
-    absl::time
-)
-
-fuzztest_cc_test(
-  NAME
-    configuration_test
-  SRCS
-    "configuration_test.cc"
-  DEPS
-    fuzztest::configuration
-    absl::statusor
-    absl::time
-    GTest::gmock_main
-)
-
-fuzztest_cc_library(
-  NAME
-    corpus_database
-  HDRS
-    "corpus_database.h"
-  SRCS
-    "corpus_database.cc"
-  DEPS
-    fuzztest::configuration
-    fuzztest::io
-    absl::strings
-    absl::string_view
-    absl::time
-)
-
-fuzztest_cc_library(
-  NAME
-    coverage
-  HDRS
-    "coverage.h"
-  SRCS
-    "coverage.cc"
-  DEPS
-    fuzztest::flag_name
-    fuzztest::logging
-    fuzztest::table_of_recent_compares
-    absl::core_headers
-    absl::str_format
-    absl::span
-    fuzztest::core_domains_impl
-)
-
-fuzztest_cc_library(
-  NAME
-    escaping
-  HDRS
-    "escaping.h"
-  SRCS
-    "escaping.cc"
-  DEPS
-    absl::strings
-)
-
-fuzztest_cc_library(
-  NAME
-    fixture_driver
-  HDRS
-    "fixture_driver.h"
-  SRCS
-    "fixture_driver.cc"
-  DEPS
-    fuzztest::any
-    fuzztest::logging
-    fuzztest::meta
-    fuzztest::printer
-    fuzztest::registration
-    fuzztest::type_support
-    absl::any_invocable
-    absl::status
-    absl::str_format
-    absl::span
-    fuzztest::core_domains_impl
-)
-
-fuzztest_cc_test(
-  NAME
-    fixture_driver_test
-  SRCS
-    "fixture_driver_test.cc"
-  DEPS
-    fuzztest::any
-    fuzztest::fixture_driver
-    fuzztest::logging
-    fuzztest::registration
-    absl::any_invocable
-    absl::span
-    fuzztest::domain_core
-    GTest::gmock_main
-)
-
-fuzztest_cc_library(
-  NAME
-    flag_name
-  HDRS
-    "flag_name.h"
-)
-
-fuzztest_cc_library(
-  NAME
-    googletest_adaptor
-  HDRS
-    "googletest_adaptor.h"
-  SRCS
-    "googletest_adaptor.cc"
-  DEPS
-    fuzztest::configuration
-    fuzztest::corpus_database
-    fuzztest::flag_name
-    fuzztest::io
-    fuzztest::registry
-    fuzztest::runtime
-    absl::strings
-    absl::str_format
-    absl::string_view
-    GTest::gtest
-)
-
-fuzztest_cc_library(
-  NAME
-    io
-  HDRS
-    "io.h"
-  SRCS
-    "io.cc"
-  DEPS
-    fuzztest::logging
-    absl::function_ref
-    absl::hash
-    absl::status
-    absl::str_format
-    absl::string_view
-    absl::time
-    absl::span
-    fuzztest::blob_file
-    fuzztest::defs
-    fuzztest::remote_file
-)
-
-fuzztest_cc_test(
-  NAME
-    io_test
-  SRCS
-    "io_test.cc"
-  DEPS
-    fuzztest::io
-    absl::check
-    absl::status
-    absl::strings
-    absl::time
-    fuzztest::blob_file
-    fuzztest::defs
-    fuzztest::temp_dir
-    fuzztest::fuzztest_core
-    GTest::gmock_main
-)
-
-fuzztest_cc_library(
-  NAME
-    logging
-  HDRS
-    "logging.h"
-  SRCS
-    "logging.cc"
-  DEPS
-    absl::core_headers
-    absl::strings
-    absl::synchronization
-)
-
-fuzztest_cc_library(
-  NAME
-    meta
-  HDRS
-    "meta.h"
-  DEPS
-    absl::int128
-)
-
-fuzztest_cc_library(
-  NAME
-    printer
-  HDRS
-    "printer.h"
-  DEPS
-    fuzztest::meta
-    absl::str_format
-)
-
-fuzztest_cc_library(
-  NAME
-    register_fuzzing_mocks
-  HDRS
-    "register_fuzzing_mocks.h"
-  SRCS
-    "register_fuzzing_mocks.cc"
-  DEPS
-    absl::fast_type_id
-    absl::function_ref
-    absl::absl_check
-    absl::random_distributions
-    absl::span
-)
-
-fuzztest_cc_library(
-  NAME
-    registration
-  HDRS
-    "registration.h"
-  DEPS
-    fuzztest::meta
-    fuzztest::printer
-    fuzztest::type_support
-    absl::any_invocable
-    absl::status
-    absl::str_format
-    absl::span
-    fuzztest::domain_core
-    fuzztest::core_domains_impl
-)
-
-fuzztest_cc_library(
-  NAME
-    registry
-  HDRS
-    "registry.h"
-  SRCS
-    "registry.cc"
-  DEPS
-    fuzztest::compatibility_mode
-    fuzztest::fixture_driver
-    fuzztest::registration
-    fuzztest::runtime
-    absl::flat_hash_map
-    absl::function_ref
-    absl::string_view
-)
-
-fuzztest_cc_library(
-  NAME
-    runtime
-  HDRS
-    "runtime.h"
-  SRCS
-    "runtime.cc"
-  DEPS
-    fuzztest::configuration
-    fuzztest::corpus_database
-    fuzztest::coverage
-    fuzztest::fixture_driver
-    fuzztest::flag_name
-    fuzztest::io
-    fuzztest::logging
-    fuzztest::printer
-    fuzztest::registration
-    fuzztest::seed_seq
-    fuzztest::serialization
-    fuzztest::status
-    absl::core_headers
-    absl::any_invocable
-    absl::bind_front
-    absl::function_ref
-    absl::absl_check
-    absl::random_random
-    absl::random_bit_gen_ref
-    absl::random_distributions
-    absl::status
-    absl::statusor
-    absl::strings
-    absl::str_format
-    absl::time
-    absl::span
-    fuzztest::bazel
-    fuzztest::core_domains_impl
-)
-
-fuzztest_cc_test(
-  NAME
-    runtime_test
-  SRCS
-    "runtime_test.cc"
-  DEPS
-    fuzztest::configuration
-    fuzztest::flag_name
-    fuzztest::runtime
-    fuzztest::test_protobuf_cc_proto
-    absl::flags
-    absl::strings
-    absl::time
-    fuzztest::domain_core
-    GTest::gmock_main
-)
-
-fuzztest_cc_library(
-  NAME
-    seed_seq
-  HDRS
-    "seed_seq.h"
-  SRCS
-    "seed_seq.cc"
-  DEPS
-    fuzztest::logging
-    absl::random_random
-    absl::strings
-    absl::span
-)
-
-fuzztest_cc_test(
-  NAME
-    seed_seq_test
-  SRCS
-    "seed_seq_test.cc"
-  DEPS
-    fuzztest::seed_seq
-    absl::strings
-    absl::span
-    GTest::gmock_main
-)
-
-fuzztest_cc_library(
-  NAME
-    serialization
-  HDRS
-    "serialization.h"
-  SRCS
-    "serialization.cc"
-  DEPS
-    fuzztest::meta
-    absl::int128
-    absl::strings
-    absl::str_format
-    absl::span
-)
-
-fuzztest_cc_test(
-  NAME
-    serialization_test
-  SRCS
-    "serialization_test.cc"
-  DEPS
-    fuzztest::serialization
-    fuzztest::test_protobuf_cc_proto
-    GTest::gmock_main
-    protobuf::libprotobuf
-)
-
-fuzztest_cc_library(
-  NAME
-    status
-  HDRS
-    "status.h"
-  SRCS
-    "status.cc"
-  DEPS
-    absl::status
-    absl::strings
-    absl::cord
-)
-
-fuzztest_cc_library(
-  NAME
-    subprocess
-  HDRS
-    "subprocess.h"
-  SRCS
-    "subprocess.cc"
-  DEPS
-    fuzztest::logging
-    absl::flat_hash_map
-    absl::strings
-    absl::time
-)
-
-fuzztest_cc_test(
-  NAME
-    subprocess_test
-  SRCS
-    "subprocess_test.cc"
-  DEPS
-    fuzztest::subprocess
-    absl::strings
-    absl::time
-    GTest::gmock_main
-)
-
-fuzztest_cc_library(
-  NAME
-    table_of_recent_compares
-  HDRS
-    "table_of_recent_compares.h"
-  DEPS
-    fuzztest::type_support
-    absl::flat_hash_set
-    absl::random_bit_gen_ref
-    absl::random_distributions
-)
-
-fuzztest_cc_test(
-  NAME
-    table_of_recent_compares_test
-  SRCS
-    "table_of_recent_compares_test.cc"
-  DEPS
-    fuzztest::table_of_recent_compares
-    absl::random_random
-    GTest::gmock_main
-)
-
-fuzztest_cc_library(
-  NAME
-    type_support
-  HDRS
-    "type_support.h"
-  SRCS
-    "type_support.cc"
-  DEPS
-    fuzztest::meta
-    fuzztest::printer
-    absl::symbolize
-    absl::function_ref
-    absl::int128
-    absl::strings
-    absl::str_format
-    absl::time
-    fuzztest::absl_helpers
-)
-
-fuzztest_cc_test(
-  NAME
-    type_support_test
-  SRCS
-    "type_support_test.cc"
-  DEPS
-    fuzztest::meta
-    fuzztest::printer
-    fuzztest::test_protobuf_cc_proto
-    fuzztest::type_support
-    absl::int128
-    absl::strings
-    absl::str_format
-    absl::time
-    fuzztest::domain
-    GTest::gmock_main
-    protobuf::libprotobuf
-)
-
-if (FUZZTEST_BUILD_TESTING)
-
-  include_directories(${PROTOBUF_INCLUDE_DIR})
-
-  add_library(
-      test_protobuf
-    OBJECT
-      "${CMAKE_CURRENT_LIST_DIR}/test_protobuf.proto"
-  )
-
-  target_link_libraries(
-      test_protobuf
-    PUBLIC
-      protobuf::libprotobuf
-  )
-
-  # The output dir might not be created by `protobuf_generate`.
-  file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
-
-  protobuf_generate(
-    TARGET
-      test_protobuf
-    IMPORT_DIRS
-      ${CMAKE_CURRENT_LIST_DIR}
-    PROTOC_OUT_DIR
-      ${CMAKE_CURRENT_BINARY_DIR}
-  )
-
-  target_include_directories(
-      test_protobuf
-    PUBLIC
-      "${CMAKE_CURRENT_BINARY_DIR}/../.."
-  )
-
-  add_library(fuzztest::test_protobuf_cc_proto ALIAS test_protobuf)
-
-endif ()
diff --git a/fuzztest/internal/domains/BUILD b/fuzztest/internal/domains/BUILD
deleted file mode 100644
index 5a1d738..0000000
--- a/fuzztest/internal/domains/BUILD
+++ /dev/null
@@ -1,216 +0,0 @@
-# Copyright 2024 Google LLC
-#
-# 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.
-
-package(default_visibility = ["@com_google_fuzztest//:__subpackages__"])
-
-licenses(["notice"])
-
-cc_library(
-    name = "absl_helpers",
-    hdrs = ["absl_helpers.h"],
-    deps = [
-        "@abseil-cpp//absl/time",
-        "@com_google_fuzztest//fuzztest/internal:logging",
-    ],
-)
-
-cc_library(
-    name = "core_domains_impl",
-    hdrs = [
-        "aggregate_of_impl.h",
-        "arbitrary_impl.h",
-        "bit_flag_combination_of_impl.h",
-        "bit_gen_ref.h",
-        "container_mutation_helpers.h",
-        "container_of_impl.h",
-        "domain.h",
-        "domain_base.h",
-        "domain_type_erasure.h",
-        "element_of_impl.h",
-        "filter_impl.h",
-        "flat_map_impl.h",
-        "in_range_impl.h",
-        "map_impl.h",
-        "mutation_metadata.h",
-        "one_of_impl.h",
-        "optional_of_impl.h",
-        "overlap_of_impl.h",
-        "serialization_helpers.h",
-        "smart_pointer_of_impl.h",
-        "special_values.h",
-        "unique_elements_container_of_impl.h",
-        "value_mutation_helpers.h",
-        "variant_of_impl.h",
-    ],
-    deps = [
-        ":absl_helpers",
-        "@abseil-cpp//absl/container:flat_hash_set",
-        "@abseil-cpp//absl/functional:function_ref",
-        "@abseil-cpp//absl/log:absl_check",
-        "@abseil-cpp//absl/log:absl_log",
-        "@abseil-cpp//absl/numeric:bits",
-        "@abseil-cpp//absl/numeric:int128",
-        "@abseil-cpp//absl/random",
-        "@abseil-cpp//absl/random:bit_gen_ref",
-        "@abseil-cpp//absl/random:distributions",
-        "@abseil-cpp//absl/status",
-        "@abseil-cpp//absl/strings",
-        "@abseil-cpp//absl/strings:str_format",
-        "@abseil-cpp//absl/time",
-        "@abseil-cpp//absl/types:span",
-        "@com_google_fuzztest//fuzztest:fuzzing_bit_gen",
-        "@com_google_fuzztest//fuzztest/internal:any",
-        "@com_google_fuzztest//fuzztest/internal:logging",
-        "@com_google_fuzztest//fuzztest/internal:meta",
-        "@com_google_fuzztest//fuzztest/internal:printer",
-        "@com_google_fuzztest//fuzztest/internal:serialization",
-        "@com_google_fuzztest//fuzztest/internal:status",
-        "@com_google_fuzztest//fuzztest/internal:table_of_recent_compares",
-        "@com_google_fuzztest//fuzztest/internal:type_support",
-    ],
-)
-
-cc_library(
-    name = "domains_impl",
-    hdrs = [
-        "domain_base.h",
-        "domain_type_erasure.h",
-    ],
-    deps = [
-        ":core_domains_impl",
-        ":in_grammar_impl",
-        ":in_regexp_impl",
-        ":protobuf_domain_impl",
-        "@abseil-cpp//absl/base:core_headers",
-        "@abseil-cpp//absl/base:no_destructor",
-        "@abseil-cpp//absl/container:flat_hash_map",
-        "@abseil-cpp//absl/container:flat_hash_set",
-        "@abseil-cpp//absl/functional:function_ref",
-        "@abseil-cpp//absl/random",
-        "@abseil-cpp//absl/random:bit_gen_ref",
-        "@abseil-cpp//absl/random:distributions",
-        "@abseil-cpp//absl/status",
-        "@abseil-cpp//absl/status:statusor",
-        "@abseil-cpp//absl/strings",
-        "@abseil-cpp//absl/strings:str_format",
-        "@abseil-cpp//absl/synchronization",
-        "@abseil-cpp//absl/types:span",
-        "@com_google_fuzztest//fuzztest:domain_core",
-        "@com_google_fuzztest//fuzztest/internal:any",
-        "@com_google_fuzztest//fuzztest/internal:logging",
-        "@com_google_fuzztest//fuzztest/internal:meta",
-        "@com_google_fuzztest//fuzztest/internal:printer",
-        "@com_google_fuzztest//fuzztest/internal:serialization",
-        "@com_google_fuzztest//fuzztest/internal:status",
-        "@com_google_fuzztest//fuzztest/internal:type_support",
-    ],
-)
-
-cc_library(
-    name = "in_grammar_impl",
-    srcs = ["in_grammar_impl.cc"],
-    hdrs = ["in_grammar_impl.h"],
-    # Public for users of the `cc_fuzztest_grammar_library`.
-    visibility = ["//visibility:public"],
-    deps = [
-        ":core_domains_impl",
-        ":in_regexp_impl",
-        ":regexp_dfa",
-        "@abseil-cpp//absl/container:flat_hash_map",
-        "@abseil-cpp//absl/random:bit_gen_ref",
-        "@abseil-cpp//absl/random:distributions",
-        "@abseil-cpp//absl/status",
-        "@abseil-cpp//absl/strings",
-        "@abseil-cpp//absl/strings:string_view",
-        "@abseil-cpp//absl/types:span",
-        "@com_google_fuzztest//fuzztest/internal:logging",
-        "@com_google_fuzztest//fuzztest/internal:meta",
-        "@com_google_fuzztest//fuzztest/internal:serialization",
-        "@com_google_fuzztest//fuzztest/internal:type_support",
-    ],
-)
-
-cc_library(
-    name = "in_regexp_impl",
-    srcs = ["in_regexp_impl.cc"],
-    hdrs = ["in_regexp_impl.h"],
-    deps = [
-        ":core_domains_impl",
-        ":regexp_dfa",
-        "@abseil-cpp//absl/random:bit_gen_ref",
-        "@abseil-cpp//absl/random:distributions",
-        "@abseil-cpp//absl/status",
-        "@abseil-cpp//absl/status:statusor",
-        "@abseil-cpp//absl/strings",
-        "@abseil-cpp//absl/types:span",
-        "@com_google_fuzztest//fuzztest/internal:logging",
-        "@com_google_fuzztest//fuzztest/internal:serialization",
-        "@com_google_fuzztest//fuzztest/internal:status",
-        "@com_google_fuzztest//fuzztest/internal:type_support",
-    ],
-)
-
-cc_library(
-    name = "protobuf_domain_impl",
-    hdrs = ["protobuf_domain_impl.h"],
-    deps = [
-        ":core_domains_impl",
-        "@abseil-cpp//absl/base:core_headers",
-        "@abseil-cpp//absl/base:no_destructor",
-        "@abseil-cpp//absl/container:flat_hash_map",
-        "@abseil-cpp//absl/container:flat_hash_set",
-        "@abseil-cpp//absl/random",
-        "@abseil-cpp//absl/random:bit_gen_ref",
-        "@abseil-cpp//absl/status",
-        "@abseil-cpp//absl/strings:str_format",
-        "@abseil-cpp//absl/strings:string_view",
-        "@abseil-cpp//absl/synchronization",
-        "@abseil-cpp//absl/types:span",
-        "@com_google_fuzztest//fuzztest:domain_core",
-        "@com_google_fuzztest//fuzztest/internal:any",
-        "@com_google_fuzztest//fuzztest/internal:logging",
-        "@com_google_fuzztest//fuzztest/internal:meta",
-        "@com_google_fuzztest//fuzztest/internal:serialization",
-        "@com_google_fuzztest//fuzztest/internal:status",
-        "@com_google_fuzztest//fuzztest/internal:type_support",
-    ],
-)
-
-cc_library(
-    name = "regexp_dfa",
-    srcs = ["regexp_dfa.cc"],
-    hdrs = ["regexp_dfa.h"],
-    deps = [
-        "@abseil-cpp//absl/container:flat_hash_map",
-        "@abseil-cpp//absl/random:bit_gen_ref",
-        "@abseil-cpp//absl/random:distributions",
-        "@abseil-cpp//absl/status",
-        "@abseil-cpp//absl/status:statusor",
-        "@abseil-cpp//absl/strings",
-        "@abseil-cpp//absl/strings:string_view",
-        "@com_google_fuzztest//fuzztest/internal:logging",
-        "@re2",
-    ],
-)
-
-cc_library(
-    name = "utf",
-    srcs = [
-        "rune.cc",
-        "rune.h",
-        "utf.cc",
-    ],
-    hdrs = ["utf.h"],
-    deps = ["@abseil-cpp//absl/strings:string_view"],
-)
diff --git a/fuzztest/internal/domains/CMakeLists.txt b/fuzztest/internal/domains/CMakeLists.txt
deleted file mode 100644
index f75ee12..0000000
--- a/fuzztest/internal/domains/CMakeLists.txt
+++ /dev/null
@@ -1,223 +0,0 @@
-# Copyright 2024 Google LLC
-#
-# 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 (NOT COMPILER_GCC)
-  SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize-coverage=0")
-  SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize-coverage=0")
-endif()
-
-fuzztest_cc_library(
-  NAME
-    absl_helpers
-  HDRS
-    "absl_helpers.h"
-  DEPS
-    absl::time
-    fuzztest::logging
-)
-
-fuzztest_cc_library(
-  NAME
-    core_domains_impl
-  HDRS
-    "aggregate_of_impl.h"
-    "arbitrary_impl.h"
-    "bit_flag_combination_of_impl.h"
-    "bit_gen_ref.h"
-    "container_mutation_helpers.h"
-    "container_of_impl.h"
-    "domain.h"
-    "domain_base.h"
-    "domain_type_erasure.h"
-    "element_of_impl.h"
-    "filter_impl.h"
-    "flat_map_impl.h"
-    "in_range_impl.h"
-    "map_impl.h"
-    "mutation_metadata.h"
-    "one_of_impl.h"
-    "optional_of_impl.h"
-    "overlap_of_impl.h"
-    "serialization_helpers.h"
-    "smart_pointer_of_impl.h"
-    "special_values.h"
-    "unique_elements_container_of_impl.h"
-    "value_mutation_helpers.h"
-    "variant_of_impl.h"
-  DEPS
-    fuzztest::absl_helpers
-    absl::flat_hash_set
-    absl::function_ref
-    absl::absl_check
-    absl::absl_log
-    absl::bits
-    absl::int128
-    absl::random_random
-    absl::random_bit_gen_ref
-    absl::random_distributions
-    absl::status
-    absl::strings
-    absl::str_format
-    absl::time
-    absl::span
-    fuzztest::fuzzing_bit_gen
-    fuzztest::any
-    fuzztest::logging
-    fuzztest::meta
-    fuzztest::printer
-    fuzztest::serialization
-    fuzztest::status
-    fuzztest::table_of_recent_compares
-    fuzztest::type_support
-)
-
-fuzztest_cc_library(
-  NAME
-    domains_impl
-  HDRS
-    "domain_base.h"
-    "domain_type_erasure.h"
-  DEPS
-    fuzztest::core_domains_impl
-    fuzztest::in_grammar_impl
-    fuzztest::in_regexp_impl
-    fuzztest::protobuf_domain_impl
-    absl::core_headers
-    absl::no_destructor
-    absl::flat_hash_map
-    absl::flat_hash_set
-    absl::function_ref
-    absl::random_random
-    absl::random_bit_gen_ref
-    absl::random_distributions
-    absl::status
-    absl::statusor
-    absl::strings
-    absl::str_format
-    absl::synchronization
-    absl::span
-    fuzztest::domain_core
-    fuzztest::any
-    fuzztest::logging
-    fuzztest::meta
-    fuzztest::printer
-    fuzztest::serialization
-    fuzztest::status
-    fuzztest::type_support
-)
-
-fuzztest_cc_library(
-  NAME
-    in_grammar_impl
-  HDRS
-    "in_grammar_impl.h"
-  SRCS
-    "in_grammar_impl.cc"
-  DEPS
-    fuzztest::core_domains_impl
-    fuzztest::in_regexp_impl
-    fuzztest::regexp_dfa
-    absl::flat_hash_map
-    absl::random_bit_gen_ref
-    absl::random_distributions
-    absl::status
-    absl::strings
-    absl::string_view
-    absl::span
-    fuzztest::logging
-    fuzztest::meta
-    fuzztest::serialization
-    fuzztest::type_support
-)
-
-fuzztest_cc_library(
-  NAME
-    in_regexp_impl
-  HDRS
-    "in_regexp_impl.h"
-  SRCS
-    "in_regexp_impl.cc"
-  DEPS
-    fuzztest::core_domains_impl
-    fuzztest::regexp_dfa
-    absl::random_bit_gen_ref
-    absl::random_distributions
-    absl::status
-    absl::statusor
-    absl::strings
-    absl::span
-    fuzztest::logging
-    fuzztest::serialization
-    fuzztest::status
-    fuzztest::type_support
-)
-
-fuzztest_cc_library(
-  NAME
-    protobuf_domain_impl
-  HDRS
-    "protobuf_domain_impl.h"
-  DEPS
-    fuzztest::core_domains_impl
-    absl::core_headers
-    absl::no_destructor
-    absl::flat_hash_map
-    absl::flat_hash_set
-    absl::random_random
-    absl::random_bit_gen_ref
-    absl::status
-    absl::str_format
-    absl::string_view
-    absl::synchronization
-    absl::span
-    fuzztest::domain_core
-    fuzztest::any
-    fuzztest::logging
-    fuzztest::meta
-    fuzztest::serialization
-    fuzztest::status
-    fuzztest::type_support
-)
-
-fuzztest_cc_library(
-  NAME
-    regexp_dfa
-  HDRS
-    "regexp_dfa.h"
-  SRCS
-    "regexp_dfa.cc"
-  DEPS
-    absl::flat_hash_map
-    absl::random_bit_gen_ref
-    absl::random_distributions
-    absl::status
-    absl::statusor
-    absl::strings
-    absl::string_view
-    fuzztest::logging
-    re2::re2
-)
-
-fuzztest_cc_library(
-  NAME
-    utf
-  HDRS
-    "utf.h"
-  SRCS
-    "rune.cc"
-    "rune.h"
-    "utf.cc"
-  DEPS
-    absl::string_view
-)
diff --git a/grammar_codegen/BUILD b/grammar_codegen/BUILD
index 8b6b140..32009d4 100644
--- a/grammar_codegen/BUILD
+++ b/grammar_codegen/BUILD
@@ -31,7 +31,7 @@
         ":grammar_info",
         "@abseil-cpp//absl/strings",
         "@abseil-cpp//absl/strings:str_format",
-        "@com_google_fuzztest//fuzztest/internal:logging",
+        "@com_google_fuzztest//fuzztest:logging",
         "@com_google_fuzztest//grammar_codegen/generated_antlr_parser",
     ],
 )
@@ -46,7 +46,7 @@
         "@abseil-cpp//absl/container:flat_hash_set",
         "@abseil-cpp//absl/strings",
         "@abseil-cpp//absl/strings:str_format",
-        "@com_google_fuzztest//fuzztest/internal:logging",
+        "@com_google_fuzztest//fuzztest:logging",
     ],
 )
 
diff --git a/grammar_codegen/CMakeLists.txt b/grammar_codegen/CMakeLists.txt
index bf430bb..2337fcb 100644
--- a/grammar_codegen/CMakeLists.txt
+++ b/grammar_codegen/CMakeLists.txt
@@ -1,6 +1,8 @@
 get_filename_component(PARENT_DIR ../ ABSOLUTE)
 include_directories(${PARENT_DIR})
 
+add_subdirectory(generated_antlr_parser)
+
 add_library(
   grammar_info
   INTERFACE
diff --git a/tools/BUILD b/tools/BUILD
index 4587e7a..ca2226b 100644
--- a/tools/BUILD
+++ b/tools/BUILD
@@ -29,7 +29,7 @@
     deps = [
         "@abseil-cpp//absl/flags:flag",
         "@abseil-cpp//absl/flags:parse",
-        "@com_google_fuzztest//fuzztest/internal:logging",
+        "@com_google_fuzztest//fuzztest:logging",
         "@com_google_fuzztest//grammar_codegen:code_generation",
     ],
 )